--- id: 5a23c84252665b21eecc7e77 title: Gaussian elimination challengeType: 1 forumTopicId: 302272 dashedName: gaussian-elimination --- # --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. # --hints-- `gaussianElimination` should be a function. ```js assert(typeof gaussianElimination == 'function'); ``` `gaussianElimination([[1,1],[1,-1]], [5,1])` should return an array. ```js assert( Array.isArray( gaussianElimination( [ [1, 1], [1, -1] ], [5, 1] ) ) ); ``` `gaussianElimination([[1,1],[1,-1]], [5,1])` should return `[ 3, 2 ]`. ```js assert.deepEqual( gaussianElimination( [ [1, 1], [1, -1] ], [5, 1] ), [3, 2] ); ``` `gaussianElimination([[2,3],[2,1]] , [8,4])` should return `[ 1, 2 ]`. ```js assert.deepEqual( gaussianElimination( [ [2, 3], [2, 1] ], [8, 4] ), [1, 2] ); ``` `gaussianElimination([[1,3],[5,-2]], [14,19])` should return `[ 5, 3 ]`. ```js assert.deepEqual( gaussianElimination( [ [1, 3], [5, -2] ], [14, 19] ), [5, 3] ); ``` `gaussianElimination([[1,1],[5,-1]] , [10,14])` should return `[ 4, 6 ]`. ```js assert.deepEqual( gaussianElimination( [ [1, 1], [5, -1] ], [10, 14] ), [4, 6] ); ``` `gaussianElimination([[1,2,3],[4,5,6],[7,8,8]] , [6,15,23])` should return `[ 1, 1, 1 ]`. ```js assert.deepEqual( gaussianElimination( [ [1, 2, 3], [4, 5, 6], [7, 8, 8] ], [6, 15, 23] ), [1, 1, 1] ); ``` # --seed-- ## --seed-contents-- ```js function gaussianElimination(A,b) { } ``` # --solutions-- ```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