2010-02-13 25 views
9

Ho la seguente funzione:MATLAB: come posso passare un parametro a una funzione?

function ypdiff = ypdiff(t,y) 
    a = 0.01; 
    b = 0.1; 
    ypdiff(1) = -a*y(1)*y(2); 
    ypdiff(2) = b*y(1)*y(2)-b*y(2); 
    ypdiff(3) = b*y(2); 
    ypdiff = [ypdiff(1) ypdiff(2) ypdiff(3)]'; 

Se voglio risolvere questo problema, vorrei richiamare la funzione ode45 come segue:

[t y] = ode45(@ypdiff, [to tf], yo); 

Ma se voglio passare un parametro a questa funzione, come dovrei usare la funzione ode45? In particolare, sto cercando per la seguente formulazione:

function ypdiff = ypdiff(t,y,u) 
    a = 0.01; 
    b = 0.1; 
    ypdiff(1) = -a*u*y(1)*y(2); 
    ypdiff(2) = b*u*y(1)*y(2)-b*y(2); 
    ypdiff(3) = b*u*y(2); 
    ypdiff = [ypdiff(1) ypdiff(2) ypdiff(3)]'; 

risposta

8

è possibile utilizzare un anonymous function in MATLAB (simile a funzioni lambda in altre lingue):

u = 1.2; 
[t y] = ode45(@(t, y) ypdiff(t, y, u), [to tf], yo); 
+0

Grandi ... Grazie mille .. Tuttavia , Non riuscivo a farlo funzionare finché non ho rimosso il carattere ':' – Legend

+0

sì, quello era un errore di battitura, mi dispiace;) – catchmeifyoutry

+0

Oh ... Grazie per il chiarimento :) – Legend

Problemi correlati