行列式を再帰的に計算するために使用する 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 の行列式を計算して返し、警告しようとしましたが、うまくいきました。