Modelo determinista de lisis/lisogenia lambda-fago [MATLAB] [cerrado]

http://i.imgur.com/CVB3tUT.png

Proyecto 1 Base:

ingrese la descripción de la imagen aquí

¿Puede alguien ayudarme a entender lo que necesito del código base del Proyecto 1 para hacer las preguntas 1 y 2 de la primera imagen? Soy nuevo en MATLAB, por lo que sería genial una explicación detallada.

Esto se puede hacer usando el método loop o Forward Eular's. No sé cuál es más fácil para esta pregunta ni sabría cómo hacerlo yo mismo, ya que nunca antes había tomado un curso de programación y de alguna manera se espera que sepa cómo hacer todo esto.

Respuestas (2)

Para preguntas de tarea, la política es ver algunos trabajos del cartel . Dado que no sabe programar, describí lo que hace el código, más allá de las operaciones simples (+, -, /, *, ^), para que pueda comenzar. Creo que debería poder implementar los modelos con esta información, y me complacería confirmar sus propias respuestas.


Entonces, la mejor manera de descubrir qué significa cualquier línea de código, en cualquier idioma, es escribirla y ver qué sucede. Para ayudarlo a comenzar a programar en MATLAB:

Cualquier texto que siga a un % (en la misma línea) es un comentario: no hace nada en el programa, y ​​solo está ahí para que te escribas notas a ti mismo.

Las dos primeras secciones, Constantes relacionadas con el tiempo y Constantes de simulación, son solo variables de configuración. Es como decir x = 3, para luego poder hacer otras operaciones con x.

El punto y coma al final de una línea (en MATLAB) suprime la salida de la línea. Vea lo que sucede si escribe x = 3;versus x = 3en el símbolo del sistema.

En las constantes de iteración, lengthes solo una función que te dice la longitud del vector. X_rna_0se inicializó previamente para pasar de 0 a 1,4 en pasos de 0,2: la sintaxis es nombre_vector = inicio:paso:fin.

La sección de variables de simulación está creando matrices xyz, con todos los valores inicializados en cero. La longitud en x es xr_max, y así sucesivamente. La idea es que, más adelante, en cada paso del método de Euler y cada valor de xr_max y xp_max, guardes el valor de X_rna.

Las condiciones iniciales se establecen mediante meshgrid, que se explica mejor aquí . Significa :todas las filas/columnas, correspondientes a la posición: digamos que tenía una matriz de 3 x 3 llamada apple. apple[:,1]le da toda la primera columna (1) de las tres filas. apple[1,:]le da la primera fila (1) de las tres columnas. El .' significa que la matriz se está transponiendo: nuevamente, la mejor manera de ver lo que está sucediendo es crear una matriz propia, realizar la operación y ver si lo que obtiene es lo que pensó que sería.

Para bucles, puede leer sobre aquí , para empezar. No creo que entender este ciclo requiera más información que esa página.

El punto antes de ^2 significa que cada elemento de la matriz se eleva al cuadrado; no estás multiplicando la matriz por sí misma.

Eso debería descifrar la mayor parte del código por ti. Si tienes más preguntas, no dudes en comentar aquí.

EDITAR: la pregunta 2 te pide que hagas una trama. Se haría un gráfico de y frente a x escribiendoplot(x,y)

Además, se puede acceder a la ayuda sobre una función particular de MATLAB escribiendo help name_of_function.

Este es un conjunto de ecuaciones diferenciales ordinarias. proceder así

  1. Haga una función de matlab para las EDO que definen el sistema (ecuaciones 1,2,3,4). La función debe devolver un vector de 4 dimensiones que es básicamente dy/dt (la ecuación de tasa)
  2. en el programa principal declarar los valores iniciales de diferentes componentes. No existe una regla absoluta sobre lo que debería ser y se basa en su conocimiento previo del sistema.
  3. en el programa principal escriba un módulo para integrar la función de tasa en un intervalo de tiempo. hay varios algoritmos numéricos para hacerlo, como Euler, euler implícito, runge-kutta, interpolación polinomial, métodos correctores predictores (Adam Bashworth), etc. Si desea mejorar su conocimiento sobre los métodos numéricos, escriba su propio código para cualquier algoritmo. . Se puede consultar un buen libro sobre conceptos básicos de métodos numéricos. De lo contrario, puede usar solucionadores de ODE incorporados en Matlab .

Una nota sobre los métodos numéricos para resolver ODE: lo que haces precisamente es sumar y actualizar la función de tasa en pequeños intervalos de tiempo. El método muy básico es euler en el que solo implementas esto:

y = y + h*f(x,t)....... explicit/forward euler
y = y + h*f(x,t+h)...... implicit/backward euler

donde dy/dx =f(x,t)y hes un pequeño intervalo de tiempo

Entonces, lo que tienes que hacer, exactamente, es ejecutar un ciclo que va de t=t_initiala t=t_finalcon pequeños incrementos de h. Puede usar cualquier bucle básico como forbucle o whilebucle. forLos bucles son bastante fáciles de implementar. (la sintaxis básica es - para (inicial; condición final; función de incremento) que en Matlab es tan fácil comofor t=t_initial:h:t_final

Dentro del bucle aplicas la operación de integración.

Las técnicas más avanzadas utilizan un tamaño de paso variable para mejorar el rendimiento. Puede usar los solucionadores ODE incorporados si necesita un mejor rendimiento y precisión.

En cuanto a tu tarea.. Ya tienes el código; solo hay que poner los parametros.