tformfwd e tforminv: qual è la differenza?
-
20-09-2019 - |
Domanda
Supponiamo di avere una matrice di trasformazione arbitraria A come,
A =
0.9966 0.0007 -6.5625
0.0027 0.9938 1.0598
0 0 1.0000
E un insieme di punti tali che le loro coordinate xey sono rappresentate da X
E Y
rispettivamente.
E supponiamo,
[Xf Yf] = tformfwd(maketform('projective',A),X,Y);
Ora,
[Xff Yff] = tformfwd(maketform('projective',inv(A)),Xf,Yf);
[Xfi Yfi] = tforminv(maketform('projective',A),Xf,Yf);
[Xff Yff]
E [Xfi Yfi]
sembrano essere esattamente gli stessi (e dovrebbero).
È tforminv
è lì solo per comodità o mi sto perdendo qualcosa?
Soluzione
Lo premetterò dicendo che è mio miglior ipotesi...
È possibile che tforminv
possono eseguire la trasformazione senza formare effettivamente la matrice inversa.Ad esempio, puoi risolvere un sistema di equazioni lineari Ax = b
in due modi:
x = inv(A)*b;
x = A\b;
Secondo la documentazione per inv
, la seconda opzione (utilizzando l'operatore di divisione della matrice) può funzionare meglio "sia dal punto di vista del tempo di esecuzione che dell'accuratezza numerica" poiché "produce la soluzione utilizzando l'eliminazione gaussiana, senza formare l'inverso". tforminv
può fare qualcosa di simile e quindi mostrare un comportamento generale migliore rispetto al passaggio della matrice inversa tformfwd
.
Se fossi così propenso, potresti probabilmente provare una serie di diverse matrici di trasformazione e testare i due approcci (tforminv
O tformfwd
E inv
) per vedere quanto sono accurati i risultati e quanto velocemente vengono calcolati.