提问人:Dante 提问时间:12/11/2014 最后编辑:Dante 更新时间:12/11/2014 访问量:441
如何获取匿名函数输入参数的数量
How to get the number of anonymous function input arguments
问:
我怎样才能得到 的长度 ?y
>> s=10; r=28; b=8/3;
>> f = @(t,y) [-s*y(1)+s*y(2); -y(1)*y(3)+r*y(1)-y(2); y(1)*y(2)-b*y(3)];
在上面的示例中,长度为 。此外,由于 是唯一的自变量,因此可以通过函数的长度找到 的长度,即这里。3
t
y
f
4
编辑
我想写一个微分方程组求解器般的函数。下面是一个示例ode45()
[t y] = ode45(f,[0 1],[1 0 0]);
答:
1赞
Marcin
12/11/2014
#1
我仍然不完全理解。但是从我所估计的一点点来看,你想看看函数 f 的内部,并寻找 y(1)、y(2) 或 y(3) 来查看 y 有多少个元素?如果是这种情况,您可以执行以下操作:
f = @(t,y) [-s*y(1)+s*y(2); -y(1)*y(3)+r*y(1)-y(2); y(1)*y(2)-b*y(3)];
matchStr = regexp(func2str(f),'y\(\d\)','match');
numel(unique(matchStr))
这样可以得到:3
基本上它所做的是将 f 变成字符串,然后在这个字符串中搜索。y(\d)
以防万一您想要拥有匿名函数输入参数的数量,您可以使用:
nargin(f)
这得到:2(因为你有 t 和 y 作为 f 的输入)
评论
0赞
Dante
12/11/2014
谢谢。您的答案是正确的,但是如果用户使用而不是 .我不认为 Matlab 在其微分方程函数中使用它,例如 .应该有更好的方法。x
y
ode45()
2赞
Marcin
12/11/2014
那么为什么不检查一下 ode45 是如何做到这一点的呢?只需编辑 ODE45,您就会看到源代码。也许这会提供一些答案。
0赞
Hoki
12/11/2014
@user96402只检查 如果您不确定是否会被调用,则无需检查,或者您可以在构建正则表达式之前先检查输入参数的名称。(\d)
y
y
上一个:命名空间包的注意事项是什么
评论
y
y(1)
y(2)
y(3)
f
y
edit ode45
edit private/odearguments
ode45