Effacer les filtres
Effacer les filtres

why lsim return empty states?

1 vue (au cours des 30 derniers jours)
Mahmoud Elzouka
Mahmoud Elzouka le 28 Juil 2023
Commenté : Paul le 28 Juil 2023
I have build a sparse state space system, and solved using lsim. According to the documentation, the third output represent the state trajectory.
When I run this example, the third output is empty.
Is there anything wrong I am doing? how can I get the states with time?
Thanks!
% inputs defining sparse state space system size
N_inputs = 41;
N_outputs = 240;
N_states = 2400;
N_time_steps = 10;
% defining the sparse state space system
G = sprand(N_states, N_states, 0.01);
B = sprand(N_states, N_inputs, 0.01);
E = sprand(N_outputs, N_states, 0.01);
D = 0;
C = sprand(N_states, N_states, 0.01);
sys = sparss(G, B, E, D, C);
% solving
t = linspace(0,1,N_time_steps);
[y,tOut,x] = lsim( ...
sys, ...
rand(N_inputs, length(t)), ...
t);
% check the size of each output
disp(size(y))
10 240
disp(size(tOut))
10 1
disp(size(x)) % why this is empty? how can I force lsim to return it?
0 0

Réponse acceptée

Paul
Paul le 28 Juil 2023
Modifié(e) : Paul le 28 Juil 2023
According to the lsim doc page, the output x is returned when the input sys is a state-space model. The doc page further distinguishes between the input sys being a sparss model and an ss model. So I think that state trajectories are just returned as empty for sparss input. You can also see a comment that says exactly this if you drill down far enough into lsim in the debugger.
dbtype(fullfile(matlabroot,'toolbox/shared/controllib/engine/+ltipack/@spssdata/lsim.m'),'1:8')
1 function [y,x] = lsim(D,u,t,x0,~) 2 % Linear response simulation of state-space model with real coefficients. 3 % RE: Assume U is Ns x Nu and T has Ns samples. 4 5 % Author: P. Gahinet 6 % Copyright 2020 The MathWorks, Inc. 7 [ny,nu] = iosize(D); 8 x = []; % never compute X for sparse
In theory, at least, we can augment the output equation to include the states.
rng(100)
N_inputs = 41;
N_outputs = 240;
N_states = 2400;
N_time_steps = 10;
% defining the sparse state space system
G = sprand(N_states, N_states, 0.01);
B = sprand(N_states, N_inputs, 0.01);
E = sprand(N_outputs, N_states, 0.01);
D = 0;
C = sprand(N_states, N_states, 0.01);
% augment
E = [E; sparse(eye(N_states))];
sys = sparss(G, B, E, D, C);
% solving
t = linspace(0,1,N_time_steps);
[y,tOut,x] = lsim( ...
sys, ...
rand(N_inputs, length(t)), ...
t);
% collect states and outputs
x = y(:,N_outputs+1:end);
y = y(:,1:N_outputs);
size(y)
ans = 1×2
10 240
size(x)
ans = 1×2
10 2400
  2 commentaires
Mahmoud Elzouka
Mahmoud Elzouka le 28 Juil 2023
Thanks!
I wish matlab write in the docs at the output `x` that it will be empty is the system is sparse.
Paul
Paul le 28 Juil 2023
The doc could definitely be more clear in this regard. If you feel motivated, you can click on a star rating at the bottom of the doc page, after which I think that a window will pop-up where you can provide feedback to the doc writers.

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by