Effacer les filtres
Effacer les filtres

How to plot values from a for loop?

1 vue (au cours des 30 derniers jours)
Ljix
Ljix le 3 Fév 2016
Modifié(e) : Star Strider le 3 Fév 2016
Maybe my question isn't so specific, but I'll try to explain what's giving me a hard time.
I have to calculate
(C/(s*I-A))*B
where A,B and C are matrices and s is a eigenvalue of some given matrix. I have to calculate it for every eigenvalue and plot it. This is what I did
svA=eig(A);
for P=1:50
fr=(CN/(i*svA(P)*eye(n)-A))*B;
fr_org{P}=fr;
end
fr_original=fr_org{1:50};
plot(fr_original)
but I didn't get anything. Any advice?

Réponses (3)

Walter Roberson
Walter Roberson le 3 Fév 2016
Try
fr_original = cell2mat(fr_org);
  3 commentaires
Walter Roberson
Walter Roberson le 3 Fév 2016
plot(fr_original, '*')
Ljix
Ljix le 3 Fév 2016
Now it's working. Thank you.

Connectez-vous pour commenter.


Suresh Garimella
Suresh Garimella le 3 Fév 2016
Modifié(e) : Walter Roberson le 3 Fév 2016
Try this, Hope it works
svA=eig(A);
for P=1:50 fr=(CN/(i*svA(P)*eye(n)-A))*B;
fr_org{P}=fr;
end
%fr_original=fr_org{1:50}; comment this line
fr_original=fr_org; % directly assign
%plot(fr_original) comment this line
plot(cell2mat(fr_original)) % convert class using cell2mat to plot
  1 commentaire
Ljix
Ljix le 3 Fév 2016
Almost what I want. Using
plot(cell2mat(fr_original),'+') gives what I want.

Connectez-vous pour commenter.


Star Strider
Star Strider le 3 Fév 2016
Modifié(e) : Star Strider le 3 Fév 2016
Actually, this is incorrect:
Y = (C/(s*I-A))*B
The correct expression is:
Y = C*((s*I-A)\B)
that you then invert to create:
y = C*expm(A*t)*B
You cannot do what you want to do in the Laplace domain, especially since s = σ + j*ω. You have to invert it to the time domain to do anything with it.
If you want to do a pole-zero plot, there are functions for that such as pzplot in the Control Systems Toolbox.
  2 commentaires
Ljix
Ljix le 3 Fév 2016
Modifié(e) : Ljix le 3 Fév 2016
Thank you. Isn't frequency response given by Y = C*((s*I-A)\B), where s=i*ω and ω is eigenvalue of A? How to plot y = C*expm(A*t)*B? I tried defining t=linspace(0,100,25) and then calculate y as function (as defined) and I got message about dimension error.
Star Strider
Star Strider le 3 Fév 2016
Modifié(e) : Star Strider le 3 Fév 2016
My pleasure.
In a pole-zero plot, σ is the real part, and is the imaginary part. This becomes equivalent to the Fourier transform if you set σ=0.
If you want the Bode plot (frequency response only, along the σ=0 line), use the transfer function representation of your system created from the core MATLAB ss2tf function, then plot it using the Signal Processing Toolbox freqs function.
EDIT — I Answered your question about y = C*expm(A*t)*B*u in How to plot y = C*expm(A*t)*B?

Connectez-vous pour commenter.

Catégories

En savoir plus sur Loops and Conditional Statements 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!

Translated by