我知道对于一般矩阵,Cramer 规则对于矩阵逆的数值计算来说远非理想。但是,它是否可以在以下情况下超越矩阵?一个特别的优点是该算法是非分支的。例如,逆的转置可以如下实现,假设矩阵是可逆的并且矩阵和存储为连续数组。
void inverse3(double* a, double* b) {
// cofactors
b[0] = a[4]*a[8] - a[5]*a[7];
b[1] = a[5]*a[6] - a[3]*a[8];
b[2] = a[3]*a[7] - a[4]*a[6];
b[3] = a[7]*a[2] - a[8]*a[1];
b[4] = a[8]*a[0] - a[6]*a[2];
b[5] = a[6]*a[1] - a[7]*a[0];
b[6] = a[1]*a[5] - a[2]*a[4];
b[7] = a[2]*a[3] - a[0]*a[5];
b[8] = a[0]*a[4] - a[1]*a[3];
// determinant
double det = b[0]*a[0] + b[1]*a[1] + b[2]*a[2];
// inverse
b[0] /= det;
b[1] /= det;
b[2] /= det;
b[3] /= det;
b[4] /= det;
b[5] /= det;
b[6] /= det;
b[7] /= det;
b[8] /= det;
}
这可以在效率或数值稳健性方面得到改善吗?