41 lines
923 B
Text
41 lines
923 B
Text
procedure cholesky (array)
|
|
result := make_square_array (*array)
|
|
every (i := 1 to *array) do {
|
|
every (k := 1 to i) do {
|
|
sum := 0
|
|
every (j := 1 to (k-1)) do {
|
|
sum +:= result[i][j] * result[k][j]
|
|
}
|
|
if (i = k)
|
|
then result[i][k] := sqrt(array[i][i] - sum)
|
|
else result[i][k] := 1.0 / result[k][k] * (array[i][k] - sum)
|
|
}
|
|
}
|
|
return result
|
|
end
|
|
|
|
procedure make_square_array (n)
|
|
result := []
|
|
every (1 to n) do push (result, list(n, 0))
|
|
return result
|
|
end
|
|
|
|
procedure print_array (array)
|
|
every (row := !array) do {
|
|
every writes (!row || " ")
|
|
write ()
|
|
}
|
|
end
|
|
|
|
procedure do_cholesky (array)
|
|
write ("Input:")
|
|
print_array (array)
|
|
result := cholesky (array)
|
|
write ("Result:")
|
|
print_array (result)
|
|
end
|
|
|
|
procedure main ()
|
|
do_cholesky ([[25,15,-5],[15,18,0],[-5,0,11]])
|
|
do_cholesky ([[18,22,54,42],[22,70,86,62],[54,86,174,134],[42,62,134,106]])
|
|
end
|