TFormFWD e TFormInv - Qual é a diferença?
-
20-09-2019 - |
Pergunta
Suponha que eu tenha uma matriz de transformação arbitrária a como,
A =
0.9966 0.0007 -6.5625
0.0027 0.9938 1.0598
0 0 1.0000
E um conjunto de pontos de modo que suas coordenadas X e Y sejam representadas por X
e Y
respectivamente.
E suponha,
[Xf Yf] = tformfwd(maketform('projective',A),X,Y);
Agora,
[Xff Yff] = tformfwd(maketform('projective',inv(A)),Xf,Yf);
[Xfi Yfi] = tforminv(maketform('projective',A),Xf,Yf);
[Xff Yff]
e [Xfi Yfi]
parece ser exatamente o mesmo (e eles deveriam).
É tforminv
Apenas lá por conveniência ou estou perdendo alguma coisa aqui?
Solução
Vou prefácio dizendo que é meu melhor chute...
É possível que tforminv
pode realizar a transformação sem realmente formar a matriz inversa. Por exemplo, você pode resolver um sistema de equações lineares Ax = b
de duas maneiras:
x = inv(A)*b;
x = A\b;
De acordo com a documentação para inv
, a segunda opção (usando o operador da divisão Matrix) pode ter um desempenho melhor ", tanto do tempo de execução quanto do ponto de vista da precisão numérica", pois "produz a solução usando a eliminação gaussiana, sem formar o inverso". tforminv
pode fazer algo semelhante e, portanto, mostrar um melhor comportamento geral em comparação com a passagem da matriz inversa a tformfwd
.
Se você estivesse tão inclinado, provavelmente poderia tentar várias matrizes de transformação diferentes e testar as duas abordagens (tforminv
ou tformfwd
e inv
) para ver o quão precisa os resultados são e a rapidez com que cada um é calculado.