Gaussian elimination: Difference between revisions

Content added Content deleted
m (reorder)
(+R)
Line 3,606: Line 3,606:
>>>
>>>
</lang>
</lang>

=={{header|R}}==

Here 'b' is a matrix. Partial pivoting is used, and the determinant of 'a' is returned as well.

<lang R>gauss <- function(a, b) {
n <- nrow(a)

det <- 1

for (i in seq_len(n - 1)) {
j <- which.max(a[i:n, i]) + i - 1
if (j != i) {
a[c(i, j), i:n] <- a[c(j, i), i:n]
b[c(i, j), ] <- b[c(j, i), ]
det <- -det
}

k <- seq(i + 1, n)
for (j in k) {
s <- a[[j, i]] / a[[i, i]]
a[j, k] <- a[j, k] - s * a[i, k]
b[j, ] <- b[j, ] - s * b[i, ]
}
}

for (i in seq(n, 1)) {
if (i < n) {
for (j in seq(i + 1, n)) {
b[i, ] <- b[i, ] - a[[i, j]] * b[j, ]
}
}
b[i, ] <- b[i, ] / a[[i, i]]
det <- det * a[[i, i]]
}

list(x=b, det=det)
}

a <- matrix(c(2, 9, 4, 7, 5, 3, 6, 1, 8), 3, 3, byrow=T)
gauss(a, diag(3))</lang>

{{out}}

<pre>$x
[,1] [,2] [,3]
[1,] -0.10277778 0.18888889 -0.01944444
[2,] 0.10555556 0.02222222 -0.06111111
[3,] 0.06388889 -0.14444444 0.14722222

$det
[1] -360</pre>


=={{header|Racket}}==
=={{header|Racket}}==