Discrete state space find and plot

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 个评论

How do you plot it? -Thanks
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, :))
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 个)

类别

帮助中心File Exchange 中查找有关 Control System Toolbox 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by