我正在尝试解决以下功能
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'类型的输入参数。”
希望有人可以帮助我......谢谢答案 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