Accessing A and B matrices from discrete state space

조회 수: 6 (최근 30일)
SM
SM 2022년 6월 21일
답변: Balavignesh 2023년 9월 27일
I have written a code to convert continuous time state space models to discrete time using 'tustin' metod. I want to access A and B matrices for each the discretized models. I can access from command window but I want to use them for a later portion of the code. My current code is not giving me10 discretized A and B matrices. Kindly help
clc;
clear all;
A1(:,:,1) =[ 0 1.0000 0;0 0 1.0000; -0.4768 -0.0375 -0.0715];%updated the A matrices, -20 t0 20
A1(:,:,2) =[0 1.0000 0;0 0 1.0000; -0.4875 -0.0383 0];
A1(:,:,3) =[0 1.0000 0;0 0 1.0000; -0.4768 -0.0375 0.0715];
A1(:,:,4) =[0 1.0000 0;0 0 1.0000;0 -9.8100 0];
A1(:,:,5) =[0 1.0000 0;0 0 1.0000;0 -9.8100 0];
A1(:,:,6) =[0 1.0000 0;0 0 1.0000;0 -9.8100 0];
A1(:,:,7) =[0 1.0000 0;0 0 1.0000; 0.4768 -0.0375 0.0715];
A1(:,:,8) =[0 1.0000 0;0 0 1.0000; 0.4875 -0.0383 0];
A1(:,:,9) =[ 0 1.0000 0;0 0 1.0000; 0.4768 -0.0375 -0.0715];
A1(:,:,10)=[0 1.0000 0;0 0 1.0000; 0 -1.3438 -2.5664];
B1=[0;0;1];
C1=[1 0 0];
D1=0;
dt=0.01;
for i=1:10
sys1=ss(A1(:,:,i),B1,C1,D1);
sys2=c2d(sys1,dt,'tustin');
a2(:,:,i)=sys2.a
b2(:,:,i)=sys2.b
end
  댓글 수: 2
