2014-11-08 101 views
0

我有個符號ODE:矢量輸入[Matlab的]

syms x1 x2 cs ks ms t2 real 
xx=[x1 x2]; 
fun_sym=[xx(2); (cs/ms)*(xx(1)^2-1)*xx(2) - (ks/ms)*xx(1)]; 

我要解決使用ODE功能,但首先我需要將其轉換成函數處理器:

v=matlabFunction(fun_sym,'vars', [t2,xx,cs,ks,ms]); 
[T,x]= ode15s(@(t2,xx) v,t,[1 0]); 

其中t=[0:0.1:1]。 MATLAB給出了一個錯誤:

@(T2,XX)V returns a vector of length 1, but the length of initial conditions vector is 2. 

我想這是因爲它解釋V作爲:@(t2,x1,x2,cs,ks,ms),因此預計第二個參數是x1,這是一個1×1元,即使我已經設定V如[t2,xx,...],其中xx是1×2元素。我該如何解決這個問題?

回答

1

這工作,但你需要給也值其他參數(csksms

v=matlabFunction(fun_sym,'vars', [t2,x1,x2,cs,ks,ms]); 
[T,x]= ode15s(@(t2,xx) v(t2,xx(1),xx(2),cs,ks,ms),t,[1 0]); 
+0

完美。有什麼辦法可以傳遞矢量而不是有x1,x2?這不起作用: 'v = matlabFunction(f,'vars',{t2,xx,cs,ks}); ['t,x] = ode15s(@(t2,xx)v(t2,xx,1,1),t,[1 0]);' – student1 2014-11-09 04:05:52

+1

不,我不認爲有什麼辦法可以做到這一點Matlab,由於處理符號數組的方式。但我看不出有什麼理由可能會成爲一個不能做到的問題。 – David 2014-11-09 04:43:10