Gaussian elimination: Difference between revisions

add output of the java code, add output of the scala code
(Added ATS.)
(add output of the java code, add output of the scala code)
 
(3 intermediate revisions by 3 users not shown)
Line 2,271:
{{out}}
<pre>1.00, 0.00, 0.00, 4.00</pre>
 
=={{header|EasyLang}}==
<syntaxhighlight>
proc gauss_elim . a[][] b[] x[] .
n = len a[][]
for i to n
maxr = i
maxv = abs a[i][i]
for j = i + 1 to n
if abs a[j][i] > maxv
maxr = j
maxv = abs a[j][i]
.
.
if maxr <> i
swap a[maxr][] a[i][]
swap b[maxr] b[i]
.
for j = i + 1 to n
f = a[j][i] / a[i][i]
for k = i to n
a[j][k] -= f * a[i][k]
.
b[j] -= f * b[i]
.
.
x[] = [ ]
len x[] n
for i = n downto 1
rhs = b[i]
for j = i + 1 to n
rhs -= a[i][j] * x[j]
.
x[i] = rhs / a[i][i]
.
.
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 ] ]
b[] = [ -0.01 0.61 0.91 0.99 0.60 0.02 ]
gauss_elim a[][] b[] x[]
print x[]
</syntaxhighlight>
 
=={{header|F_Sharp|F#}}==
Line 3,883 ⟶ 3,924:
}
}</syntaxhighlight>
{{out}}
<pre>
det: 780.0
0.09750000 0.0000e+00
0.11000000 0.0000e+00
0.12916667 0.0000e+00
0.12333333 1.3878e-17
0.17750000 2.7756e-17
</pre>
 
 
=={{header|JavaScript}}==
Line 6,447 ⟶ 6,498:
}
</syntaxhighlight>
 
=={{header|Scala}}==
{{trans|Java}}
<syntaxhighlight lang="Scala">
object GaussianElimination {
def solve(a: Array[Array[Double]], b: Array[Array[Double]]): Double = {
if (a == null || b == null || a.length == 0 || b.length == 0) {
throw new IllegalArgumentException("Invalid dimensions")
}
 
val n = b.length
val p = b(0).length
 
if (a.length != n || a(0).length != n) {
throw new IllegalArgumentException("Invalid dimensions")
}
 
var det = 1.0
 
for (i <- 0 until n - 1) {
var k = i
 
for (j <- i + 1 until n) {
if (Math.abs(a(j)(i)) > Math.abs(a(k)(i))) {
k = j
}
}
 
if (k != i) {
det = -det
 
for (j <- i until n) {
val s = a(i)(j)
a(i)(j) = a(k)(j)
a(k)(j) = s
}
 
for (j <- 0 until p) {
val s = b(i)(j)
b(i)(j) = b(k)(j)
b(k)(j) = s
}
}
 
for (j <- i + 1 until n) {
val s = a(j)(i) / a(i)(i)
 
for (k <- i + 1 until n) {
a(j)(k) -= s * a(i)(k)
}
 
for (k <- 0 until p) {
b(j)(k) -= s * b(i)(k)
}
}
}
 
for (i <- n - 1 to 0 by -1) {
for (j <- i + 1 until n) {
val s = a(i)(j)
 
for (k <- 0 until p) {
b(i)(k) -= s * b(j)(k)
}
}
 
val s = a(i)(i)
det *= s
 
for (k <- 0 until p) {
b(i)(k) /= s
}
}
 
det
}
 
def main(args: Array[String]): Unit = {
val a = Array(
Array(4.0, 1.0, 0.0, 0.0, 0.0),
Array(1.0, 4.0, 1.0, 0.0, 0.0),
Array(0.0, 1.0, 4.0, 1.0, 0.0),
Array(0.0, 0.0, 1.0, 4.0, 1.0),
Array(0.0, 0.0, 0.0, 1.0, 4.0)
)
 
val b = Array(
Array(1.0 / 2.0),
Array(2.0 / 3.0),
Array(3.0 / 4.0),
Array(4.0 / 5.0),
Array(5.0 / 6.0)
)
 
val x = Array(39.0 / 400.0, 11.0 / 100.0, 31.0 / 240.0, 37.0 / 300.0, 71.0 / 400.0)
 
println("det: " + solve(a, b))
 
for (i <- 0 until 5) {
printf("%12.8f %12.4e\n", b(i)(0), b(i)(0) - x(i))
}
}
}
</syntaxhighlight>
{{out}}
<pre>
det: 780.0
0.09750000 0.0000e+00
0.11000000 0.0000e+00
0.12916667 0.0000e+00
0.12333333 1.3878e-17
0.17750000 2.7756e-17
</pre>
 
=={{header|Sidef}}==
Line 6,825 ⟶ 6,989:
{{trans|Kotlin}}
{{libheader|Wren-iterate}}
<syntaxhighlight lang="ecmascriptwren">import "./iterate" for Stepped
 
var ta = [
338

edits