test:-
ListX=[83.3,68.9,54.5,40,42.3],
ListY=[70.8,64.9,54.2,43,42.4],
regequ(ListX,ListY,ANSX,ANSY),
write(['ANSX'=ANSX]),nl,
write(['ANSY'=ANSY]).
regequ(ListX,ListY,ANSX,ANSY):-
list_length(ListX,N),
sumx(ListX,X,X2),
sumy(ListY,Y),
sumxy(ListX,ListY,XY),
List1=[N,X,Y],
List2=[X,X2,XY],
compxy(List1,List2,ANSX,ANSY).
sumx([],0,0):- !.
sumx([A|L],X,X2):-
sumx(L,XX,XX2),
X is A + XX,
X2 is A^2 + XX2.
sumy([],0):- !.
sumy([A|L],Y):-
sumy(L,YY),
Y is A + YY.
sumxy([],[],0):- !.
sumxy([A1|L1],[A2|L2],XY):-
sumxy(L1,L2,XYXY),
XY is A1*A2 + XYXY.
:- public list_length/2.
list_length(L,N):-
list_length(L,0,N).
list_length([],N,N).
list_length([_|L],N,M):-
NN is N+1,
list_length(L,NN,M).
compxy([A1,A2,A3],[B1,B2,B3],X,Y):-
Mul is A1/B1,
P1 is B2*Mul -A2,
P2 is B3*Mul -A3,
Y is P2/P1,
P3 is A3 - Y * A2,
X is P3/A1.
%?-test.
%[ANSX=15.2324460281489]
%[ANSY=0.689058027194656]
%yes
%LOOP = 69
最終更新:2012年09月03日 08:36