在matlab中求和函数句柄

时间:2011-01-16 09:37:57

标签: function math matlab

您好
我试图总结两个函数句柄,但它不起作用。 例如:

  
    

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

2 个答案:

答案 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

然后,假设您在给定工作空间中定义了向量vw,则可以创建一个新函数sy,对于给定的标量值{{1} },将对ys中的每组值进行评估的v求和:

w

如果要使用sy = @(y) sum(s(v,y,w)); 的值数组来评估此函数,可以像这样添加对函数element-wise arithmetic operators的调用:

y

请注意,将在sy = @(y) arrayfun(@(yi) sum(s(v,yi,w)),y); 函数中使用的vw的值为ARRAYFUN。换句话说,更改工作区中的syv不会更改w使用的值。另请注意,我没有为新的匿名函数sy命名,因为已经有fixed to what they were when the function was created