Armadillo之求矩陣的逆(inverse)

求一個矩陣的逆(inverse or multiplicative inverse)使用矩陣的.i()方法或用inv()函數函數

m.i() //返回m的逆

1 若m不是方正的(square),則函數拋出std::logic_error異常。
spa

2 若是m是奇異的(singular),則輸出的矩陣將被重置,且拋出std::runtime_error異常code

inv(m)   //返回m的逆
inv(A,m) //A被設爲m的逆

1 若m不是方正的(square),則函數拋出std::logic_error異常。
ip

2 若是m是奇異的(singular),則輸出的矩陣將被重置,且拋出std::runtime_error異常,同時inv(A,m)返回值將是falseit

代碼:class

 mat m = "2,4;3,1;";
 mat m1 = m.i();
 m1.print();
 cout << "-----" << endl;
 mat m2 = inv(m);
 m2.print();
 cout << "-----" << endl;
 mat A;
 inv(A, m);
 A.print();

輸出:方法

若是矩陣m已經知道是對稱的(symmetric),方陣的(square),正數的(positive),有限的(definite)則求m的逆使用inv_sympd函數將大大加快運算速度:im

A=inv_sympd(m)
inv_sympd(A,m)

以上兩種方法運行後A都是m的逆。
error

1 使用這個函數要啓用LAPACK異常

2 若m不是方正的(square),則函數拋出std::logic_error異常。

3 如今inv_sympd不檢查矩陣m是不是對稱,方陣,正數,有限的。

4 若是m是奇異的(singular),則輸出的矩陣將被重置,且拋出std::runtime_error異常,同時inv_sympd(A,m)返回值將是false

相關文章
相關標籤/搜索