我正在为矩阵反转创建一个javascript代码。但是这个函数似乎没有运行。 我希望我的倒置矩阵显示在输入矩阵所在的位置。我已经尝试提醒flipMatrix的值而不是将它们放入s但是也没有用。感谢任何帮助
HTML
<div id = "table3">
<div class = "header">Macierz odwrotna [2x2]</div>
<form id = "row1">
<input type = "text" class = "det2"/><!--first row-->
<input type = "text" class = "det2"/>
</form>
<form id = "row2">
<input type = "text" class = "det2"/><!--second row-->
<input type = "text" class = "det2"/>
</form>
<div class = "count" onclick="invertedMatrix(2,'det2')"><a href = "#">Wylicz</a> </div>
</div>
的javascript
function det(size, className){
var arr = document.getElementsByClassName(className);
var determinant = 0;
if(size == 2){
determinant = (arr[0].value*arr[3].value) - (arr[1].value*arr[2].value);
}
else if(size == 3){
determinant = (arr[0].value*((arr[4].value*arr[8].value) - (arr[5].value * arr[7].value))) -
(arr[1].value*((arr[3].value*arr[8].value) - (arr[5].value * arr[6].value))) +
(arr[2].value*((arr[3].value*arr[7].value) - (arr[4].value * arr[6].value)));
}
return determinant;
}
function invertedMatrix(size,className){
var invertedMatrix = new Array();
var additionalMatrix = new Array();
var matrix = document.getElementsByClassName(className);
if(size == 2){
for(var i = 0; i < matrix.length;i++){
if(i % 2 == 0){
additionalMatrix[i].value = matrix[i].value;
}
else{
additionalMatrix[i].value = -matrix[i].value;
}
}
for(var i = 0;i < matrix.length;i++){
invertedMatrix[i].value = (1/det(2,className)) * additionalMatrix[i].value;
}
}
for(var i = 0;i < matrix.length; i++){
document.getElementsByClassName(className).item(i).value = invertedMatrix[i].value;
}
}
编辑!:如果条件检查应该有i == 0 ||我= = 2而不是我写的。但是仍然无法工作。
答案 0 :(得分:0)
您还可以查看支持任何维度矩阵的我的(正在进行中)库matrix.js(如果您不需要,可以在此处停止阅读,因为任意大小会增加极端开销)。
反转的相关代码是
Matrix.prototype.inverse = function () {
if( !this.isSquare() ) {
throw new MatrixError( MatrixError.ErrorCodes.DIMENSION_MISMATCH, 'Matrix must be square' );
}
var M = this.augment( Matrix.eye( this.rows() ) ),
row, row_before, new_row, i, j, k, factor, rows, columns;
try {
M = M.decomposeLU();
rows = M.rows();
columns = M.columns();
for( i = rows; i > 1; i-- ) {
row_before = M.__getRow( i - 1 );
row = M.__getRow( i );
factor = row_before[i - 1] / row[i - 1];
new_row = [];
for( k = 0; k < columns; k++ ) {
new_row[k] = row_before[k] - row[k] * factor;
}
M.__setRow( i - 1, new_row );
}
for( j = 1; j <= rows; j++ ) {
row = M.__getRow( j );
new_row = [];
for( k = 0; k < columns; k++ ) {
new_row[k] = row[k] / row[j - 1];
}
M.__setRow( j, new_row );
}
} catch( e ) {
throw new MatrixError( MatrixError.ErrorCodes.MATRIX_IS_SINGULAR );
}
return M.submatrix( 1, rows, this.columns() + 1, columns );
};
但是,您可以看到它对LU分解有一些依赖性,例如。如果您有兴趣,请看一下。到目前为止,倒数并不是最佳解决方案,而是基本的解决方案。