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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top