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).
这是一个返回转置矩阵的函数。如何编写一个给出逆矩阵的函数?
答案 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
测试很重要,因为不是每个矩阵都有反转。