Muszę dokonać transformacji współrzędnych między dwoma układami odniesienia (osiami). W tym celu należy pomnożyć trzy macierze ( ) ze względu na zastosowanie niektórych osi pośrednich. Pomyślałem o dwóch podejściach do rozwiązania tego:
Metoda nr 1 : Wykonanie mnożenia bezpośrednio, to znaczy
Metoda nr 2 : Podziel się na kroki:
gdzie:
, R 2 i R 3 są 3 x 3 matryce
, v i , v 3 i , v 23 towektory 3 × 1
Chciałbym wiedzieć, która metoda jest bardziej wydajna obliczeniowo (mniej czasu) na wykonanie transformacji (będzie to robione wiele razy).
matrix
performance
matlab
julianfperez
źródło
źródło
Odpowiedzi:
Aby ogólnie dowiedzieć się, jak zmierzyć wpływ niewielkich różnic programistycznych na obliczenia na dużą skalę, napisz w wierszu polecenia Matlab „profil pomocy”.
źródło
Na początek nie używałbym zmiennych pośrednich, ale nawiasów. Chyba, że oczywiście interesują cię wyniki pośrednie, ale chyba nie.
Próbowałem następujące w Matlab:
Muszę jednak powiedzieć, że jest to dość przerażające. Zawsze zakładałem, że Matlab byłby mądry w kwestii kolejności mnożenia macierzy, ponieważ jest to znany problem z prostymi i wydajnymi rozwiązaniami.
źródło
Ponieważ matryce są tak małe, cały koszt będzie narzut na połączenie. Jeśli wykonasz transformację wiele razy, szybsze będzie wstępne obliczenie
D=A*B*C
raz, a następnie dla każdego wektora zastosujv_f=D*v_i
. Możesz również rozważyć przeniesienie tego do pliku mex.źródło