Data update
This commit is contained in:
parent
ed705008a8
commit
0df55f9f24
2196 changed files with 32999 additions and 3075 deletions
37
Task/Gaussian-elimination/EasyLang/gaussian-elimination.easy
Normal file
37
Task/Gaussian-elimination/EasyLang/gaussian-elimination.easy
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
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[]
|
||||
99
Task/Gaussian-elimination/Scala/gaussian-elimination.scala
Normal file
99
Task/Gaussian-elimination/Scala/gaussian-elimination.scala
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
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))
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue