Как использовать синусоидальную функцию в модели пространства состояний в качестве входных данных (для матрицы B) и получить только ОДИН график? - PullRequest
0 голосов
/ 27 июня 2018

Я хотел бы иметь синусоидальный вход (в качестве входной силы) в моей модели пространства состояний. Основная проблема заключается в том, что когда я выполняю пошаговый ответ системы, я получаю 10 субплотов в ОДНОМ графике и хочу видеть только один график. Я не уверен, правильно ли я устанавливаю свой синусоидальный вход. Я думаю, что мне может понадобиться сделать цикл, чтобы я не получил несколько графиков? Не уверен.

Ниже приведен мой код для простой системы пружинно-демпфирующих тележек:

k1=150;
k2=700;
b1=15;
b2=30;
M1=5;
M2=20;
w=1;
t=1e-10:.1:1;
F=sin(w*t); %Sinewave input

A=[0 0 1 0; 0 0 0 1; -k1/M1 k1/M1 -b1/M1 b1/M1; k1/M2 -(k1+k2)/M2 b1/M2 -(b1+b2)/M2];
B=[0 0 1/M1 0]'*F;
C=[1 0 0 0];
D=0;

sys=ss(A,B,C,D); %State Space Model

step(sys)
margin(sys)

Want this to be only ONE plot

Спасибо.

1 Ответ

0 голосов
/ 27 июня 2018

Функция шага будет применять шаговый ввод единицы измерения, поэтому эта строка B=[0 0 1/M1 0]'*F; неверна. Вы модифицируете матрицу ввода. Для того чтобы увидеть ответ системы из-за пошагового ввода, вы делаете

k1=150;
k2=700;
b1=15;
b2=30;
M1=5;
M2=20;
w=1;
t=1e-10:.1:1;
%F=sin(w*t); %Sinewave input

A=[0 0 1 0; 0 0 0 1; -k1/M1 k1/M1 -b1/M1 b1/M1; k1/M2 -(k1+k2)/M2 b1/M2 -(b1+b2)/M2];
B=[0 0 1/M1 0]';
C=[1 0 0 0];
D=0;

sys=ss(A,B,C,D); %State Space Model

step(sys)
figure % create a new figure for Bode plot
margin(sys)

Результаты

enter image description here

enter image description here

Чтобы определить произвольный ввод, вы можете использовать lsim. В вашем случае вы можете сделать следующее

k1=150;
k2=700;
b1=15;
b2=30;
M1=5;
M2=20;
w=1;
%t=1e-10:.1:1;
t = linspace(0, 100, 1000);
F=sin(w*t); %Sinewave input

A=[0 0 1 0; 0 0 0 1; -k1/M1 k1/M1 -b1/M1 b1/M1; k1/M2 -(k1+k2)/M2 b1/M2 -(b1+b2)/M2];
B=[0 0 1/M1 0]';
C=[1 0 0 0];
D=0;

sys=ss(A,B,C,D); %State Space Model

% step(sys)
% figure
% margin(sys)

output = lsim(sys, F, t);                                
plot(t, output)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...