アットウィキロゴ

回帰式(regression_equation)を求める

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