在 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 < 0 | 1 < p) = NaN;
@(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'
。
任何建议将不胜感激。