24 lines
494 B
Plaintext
24 lines
494 B
Plaintext
matlup(M) =
|
|
{
|
|
my (L = matid(#M), U = M, P = L);
|
|
|
|
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
|
|
}
|