阵列表现奇怪

时间:2013-09-15 21:28:45

标签: javascript arrays matrix calculator

所以,我正在开发一个可以解决任何大小矩阵的javascript应用程序。我遇到了一个非常奇怪的问题,我的主数组在某一点之后只有0的值。输入应该是一个数据集,如

1, 8
2, 10
3, 13
4, 17
5, 22

但是我遇到了麻烦。当我运行代码时,console.log打印出一个漂亮的derpy数组

[[1, 1, 1, 8],
[0, 0, 0, 0], 
[0, 0, 0, 0]]

它变得更加怪异。如果我在调用rref函数之前移动console.log,我会得到同样的结果。

以前有人见过这个吗?谁知道怎么修它?谢谢!

//Matrix object
var matrix = {
startingDataSet: [],
degree: 0,
M: []
}

//splits up user input into a more readable format
function getDataFromString(data) {
var points = data.split("\n");
for (var i=0; i<points.length; i++) {
    points[i] = points[i].split(", ");
    points[i][0] = parseInt(points[i][0]);
    points[i][1] = parseInt(points[i][1]);
}
return points;
}

//finds the degree of the polynomail from the matrix object's data
function setPolynomialDegree(original) {
var data = original;
console.log(original);
//temporary data set to hold numbers in
var tempNumbers = [];
var degree = 1;
//move the original set of Y values into the temporary data set
for (var i = 0; i < data.length; i++) {
    tempNumbers.push(data[i][1]);
}
//while the numbers in tempdata are not the same, execute subtraction
while (tempNumbers[0] != tempNumbers[1]) {
    var newnums = []
    var l = tempNumbers.length;
    //find the difference for every set of numbers (0 & 1, 1 & 2, 2 & 3, etc.), and push those into the new data set
    for (var i = 0; i < l - 1; i++) {
        newnums.push(tempNumbers[i + 1] - tempNumbers[i]);
    }
    //replace old data set with new one
    tempNumbers = newnums;
    //increase polynomial degree by one
    degree += 1;
}
return degree;
}

//add 2 arrays together
function addrows(r1, r2) {
var temprow = [];
for (var i = 0; i < r1.length; i++) {
    temprow.push(r1[i] + r2[i]);
}
return temprow;
}

//multiply array by constant
function multrow(r1, num) {
var temprow = [];
for (var i = 0; i < r1.length; i++) {
    temprow.push(r1[i] * num);
}
return temprow;
}

//rref function
function rref(mtrx, deg) {
var temp1 = [];
var temp2 = [];
for (var row = 0; row < mtrx.length; row++) {
    for (var j = 0; j < mtrx.length-1; j++) {
        temp1 = multrow(mtrx[row], mtrx[j+1][row]);
        temp2 = multrow(mtrx[j+1], mtrx[row][row]);
        temp1 = multrow(temp1, -1);
        mtrx[j+1] = addrows(temp1, temp2);
    }
}
return mtrx;
}
//Main function that will solve the matrix
function solveFromDataSet(data) {
data = getDataFromString(data);
for (var i=0; i<data.length; i++) {
    matrix['startingDataSet'].push(data[i]);
}
matrix.degree = setPolynomialDegree(matrix.startingDataSet);
matrix.M = [];
for (var i = 0; i < matrix.degree; i++) {
    var row = [];
    for (var j = matrix.degree; j > 0; j--) {
        row.push(Math.pow(data[i][0], j - 1));
    }
    row.push(data[i][1]);
    matrix['M'][i] = row;
}
var var_array = rref(matrix['M']);
console.log(matrix.M);
return matrix.M;
}

0 个答案:

没有答案