calculate the Γ matrix in MATLAB from Φ Matrix - State space equation
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Could you please advise me if there is a function to calculate the Γ matrix in MATLAB from Φ Matrix?
5 commentaires
Paul
le 9 Juin 2022
So the goal is to compute phi and gamma from A and B?
Why is phi computed twice in the same way in the code above, but the code doesn't compute gamma.
Is a symbolic solution desired? Or a numerical solution for a specified value of the sampling period, T?
Réponse acceptée
Paul
le 10 Juin 2022
Let's see what we have so far:
A = [0 1; -1 -1];
b = [0;1];
I = eye(2);
syms s;
LaplaceTransitionMatrix = (s*I-A)^-1
phi = ilaplace(LaplaceTransitionMatrix)
Note that phi is a function of t, because that's the default variable for ilaplace(). But we can replace that with T
syms t T
phi = subs(phi,t,T)
Now that we have phi, do you have a formula for gamma? If so, the code you're trying to use to implement that formula.
4 commentaires
Paul
le 10 Juin 2022
Modifié(e) : Paul
le 11 Juin 2022
Ok. Let's see how we can solve the problem a couple of ways in Matlab
A = [0 1; -1 -1];
B = [0;1];
I = eye(2);
syms s
LaplaceTransitionMatrix = (s*I-A)^-1;
phi = ilaplace(LaplaceTransitionMatrix);
syms t T
phi = subs(phi,t,T);
Compute gamma via its defining integral
syms tau
gamma1 = simplify(int(subs(phi,T,tau)*B,tau,0,T))
With A invertible, compute gamma via the very cool equation provide by @Sam Chak
gamma2 = simplify(A\(phi - I)*B)
We can also compute phi and gamma simultaneously
temp = expm([A*T B*T;zeros(1,3)]);
phi3 = simplify(rewrite(temp(1:2,1:2),'sincos'),100)
gamma3 = simplify(expand(rewrite(temp(1:2,3),'sincos')),100,'Criterion','PreferReal')
I don't know why it's so difficult to get gamma3 into simpler form, but it is the same as gamma2
simplify(gamma3 - gamma2)
Get the numerical representation assuming a sampling period of T = 0.1
vpa(subs(phi,T,0.1),4)
vpa(subs(gamma1,T,0.1),4)
Show that phi and gamma can be computed numerically.
First approach
T = 0.1;
phi = expm(A*T)
gamma1 = integral(@(tau) (expm(A*tau)*B),0,T,'ArrayValued',true)
gamma2 = A\(phi - eye(2))*B
temp = expm([A*T B*T;zeros(1,3)]);
phi3 = temp(1:2,1:2)
gamma3 = temp(1:2,3)
Plus de réponses (1)
Sam Chak
le 10 Juin 2022
Thanks for showing your calculation of the Gamma or Γ, I see now... Given the matrices
and
, you want to go from the continuous-time
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1027070/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1027075/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1027080/image.png)
to the discrete-time
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1027085/image.png)
where
, to obtain
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1027090/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1027095/image.png)
in terms of the sampling period T.
Since
, and
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1027100/image.png)
if what I think about what you want is correct, then you may use this:
syms T
A = [0 1; -1 -1]
B = [0; 1]
Ad = expm(A*T)
Bd = A\(Ad - eye(size(A)))*B
Ad = simplify(Ad)
Bd = simplify(Bd)
6 commentaires
Paul
le 11 Juin 2022
At the risk of stating the obvious, need to enusre that A is invertible before using this equation in Matlab.
Also, something changed between 2022a and 2021b.
Running here on Answers with 2022a with A singular:
A = [1 1;0 0];
syms T
A\(expm(A*T-eye(2)))
But when I run this same problem on my local installation of 2021b I get
>> A = [1 1; 0 0];
>> syms T
>> A\(expm(A*T) - eye(2))
Warning: Solution is not unique because the system is rank-deficient.
> In symengine
In sym/privBinaryOp (line 1136)
In \ (line 497)
ans =
[exp(T) - 1, exp(T) - 1]
[ 0, 0]
Voir également
Catégories
En savoir plus sur Linear Algebra 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!