МАТЛАБ: Как передать параметр в функцию? - PullRequest
9 голосов
/ 13 февраля 2010

У меня есть следующая функция:

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

Если я хочу решить эту проблему, я бы вызвал функцию ode45 следующим образом:

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

Но если я хочу передать параметр этой функции, как бы я использовал функцию ode45? В частности, я пытаюсь для следующей формулировки:

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

1 Ответ

8 голосов
/ 13 февраля 2010

Вы можете использовать анонимную функцию в matlab (аналогично лямбда-функциям в других языках):

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