Javascript矩阵反转
Javascript matrix inversion
本文关键字:Javascript 更新时间:2023-09-26
我正在创建矩阵反转的javascript代码。但是这个函数似乎没有运行。我希望我的逆矩阵显示在输入矩阵所在的位置。我试过提醒invertedMatrix的值,而不是把它们放入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;
}
}
编辑!:if条件检查应该是I == 0 || I == 2,而不是我写的。
你也可以看看我的(正在进行的)库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分解,例如。如果你感兴趣,可以看看。到目前为止,逆解并不是最优解,但相当基本。
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Javascript:selenium Web驱动程序isDisplayed()不工作
- 如何通过ajax刷新JSF填充的javascript变量
- 如何在Javascript中将JSon对象转换为数组
- Javascript生成的表单未提交
- 使用javascript将动态表从一个html页面打印到另一个html页
- 通过javascript重定向html传递php变量