Most efficient way to do matrix operation v'*M*v

2 Ansichten (letzte 30 Tage)
Glen
Glen am 18 Sep. 2014
Beantwortet: Roger Stafford am 18 Sep. 2014
Hi all,
i have a problem where I need to do the following operation:
R is a square matrix
V is a nonsquare matrix
The operation is to multiply 1 - V(i, :)*inv( R )*V(i, :)', and store the result for each i.
Right now I'm doing it using a for loop:
Rinv = inv( R );
for i=1:n
val(i) = 1 - Z(i, :)*Rinv*Z(i, :)';
end
My problem requires performing this calculation a few million times and I'm trying to optimize it as much as possible. Is there a way to get rid of the for loop? I could do V*inv( R )*V', but that performs a lot more inner products than I actually need.
Thanks for the help.

Akzeptierte Antwort

Roger Stafford
Roger Stafford am 18 Sep. 2014
Assuming the values in V are real,
val = 1-sum((V/R).*V,2);
If V has complex-valued elements, change that to
val = 1-sum((V/R).*conj(V),2);
Note that V must have the same number of columns as R has rows and columns.

Weitere Antworten (0)

Kategorien

Mehr zu Operating on Diagonal Matrices 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