tformfwd и tforminv - какая разница? - PullRequest
1 голос
/ 08 октября 2009

Предположим, у меня есть произвольная матрица преобразования A, например,

A =

    0.9966    0.0007   -6.5625
    0.0027    0.9938    1.0598
         0         0    1.0000

И набор точек такой, что их координаты x и y представлены X и Y соответственно.

И предположим,

[Xf Yf] = tformfwd(maketform('projective',A),X,Y);

Теперь

[Xff Yff] = tformfwd(maketform('projective',inv(A)),Xf,Yf);
[Xfi Yfi] = tforminv(maketform('projective',A),Xf,Yf); 

[Xff Yff] и [Xfi Yfi] кажутся абсолютно одинаковыми (и они должны).

tforminv просто для удобства или я что-то здесь упускаю?

1 Ответ

2 голосов
/ 08 октября 2009

Я предвосхищу это, говоря, что это мое лучшее предположение ...

Возможно, что tforminv может выполнить преобразование без фактического формирования обратной матрицы. Например, вы можете решить систему линейных уравнений Ax = b двумя способами:

x = inv(A)*b;
x = A\b;

Согласно документации для inv, второй вариант (с использованием оператора матричного деления) может работать лучше «как с точки зрения времени выполнения, так и с точки зрения точности чисел», поскольку он «дает решение с использованием гауссовского устранение, не образуя обратного ". tforminv может сделать что-то подобное и, таким образом, показать лучшее общее поведение по сравнению с передачей обратной матрицы к tformfwd.

Если бы вы были так склонны, вы, вероятно, могли бы попробовать несколько различных матриц преобразования и протестировать два подхода (tforminv или tformfwd и inv), чтобы увидеть, насколько точны результаты и насколько они быстрыми. вычисленное.

...