--- title: Gaussian elimination id: 5a23c84252665b21eecc7e77 challengeType: 5 forumTopicId: 302272 --- ## Description
Write a function to solve \(Ax = b\) using Gaussian elimination then backwards substitution. \(A\) being an \(n \times n\) matrix. Also, \(x\) and \(b\) are \(n\) by 1 vectors. To improve accuracy, please use partial pivoting and scaling.
## Instructions
## Tests
```yml tests: - text: gaussianElimination should be a function. testString: assert(typeof gaussianElimination=='function'); - text: gaussianElimination([[1,1],[1,-1]], [5,1]) should return an array. testString: assert(Array.isArray(gaussianElimination([[1,1],[1,-1]], [5,1]))); - text: gaussianElimination([[1,1],[1,-1]], [5,1]) should return [ 3, 2 ]. testString: assert.deepEqual(gaussianElimination([[1,1],[1,-1]], [5,1]), [ 3, 2 ]); - text: gaussianElimination([[2,3],[2,1]] , [8,4]) should return [ 1, 2 ]. testString: assert.deepEqual(gaussianElimination([[2,3],[2,1]] , [8,4]), [ 1, 2 ]); - text: gaussianElimination([[1,3],[5,-2]], [14,19]) should return [ 5, 3 ]. testString: assert.deepEqual(gaussianElimination([[1,3],[5,-2]], [14,19]), [ 5, 3 ]); - text: gaussianElimination([[1,1],[5,-1]] , [10,14]) should return [ 4, 6 ]. testString: assert.deepEqual(gaussianElimination([[1,1],[5,-1]] , [10,14]), [ 4, 6 ]); - text: gaussianElimination([[1,2,3],[4,5,6],[7,8,8]] , [6,15,23]) should return [ 1, 1, 1 ]. testString: assert.deepEqual(gaussianElimination([[1,2,3],[4,5,6],[7,8,8]] , [6,15,23]), [ 1, 1, 1 ]); ```
## Challenge Seed
```js function gaussianElimination(A,b) { } ```
## Solution
```js function gaussianElimination(A, b) { // Lower Upper Decomposition function ludcmp(A) { // 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 } 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