2011-10-06 4 views
6

Soy nuevo con Matlab. Espero que puedas ayudarme. Tengo que resolver un sistema de ODE usando la función ODE45. Aquí está la función que describe mis equidades.Matlab ode45. ¿Cómo cambiar un parámetro dentro de él mientras lo llamas?

function dNdt = rateEquations(t, y) 
    %populations of corresponding state 
    Ng = y(1); 
    Ns = y(2); 
    Nt = y(3); 

    %All constants used are dropped for the sake of easy reading. 

Nota el parámetro F.

%rate equations 
    dNs = s0 * Ng * F - Ns/ t_S1; 
    dNt = Ns/t_ISC - Nt/t_T1; 
    dNg = -dNt - dNs; 

    dNdt = [dNg; dNs; dNt]; 

end 

Luego, en mi guión .m-archivo que llamo la función ode45 en 'bucle'. Durante cada iteración tengo que cambiar el parámetro F y pasarlo a mi función 'rateEquations'. Pero no sé cómo darme cuenta.

for T = Tmin: dt : Tmax 
    %initial conditions 
    initialConditions = [N0 0 0]; 
    timeSpan = [T T+dt]; 

antes de llamar ODE45 F debe ser cambiado.

[t,N] = ode45('rateEquations', timeSpan, initialConditions) 

y así sucesivamente ...

end 

Gracias de antemano.

Respuesta

7

¿Quieres hacer F un argumento de la función derivada y pasar la función anónima derecho de ode45:

[t,N] = ode45(@(t,y) rateEquations(t,y,F), timeSpan, initialConditions) 
+0

Sí, funciona. Muchas gracias. Eso es lo que estaba buscando. :) – jacksonslsmg4

+0

También puede hacer esto con variables globales. Pero estaba tratando de usar la computación paralela (parfor) y eso no le gusta las variables globales. Pero esto funciona con parfor. – fibonatic

+0

@Nzbuu, Si hago esto, ¿necesito usar la interpolación? – kyle

Cuestiones relacionadas