您好
我试图总结两个函数句柄,但它不起作用。
例如:
Y1 = @(X)(X * X);
Y2 = @(X)(X * X + 3 * X);
y3 = y1 + y2
我收到的错误是“???'未定义的函数或方法'加上'为'function_handle'类型的输入参数。”
这只是一个小例子,实际上我实际上需要迭代地总结大约500个相互依赖的函数。
修改
Clement J.的解决方案确实有效但我无法将其概括为循环并遇到问题。我有函数s=@(x,y,z)((1-exp(-x*y)-z)*exp(-x*y));
我有一个包含536个数据点的向量v和另一个包含536个数据点的向量w。我的目标是总结s(v(i),y,w(i)),因为i = 1 ... 536因此在变量y中得到一个函数,它是536个函数的总和。我尝试的语法是:
sum=@(y)(s(v(1),y,z2(1)));
for i=2:536
sum=@(y)(sum+s(v(i),y,z2(i)))
end
答案 0 :(得分:5)
Fyodor Soikin提出的解决方案有效。
>> y3=@(x)(y1(x) + y2(x))
y3 =
@(x) (y1 (x) + y2 (x))
如果要在多个函数上执行此操作,可以使用中间变量:
>> f1 = y1;
>> f2 = y2;
>> y3=@(x)(f1(x) + f2(x))
评论后编辑: 我不太明白这个问题。你可以在函数之外定义你的向量v和w:
v = [5 4]; % your 536 data
w = [4 5];
y = 8;
s=@(y)((1-exp(-v*y)-w).*exp(-v*y))
s_sum = sum(s(y))
注意乘法中的点以元素方式执行。
答案 1 :(得分:2)
我认为米哈伊尔的评论中提供了最简洁的解决方案。我会更详细地充实它......
首先,您需要修改anonymous function s
,以便它可以使用{{3}对相同大小的矢量输入和标量输入(as suggested by Clement J.)进行操作如下:
s = @(x,y,z) (1-exp(-x.*y)-z).*exp(-x.*y); %# Note the periods
然后,假设您在给定工作空间中定义了向量v
和w
,则可以创建一个新函数sy
,对于给定的标量值{{1} },将对y
和s
中的每组值进行评估的v
求和:
w
如果要使用sy = @(y) sum(s(v,y,w));
的值数组来评估此函数,可以像这样添加对函数element-wise arithmetic operators的调用:
y
请注意,将在sy = @(y) arrayfun(@(yi) sum(s(v,yi,w)),y);
函数中使用的v
和w
的值为ARRAYFUN。换句话说,更改工作区中的sy
和v
不会更改w
使用的值。另请注意,我没有为新的匿名函数sy
命名,因为已经有fixed to what they were when the function was created。