您的位置:首页 > 其它

Armadillo之求矩阵的逆(inverse)

2014-08-01 00:00 961 查看
摘要: 介绍Armadillo库中求矩阵逆的方法

求一个矩阵的逆(inverse or multiplicative inverse)使用矩阵的.i()方法或用inv()函数

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

1 若m不是方正的(square),则函数抛出std::logic_error异常。

2 如果m是奇异的(singular),则输出的矩阵将被重置,且抛出std::runtime_error异常

inv(m)   //返回m的逆
inv(A,m) //A被设为m的逆

1 若m不是方正的(square),则函数抛出std::logic_error异常。

2 如果m是奇异的(singular),则输出的矩阵将被重置,且抛出std::runtime_error异常,同时inv(A,m)返回值将是false

代码:

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函数将大大加快运算速度:

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

以上两种方法运行后A都是m的逆。

1 使用这个函数要启用LAPACK

2 若m不是方正的(square),则函数抛出std::logic_error异常。

3 现在inv_sympd不检查矩阵m是否是对称,方阵,正数,有限的。

4 如果m是奇异的(singular),则输出的矩阵将被重置,且抛出std::runtime_error异常,同时inv_sympd(A,m)返回值将是false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息