MATLABでは、明確な合計を持つ無名関数とその中の別の無名関数を定義したいと思います。ここでうまくいけば、私がやろうとしていますについて説明しMWEです:MATLAB:symsum内で匿名関数を使用する場合、fsolve
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(line 45)のエラー y.vars = validateArgNames(inputs);
sym/subsasgn(line 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
を使用して、それを解く:
[email protected](x) logninv(x,a,b)
ので、この特殊なケースで答えを生成するが、これはということが私である点、敗北
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
を定義することができるようにしたいと思います。'logninv'
のようなあらかじめ定義されたMuPAD式である必要はありません。
アドバイスをいただければ幸いです。
記号演算を使用する理由はありますか? symsumの代わりにsumを使用してください – Daniel
Argh!あなたが正しいです。これは簡単に解決します: 'fun = @(x)0.5-sum(Finv([1:n + 1] * x));'ありがとう。 – dwarf102