Eu tenho que fazer uma transformação de coordenadas entre dois sistemas de referência (eixos). Para isso, três matrizes ( ) devem ser multiplicadas devido ao uso de alguns eixos intermediários. Pensei em duas abordagens para resolver isso:
Método # 1 : Fazendo a multiplicação diretamente, ou seja,
Método # 2 : Divida em etapas:
Onde:
, e são matrizesR 3 3 × 3
v i v 3 i v 23 3 × 1 , , , são vetores
Gostaria de saber qual método é mais eficiente computacionalmente (menos tempo) para fazer a transformação (isso será feito várias vezes).
matrix
performance
matlab
julianfperez
fonte
fonte
Respostas:
Para descobrir em geral como medir o impacto de pequenas diferenças de programação em cálculos em larga escala, escreva no prompt do Matlab '' perfil de ajuda ''.
fonte
Para iniciantes, eu não usaria variáveis intermediárias, mas colchetes. A menos, é claro, que você esteja interessado nos resultados intermediários, mas acho que não.
Eu tentei o seguinte no Matlab:
Devo dizer, porém, que isso é bastante assustador. Eu sempre assumi que o Matlab seria inteligente em relação à ordem de multiplicação da matriz, pois esse é um problema conhecido com soluções simples e eficientes.
fonte
Como as matrizes são muito pequenas, todo o custo será pago em excesso. Se você realizar a transformação várias vezes, será mais rápido pré-calcular
D=A*B*C
uma vez e depois aplicar cada vetorv_f=D*v_i
. Você também pode considerar trazer isso para um arquivo mex.fonte