How to vectorize a for-loop?

4 Ansichten (letzte 30 Tage)
Samuel Hammarberg
Samuel Hammarberg am 18 Mai 2013
Hello!
I would appreaciate any help vectorizing the for loop below. The problem i cannot solve is how to take out the constants from wdrive and multiply it with the rest, according to the loop below. I want to become better at vectorizing my MATLAB code so I would really appreciate any help! Thanks alot!
%S and R are square matrices (404*404).
%fc is a column vector
wdrive=0:1:800;
a2=zeros(2*dofs,(length(wdrive)));
b2=zeros(2*dofs,(length(wdrive)));
Amp=zeros(1,length(wdrive));
SRS=S*(R\S);
SRfc=S*(R\fc);
for i=1:length(wdrive)
a2(:,i)=(wdrive(i)^2*SRS+R)\(fs-wdrive(i)*SRfc);
b2(:,i)=(R)\(fc+wdrive(i)*S*a2(:,i));
Amp(i)=sqrt(a2(dofs-1,i)^2+b2(dofs-1,i)^2);
end
  2 Kommentare
Matt J
Matt J am 18 Mai 2013
What is "fs"?
Samuel Hammarberg
Samuel Hammarberg am 18 Mai 2013
Ops! Forgot to specify that. Fc is a column vector with the same size as Fs.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Matt J
Matt J am 18 Mai 2013
Bearbeitet: Matt J am 18 Mai 2013
I don't think you can vectorize everything, but you can cut down on the operations done inside the loop,
Rfc=R\fc;
SRS=S*(R\S);
SRfc=S*(Rfc);
rhs=bsxfun(@minus,fs,SRfc*wdrive);
for i=1:length(wdrive)
a2(:,i)=(wdrive(i)^2*SRS+R)\rhs(:,i);
end
b2=Rfc+R\S*bsxfun(@times, wdrive, a2);
Amp=abs(a2(dofs-1,:)+i*b2(dofs-1,:));
  5 Kommentare
Matt J
Matt J am 19 Mai 2013
The for-loop isn't slowing you down significantly. You just have a lot of matrix inversions
(wdrive(i)^2*SRS+R)
to do. There's no simplification to this that I can see, unless there is some special structure in S and R that you haven't mentioned.
Matt J
Matt J am 19 Mai 2013
You could also try parfor, if you have the Parallel Computing Toolbox.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Samuel Hammarberg
Samuel Hammarberg am 18 Mai 2013
Bearbeitet: Matt J am 19 Mai 2013
Relocated to Comment by Matt J

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by