Решение ответа пространства состояний с матрицей переменной A

Я пытаюсь проверить свой код 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.

а также

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.

Любой полезный вклад приветствуется. Спасибо


person user3814258    schedule 07.07.2014    source источник


Ответы (1)


Чтобы lsim работало, t должно содержать не менее 2 точек.

Кроме того, размеры B и C меняются местами. У вас есть 1 вход и 1 выход, поэтому u должно быть равно длине t в lsim на 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,:);

Я не уверен, что правильно понял ваш вопрос, но я надеюсь, что это поможет.

person Simon    schedule 08.07.2014
comment
Спасибо вам за помощь. Я попытался сделать это, как вы сказали, но он говорит мне, что начальные условия должны быть такими же, как и состояния, которые равны 14. Я попытался растянуть s от t-1 до t с 14 шагами и также сделал размер u 14, но это говорит мне, что есть несоответствие нижнего индекса. Есть идеи? - person user3814258; 15.07.2014
comment
Каков размер y_0? Похоже, это 14 x 1, и в этом случае я не понимаю, что вы пытаетесь сделать. - person Simon; 15.07.2014
comment
это правильный размер для y_0, поскольку это начальные условия для 14 состояний. Я пытаюсь решить x_dot = Ax + Bu и y = Cx + Du, где состояния встроены в формулировку матрицы A, но также меняются во времени. Это означает, что я должен зацикливать lsim для каждого временного шага и каждый раз разрешать матрицу A. В конце концов, мне нужна матрица всех значений состояния для каждого времени от 1 до 5401, где меня интересует только целое число раз. - person user3814258; 15.07.2014