LU分解(ピボット選択なし仕様)
program LU(input,output);
const n=3;
type matrix=array[1..n,1..n] of real; {n$B9T(Bn$BNs$N9TNs$r:n@.(B}
vector=array[1..n] of real; {n$BNs$r:n@.(B}
var a : matrix;
b, M : vector;
procedure make_matrix(var a : matrix); { $B9TNs(BA$B$NMWAG(B }
begin
a[1,1] := 1; a[1,2] := -4; a[1,3] := 5;
a[2,1] := -2; a[2,2] := 10; a[2,3] := -6;
a[3,1] := -1; a[3,2] := 6; a[3,3] := -2
end; { make_matrix }
procedure make_vector(var b : vector); { b$B%Y%/%H%k$NMWAG(B }
begin
b[1] := 0;
b[2] := 0;
b[3] := 1
end; { make_vector }
procedure decomp(var a:matrix; var b:vector); { $BA0?J>C5n(B }
var i,j,k:integer;
begin
for k:=1 to n-1 do
for j:=k+1 to n do
begin
for i:=k+1 to n do
begin
M[j]:=a[j,k]/a[k,k];
a[j,i]:=a[j,i]-M[j]*a[k,i]
end;
b[j]:=b[j]-M[j]*b[k]
end
end; { decomp }
procedure solve(var a:matrix; var b:vector); { $B8eB`BeF~(B }
var i,j : integer;
B:real;
begin
for i:=n downto 1 do
begin
B:=0;
for j:=i+1 to n do
B:=B-a[i,j]*b[j];
b[i]:=(b[i]+B)/a[i,i]
end;
end; { solve }
procedure print_vector(b:vector); { $BO"N)#1.?tE@0J2<#57e$^$G=PMh$k(B }
end; { print_vector }
begin
make_matrix(a);
make_vector(b);
decomp(a,b);
solve(a,b);
print_vector(b);
end.
Last modified: 2000$BG/(B1$B7n(B20$BF|(B 13:51