在matlab中乘以函数

时间:2011-03-26 18:19:37

标签: matlab

我正在尝试解决以下功能

k=2;
G(1)=292000.0;
G(2)=262000.0;
Ld(1)=0.00396;
Ld(2)=0.0344;
deps=10;
aa=3.7;
ms=0.0;

 for i=1:k
    ms=@(x) ms+(G(i)/Ld(i))*exp(-x./Ld(i))

 end

f=@(x) (exp(x.*2*deps)-exp(-x.*deps))/((aa-3)+(2*exp(x.*deps)+exp(-2*x.*deps)))
g=@(x) ms(x).*f(x)
g(1);

但我收到此错误“未定义的函数或方法'加上'为'function_handle'类型的输入参数。”

希望有人可以帮助我......谢谢

2 个答案:

答案 0 :(得分:2)

正如Jonas已经指出的那样,问题在于你可以将ms作为数值和函数句柄互换,这是你无法做到的。

实际上,您不需要for循环来生成匿名函数ms。您可以使用函数SUM在一行中创建它,如下所示:

ms = @(x) sum((G./Ld).*exp(-x./Ld));

这将为您提供g(1) = 0.0199;的最终结果。

答案 1 :(得分:1)

有问题的行是:

ms=0.0;

 for i=1:k
    ms=@(x) ms+(G(i)/Ld(i))*exp(-x./Ld(i))

 end

在循环中,您将ms视为函数句柄和数字,这将不起作用。

虽然函数句柄的递归定义很可能不是最好的方法,但令我惊讶的是 - 可能。因此,你可以写:

ms = @(x)0; %# initialize 'ms' to nothing
for i=1:k
    ms = @(x) ms(x) +(G(i)/Ld(i))*exp(-x./Ld(i));
end