How to plot values from a for loop?

조회 수: 12 (최근 30일)
Ljix
Ljix 2016년 2월 3일
편집: Star Strider 2016년 2월 3일
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?

답변 (3개)

Walter Roberson
Walter Roberson 2016년 2월 3일
Try
fr_original = cell2mat(fr_org);
  댓글 수: 3
Walter Roberson
Walter Roberson 2016년 2월 3일
plot(fr_original, '*')
Ljix
Ljix 2016년 2월 3일
Now it's working. Thank you.

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


Suresh Garimella
Suresh Garimella 2016년 2월 3일
편집: Walter Roberson 2016년 2월 3일
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
Ljix
Ljix 2016년 2월 3일
Almost what I want. Using
plot(cell2mat(fr_original),'+') gives what I want.

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


Star Strider
Star Strider 2016년 2월 3일
편집: Star Strider 2016년 2월 3일
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
Ljix
Ljix 2016년 2월 3일
편집: Ljix 2016년 2월 3일
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 2016년 2월 3일
편집: Star Strider 2016년 2월 3일
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?

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

카테고리

Help CenterFile Exchange에서 Mathematics에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by