-2

行列式を再帰的に計算するために使用する 2 つの関数があります。値は HTML フォームから取得されます。しかし、機能は実行されません。誰かがこれで私を助けてくれますか? 私は非常に感謝されます。

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 の行列式を計算して返し、警告しようとしましたが、うまくいきました。

4

4 に答える 4

0

for ループで未定義の変数 'a' と 'b' が使用されています

于 2013-05-12T12:17:48.560 に答える
0

まず、form タグに 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

それが役に立てば幸い:)

于 2013-05-12T12:09:55.900 に答える
0

あなたalertは の後returnです。ステートメントの前に関数
を使用するalertreturn

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;
于 2013-05-12T12:06:13.770 に答える