Matrix 用变量矩阵求解状态空间响应
我试图验证我的RK4代码,并有一个状态空间模型来解决相同的系统。我有一个具有初始条件的14状态系统,但条件随时间而变化(每次迭代)。我正在尝试制定A、B、C、D矩阵,并使用Matrix 用变量矩阵求解状态空间响应,matrix,matlab,state-space,control-theory,Matrix,Matlab,State Space,Control Theory,我试图验证我的RK4代码,并有一个状态空间模型来解决相同的系统。我有一个具有初始条件的14状态系统,但条件随时间而变化(每次迭代)。我正在尝试制定A、B、C、D矩阵,并使用sys和lsim来编译整个时间跨度内我所有状态的结果。我正在尝试做类似的事情: for t=1:1:5401 y1b=whatever . . y14b = whatever y_0 = vector of ICs A = (will change with time)
sys
和lsim
来编译整个时间跨度内我所有状态的结果。我正在尝试做类似的事情:
for t=1:1:5401
y1b=whatever
.
.
y14b = whatever
y_0 = vector of ICs
A = (will change with time)
B = (1,14) with mostly zeros and 3 ones
C = ones(14,1)
D = 0
Q = eye(14)
R = eye(1)
k = lqr(A,B,C,D)
A_bar = A - B*k
sys = ss(A_bar,B,C,D)
u = zeros(14,1)
sto(t,14) = lsim(sys,u,t,y_0)
then solve for new y1b-y14b from outside function
end
换句话说,我试图使用sto(t,14)
来存储lsim
的每次迭代,并最终得到从1到5401的每个时间步的所有状态矩阵。我一直收到以下错误消息:
Error using DynamicSystem/lsim (line 85)
In time response commands, the time vector must be real, finite, and must contain
monotonically increasing and evenly spaced time samples.
及
任何有帮助的意见都将不胜感激。感谢您要使
lsim
正常工作,t
必须至少包含2个点
此外,将翻转B
和C
的大小。您有1个输入和1个输出,因此u
的长度应为lsim中的t乘以1
最后,看起来您试图在lsim
和y_0
中一次放置所有初始值条件,您只需要与此迭代相关的部分
s = [t-1 t];
u = [0; 0];
if t==1
y0 = y_0;
else
y0 = sto(t-1,1:14);
end
y = lsim(sys, u, s, y0);
sto(t,1:14) = y(end,:);
我不确定我是否正确理解了你的问题,但我希望它能有所帮助。谢谢你的帮助。我试着像你说的那样做,但它告诉我,初始条件必须与状态数相同,即14。我试着用14个步骤将s从t-1拉伸到t,并使u的大小为14,但它告诉我,有一个下标不匹配。有什么想法吗?
y\u 0
的大小是多少?这听起来像是14x1
在这种情况下,我不明白你想做什么。这是y_0的正确大小,因为它是14个状态的初始条件。我试图求解x_dot=Ax+Bu和y=Cx+Du,其中状态嵌入到矩阵的公式中,但也随时间变化。这意味着我必须为每个时间步循环lsim,并每次解析A矩阵。最后,我想要一个从1到5401的所有状态值的矩阵,其中我只关心整数次
s = [t-1 t];
u = [0; 0];
if t==1
y0 = y_0;
else
y0 = sto(t-1,1:14);
end
y = lsim(sys, u, s, y0);
sto(t,1:14) = y(end,:);