【发布时间】:2015-02-06 16:58:04
【问题描述】:
我有一个具有以下方程式的机械系统:
xdot = Ax+ Bu
我想在一个循环中求解这个方程,因为在每一步中我都需要更新 u,但是像 ode45 或 lsim 这样的求解器会在一个时间间隔内求解微分方程。
for i = 1:10001
if x(i,:)>= Sin1 & x(i,:)<=Sout2
U(i,:) = Ueq - (K*(S/Alpha))
else
U(i,:) = Ueq - (K*S)
end
% [y(i,:),t,x(i+1,:)]=lsim(sys,U(i,:),(time=i/1000),x(i,:));
or %[t,x] = ode45(@(t,x)furuta(t,x,A,B,U),(time=i/1000),x)
end
我是否有另一种方法可以在一个循环中一次性求解这个方程(不是单个时间步)。
【问题讨论】:
-
我不明白你的解释。我认为您应该更清楚地解释问题是什么。另外,试着把你的完整程序(或至少一个工作程序)
-
我不想求解时间间隔等式。我想分别为 0,0.001,0,002 解决它。因为在每一步中我都需要更新 U 和 X。如果我使用 ode45,它将求解我的时间间隔等式,并且我的代码无法在每一步中更新 U 或 x。
-
我想我有一个解决方案,但我需要一些澄清。您正在执行矢量比较
x(i,:)>= Sin1;您是否要以这种方式逐行调整U?您正在保存所有以前的U向量;需要这个存储空间吗? -
是的。你理解的问题是正确的。我正在执行矢量比较,是的,我正在尝试在每一步中逐行调整 U。有 U 更好,但 x 比 U 更重要。
标签: matlab controls ode differential-equations