【发布时间】:2016-03-30 17:16:03
【问题描述】:
在 MATLAB 中,我希望定义一个匿名函数,其中有一个确定的总和,以及另一个匿名函数。这是一个 MWE,希望能描述我正在尝试做的事情:
clear; n=1; syms j; a=0; b=sqrt(0.5);
Finv = @(x) logninv(x,a,b);
fun = @(x) 0.5-symsum(Finv(j*x), j, 1, n+1);
fsolve(fun,0.1)
返回的错误是:
使用 symfun 时出错>validateArgNames(第 211 行)第二个输入必须是 唯一符号变量的标量或向量。
symfun 中的错误(第 45 行) y.vars = validateArgNames(inputs);
sym/subsasgn 中的错误(第 762 行) C = symfun(B,[inds{:}]);
logninv 中的错误(第 60 行)p(p
@(x)logninv(x,a,b) 中的错误
@(x)0.5-symsum(Finv(j*x),j,1,n+1) 中的错误
fsolve 中的错误(第 217 行) fuser = feval(funfcn{3},x,varargin{:});
原因: 初始用户提供的目标函数评估失败。 FSOLVE 不能 继续。
对于Finv 的这个特殊选择,我使用eval 和feval 解决了它,如下所示:
clear; n=1; syms j; a=0; b=sqrt(0.5);
Finv = @(x) logninv(x,a,b);
fun = @(x) 0.5-eval(symsum(feval(symengine,'logninv',j*x,a,b), j, 1, n+1));
fsolve(fun,0.1)
在这种特殊情况下会产生答案,因为Finv=@(x) logninv(x,a,b),但这违背了重点,即我希望能够将Finv定义为我选择的单变量函数,不一定是预定义的MuPAD表达式'logninv'.
任何建议将不胜感激。
【问题讨论】:
-
有什么理由使用符号数学吗?使用 sum 而不是 symsum
-
啊!你说的对。这很容易解决:
fun = @(x) 0.5-sum(Finv([1:n+1]*x));谢谢。
标签: matlab anonymous-function symbolic-math mupad