Autor Tema: Problema con Matlab

0 Usuarios y 1 Visitante están viendo este tema.

05 Diciembre, 2009, 02:29 am
Leído 4510 veces

gabrielo

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 28
  • Karma: +0/-0
  • Sexo: Masculino
Hola, ¿cómo están?
He aquí mi problema:
Dada una matriz A=\( \begin{bmatrix}{0}&{1}&{5}\\{.3}&{0}&{0}\\{0}&{.5}&{0}\end{bmatrix} \) y un vector n(t)=\( \left[{\begin{array}{ccc}{1}\\{0}\\{0}\end{array}\right] \), sé que \( n(t+1)=An(t) \). Necesito realizar la operación A*n 15 veces. No sé qué poner en Matlab para que me haga eso. Además, necesito graficar cada uno de los resultados.
Agradecería que me ayudaran!
Muchas gracias.
Saludos,
Gabriel.
Defiende tu derecho a pensar, porque incluso pensar de manera errónea es mejor que no pensar-Hipatia

05 Diciembre, 2009, 02:37 am
Respuesta #1

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,797
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Si no hace falta guardar los resultados intermedios es fácil:

Código: [Seleccionar]
  A = [0 1 5; .3 0 0; 0 0.5 0];
  n = [1; 0; 0];
  for k = 1:15:
     n = A*n;
  end
  printf("Resultado: n = \n %d",n)

Saludos

05 Diciembre, 2009, 02:41 am
Respuesta #2

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,797
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Lo que no sé es qué tipo de gráfico es el que tenés que hacer.

05 Diciembre, 2009, 02:53 am
Respuesta #3

gabrielo

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 28
  • Karma: +0/-0
  • Sexo: Masculino
Te explico; el vector \( n \) contiene la población de una especie en su fila i-esima de edad \( i \), mientras tanto la matriz \( A \) contiene en el lugar 1.1 la tasa de fecundidad a la edad 1, en el lugar 1.2 la tasa de fecundidad a la edad 2, y lo mismo en el lugar 3.3. En la subdiagonal inferior se encuentran las probabilidades de supervivencia, correspondiendo de esta forma una probabilidad de 0.3 al hecho de que un individuo de edad 1 pase a la edad 2, y una probabilidad de 0.5 al hecho de que un individuo de edad 2 pase a la edad 3.
Entonces suponiendo que la matriz se mantiene igual con el tiempo, o sea, no cambian las probabilidades de supervivencias ni las tasas de fecundidad quiero saber qué pasa con el vector \( n \), o sea con la población.
No se si me entendes.
Defiende tu derecho a pensar, porque incluso pensar de manera errónea es mejor que no pensar-Hipatia

05 Diciembre, 2009, 02:55 am
Respuesta #4

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,797
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Si te entiendo, pero aún no sé qué o cómo es lo que va en el gráfico.
Si me decís qué es lo que querés graficar te lo agrego al programa.

Si lo que querés es simplemente mostrar el resultado en cada paso, lo único que hay que hacer es quitar el "punto y coma" en la cuarta línea.

05 Diciembre, 2009, 03:06 am
Respuesta #5

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,797
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Te propongo este otro programa, que es lo único que se me ocurre:

Código: [Seleccionar]
  A = [0 1 5; .3 0 0; 0 0.5 0];
  n = [1; 0; 0];

  resultado = zeros(3,15);

  for k = 1:15:
     n = A*n;
     resultado(:,k) = n;
  end

  t = [1:1:15];
  especie1 = resultado(1,:);
  especie2 = resultado(2,:);
  especie3 = resultado(3,:);

  hold off;
  clf;
  hold on;
  plot(t,especie1,'-');
  plot(t,especie2,'-b');
  plot(t,especie3,'-r');
  figure(1)


Te pido disculpas si hay algún error, pero es que no tengo Matlab instalado en mi PC, y estoy programando "de memoria", jaja.
(Todo es culpa del emule, que me llena el disco  :P )

Lo que hice ahí fue ir acumulando los resultados en la matriz resultado.
En cada columna pongo una nueva iteración.
Luego leo las filas de esa matriz, que corresponderían a los datos de evolución de cada especie.
El vector de "tiempo" t va de 1 a 15, con saltos de a 1,
y después grafico cada especie según ese parámetro de tiempo, con distintos colores, negro azul y rojo.

05 Diciembre, 2009, 03:08 am
Respuesta #6

gabrielo

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 28
  • Karma: +0/-0
  • Sexo: Masculino
Es un gráfico que en el eje \( x \) tenga el tiempo (o sea hasta 15 ciclos de vida, que son las 15 repeticiones de \( A*n \)), y en el eje \( y \) muestre la población, o sea los componentes del vector \( n \).

No me pidas disculpas, al contrario, yo te pido a vos por joderte!
Defiende tu derecho a pensar, porque incluso pensar de manera errónea es mejor que no pensar-Hipatia

05 Diciembre, 2009, 03:09 am
Respuesta #7

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,797
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Ya te contesté en el mensaje anterior, y agregué comentarios.

Como no puedo ver la salida del programa, cuando termines el trabajo te voy a pedir que me subas el gráfico final, a ver cómo quedó.

Sólo por gusto

05 Diciembre, 2009, 03:19 am
Respuesta #8

gabrielo

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 28
  • Karma: +0/-0
  • Sexo: Masculino
Quedó exactamente como quería, muchas gracias.

http://rapidshare.com/files/316457924/graph.jpg.html

Muchas gracias!
Defiende tu derecho a pensar, porque incluso pensar de manera errónea es mejor que no pensar-Hipatia

05 Diciembre, 2009, 03:22 am
Respuesta #9

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,797
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Así no se suben los gráficos en el foro.
Fijate que al editar el post, abajo dice "Opciones adicionales".
Si hacés clic, aparecen varias opciones, y hay una para adjuntar archivos.
Ponelo ahí, y no con la etiqueta img.

Después te enseño a hacerlo visible...

Igual ya lo vi.
Muy bonito, jeje