EIgen基本運算學習

2022-08-27 06:15:08 字數 1577 閱讀 2349

使用c++ eigen庫求解線性方程組ax=b

在使用動態矩陣的時候發現乙個問題,在無法知道大小的時候直接初始化

int rows,cols;//從其他地方獲取的尺寸行列數

eigen::matrixxf tmp_mat;

tmp_mat=eigen::matrix::zero();

會報錯提示,初始化的時候必須使用const常量

這裡的rows,cols必須使用常量,不能使用變數。

但是這個時候不知道應該是多少數值。所以可以如下使用:

int rows,cols;//從其他地方獲取的尺寸行列數

eigen::matrixxf tmp_mat;

tmp_mat=eigen::matrix();

tmp_mat.resize(rows,cols);

對於大型矩陣 (一般行列超過32),考慮使用 dynamic,

定義方式如下:

matrixmatrix_name (row_num,col_num);
如果沒有 (row_num,col_num)

會報錯:

assertion `row >= 0 && row < rows() … failed.
如果矩陣的尺寸在編譯的時候是不確定的,而在執行的時候才能確定,eigen提供了定義動態大小的方法。比如非常好用的:

typedef matrixmatrixxd;
matrixxd定義了任意行數和列數的矩陣,可以在執行時確定。

類似地,對於向量有:

typedef matrixvectorxi ;
也可以對於乙個維度確定,而指定另外乙個維度是動態大小的。

matrix矩陣的行數是 3,列數不確定。
使用eigen庫和c++隨機數機制,產生正態分佈的隨機矩陣

eigen中只有產生均勻分布隨機矩陣的random(),沒有其他分布型別的隨機矩陣函式。

借助eigen提供的unaryexpr函式,可以對矩陣的每乙個元素進行同乙個操作。unaryexpr接受乙個函式物件作為引數,該函式物件定義了所要對元素進行的運算。因此,我們只需要定乙個產生隨機數的函式物件,將其作為引數傳給unaryexpr,即可對矩陣每乙個元素產生隨機數。可以用lambda表示式作為函式物件,也可以定義乙個函式,並用ptr_fun()函式將函式指標轉成函式物件。下面給出這兩種方式的實現。

eigen::matrixx_qr(rows,1);

x_qr = a.colpivhouseholderqr().solve(b);

cout<<"original: x_qr:"quaternion (const scalar &w, const scalar &x, const scalar &y, const scalar &z)

注意w在前。然而在內部儲存時eigen將四元數的w放在最後.

例如通過eigen::vector4d q = q_ab.coeffs();訪問時,q中的最後乙個元素才是w。

eigen向量計算 EIgen基本運算學習

向量向量平方和 矩陣動態矩陣 在使用動態矩陣的時候發現乙個問題,在無法知道大小的時候直接初始化 int rows,cols 從其他地方獲取的尺寸行列數 eigen matrixxf tmp mat tmp mat eigen matrix zero 會報錯提示,初始化的時候必須使用const常量 這...

位運算學習筆記

1.補碼 補碼是為了表示乙個負數的二進位制形式。其轉化方式是,先將負數當成正數,轉化成二進位制的形式,再將二進位制正數的各個位上取反,再加上 例如 5先求出5的二進位制數 0000 0000 0101 然後將各個位上0變1 1變0 1111 1111 1010 最後再加1 1111 1111 101...

位運算學習筆記

要明白位運算是在二進位制中的運算方式,所有其他進製的數在進行位運算時都要先轉化成二進位制數再進行運算。int 是 32位二進位制。有符號整型 正數 0 負數 1 1 00000.0001 1 10000.00011.按位與 只有當x,y都是1的時候,運算結果才是1,其餘情況都是0.1 1 1 1 0...