Star Strider
Star Strider 2022년 6월 21일
It seems to do what you want when I run it.
Is there something I am missing here?
clc;
clear all;
A1(:,:,1) =[ 0 1.0000 0;0 0 1.0000; -0.4768 -0.0375 -0.0715];%updated the A matrices, -20 t0 20
A1(:,:,2) =[0 1.0000 0;0 0 1.0000; -0.4875 -0.0383 0];
A1(:,:,3) =[0 1.0000 0;0 0 1.0000; -0.4768 -0.0375 0.0715];
A1(:,:,4) =[0 1.0000 0;0 0 1.0000;0 -9.8100 0];
A1(:,:,5) =[0 1.0000 0;0 0 1.0000;0 -9.8100 0];
A1(:,:,6) =[0 1.0000 0;0 0 1.0000;0 -9.8100 0];
A1(:,:,7) =[0 1.0000 0;0 0 1.0000; 0.4768 -0.0375 0.0715];
A1(:,:,8) =[0 1.0000 0;0 0 1.0000; 0.4875 -0.0383 0];
A1(:,:,9) =[ 0 1.0000 0;0 0 1.0000; 0.4768 -0.0375 -0.0715];
A1(:,:,10)=[0 1.0000 0;0 0 1.0000; 0 -1.3438 -2.5664];
B1=[0;0;1];
C1=[1 0 0];
D1=0;
dt=0.01;
for i=1:10
fprintf('Iteration %2d —————',i)
sys1=ss(A1(:,:,i),B1,C1,D1);
sys2{i}=c2d(sys1,dt,'tustin');
a2(:,:,i)=sys2{i}.a
b2(:,:,i)=sys2{i}.b
end
Iteration 1 —————
a2 = 3×3
1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0048 -0.0004 0.9993
b2 = 3×1
0.0000 0.0000 0.0100
Iteration 2 —————
a2 =
a2(:,:,1) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0048 -0.0004 0.9993 a2(:,:,2) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0049 -0.0004 1.0000
b2 =
b2(:,:,1) = 0.0000 0.0000 0.0100 b2(:,:,2) = 0.0000 0.0000 0.0100
Iteration 3 —————
a2 =
a2(:,:,1) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0048 -0.0004 0.9993 a2(:,:,2) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0049 -0.0004 1.0000 a2(:,:,3) = 1.0000 0.0100 0.0001 -0.0000 1.0000 0.0100 -0.0048 -0.0004 1.0007
b2 =
b2(:,:,1) = 0.0000 0.0000 0.0100 b2(:,:,2) = 0.0000 0.0000 0.0100 b2(:,:,3) = 0.0000 0.0001 0.0100
Iteration 4 —————
a2 =
a2(:,:,1) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0048 -0.0004 0.9993 a2(:,:,2) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0049 -0.0004 1.0000 a2(:,:,3) = 1.0000 0.0100 0.0001 -0.0000 1.0000 0.0100 -0.0048 -0.0004 1.0007 a2(:,:,4) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995
b2 =
b2(:,:,1) = 0.0000 0.0000 0.0100 b2(:,:,2) = 0.0000 0.0000 0.0100 b2(:,:,3) = 0.0000 0.0001 0.0100 b2(:,:,4) = 0.0000 0.0000 0.0100
Iteration 5 —————
a2 =
a2(:,:,1) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0048 -0.0004 0.9993 a2(:,:,2) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0049 -0.0004 1.0000 a2(:,:,3) = 1.0000 0.0100 0.0001 -0.0000 1.0000 0.0100 -0.0048 -0.0004 1.0007 a2(:,:,4) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,5) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995
b2 =
b2(:,:,1) = 0.0000 0.0000 0.0100 b2(:,:,2) = 0.0000 0.0000 0.0100 b2(:,:,3) = 0.0000 0.0001 0.0100 b2(:,:,4) = 0.0000 0.0000 0.0100 b2(:,:,5) = 0.0000 0.0000 0.0100
Iteration 6 —————
a2 =
a2(:,:,1) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0048 -0.0004 0.9993 a2(:,:,2) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0049 -0.0004 1.0000 a2(:,:,3) = 1.0000 0.0100 0.0001 -0.0000 1.0000 0.0100 -0.0048 -0.0004 1.0007 a2(:,:,4) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,5) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,6) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995
b2 =
b2(:,:,1) = 0.0000 0.0000 0.0100 b2(:,:,2) = 0.0000 0.0000 0.0100 b2(:,:,3) = 0.0000 0.0001 0.0100 b2(:,:,4) = 0.0000 0.0000 0.0100 b2(:,:,5) = 0.0000 0.0000 0.0100 b2(:,:,6) = 0.0000 0.0000 0.0100
Iteration 7 —————
a2 =
a2(:,:,1) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0048 -0.0004 0.9993 a2(:,:,2) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0049 -0.0004 1.0000 a2(:,:,3) = 1.0000 0.0100 0.0001 -0.0000 1.0000 0.0100 -0.0048 -0.0004 1.0007 a2(:,:,4) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,5) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,6) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,7) = 1.0000 0.0100 0.0001 0.0000 1.0000 0.0100 0.0048 -0.0004 1.0007
b2 =
b2(:,:,1) = 0.0000 0.0000 0.0100 b2(:,:,2) = 0.0000 0.0000 0.0100 b2(:,:,3) = 0.0000 0.0001 0.0100 b2(:,:,4) = 0.0000 0.0000 0.0100 b2(:,:,5) = 0.0000 0.0000 0.0100 b2(:,:,6) = 0.0000 0.0000 0.0100 b2(:,:,7) = 0.0000 0.0001 0.0100
Iteration 8 —————
a2 =
a2(:,:,1) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0048 -0.0004 0.9993 a2(:,:,2) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0049 -0.0004 1.0000 a2(:,:,3) = 1.0000 0.0100 0.0001 -0.0000 1.0000 0.0100 -0.0048 -0.0004 1.0007 a2(:,:,4) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,5) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,6) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,7) = 1.0000 0.0100 0.0001 0.0000 1.0000 0.0100 0.0048 -0.0004 1.0007 a2(:,:,8) = 1.0000 0.0100 0.0000 0.0000 1.0000 0.0100 0.0049 -0.0004 1.0000
b2 =
b2(:,:,1) = 0.0000 0.0000 0.0100 b2(:,:,2) = 0.0000 0.0000 0.0100 b2(:,:,3) = 0.0000 0.0001 0.0100 b2(:,:,4) = 0.0000 0.0000 0.0100 b2(:,:,5) = 0.0000 0.0000 0.0100 b2(:,:,6) = 0.0000 0.0000 0.0100 b2(:,:,7) = 0.0000 0.0001 0.0100 b2(:,:,8) = 0.0000 0.0000 0.0100
Iteration 9 —————
a2 =
a2(:,:,1) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0048 -0.0004 0.9993 a2(:,:,2) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0049 -0.0004 1.0000 a2(:,:,3) = 1.0000 0.0100 0.0001 -0.0000 1.0000 0.0100 -0.0048 -0.0004 1.0007 a2(:,:,4) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,5) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,6) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,7) = 1.0000 0.0100 0.0001 0.0000 1.0000 0.0100 0.0048 -0.0004 1.0007 a2(:,:,8) = 1.0000 0.0100 0.0000 0.0000 1.0000 0.0100 0.0049 -0.0004 1.0000 a2(:,:,9) = 1.0000 0.0100 0.0000 0.0000 1.0000 0.0100 0.0048 -0.0004 0.9993
b2 =
b2(:,:,1) = 0.0000 0.0000 0.0100 b2(:,:,2) = 0.0000 0.0000 0.0100 b2(:,:,3) = 0.0000 0.0001 0.0100 b2(:,:,4) = 0.0000 0.0000 0.0100 b2(:,:,5) = 0.0000 0.0000 0.0100 b2(:,:,6) = 0.0000 0.0000 0.0100 b2(:,:,7) = 0.0000 0.0001 0.0100 b2(:,:,8) = 0.0000 0.0000 0.0100 b2(:,:,9) = 0.0000 0.0000 0.0100
Iteration 10 —————
a2 =
a2(:,:,1) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0048 -0.0004 0.9993 a2(:,:,2) = 1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0049 -0.0004 1.0000 a2(:,:,3) = 1.0000 0.0100 0.0001 -0.0000 1.0000 0.0100 -0.0048 -0.0004 1.0007 a2(:,:,4) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,5) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,6) = 1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995 a2(:,:,7) = 1.0000 0.0100 0.0001 0.0000 1.0000 0.0100 0.0048 -0.0004 1.0007 a2(:,:,8) = 1.0000 0.0100 0.0000 0.0000 1.0000 0.0100 0.0049 -0.0004 1.0000 a2(:,:,9) = 1.0000 0.0100 0.0000 0.0000 1.0000 0.0100 0.0048 -0.0004 0.9993 a2(:,:,10) = 1.0000 0.0100 0.0000 0 0.9999 0.0099 0 -0.0133 0.9746
b2 =
b2(:,:,1) = 0.0000 0.0000 0.0100 b2(:,:,2) = 0.0000 0.0000 0.0100 b2(:,:,3) = 0.0000 0.0001 0.0100 b2(:,:,4) = 0.0000 0.0000 0.0100 b2(:,:,5) = 0.0000 0.0000 0.0100 b2(:,:,6) = 0.0000 0.0000 0.0100 b2(:,:,7) = 0.0000 0.0001 0.0100 b2(:,:,8) = 0.0000 0.0000 0.0100 b2(:,:,9) = 0.0000 0.0000 0.0100 b2(:,:,10) = 0.0000 0.0000 0.0099
.
SM
SM 2022년 6월 22일
편집: SM 2022년 6월 22일
I was trying to access all 10 As and Bs simultaneously and not iteration wise. So that I can use these later. With this kind of indexing it gets a bit confusing. I wanted something like:
a2(:,:,1)=
b2(:,:,1)=
a2(:,:,2)=
b2(:,:,2)=
a2(:,:,3)=
b2(:,:,3)=
...
a2(:,:,10)=
b2(:,:,10)=

