A lot of eigenvalues
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hello everybody!
I have many 3x3 matrixes (e.g. 3 000 000 matrixes) and I need to compute their eigenvalues. Nowadays, I'm doing it in loop having 3 000 000 counts, but this way is very time consuming. I'd like to know if there is any possibility how to replace the loop by some matrix operation. For example, I can make a 3x3x3000000 matrix from which I would get the eigenvalues, somehow?
Can anybody help with this?
Thank you in advance,
Tom
1 Kommentar
Oleg Komarov
am 23 Aug. 2011
c(1:3e6) = {rand(3)};
tic
egv = cellfun(@eig,c,'un',0);
toc
23 seconds to me it seems fair.
Akzeptierte Antwort
Doug Hull
am 23 Aug. 2011
This from Oleg seems like an answer, not a comment. I prefer to see questions in the 'answered' state.
c(1:3e6) = {rand(3)};
tic
egv = cellfun(@eig,c,'un',0);
toc
23 seconds to me it seems fair.
3 Kommentare
Weitere Antworten (1)
Daniel Shub
am 24 Aug. 2011
While the loop is ~20% slower on my machine then using cellfun, the answer is in a double array and not a cell array. There may be hidden costs of getting the information from the cell array into a usable form.
N = 3e6;
x = rand(3, 3, N);
tic
egv = zeros(3, N);
for ii = 1:N
egv(:, ii) = eig(x(:, :, ii));
end
toc
0 Kommentare
Siehe auch
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!