Proyecto 1 Base:
¿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.
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 = 3
en el símbolo del sistema.
En las constantes de iteración, length
es solo una función que te dice la longitud del vector. X_rna_0
se 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í
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 h
es un pequeño intervalo de tiempo
Entonces, lo que tienes que hacer, exactamente, es ejecutar un ciclo que va de t=t_initial
a t=t_final
con pequeños incrementos de h
. Puede usar cualquier bucle básico como for
bucle o while
bucle. for
Los 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.
Parth Ghetia