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

任何建议将不胜感激。

4

1 回答 1

0

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

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

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

assumptions(j)
于 2016-03-30T17:39:59.487 回答