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í?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top