I have an error when simulate a linear delay system with sliding mode control

2 次查看(过去 30 天)
% Define the system matrices
A = [-1];
B = [1];
C = [1];
D = 0;
% Define the delay
tau = 0.5; % assume a 0.5 s delay
% Define the sliding mode control parameters
alpha = 1;
beta = 1;
theta = 1;
t = 0:0.01:2;
% Create the delayed state-space model
nx = size(A,1);
ny = size(C,1);
nd = round(tau/(t(2)-t(1)));
Ad = [A zeros(nx,nd); zeros(nd,nx) eye(nd)];
Bd = [B; zeros(nd,1)];
Cd = [C zeros(ny,nd)];
Dd = D;
sys_delayed = ss(Ad,Bd,Cd,Dd,t(1));
% Set up the sliding mode controller
Am = [A, zeros(nx,1); -C, 0];
Bm = [B; 0];
K = [alpha, beta];
L = [1, 0];
Gamma = [-theta*beta*C*B, theta*alpha*C*A-beta*C*B];
% Simulate the response to a step input with sliding mode control
% t = 0:0.01:2;
u = ones(size(t));
x0 = [0; 0];
s0 = L*x0;
[~,S,X] = lsim(sys_delayed, [u'; s0'], t, [x0; s0']);
for i=1:length(t)
s = S(i,:)';
x = X(i,:)';
xdot = Am*x + Bm*u(i);
udot = -K*s - Gamma*x;
u(i) = u(i) + udot*0.01;
end
% Plot the response
plot(t,X(:,1),t,u)
xlabel('Time (s)')
ylabel('Temperature')
legend('Temperature', 'Control input')
%%%-------------------------------------------
Error using DynamicSystem/lsim (line 84)
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.
Error in Exemple_delay_sys_ordre1_SMC1 (line 38)
[~,S,X] = lsim(sys_delayed, [u'; s0'], t, [x0; s0']);

采纳的回答

Paul
Paul 2023-2-18
Hi yousra,
I'm not quite sure what the code is trying to do. However, the reason for the lsim error is pretty clear, and there's another issue in that lsim call that needs to be addressed as well.
% Define the system matrices
A = [-1];
B = [1];
C = [1];
D = 0;
% Define the delay
tau = 0.5; % assume a 0.5 s delay
% Define the sliding mode control parameters
alpha = 1;
beta = 1;
theta = 1;
% define the time vector
t = 0:0.01:2;
% Create the delayed state-space model
nx = size(A,1);
ny = size(C,1);
nd = round(tau/(t(2)-t(1)));
Ad = [A zeros(nx,nd); zeros(nd,nx) eye(nd)];
Bd = [B; zeros(nd,1)];
Cd = [C zeros(ny,nd)];
Dd = D;
sys_delayed = ss(Ad,Bd,Cd,Dd,t(1));
% Set up the sliding mode controller
Am = [A, zeros(nx,1); -C, 0];
Bm = [B; 0];
K = [alpha, beta];
L = [1, 0];
Gamma = [-theta*beta*C*B, theta*alpha*C*A-beta*C*B];
% Simulate the response to a step input with sliding mode control
% t = 0:0.01:2;
u = ones(size(t));
x0 = [0; 0];
s0 = L*x0;
At this point u and t have the same number of elements. So appending the additional elements to u in the second input to lsim causes the error.
Also, sys_delayed has 51 states
size(sys_delayed)
State-space model with 1 outputs, 1 inputs, and 51 states.
But the initial conditions input to lsim only has three elements, so that's another problem that needs to be addressed.
size([x0; s0'])
ans = 1×2
3 1
[~,S,X] = lsim(sys_delayed, [u'; s0'], t, [x0; s0']);
Error using DynamicSystem/lsim
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.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Dynamic System Models 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by