0

我正在尝试验证我的 RK4 代码并有一个状态空间模型来解决相同的系统。我有一个具有初始条件的 14 状态系统,但条件随时间而变化(每次迭代)。我正在尝试制定 A、B、C、D 矩阵并使用syslsim以便在整个时间跨度内编译我所有状态的结果。我正在尝试这样做:

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)存储从 1 到 5401 的每个时间步的所有状态的每个迭代lsim并最终得到一个矩阵。我不断收到此错误消息:

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.

Error using DynamicSystem/lsim (line 85)
When simulating the response to a specific input signal, the input data U must be a
matrix with as many rows as samples in the time vector T, and as many columns as
input channels.

非常感谢任何有用的输入。谢谢

4

1 回答 1

1

为了lsim工作,t必须至少包含 2 点。

此外, 和 的大小BC翻转。您有 1 个输入和 1 个输出,因此lsim 中的 t 长度u应该是1。

最后,您似乎尝试将所有初始条件一次放入您只希望与此迭代相关的部分的位置lsimy_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,:);

我不确定我是否正确理解了您的问题,但希望对您有所帮助。

于 2014-07-08T02:43:38.187 回答