Javascript det calculation

Javascript det calculation

本文关键字:calculation det Javascript      更新时间:2023-09-26

我有两个函数,我用它来计算矩阵的递归行列式。这些值取自HTML表单。但是函数不会运行。有人能帮我一下吗?我将非常感激。

<form>
    element 0_0 <input type = "text" class = "elements"/>
    element 0_1 <input type = "text" class = "elements"/>
    element 1_0 <input type = "text" class = "elements"/>
    element 1_1 <input type = "text" class = "elements"/>
    <input type = "button" value = "clickMe" onclick = "determinant('elements','class')"/>
</form>
JavaScript

function create2Darray(clname){
    var A = document.getElementsByClassName(clname);
    var arr = new Array();
    var rows = Math.sqrt(A.length);
    for(var i = 0; i < rows; i++){
        arr[i] = new Array();
        for(var j = 0; j < rows;j++){
            arr[i][j] = A[i*rows + j].value;
        }
    }
    return arr;
}
function determinant (matrixClass,type) {
    if(type == 'class'){
        var matrix = create2Darray(matrixClass);
    } else if(type == 'name'){
        var matrix = new Array();
    }
    var det = 0;
    if (matrix.length == 1){
        return matrix[0][0];
    } else if (matrix.length == 2){
        return (matrix[0][0] * matrix[1][1]) - (matrix[0][1] * matrix[1][0]);
    }
    var smaller = new Array();//creating an empty array for a matrix minor;
    for (var k = 0; k < matrix.length; k++){
        smaller[k] = [];
        for(var l = 0;l < matrix.length; l++){
            smaller[k][l] = [];
        }
    }       
    for (var i = 0; i < matrix.length; i++){
        for (a = 1; a < matrix.length; a++) {
            for (b = 0; b < matrix.length; b++) {
                if (b < i) {
                    smaller[a - 1][b] = matrix[a][b];
                } else if (b > i) {
                    smaller[a - 1][b - 1] = matrix[a][b];
                }
            }
        }
        if (i % 2 == 0) {
            s = 1;
        } else {
            s = -1;
        }
        det += s * matrix[0][i] * (determinant(smaller,'name'));
    }
    return det;
    alert(det);
}

注意:这个递归有一个问题。我试着计算,返回并提醒矩阵2x2的行列式,它起作用了。但是当我试着用一个3x3矩阵来做的时候,它没有。所以请帮助

首先,你需要把name属性放到表单标签上:

<form name="det">

然后,给出输入值的名称。例如:

element 0_0 <input type = "text" class = "elements" NAME="A"/>
element 0_1 <input type = "text" class = "elements" NAME="B"/>
element 1_0 <input type = "text" class = "elements" NAME="C"/>
element 1_1 <input type = "text" class = "elements" NAME="D"/>
<input NAME="E" type = "button" value = "clickMe" onclick = "determinant('elements','class')"/>

最后,现在您已经命名了所有内容,您可以在javascript中使用:

获取值:
document.*formname*.*input name*.value

希望有帮助

你的for循环使用了未定义的变量'a'和'b'

您的alertreturn之后。
return语句前使用alert函数

alert(det);  
return det;  
代码中的

函数返回这种情况

else if(matrix.length == 2){
    return (matrix[0][0] * matrix[1][1]) - (matrix[0][1] * matrix[1][0]);
} 

你应该在这里设置警告

det = (matrix[0][0] * matrix[1][1]) - (matrix[0][1] * matrix[1][0]);  
alert (det);  
return det;

当你创建"更小"时,你没有收缩矩阵。

for (var k = 0; k < matrix.length; k++){
    smaller[k] = [];
    for(var l = 0;l < matrix.length; l++){
        smaller[k][l] = [];
    }
}
应:

for (var k = 0; k < matrix.length - 1; k++) {
    smaller[k] = [];
    for(var l = 0; l < matrix.length - 1; l++) smaller[k][l] = [];
}