将符号表达式转换为函数句柄时的矢量输入[Matlab]

时间:2014-11-08 23:44:00

标签: matlab symbolic-math

我有一个象征性的ODE:

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-by-1元素,即使我已将v定义为[t2,xx,...],其中xx是1 x 2元素。我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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]);