2010-02-13 11 views
9

J'ai la fonction suivante:MATLAB: Comment transmettre un paramètre à une fonction?

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)]'; 

Si je veux résoudre ce problème, je qualifierais la fonction ode45 comme suit:

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

Mais si je veux passer un paramètre à cette fonction, Comment utiliser la fonction ode45? Plus précisément, je suis en train de la formulation suivante:

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)]'; 

Répondre

8

Vous pouvez utiliser un anonymous function dans Matlab (similaire aux fonctions lambda dans d'autres langues):

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

Great ... Merci beaucoup .. Cependant , Je ne pouvais pas le faire fonctionner jusqu'à ce que j'ai enlevé le caractère ':' – Legend

+0

oui, c'était une faute de frappe, désolé;) – catchmeifyoutry

+0

Oh ... Merci pour la clarification :) – Legend