2015-06-04 53 views
1
N= input('nodes'); 
e5= ones(N,1); 
e4= ones((N-1),1); 
A = -2*diag(e5)+diag(e4,1)+diag(e4,-1) 
k = sym('k',[N 1]) 
s = A*k; 
f = (A*k)-(sign(k).*((k).^2)) 
g = diff(f,k) 

在MATLAB

問題創作功能句柄的是,上面看到的代碼創建與所述一組輸入參數(K1,K2),而不是(K)的函數。也沒有運行分化指令。

+0

diff(f)中的問題也 –

回答

2

使用[email protected](k)

f = @(k)A*k-sign(k).*k.^2 
f([3; 2]) 

爲了區分,第一次使用sym(f)。治療k作爲標:

diff(sym(f)) 

這給,在這種情況下

[ - 2*k*sign(k) - 2*k^2*dirac(k) - 2, 1 - 2*k^2*dirac(k) - 2*k*sign(k)] 
[ 1 - 2*k^2*dirac(k) - 2*k*sign(k), - 2*k*sign(k) - 2*k^2*dirac(k) - 2] 

但我不認爲這是你想要的。也許你正在尋找diff(sym(f([k1;k2])),k1)diff(sym(f([k1;k2])),k2)

+0

確定創建函數,但不區分它。 –

+0

如果你給出你想要的答案,我會嘗試讓Matlab得到它。如果你想把'k'作爲一個向量,你可能想要考慮組件,不是嗎? – Ramashalanka