Discrete state space find and plot

6 次查看(过去 30 天)
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 CenterFile Exchange 中查找有关 Stability Analysis 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by