2014-02-21 38 views
0

我遇到了操縱我的漸變和粗麻布的函數句柄的問題。漸變和粗麻布問題的函數句柄MATLAB

我有以下代碼:

syms x1 x2 

x = [x1,x2]; 

% Define the function phi(x) 
phi = @(x1,x2) 10*x1^4 - 20*x1^2*x2 + 10*x2^2 + x1^2 - 2*x1 + 5; 

% Define the gradient of the function phi(x) 
gradphi = @(x1,x2) jacobian(phi,x).'; 

% Define the Hessian of phi(x)  
hessphi = @(x1,x2) jacobian(gradphi,x); 

現在,當我輸入到指揮終端:

phi(1,2) 

我得到一些標量值。

但是,當我輸入

gradphi(1,2) 
hessianphi(1,2) 

我想爲在那些點評估的梯度對應的向量。

漸變,我只是得到

EDU>> gradphi(1,2) 

ans = 

2*x1 - 40*x1*x2 + 40*x1^3 - 2 
      - 20*x1^2 + 20*x2 

這是剛剛畢業的向量函數。但我想輸入x1 = 1和x2 = 2的實際數值結果。

EDU>> hessphi(1,2) 

返回一個錯誤。

我不知道爲什麼。

+0

對於'hessianphi'你會得到一個錯誤,因爲你將函數定義爲'hessphi'而不是'hessianphi' – Guddu

+0

啊是的,非常感謝,但我的意思是hessphi(1,2)。 – alvarezcl

回答

2

有關陣列乘法和除法,你需要使用元素智能運營商.*./,並且.^hessianphigradphi的定義。否則,Matlab會嘗試做矩陣乘法/除法/功率,這將不會很好。

/拋開:搜索錯誤消息的文本會導致錯誤的最可能原因。