Is there faster way to apply `det` function along the third dimension?
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
wei zhang
am 17 Jul. 2020
Kommentiert: wei zhang
am 19 Jul. 2020
I am trying to calculate the det of many 4*4 matrix. I store the data in a matrix with shape 4*4*n. (n =4000000). I am using the for loop to get the result as below. Is there any way to accelerate the progress? Like bsxfun or arrayfun, or some simillar ideas?
v = zeros(length(m),1);
for i=1:size(m,3)
v(i)=det(m(:,:,i));
end
6 Kommentare
Walter Roberson
am 18 Jul. 2020
Bruno's criticism of the precision problems and the high length of the formula for increasing n, are valid criticisms. Generally speaking, it is often the case that making code faster comes at the price of making it less accurate towards the margins. Theoretical definitions that suppose infinite precision get substituted for more nuanced checks that deal with floating-point realities, and time gets saved by not making the checks to figure out what compensation is needed for each case.
If you have some time you should look at how hypot() (finding the length of a hypotenuse) has to be implemented in practice in order to maintain accuracy. Consider sqrt(A^2 + B^2) under the circumstance that A or B is smaller than sqrt(realmin) and so squaring it might underflow to 0...
Akzeptierte Antwort
Bruno Luong
am 17 Jul. 2020
Bearbeitet: Bruno Luong
am 17 Jul. 2020
I would note that Walter's solution that use recursive formal determinant formula might be fast but might be sensitive to umerical errors, that is how I was tough (for medium/large size matrix).
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Number Theory 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!