我的代码应该在程序结束时输出X的列向量。我犯了很多错误。请帮忙!
clc;
clear;
t0=0;
tend=.001;
T=[t0 .00005];
T1=[.00005 tend];
temp=1;
X(:,1) = [0;0;0;0];
for k=1:2
for i= temp:50*(k)
[T,X]=ode45(@(T,X)sys(T,X,A1,B1),T,X(:,1));
else
[T1,X1]=ode45(@(T1,X1)sys1(T1,X1,A0,B0),T1,X(:,end));
end
end
temp=50;
end
function Xdot = sys(T,X,A1,B1,U)
Xdot= A1*X + B1*U;
end
function Xdot = sys1(T1,X,A0,B0,U)
Xdot= A0*X + B0*U;
end
错误如下:
Not enough input arguments.
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options,
varargin);
看起来您没有将参数U
设置为函数sys
和sys1
。
我已经用<U missing>
:突出显示了下面的相应位置
if sw(i)==0 && X(2,i)> vdon || sw(i)==1 && X(1,i)>0
sw(i+1)=1;
[T,X] = ode45( @(T,X) sys(T,X,A1,B1, <U missing> ), T, X(:,1) );
else
sw(i+1)=0;
[T1,X1] = ode45( @(T1,X1) sys1(T1,X1,A0,B0, <U missing> ), T1, X(:,end) );
end