在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行)第二个输入必须是a 标量或唯一符号变量的向量。
symfun出错(第45行) y.vars = validateArgNames(inputs);
sym / subsasgn中的错误(第762行) C = symfun(B,[inds {:}]);
logninv中的错误(第60行)p(p <0 | 1
@(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'
。
任何建议都会受到最高的赞赏。
答案 0 :(得分:0)
尝试将第二个变量(即j)强制为带有标量(数字)数据类型的符号变量。请注意,在他的代码中,只有变量才被初始化。
clear; n=1; syms j integer; a=0; b=sqrt(0.5);
或者,您可以检查每个变量的假设。例如,
assumptions(j)