このディレクトリの索引

% *** user: '行基本変形' / 5 ***
'行基本変形'(*,_乗数,_行目,_行列,X) :-
    '行基本変形'(*,_乗数,1,_行目,_行列,X) .

% *** user: '行基本変形' / 3 ***
'行基本変形'(_行列式,_行列,X) :-
    atom(_行列式),
    \+(_行列式 = []),
    & '行列式変換' # [2|pro],
    '行列式述語変換'(_行列式,P),
    '行基本変形'(P,_行列,X),
    ! .
'行基本変形'([],_行列,[]) :-
    ! .
'行基本変形'([N|R1],_行列,[L|R2]) :-
    !,
    list_nth(N,_行列,L),
    '行基本変形'(R1,_行列,R2),
    ! .
'行基本変形'(# _行目1 # _行目2,_行列,X) :-
    list_nth(_行目1,_行列,_行1),
    list_nth(_行目2,_行列,_行2),
    'ならびの位置指定置換'(_行目2,_行1,_行列,_行列1),
    'ならびの位置指定置換'(_行目1,_行2,_行列1,X),
    ! .
'行基本変形'(_乗数1 # _行目1 - _乗数2 # _行目2,_行列,X) :-
    _乗数2 >= 0,
    _乗数1 >= 0,
    !,
    _乗数3 is -1 * _乗数2,
    '行基本変形'(_乗数1 # _行目1 + _乗数3 # _行目2,_行列,X),
    ! .
'行基本変形'(_乗数1 # _行目1 - _乗数2 # _行目2,_行列,X) :-
    _乗数2 >= 0,
    _乗数1 < 0,
    _乗数3 is _乗数1 * (-1),
    !,
    '行基本変形'(_乗数3 # _行目1 + _乗数2 # _行目2,_行列,X),
    ! .
'行基本変形'(_乗数1 # _行目1 - _乗数2 # _行目2,_行列,X) :-
    _乗数2 < 0,
    _乗数1 >= 0,
    _乗数3 is _乗数1 * (-1),
    !,
    '行基本変形'(_乗数3 # _行目1 + _乗数2 # _行目2,_行列,X),
    ! .
'行基本変形'(_乗数1 # _行目1 - _乗数2 # _行目2,_行列,X) :-
    _乗数2 < 0,
    _乗数1 < 0,
    !,
    _乗数3 is -1 * _乗数2,
    '行基本変形'(_乗数1 # _行目1 + _乗数3 # _行目2,_行列,X),
    ! .
'行基本変形'(_乗数1 # _行目1 + _乗数2 # _行目2,_行列,X) :-
    !,
    list_nth(_行目2,_行列,_行2),
    list_nth(_行目1,_行列,_行1),
    findall(U,(member(A,_行1) , U is A * _乗数1),_乗算された行1),
    findall(W,(member(B,_行2) , W is B * _乗数2),_乗算された行2),
    '型推論加算'([_乗算された行1,_乗算された行2],_加算された行),
    replace_nth(1,_行目1,_加算された行,_行列,X),
    ! .
'行基本変形'(# _行目1 + _乗数 # _行目2,_行列,X) :-
    !,
    list_nth(_行目2,_行列,_行2),
    list_nth(_行目1,_行列,_行1),
    findall(U,(member(A,_行2) , U is A * _乗数),_乗算された行),
    '型推論加算'([_乗算された行,_行1],_加算された行),
    replace_nth(1,_行目1,_加算された行,_行列,X),
    ! .
'行基本変形'(# _行目1 - _乗数 # _行目2,_行列,X) :-
    !,
    _乗数2 is -1 * _乗数,
    '行基本変形'(# _行目1 + _乗数2 * _行目2,_行列,X),
    ! .
'行基本変形'(# _行目1 + _乗数 / _除数 * _行目2,_行列,X) :-
    integer(_除数),
    !,
    list_nth(_行目2,_行列,_行2),
    list_nth(_行目1,_行列,_行1),
    findall(U,(member(A,_行2) , U is A * _乗数 // _除数),_除算された行),
    '型推論加算'([_行1,_除算された行],_加算された行),
    replace_nth(1,_行目1,_加算された行,_行列,X),
    ! .
'行基本変形'(# _行目1 + _乗数 / _除数 # _行目2,_行列,X) :-
    \+(integer(_除数)),
    !,
    list_nth(_行目2,_行列,_行2),
    list_nth(_行目1,_行列,_行1),
    findall(U,(member(A,_行2) , U is A * _乗数 / _除数),_除算された行),
    '型推論加算'([_行1,_除算された行],_加算された行),
    replace_nth(1,_行目1,_加算された行,_行列,X),
    ! .
'行基本変形'(# _行目1 - _乗数 / _除数 # _行目2,_行列,X) :-
    !,
    _除数2 is -1 * _除数,
    '行基本変形'(# _行目1 + _乗数 / _除数2 * _行目2,_行列,X),
    ! .
'行基本変形'(_乗数 / _除数 # _行目,_行列,X) :-
    integer(_除数),
    !,
    list_nth(_行目,_行列,_行1),
    findall(X,(member(A,_行1) , X is A * _乗数 // _除数),_行2),
    replace_nth(1,_行目,_行2,_行列,X),
    ! .
'行基本変形'(_乗数 / _除数 # _行目,_行列,X) :-
    \+(integer(_除数)),
    !,
    list_nth(_行目,_行列,_行1),
    findall(X,(member(A,_行1) , X is A * _乗数 / _除数),_行2),
    replace_nth(1,_行目,_行2,_行列,X),
    ! .
'行基本変形'(_乗数 # _行目,_行列,X) :-
    !,
    list_nth(_行目,_行列,_行1),
    findall(X,(member(A,_行1) , X is A * _乗数),_行2),
    replace_nth(1,_行目,_行2,_行列,X),
    ! .

行基本変形3(_行目1,*,_乗数,_行目2,_行列,X) :-
    list_nth(_行目1,_行列,_行1),
    findall(U,(member(A,_行1),U is A * _乗数),_乗算された行),
    list_nth(_行目2,_行列,_行2),
    加算([_乗算された行,_行2],_加算された行),
    replace_nth(1,_行目2,_加算された行,_行列,X),!.
% *** user: '既約ガウス行列' / 1 ***
'既約ガウス行列'(_行列) :-
    '既約ガウス行列の一'([],_行列),
    '行列の転置'(_行列,_転置された行列),
    '既約ガウス行列検査'(_転置された行列).
% *** user: '既約ガウス行列' / 2 ***
'既約ガウス行列'(_,[]) :-
    ! .
'既約ガウス行列'(L,[_行|R]) :-
    append(L,_,_行),
    '要素がゼロ以外に出会うまで'(_行,P1,[1|_]),
    '既約ガウス行列'([0|P1],R) .
既約ガウス行列の一([_行]) :- 零以外の最初の要素が1(_行),!.
既約ガウス行列の一([_行|R]) :-
    零以外の最初の要素が1(_行),
    既約ガウス行列の一(R).
% *** user: '既約ガウス行列の一' / 2 ***
'既約ガウス行列の一'(_,[]) :-
    ! .
'既約ガウス行列の一'(L,[_行|R]) :-
    append(L,_,_行),
    '要素がゼロ以外に出会うまで'(_行,P1,[1|_]),
    '既約ガウス行列の一'([0|P1],R) .
単位行列(_単位行列,N) :-
    findall(L,(length(L,N),append(L1,[1|R],L),all(L1,0),all(R,0)),_単位行列),!.