我正在尝试使用ode45
求解一组ODE方程。我的许多参数已经是时间的函数,但是我一直在出错。
function odo
dx(1,1) = (vl+vr)/2*cos(x(3));
dx(2,1) = (vl+vr)/2*sin(x(3));
dx(3,1) = obz
其中obz
,vr
和vl
都是向量,例如:
obz = sin(t), t = 0:dt:tf;
我使用以下语法:
[t, x1] = ode45(@(t,x) odo(t,x,b,obz,vr,vl), 0:dt:tf, [0;0;0]);
与R15
一起出现,但不断出现错误:
分配的非单数rhs尺寸比非单数下标
如何解决此问题?
答案 0 :(得分:0)
您在这里有一些语法错误。首先,您不能只输入function odo
并让MATLAB猜测它应该在这里做什么。第二个,您在求解器表达式中两次调用t
和x
。一致的是,以这种方式在ode求解器中调用函数:
t_span=1:1:12;
b=0.2;
[t, x] = ode45(@odo, t_span, [0;0;0], b);
您不需要手动传递t
和x
,而求解程序可以自己完成。仅附加参数b
(但是在您的示例中未使用)。同样在函数声明中,请执行以下操作:
function dx = odo(t,x,b)
vr=sin(t); %Non-OD equations here
vl=cos(t);
obz=0.05*sin(t);
n=numel(x); %this generate a holder for results
dx=zeros(n,1);
dx(1) = (vl+vr)/2*cos(x(3)); %All ODEs formatted like this
dx(2) = (vl+vr)/2*sin(x(3));
dx(3) = obz;
如您所见,vr
,vl
和obz
是随时间变化的值,因此需要在求解器的每个步骤中重新计算。您必须将其放置在您的求解器函数中。