如何找到矩阵的逆矩阵?我正在尝试使用高斯消除法。我知道如何手动解决它,但无法理解如何编码。
答案 0 :(得分:1)
这里明确解释了Guass-Jordan的消除:http://www.codewithc.com/c-program-for-gauss-jordan-method/
这里还有一个C ++方法实现,它更符合于查找矩阵的逆矩阵:http://www.sanfoundry.com/cpp-program-implement-gauss-jordan-elimination/
注意,请尝试理解该方法背后的原因。如果我正在学习这个主题,我可能会先尝试从描述中编写代码,然后只有在遇到问题时才查看编码解决方案。
此外,还有其他语言的其他实现 - 如果您只是在Google上进行有意义的搜索。
祝你好运!答案 1 :(得分:0)
这应该已经回答了十亿次,但还可以。首先,我不认为Gauss-Jordan方法是最好的(对于表演)。我假设矩阵具有固定大小(3x3)的列表示法。以下代码是Javascript one,但可以轻松转换为任何其他语言。
Matrix.prototype.inverse = function() {
var c, l, det, ret = new Matrix();
ret._M[0][0] = (this._M[1][1] * this._M[2][2] - this._M[2][1] * this._M[1][2]);
ret._M[0][1] = -(this._M[0][1] * this._M[2][2] - this._M[2][1] * this._M[0][2]);
ret._M[0][2] = (this._M[0][1] * this._M[1][2] - this._M[1][1] * this._M[0][2]);
ret._M[1][0] = -(this._M[1][0] * this._M[2][2] - this._M[2][0] * this._M[1][2]);
ret._M[1][1] = (this._M[0][0] * this._M[2][2] - this._M[2][0] * this._M[0][2]);
ret._M[1][2] = -(this._M[0][0] * this._M[1][2] - this._M[1][0] * this._M[0][2]);
ret._M[2][0] = (this._M[1][0] * this._M[2][1] - this._M[2][0] * this._M[1][1]);
ret._M[2][1] = -(this._M[0][0] * this._M[2][1] - this._M[2][0] * this._M[0][1]);
ret._M[2][2] = (this._M[0][0] * this._M[1][1] - this._M[1][0] * this._M[0][1]);
det = this._M[0][0] * ret._M[0][0] + this._M[0][1] * ret._M[1][0] + this._M[0][2] * ret._M[2][0];
for (c = 0; c < 3; c++) {
for (l = 0; l < 3; l++) {
ret._M[c][l] = ret._M[c][l] / det;
}
}
this._M = ret._M;
};