2014-11-08 115 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