--- id: 5a23c84252665b21eecc7e77 title: Eliminazione Gaussiana challengeType: 5 forumTopicId: 302272 dashedName: gaussian-elimination --- # --description-- Scrivi una funzione per risolvere \\(Ax = b\\) usando l'eliminazione gaussiana e la sostituzione all'indietro. \\(A\\) รจ una matrice \\(n \\times n\\). Inoltre, \\(x\\) e \\(b\\) sono vettori \\(n\\) x 1. Per migliorare la precisione, si prega di utilizzare pivoting parziale e ridimensionamento. # --hints-- `gaussianElimination` dovrebbe essere una funzione. ```js assert(typeof gaussianElimination == 'function'); ``` `gaussianElimination([[1,1],[1,-1]], [5,1])` dovrebbe restituire un array. ```js assert( Array.isArray( gaussianElimination( [ [1, 1], [1, -1] ], [5, 1] ) ) ); ``` `gaussianElimination([[1,1],[1,-1]], [5,1])` dovrebbe restituire `[ 3, 2 ]`. ```js assert.deepEqual( gaussianElimination( [ [1, 1], [1, -1] ], [5, 1] ), [3, 2] ); ``` `gaussianElimination([[2,3],[2,1]] , [8,4])` dovrebbe restituire `[ 1, 2 ]`. ```js assert.deepEqual( gaussianElimination( [ [2, 3], [2, 1] ], [8, 4] ), [1, 2] ); ``` `gaussianElimination([[1,3],[5,-2]], [14,19])` dovrebbe restituire `[ 5, 3 ]`. ```js assert.deepEqual( gaussianElimination( [ [1, 3], [5, -2] ], [14, 19] ), [5, 3] ); ``` `gaussianElimination([[1,1],[5,-1]] , [10,14])` dovrebbe restituire `[ 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])` dovrebbe restituire `[ 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