Matrix 用变量矩阵求解状态空间响应

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)

我试图验证我的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)
    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,:);