我有两个函数用于递归计算矩阵的行列式。值来自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的行列式并且它有效。但是当我尝试使用3x3矩阵时它没有。所以请帮助
答案 0 :(得分:0)
您的alert
在return
之后
在alert
声明
return
功能
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;
答案 1 :(得分:0)
好的,首先,您需要将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
希望有所帮助:)
答案 2 :(得分:0)
你的for循环使用未定义的变量'a'和'b'
答案 3 :(得分:0)
当您创建“较小”时,您没有缩小矩阵。
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] = [];
}