在eigen中,定義零陣的函式是zeros(),有三種定義方式,如下示例**:
std::cout <<
"固定大小的陣列:\n"
;array33f a1 = array33f::
zero()
;std::cout << a1 <<
"\n\n"
;std::cout <<
"一維動態大小陣列:\n"
;arrayxf a2 = arrayxf::
zero(3
);std::cout << a2 <<
"\n\n"
;std::cout <<
"二維動態大小陣列:\n"
;arrayxxf a3 = arrayxxf::
zero(3
,4);
std::cout << a3 <<
"\n"
;
**輸出如下:
a fixed-size array:00
0000
000a one-dimensional dynamic-size array:00
0a two-dimensional dynamic-size array:00
0000
0000
00
constant([rows],[cols],value)
random()
identity():只能使用與matrix不使用array,因為單位陣是個線性代數概念。
linspaced(size, low, high):從low到high等間距的size長度的序列,適用於vector和一維陣列。
arrayxxf table(10
,4);
table.
col(0)
= arrayxf::
linspaced(10
,0,90
);table.
col(1)
= m_pi /
180* table.
col(0)
;table.
col(2)
= table.
col(1)
.sin()
;table.
col(3)
= table.
col(1)
.cos()
;std::cout <<
" degrees radians sine cosine\n"
;std::cout << table << std::endl;
輸出為:
degrees radians sine cosine
000110
0.175
0.174
0.985
200.349
0.342
0.94
300.524
0.50.866
400.698
0.643
0.766
500.873
0.766
0.643
601.05
0.866
0.570
1.22
0.94
0.342
801.4
0.985
0.174
901.571-
4.37e-08
在eigen中,還提供了特殊矩陣的設定函式:setzero(), matrixbase::setidentity()和 densebase::setlinspaced()。
const
int size =6;
matrixxd mat1
(size, size)
;mat1.
topleftcorner
(size/
2, size/2)
= matrixxd::
zero
(size/
2, size/2)
;mat1.
toprightcorner
(size/
2, size/2)
= matrixxd::
identity
(size/
2, size/2)
;mat1.
bottomleftcorner
(size/
2, size/2)
= matrixxd::
identity
(size/
2, size/2)
;mat1.
bottomrightcorner
(size/
2, size/2)
= matrixxd::
zero
(size/
2, size/2)
;std::cout << mat1 << std::endl << std::endl;
matrixxd mat2
(size, size)
;mat2.
topleftcorner
(size/
2, size/2)
.setzero()
;mat2.
toprightcorner
(size/
2, size/2)
.setidentity()
;mat2.
bottomleftcorner
(size/
2, size/2)
.setidentity()
;mat2.
bottomrightcorner
(size/
2, size/2)
.setzero()
;std::cout << mat2 << std::endl << std::endl;
matrixxd mat3
(size, size)
;mat3 << matrixxd::
zero
(size/
2, size/2)
, matrixxd::
identity
(size/
2, size/2)
, matrixxd::
identity
(size/
2, size/2)
, matrixxd::
zero
(size/
2, size/2)
;std::cout << mat3 << std::endl;
上述**的輸出都是同乙個結果:
000
1000
0001
0000
0011
0000
0010
0000
0100
0
上面的靜態方法如 zero()、constant()並不是直接返回乙個矩陣或陣列,實際上它們返回的是是『expression object』,只是臨時被使用/被用於優化。
matrixxf::constant(3,3,1.2)構建的是乙個3*3的矩陣表示式(臨時變數),為了獲取真正的矩陣需要呼叫finished()函式:
matrixxf mat = matrixxf::
random(2
,3);
std::cout << mat << std::endl << std::endl;
mat =
(matrixxf(2
,2)<<0,
1,1,
0).finished()
* mat;
std::cout << mat << std::endl;
輸出結果為:
0.68
0.566
0.823
-0.211
0.597
-0.605
-0.211
0.597
-0.605
0.68
0.566
0.823
C Eigen 庫的使用
include ros ros.h include include using namespace std using namespace eigen double m pi 3.14159265358979323 double x,y,z,w void test01 基本型別 定義 void te...
c Eigen庫的使用(附demo)
eigen是可以用來進行線性代數,矩陣,向量操作等運算的c 庫,它裡面包含了很多的演算法。矩陣的定義 eigen中關於矩陣類的模板函式中,共有六個模板引數,常用的只有前三個引數,分別為矩陣元素的型別,行數和列數 ps 矩陣定義時可以使用dynatic來表示矩陣的行列數未知。例程 兩個矩陣相乘 inc...
C Eigen庫的配置和基本使用
1.配置 2.配置 資料夾名字較長,解壓後可重新命名,如我命名為eigen3,把d program eigen3新增到visual studio專案屬性裡的庫目錄即可。在程式頭部包含 include 即可使用eigen的各項功能了。2.基本使用 testeigen3.cpp 定義控制台應用程式的入口...