How to predict a partial state-space model by specifying an initial state-space model.
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Using this link (https://jp.mathworks.com/help/ident/ref/ssest.html#btpb7ww-5) as a reference, I predicted a state-space model using tt data as gray-box modeling with system identification.
I constructed init_sys and tried to estimate only the "NaN" part of the matrix, leaving the other elements as fixed values.
However, the output matrices were all free coefficients.
How can I estimate only the "NaN" part?
I thought that specifying "NaN" was not a good idea, so I put the nominal values in init_sys, but the output results were exactly the same as the nominal values.
Is it still dependent on the initial value matrix?
Code is following (This is a linear approximation model of cart pole.)
%grayboxmodeling
% State Space
A = [0 1 0 0
0 0 NaN 0
0 0 0 1
0 0 NaN 0];
B = [0
NaN
0
NaN];
C = eye(4);
D = zeros(4,1);
K = zeros(4,4);
x0 = [0;
0;
-0.03;
0];
Ts = 0.02;
init_sys = idss(A,B,C,D,K,x0,Ts);
apar = init_sys.Structure.A;
apar.Free(1,:) = false;
apar.Free(2,1) = false;
apar.Free(2,2) = false;
apar.Free(2,3) = true;
apar.Free(2,4) = false;
apar.Free(3,:) = false;
apar.Free(4,1) = false;
apar.Free(4,2) = false;
apar.Free(4,4) = false;
init_sys.Structure.A = apar;
bpar = init_sys.Structure.B;
bpar.Free(1,1) = false;
bpar.Free(3,1) = false;
init_sys.Structure.B = bpar;
init_sys.Structure.C.Free = false;
sysgray = ssest(tt,init_sys)
0 commentaires
Réponse acceptée
Tianyu
le 1 Mai 2024
NaN is not accepted since the estimation requires a valid initial value to start.
The following code works for me.
%grayboxmodeling
load sdata2 tt2
tt = tt2;
% State Space
A = [0 1 0 0
0 0 1 0
0 0 0 1
0 0 1 0];
B = [0
1
0
1];
C = eye(1,4);
D = zeros(1,1);
K = zeros(4,1);
x0 = [0;
0;
-0.03;
0];
Ts = 0.1;
init_sys = idss(A,B,C,D,K,x0,Ts);
apar = init_sys.Structure.A;
apar.Free(1,:) = false;
apar.Free(2,1) = false;
apar.Free(2,2) = false;
apar.Free(2,3) = true;
apar.Free(2,4) = false;
apar.Free(3,:) = false;
apar.Free(4,1) = false;
apar.Free(4,2) = false;
apar.Free(4,4) = false;
init_sys.Structure.A = apar;
bpar = init_sys.Structure.B;
bpar.Free(1,1) = false;
bpar.Free(3,1) = false;
init_sys.Structure.B = bpar;
init_sys.Structure.C.Free = false;
sysgray = ssest(tt,init_sys)
>> sysgray.A
ans =
0 1.0000 0 0
0 0 2.2653 0
0 0 0 1.0000
0 0 0.2710 0
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Linear Model Identification dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!