Gauss-Jordan matrix inversion: Difference between revisions
Content added Content deleted
m (→{{header|Wren}}: Minor tidy) |
(Added Easylang) |
||
Line 2,195: | Line 2,195: | ||
0.0000 -1.0000 2.0000 |
0.0000 -1.0000 2.0000 |
||
</pre> |
</pre> |
||
=={{header|EasyLang}}== |
|||
{{trans|Go}} |
|||
<syntaxhighlight> |
|||
proc rref . m[][] . |
|||
nrow = len m[][] |
|||
ncol = len m[1][] |
|||
lead = 1 |
|||
for r to nrow |
|||
if lead > ncol |
|||
return |
|||
. |
|||
i = r |
|||
while m[i][lead] = 0 |
|||
i += 1 |
|||
if i > nrow |
|||
i = r |
|||
lead += 1 |
|||
if lead > ncol |
|||
return |
|||
. |
|||
. |
|||
. |
|||
swap m[i][] m[r][] |
|||
m = m[r][lead] |
|||
for k to ncol |
|||
m[r][k] /= m |
|||
. |
|||
for i to nrow |
|||
if i <> r |
|||
m = m[i][lead] |
|||
for k to ncol |
|||
m[i][k] -= m * m[r][k] |
|||
. |
|||
. |
|||
. |
|||
lead += 1 |
|||
. |
|||
. |
|||
proc inverse . mat[][] inv[][] . |
|||
inv[][] = [ ] |
|||
ln = len mat[][] |
|||
for i to ln |
|||
if len mat[i][] <> ln |
|||
# not a square matrix |
|||
return |
|||
. |
|||
aug[][] &= [ ] |
|||
len aug[i][] 2 * ln |
|||
for j to ln |
|||
aug[i][j] = mat[i][j] |
|||
. |
|||
aug[i][ln + i] = 1 |
|||
. |
|||
rref aug[][] |
|||
for i to ln |
|||
inv[][] &= [ ] |
|||
for j = ln + 1 to 2 * ln |
|||
inv[i][] &= aug[i][j] |
|||
. |
|||
. |
|||
. |
|||
test[][] = [ [ 1 2 3 ] [ 4 1 6 ] [ 7 8 9 ] ] |
|||
inverse test[][] inv[][] |
|||
print inv[][] |
|||
</syntaxhighlight> |
|||
=={{header|Factor}}== |
=={{header|Factor}}== |
||
Line 2,235: | Line 2,301: | ||
-13/23 16/69 -2/69 13/23 |
-13/23 16/69 -2/69 13/23 |
||
</pre> |
</pre> |
||
=={{header|Fortran}}== |
=={{header|Fortran}}== |
||
Note that the Crout algorithm is a more efficient way to invert a matrix. |
Note that the Crout algorithm is a more efficient way to invert a matrix. |