Matlab:为什么在ode45中传递额外的参数我还需要传递`(t,y)`?

时间:2016-10-02 04:14:19

标签: matlab

MATLAB: How do I pass a parameter to a function?

据说如果我想传递参数u,我需要使用匿名函数:

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

最初,在没有传递参数u的情况下,ode行显示为:

[t y] = ode45(@ypdiff, [to tf], yo);,其中@ypdiff只创建一个函数句柄。

为什么我们只想传递u,我们还需要在创建匿名函数t中包含y@(t, y) ypdiff(t, y, u),但不能包含@ypdiff(u)之类的内容。 1}}?

1 个答案:

答案 0 :(得分:2)

简单地将@附加到函数的前面会创建一个函数句柄而不是一个匿名函数。此函数句柄隐式将所有输入参数转发到函数上。

您需要的是匿名函数的函数句柄(因为它接受输入并执行操作或调用另一个函数)。在这种情况下,它隐式传递输入,因此您需要显式接收输入参数,然后在匿名函数中使用它们(或不使用它们)。

@(t, y)ypdiff(t, y, u)

此规则的唯一例外是一些图形对象将接受一个单元数组来代替一个回调函数,该函数接受一个函数句柄作为第一个元素,并接受任何其他参数作为第二个元素,但对于{不是这种情况{1}}。

ode45