2009-10-07 6 views
1

Предположим, что у меня есть произвольное преобразование матрицы А, такой как,tformfwd и tforminv - в чем разница?

A = 

    0.9966 0.0007 -6.5625 
    0.0027 0.9938 1.0598 
     0   0 1.0000 

и набор точек таких, что их х и у координаты представлены 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 только что для удобства или я чего-то не хватает?

+0

это, похоже, работает для проективных преобразований, но как насчет других типов преобразования (помните, что ** maketform ** может принимать определяемое пользователем преобразование, следовательно, обратное преобразование не всегда соответствует inv (A))? – Amro

+0

Да, я полностью согласен. Но меня интересует только этот сценарий. – Jacob

ответ

2

Я предварить это тем, что это мой догадка ...

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

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

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

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

+0

Спасибо, я искал ответ в этих строках – Jacob

+0

Я проверял их на точность, и они такие же (меня сейчас не интересует скорость, просто точность). – Jacob

+0

@Jacob: Если бы вы использовали матрицу преобразования, которая была плохо обусловлена ​​(т. Е. Близка, но не совсем, сингулярна), эти два метода могут отображать разные результаты. – gnovice