prolog中的逆矩阵

时间:2017-09-25 01:08:15

标签: prolog

    transpose([A|As], At) :-
       transpose(A, [A|As], At).

    transpose([], _, []).
    transpose([_|As], Rest, [At|Ats]) :-
       first_column(Rest, At, NewRest),
       transpose(As, NewRest, Ats).

    first_column([], [], []).
    first_column([[A|As]|Ass], [A|Acc], [As|Rest]) :-
       first_column(Ass, Acc, Rest).

这是一个返回转置矩阵的函数。如何编写一个给出逆矩阵的函数?

1 个答案:

答案 0 :(得分:1)

要在一般情况下这样做很糟糕,并且有lots of algorithms to choose from

但是,2x2的情况非常简单:

invert([[A,B],[C,D]], [[IA,IB],[IC,ID]]) :-
    Det is A*D-B*C,
    Det \= 0,
    IDet is 1/Det,
    IA is IDet*D, IB is IDet*(-B),
    IC is IDet*(-C), ID is IDet*A.

Det \= 0测试很重要,因为不是每个矩阵都有反转。