tformfwd y tforminv - ¿cuál es la diferencia?
-
20-09-2019 - |
Pregunta
Supongamos que tengo una transformación arbitraria matriz A tal como,
A =
0.9966 0.0007 -6.5625
0.0027 0.9938 1.0598
0 0 1.0000
Y un conjunto de puntos tales que su coordenadas X e Y están representados por X
y Y
respectivamente.
Y supongamos,
[Xf Yf] = tformfwd(maketform('projective',A),X,Y);
Ahora,
[Xff Yff] = tformfwd(maketform('projective',inv(A)),Xf,Yf);
[Xfi Yfi] = tforminv(maketform('projective',A),Xf,Yf);
[Xff Yff]
y [Xfi Yfi]
parecen ser exactamente el mismo (y deberían).
Es tforminv
allí sólo por conveniencia o me estoy perdiendo algo aquí?
Solución
Voy a aclarar esto diciendo que es mi mejor conjetura ...
Es posible que tforminv
puede realizar la transformación sin realmente formando la matriz inversa. Por ejemplo, se puede resolver un sistema de ecuaciones lineales Ax = b
de dos maneras:
x = inv(A)*b;
x = A\b;
De acuerdo con la documentación de inv
, la segunda opción ( usando el operador de división de la matriz) puede realizar mejor "tanto desde el punto de vista de tiempo de ejecución y precisión numérica", ya que "produce la solución usando la eliminación gaussiana, sin formar la inversa". tforminv
puede hacer algo similar y por lo tanto mostrar un mejor comportamiento global en comparación con el paso de la matriz inversa a tformfwd
.
Si usted fuera tan inclinado, que probablemente se podría tratar de un número de diferentes matrices de transformación y probar los dos enfoques (tforminv
o tformfwd
y inv
) para ver cómo precisa los resultados son y qué tan rápido son cada calculan.