在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
定义为我选择的单变量函数,而不一定是像 'logninv'
这样的预定义的MuPAD表达式 .
任何建议都将非常感激 .
1 回答
尝试将第二个变量(即j)强制为带有标量(数字)数据类型的符号变量 . 请注意,在他的代码中,只是变量未被初始化 .
或者,您可以检查每个变量的假设 . 例如,