Borrar filtros
Borrar filtros

How to plot values from a for loop?

1 visualización (últimos 30 días)
Ljix
Ljix el 3 de Feb. de 2016
Editada: Star Strider el 3 de Feb. de 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?

Respuestas (3)

Walter Roberson
Walter Roberson el 3 de Feb. de 2016
Try
fr_original = cell2mat(fr_org);
  3 comentarios
Walter Roberson
Walter Roberson el 3 de Feb. de 2016
plot(fr_original, '*')
Ljix
Ljix el 3 de Feb. de 2016
Now it's working. Thank you.

Iniciar sesión para comentar.


Suresh Garimella
Suresh Garimella el 3 de Feb. de 2016
Editada: Walter Roberson el 3 de Feb. de 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 comentario
Ljix
Ljix el 3 de Feb. de 2016
Almost what I want. Using
plot(cell2mat(fr_original),'+') gives what I want.

Iniciar sesión para comentar.


Star Strider
Star Strider el 3 de Feb. de 2016
Editada: Star Strider el 3 de Feb. de 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 comentarios
Ljix
Ljix el 3 de Feb. de 2016
Editada: Ljix el 3 de Feb. de 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 el 3 de Feb. de 2016
Editada: Star Strider el 3 de Feb. de 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?

Iniciar sesión para comentar.

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by