2016-05-09 20 views
1

、Iは、エラーのメッセージは5Matlabの勾配

x=sym('x',[1,2,3,4,5]); 
c=[1 2 4 3 5 3 4 5 4 3 4 34 5 6]; 
d=[1 0 1 0 0 1 1 1 0 0 0 1 0 1]; 
f [email protected](x) sum(-0.5*log(x(1))+x(1)*0.5*(x(2+d)/x(1)-c).^2-log(exp(x(2+d).*c+x(4+d))./(exp(x(2)*c+x(4))+exp(x(3)*c+x(5))))) 
grad_f=gradient(f) 

xと次元のベクトルを関数f(x)のシンボリック勾配を計算しなければならない: ''

未定義のオペレータ'' function_handle '型の入力引数の場合

gradient> parse_inputs(行146)のエラー f = f。 ';

勾配のエラー(行48) [f、ndim、loc、rflag] = parse_inputs(f、varargin);

エラーはどこですか?

+0

文書では、 'gradient'関数が関数ハンドルではなく数値ベクトルをとることを暗示しています。http://www.mathworks.com/help/matlab/ref/gradient.html – Dan

+1

@Dan記号的な' gradient ' – Yvon

+3

シンボリック' gradient'はシンボリック関数 'f'を入力として受け入れます。あなたの定義は関数ハンドルです。 '@(x)'を削除してみてください。http://www.mathworks.com/help/symbolic/gradient.html – Yvon

答えて

0

は、私は(例を見て)あなたはグラデーションがために計算することにしたいと思いますsymbolc変数を指定して、異なったfを指定する必要が思う: https://de.mathworks.com/help/symbolic/gradient.html

彼らはfを指定する関数ハンドルを使用せずこれは、シンボリックツールボックスが単独で処理するためです。 Matlab gradient and hessian computation for symbolic vector function


EDIT:

はまた、この質問を見ているくそー、少し遅すぎる

0

:-)イヴォンさんのコメントの後に私はここでエラーメッセージ自体で探しています。 gradientは、関数ハンドルを入力として好きではありません。私は前に@(x)ない純粋な象徴としての機能fを定義する場合

f =sum(-0.5*log(x(1))+x(1)*0.5*(x(2+d)/x(1)-c).^2-log(exp(x(2+d).*c+x(4+d))./(exp(x(2)*c+x(4))+exp(x(3)*c+x(5)))))  

その後、入力勾配は私に記号式の5X1の配列を与えます。