LU decomposition: Difference between revisions

Content added Content deleted
(Added Sidef)
Line 2,164: Line 2,164:
lu_backsub(lup, transpose([1, 1, -1, -1]));
lu_backsub(lup, transpose([1, 1, -1, -1]));
/* matrix([-204], [2100], [-4740], [2940]) */</lang>
/* matrix([-204], [2100], [-4740], [2940]) */</lang>

=={{header|PARI/GP}}==

<lang parigp>matlup(M) =
{
my (P = matid(#M), L = P, U = M);

for (i = 1, #M-1, \\ pivoting
p = M[z=i,i];
for (k = i, #M, if (M[k,i] > p, p = M[z=k,i]));

if (i != z, \\ swap rows
k = U[i,]; U[i,] = U[z,]; U[z,] = k;
k = P[i,]; P[i,] = P[z,]; P[z,] = k;
);
);

for (i = 1, #M-1, \\ decompose
for (k = i+1, #M,
L[k,i] = U[k,i] / U[i,i];
for (j = i, #M, U[k,j] -= L[k,i] * U[i,j])
)
);

[L,U,P] \\ return L,U,P triple matrix
}</lang>

Output:
<pre>
gp > [L,U,P] = matlup([1,3,5;2,4,7;1,1,0]);

gp > L

[ 1 0 0]

[1/2 1 0]

[1/2 -1 1]

gp > U
[2 4 7]

[0 1 3/2]

[0 0 -2]

gp > P

[0 1 0]

[1 0 0]

[0 0 1]

gp > [L,U,P] = matlup([11,9,24,2;1,5,2,6;3,17,18,1;2,5,7,1]);

gp > L

[ 1 0 0 0]

[3/11 1 0 0]

[1/11 23/80 1 0]

[2/11 37/160 1/278 1]

gp > U

[11 9 24 2]

[ 0 160/11 126/11 5/11]

[ 0 0 -139/40 91/16]

[ 0 0 0 71/139]

gp > P

[1 0 0 0]

[0 0 1 0]

[0 1 0 0]

[0 0 0 1]
</pre>


=={{header|Perl 6}}==
=={{header|Perl 6}}==