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}}== |