求座標轉換矩陣之奇異值分解法c 實現

2021-10-06 22:36:03 字數 2732 閱讀 5259

功能說明

已知

處於不同座標系下的兩個座標點集a

aa和bbb,

a i∈

r2

a_i\in r^2

ai​∈r2

, b i∈

r2

b_i \in r^2

bi​∈r2

並且滿足以下條件t⋅p

ai=p

bi

t\cdot p_=p_

t⋅pai​

=pbi

轉換矩陣 ttt

c++實現

資料檔案 sample.xy

前兩列為集合a

aa的座標點(xa

i,ya

i)

(x_,y_)

(xai​,

yai​

),後兩列為集合b

bb的座標點(xb

i,yb

i)

(x_,y_)

(xbi​,

ybi​

)

-0.0252359227429 -0.0476232909431 330674.269915 3357812.427190

-0.0407901595465 0.083445758589 330674.275657 3357812.416351

-0.0609007045329 0.214495280716 330674.281479 3357812.405183

-0.083873836225 0.345326492203 330674.287303 3357812.393994

-0.10907351247 0.476001609724 330674.293129 3357812.382816

-0.135304033057 0.606518110971 330674.298937 3357812.371967

-0.163586705944 0.736986275985 330674.304782 3357812.360789

-0.193198426386 0.867483556297 330674.310639 3357812.349578

-0.223337949791 0.99869281889 330674.316531 3357812.338344

-0.254186255713 1.13033062908 330674.322378 3357812.327396

原始碼檔案 convert_frame.cc

#include

#include

"eigen/svd"

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

using

namespace eigen;

intmain

(int argc,

char

** ar**)

}int mrow = pointsnum *2;

matrixxf m

(mrow,4)

; vectorxf rhs

(mrow)

; std::string line;

int i=0;

while

(getline

(cin,line)

) jacobisvd

svd(m, computethinu | computethinv)

; vectorxf x(4

);x = svd.

solve

(rhs)

; matrixxf a(3

,3);

a(0,

0)=x

(0);

a(0,

1)=-

x(1)

;a(0

,2)=

x(2)

;a(1

,0)=

x(1)

;a(1

,1)=

x(0)

;a(1

,2)=

x(3)

;a(2

,0)=

0;a(

2,1)

=0;a

(2,2

)=1;

cout <<

"transform matrix is:"

}

cmakelists.txt

cmake_minimum_required

( version 2.8

)project

( convert )

set(cmake_cxx_flags "$ -std=c++11"

)include_directories

("./include"

)find_package

(eigen3 required)

include_directories($)

add_executable

( convert_frame convert_frame.cc )

矩陣奇異值分解

奇異值分解是線性代數中一種重要的矩陣分解,在訊號處理 統計學等領域有重要應用。定義 設a為m n階矩陣,aha的n個特徵值的非負平方根叫作a的奇異值。記為 i a 如果把aha的特徵值記為 i a 則 i a i aha 1 2 定理 奇異值分解 設a為m n階復矩陣,則存在m階酉陣u和n階酉陣v,...

SVD矩陣奇異值分解

不正之處,歡迎指正!矩陣的奇異值分解是線性代數中一種重要的矩陣分解,在訊號處理,統計學等領域中有著重要的應用。在大學裡面的線性代數的課程中一般都是會有svd分解相關的知識的。但是往往只是涉及到理論上的知識體系,並沒有多少實際應用的背景,所以結果就是學了沒多久就會忘。奇異值分解可以將乙個比較複雜的矩陣...

矩陣的奇異值分解

奇異值分解 singular value decomposition 是線性代數中一種重要的矩陣分解,奇異值分解則是特徵分解在任意矩陣上的推廣。在訊號處理 統計學等領域有重要應用。假設m是乙個m n階矩陣,其中的元素全部屬於域 k,也就是實數域或複數域。如此則存在乙個分解使得 其中u是m m階酉矩陣...