首頁 > 軟體

C++應用Eigen庫對應實現matlab中部分函數問題

2022-12-17 14:01:02

將Eigen加入到專案中

1.如下圖將Eigen庫資料夾加入到專案目錄中。

2.將Eigen檔案加入到執行環境變數中

3.在專案標頭檔案中包含Eigen。

使用Eigen中函數及功能

1)宣告矩陣,向量,陣列:

圖中宣告了一個2x3的矩陣,矩陣中資料型別為float。

第一個引數為矩陣中資料型別,第二引數為行數,第三為列數。

當引數為Dynamic時為動態,程式會自動檢測需要設定XxX矩陣。

2)矩陣賦值

方法一:

方法二:

方法三:

3)複數矩陣賦值方式

輸出矩陣

使用方法

4)伴隨矩陣,共軛矩陣,伴隨矩陣

使用方法

5)矩陣重塑

使用方法

6)矩陣運算

a)矩陣加法、減法、乘法

行列相等矩陣相加減運用方法:

行列不等的矩陣相加減運用方法:

矩陣於常數

矩陣於常數想加減運用方法及輸出結果:

此處不能直接對matrix進行常數加減,需要將其轉化為array後進行加減運算。

b)三角函數

所有數學函數輸入的值均以弧度計算,函數會對矩陣中每個值進行相應的運算。

其中矩陣需要轉為array才能進行運算。

測試結構體:

用法:

m1.array().atan(); m1.array().asin(); m1.array().acos();

m1.array().sin(); m1.array().cos(); m1.array().tan();

c)其他,

測試結構體:

使用方法:

  • log(m1.array())將m1中各元素取自然對數返回結果矩陣
  • log2(m1.array())將m1中各元素取基數為2對數返回結果矩陣
  • log10(m1.array())將m1中各元素取基數為10對數返回結果矩陣:
  • m1.sum(): 返回矩陣m1中所有元素的和
  • m1.prod(): 返回矩陣m1中所有元素的積
  • m1.mean(): 返回矩陣m1中所有有元素的平均值
  • m1.trace():返回矩陣的跡,即返回主對角線上元素的和。如果不是方陣或者為向量,仍返回對角線元素的和。
  • m1.minCoeff(): 返回矩陣中最小的元素
  • m1.maxCoeff(): 返回矩陣中最大的元素
  • abs( m1.array()):將m1中各元素取絕對值返回結果矩陣
  • square( m1.array()):將m1中各元素開方返回結果矩陣

7)元胞陣列轉換成矩陣(matlab程式碼中cell2mat)

未找到

8)查詢矩陣中非0元素下表(matlab程式碼中find)

未找到

9)Splines插值

此處只用eigen庫實現了一維Splines插值法

實現類:

使用方法

10)曲線擬合(對應matlab函數polyfit)

被和諧了

11)多項式計算(對應matlab函數polyval)

未找到

12)直線擬合

被和諧了

問題及解決方式

問題一:

原因:程式操作了矩陣行列邊界之外的數值;

解決方法:查詢程式碼,檢視在哪操作了陣列邊界之外資料,修改。

問題二:編譯時出現error C2338: YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES

原因:矩陣賦值時出現不匹配現象,比如一個3x2的矩陣向2x3矩陣賦值,就會報此類錯誤。

注意事項

Qt中,QDbug無法輸出矩陣;

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com