Discrete state space find and plot

6 ビュー (過去 30 日間)
Jack Reacher
Jack Reacher 2016 年 12 月 3 日
編集済み: bio lim 2016 年 12 月 3 日
A = [0 1 0 0 0; -0.4 -1.3 0 0 0; 0 0 2 0 0; 0 0 0 0 -0.4; 0 0 0 1 -1.3];
B = [0; 1; 0; 0; 0];
C = [0 0 0 0 1];
x0 = transpose([0 0 0 0 0]); % initial condition
u = 1(k) % unit step
Find and plot:
x(k + 1) = A*x(k) + B*u(k)
How do I do this without using ss() and lsim(), and instead by using a for loop for 100 time units?
Thanks

採用された回答

bio lim
bio lim 2016 年 12 月 3 日
編集済み: bio lim 2016 年 12 月 3 日
Well, the nice thing about discrete time system is you can solve the discrete time equation with a loop.
clc;
clear all;
close all;
A = [0 1 0 0 0; -0.4 -1.3 0 0 0; 0 0 2 0 0; 0 0 0 0 -0.4; 0 0 0 1 -1.3];
B = [0; 1; 0; 0; 0];
C = [0 0 0 0 1];
x0 = transpose([0 0 0 0 0]); % initial condition
u = 1; % unit step
x(:,1) = A*x0 + B.*u;
% x(k + 1) = A*x(k) + B*u(k)
for k = 2:100
x(:,k) = A*x(:,k-1) + B*u;
end
  3 件のコメント
Jack Reacher
Jack Reacher 2016 年 12 月 3 日
This is what I did to plot the 5 states. But, I'm not sure I got the right plots. -Thanks
clc;
clear;
close;
A = [0 1 0 0 0; -0.4 -1.3 0 0 0; 0 0 2 0 0; 0 0 0 0 -0.4; 0 0 0 1 -1.3];
B = [0; 1; 0; 0; 0];
C = [0 0 0 0 1];
x0 = transpose([0 0 0 0 0]);
u = 1;
x(:, 1) = A*x0 + B*u;
for k = 2: 100
x(:, k) = A*x(:, k - 1) + B*u;
end
t = 1: 100;
subplot(2, 3, 1);
plot(t, x(1, :))
subplot(2, 3, 2);
plot(t, x(2, :))
subplot(2, 3, 3);
plot(t, x(3, :))
subplot(2, 3, 4);
plot(t, x(4, :))
subplot(2, 3, 5);
plot(t, x(5, :))
bio lim
bio lim 2016 年 12 月 3 日
編集済み: bio lim 2016 年 12 月 3 日
You are plotting them right. I think, the last three states are not excited enough either due to initial condition, or your system dynamic configuration. Try changing the initial conditions, and see how it changes.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeStability Analysis についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by