C Eigen庫的學習 6

2021-10-25 12:34:28 字數 4121 閱讀 5132

在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 定義控制台應用程式的入口...