--- id: 5a23c84252665b21eecc7e77 title: ガウスの消去法 challengeType: 5 forumTopicId: 302272 dashedName: gaussian-elimination --- # --description-- ガウスの消去法を用い、後退代入で\\(Ax = b\\) を解く関数を記述します。 \\(A\\) は \\(n \\times n\\) 行列とします。 また、\\(x\\) と \\(b\\) は \\(n\\) に 1ベクトルを掛けます。 精度を向上させるために、部分ピボット選択とスケーリングを使用してください。 # --hints-- `gaussianElimination` は関数とします。 ```js assert(typeof gaussianElimination == 'function'); ``` `gaussianElimination([[1,1],[1,-1]], [5,1])`は、配列を返す必要があります。 ```js assert( Array.isArray( gaussianElimination( [ [1, 1], [1, -1] ], [5, 1] ) ) ); ``` `gaussianElimination([[1,1],[1,-1]], [5,1])` は、`[ 3, 2 ]`を返す必要があります。 ```js assert.deepEqual( gaussianElimination( [ [1, 1], [1, -1] ], [5, 1] ), [3, 2] ); ``` `gaussianElimination([[2,3],[2,1]] , [8,4])` は、`[ 1, 2 ]`を返す必要があります。 ```js assert.deepEqual( gaussianElimination( [ [2, 3], [2, 1] ], [8, 4] ), [1, 2] ); ``` `gaussianElimination([[1,3],[5,-2]], [14,19])` は `[ 5, 3 ]`を返す必要があります。 ```js assert.deepEqual( gaussianElimination( [ [1, 3], [5, -2] ], [14, 19] ), [5, 3] ); ``` `gaussianElimination([[1,1],[5,-1]] , [10,14])` は`[ 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])` は、`[ 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