댓글을 달려면 로그인하십시오.

채택된 답변

Balavignesh
Balavignesh 2023년 9월 27일
Hi SM,
As per my understanding, you have converted ten models from continuous state space to discrete state space using ‘tustin’ and you would like to display the discretized state space matrices ‘a2’ and ‘b2’ for each model simultaneously.
I would suggest you to pre-allocate the discretized state-space matrices 'a2' and 'b2' for faster computation.
You can display 'a2' and 'b2' for each model simultaneously in another 'for' loop using the 'fprintf' and 'disp' functions.
Here is an example showing how you can achieve this:
clc;
clear all;
A1(:,:,1) =[ 0 1.0000 0;0 0 1.0000; -0.4768 -0.0375 -0.0715];%updated the A matrices, -20 t0 20
A1(:,:,2) =[0 1.0000 0;0 0 1.0000; -0.4875 -0.0383 0];
A1(:,:,3) =[0 1.0000 0;0 0 1.0000; -0.4768 -0.0375 0.0715];
A1(:,:,4) =[0 1.0000 0;0 0 1.0000;0 -9.8100 0];
A1(:,:,5) =[0 1.0000 0;0 0 1.0000;0 -9.8100 0];
A1(:,:,6) =[0 1.0000 0;0 0 1.0000;0 -9.8100 0];
A1(:,:,7) =[0 1.0000 0;0 0 1.0000; 0.4768 -0.0375 0.0715];
A1(:,:,8) =[0 1.0000 0;0 0 1.0000; 0.4875 -0.0383 0];
A1(:,:,9) =[ 0 1.0000 0;0 0 1.0000; 0.4768 -0.0375 -0.0715];
A1(:,:,10)=[0 1.0000 0;0 0 1.0000; 0 -1.3438 -2.5664];
B1=[0;0;1];
C1=[1 0 0];
D1=0;
dt=0.01;
% Pre-allocating the discretized state-space matrices
a2 = zeros(3,3,10);
b2 = zeros(3,1,10);
for i=1:10
sys1=ss(A1(:,:,i),B1,C1,D1);
sys2=c2d(sys1,dt,'tustin');
a2(:,:,i)=sys2.a;
b2(:,:,i)=sys2.b;
end
% Display the desired using another 'for' loop
for i = 1:10
fprintf("a2(:,:,%d) = ",i);
disp(a2(:,:,i));
fprintf("b2(:,:,%d) = ",i);
disp(b2(:,:,i));
end
a2(:,:,1) =
1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0048 -0.0004 0.9993
b2(:,:,1) =
0.0000 0.0000 0.0100
a2(:,:,2) =
1.0000 0.0100 0.0000 -0.0000 1.0000 0.0100 -0.0049 -0.0004 1.0000
b2(:,:,2) =
0.0000 0.0000 0.0100
a2(:,:,3) =
1.0000 0.0100 0.0001 -0.0000 1.0000 0.0100 -0.0048 -0.0004 1.0007
b2(:,:,3) =
0.0000 0.0001 0.0100
a2(:,:,4) =
1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995
b2(:,:,4) =
0.0000 0.0000 0.0100
a2(:,:,5) =
1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995
b2(:,:,5) =
0.0000 0.0000 0.0100
a2(:,:,6) =
1.0000 0.0100 0.0000 0 0.9995 0.0100 0 -0.0981 0.9995
b2(:,:,6) =
0.0000 0.0000 0.0100
a2(:,:,7) =
1.0000 0.0100 0.0001 0.0000 1.0000 0.0100 0.0048 -0.0004 1.0007
b2(:,:,7) =
0.0000 0.0001 0.0100
a2(:,:,8) =
1.0000 0.0100 0.0000 0.0000 1.0000 0.0100 0.0049 -0.0004 1.0000
b2(:,:,8) =
0.0000 0.0000 0.0100
a2(:,:,9) =
1.0000 0.0100 0.0000 0.0000 1.0000 0.0100 0.0048 -0.0004 0.9993
b2(:,:,9) =
0.0000 0.0000 0.0100
a2(:,:,10) =
1.0000 0.0100 0.0000 0 0.9999 0.0099 0 -0.0133 0.9746
b2(:,:,10) =
0.0000 0.0000 0.0099
Please refer to the following documentation links to know more about

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

제품


릴리스

R2015b

Community Treasure Hunt

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

Start Hunting!

Translated by