// Lower Upper Solver function lusolve(A, b, update) { var lu = ludcmp(A, update) if (lu === undefined) return // Singular Matrix! return lubksb(lu, b, update) } // Lower Upper Decomposition function ludcmp(A, update) { // A is a matrix that we want to decompose into Lower and Upper matrices. var d = true var n = A.length var idx = new Array(n) // Output vector with row permutations from partial pivoting var vv = new Array(n) // Scaling information for (var i=0; i max) max = temp } if (max == 0) return // Singular Matrix! vv[i] = 1 / max // Scaling } if (!update) { // make a copy of A var Acpy = new Array(n) for (var i=0; i= max) { max = temp jmax = j } } if (i <= jmax) { for (var j=0; j -1) for (var j=ii; j=0; i--) { var sum = b[i] for (var j=i+1; j