function gauss-jordan($a,$b) { $n = $a.count for ($k = 0; $k -lt $n; $k++) { $lmax, $max = $k, [Math]::Abs($a[$k][$k]) for ($l = $k+1; $l -lt $n; $l++) { $tmp = [Math]::Abs($a[$l][$k]) if($max -lt $tmp) { $max, $lmax = $tmp, $l } } if ($k -ne $lmax) { $a[$k], $a[$lmax] = $a[$lmax], $a[$k] $b[$k], $b[$lmax] = $b[$lmax], $b[$k] } $akk = $a[$k][$k] for ($j = $k; $j -lt $n; $j++) {$a[$k][$j] /= $akk} $b[$k] /= $akk for ($i = 0; $i -lt $n; $i++){ if ($i -ne $k) { $aik = $a[$i][$k] for ($j = $k; $j -lt $n; $j++) { $a[$i][$j] = $a[$i][$j] - $a[$k][$j]*$aik } $b[$i] = $b[$i] - $b[$k]*$aik } } } $b } function show($a) { if($a) { 0..($a.Count - 1) | foreach{ if($a[$_]){"$($a[$_][0..($a[$_].count -1)])"}else{""} } } } $a =( @(1.00, 0.00, 0.00, 0.00, 0.00, 0.00), @(1.00, 0.63, 0.39, 0.25, 0.16, 0.10), @(1.00, 1.26, 1.58, 1.98, 2.49, 3.13), @(1.00, 1.88, 3.55, 6.70, 12.62, 23.80), @(1.00, 2.51, 6.32, 15.88, 39.90, 100.28), @(1.00, 3.14, 9.87, 31.01, 97.41, 306.02) ) "a =" show $a "" $b = @(-0.01, 0.61, 0.91, 0.99, 0.60, 0.02) "b =" $b "" "x =" gauss-jordan $a $b