このディレクトリの索引

'LU分解'([L],[L]) :- !. 'LU分解'(LL,LU) :- 第一行と第一列を切り取り第一列には除算処理を施す(LL,L1,L2,LL_1), '第一行と第一列を使ってLL_1をの値を更新する'(LL_1,L1,L2,LL2), 'LU分解'(LL2,LU2), 第一行と第一列を付加する(LU2,L1,L2,LU). 第一行と第一列を切り取り第一列には除算処理を施す(LL,L1,L2,LL_2) :- 第一行を切り取る(LL,_除数,L1,LL_1), 第一列と第二列以降を分離する(LL_1,L2_1,LL_2), 第一列を除算する(_除数,L2_1,L2). 第一行を切り取る([[A|R1]|LL_1],A,[A|R1],LL_1). 第一列と第二列以降を分離する([],[],[]). 第一列と第二列以降を分離する([A|R1],[A|R2],[R1|R3]) :- 第一列と第二列以降を分離する(R1,R2,R3). 第一列を除算する(A/B,[],[]). 第一列を除算する(A/B,[C/D|R1],[V2|R2]) :- X is A * C, Y is B * D, 約分(X/Y,V2), 第一列を除算する(A/B,R1,R2),!. 第一列を除算する(A/B,[V1|R1],[V2|R2]) :- X is A * V1, 約分(X/B,V2), 第一列を除算する(A/B,R1,R2),!. 第一列を除算する(A,[C/D|R1],[V2|R2]) :- number(A), X is A * C, 約分(X/D,V2), 第一列を除算する(A,R1,R2),!. 第一列を除算する(A,[V1|R1],[V2|R2]) :- number(A), number(V1), 約分(A/V1,V2), 第一列を除算する(A/B,R1,R2). '第一行と第一列を使ってLL_1をの値を更新する'([],_,_,[]). '第一行と第一列を使ってLL_1をの値を更新する'([L|R1],[A|R2],L2,[L4|R4]) :- 行を更新する(L,A,L2,L4), '第一行と第一列を使ってLL_1をの値を更新する'(R1,R2,L2,R4). 行を更新する([],_,_,[]). 行を更新する([V1|R1],A,[B|R3],[V|R4]) :- V is V1 - A * B, 行を更新する(R1,A,R3,R4). 第一行と第一列を付加する(LU2,L1,L2,LU) :- 第一列を付加する(L2,LU2,LU1), LU = [L1|LU1]. 第一列を付加する([],[],[]). 第一列を付加する([A|R1],[L2|R2],[[A|L2]|R3]) :- 第一列を付加する(R1,R2,R3).