首页 文章

MATLAB:在symsum中使用匿名函数,然后使用fsolve

提问于
浏览
0

在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 的这个特殊选择,我使用 evalfeval 解决了它,如下所示:

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 回答

  • 0

    尝试将第二个变量(即j)强制为带有标量(数字)数据类型的符号变量 . 请注意,在他的代码中,只是变量未被初始化 .

    clear; n=1; syms j integer; a=0; b=sqrt(0.5);
    

    或者,您可以检查每个变量的假设 . 例如,

    assumptions(j)
    

相关问题