求一个矩阵的逆(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