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

时间:2016-03-30 17:16:03

标签: matlab anonymous-function symbolic-math mupad

在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的这一特定选择,我使用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定义为我选择的单变量函数,不一定是预定义的MuPAD表达式,如'logninv'

任何建议都会受到最高的赞赏。

1 个答案:

答案 0 :(得分:0)

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

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

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

assumptions(j)