このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1247438792/559 
# [1] 授業単元:プログラミング 
# [2] 問題文(含コード&リンク): 
# http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9844.txt 
# 電流I[A]: 0.3   0.4   0.5   0.6   0.7  0.8 
# 電圧V[V]:  11.6  12.3  12.8  13.4  23.7 14.8 
# 
# この電流Iと電圧Vとの関係を最小二乗法によって、 
# 以下に示す1次関数で近似したい 
# 
# V=a0+a1I 
# 
# この時の係数a0とa1 また相関係数を求めなさい。 

'最小二乗法によってV=a0+aIの係数を求める'(L,A0,A1) :-
    i要素のみのならび(L,LI),
    v要素のみのならび(L,LV),
    a0(L,LI,LV,A0),
    a1(L,LI,LV,A1),!.

a1(L,LI,LV,A1) :-
    findsum(U1,(member(I1,LI),U1 is I1 * I1),Sgm1),
    sum_list(LI,Sgm2),
    AD1 is Sgm2 * Sgm2,
    findsum(U2,(member([I,V],L),U2 is I * V),Sgm3),
    sum_list(LV,Sgm4),
    A1 is (Sgm3 - Sgm2 * Sgm4) / (Sgm1 - Sgm2 * Sgm2),!.

a0(L,LI,LV,A0) :-
    findsum(U1,(member(I1,LI),U1 is I1 * I1),Sgm1),
    sum_list(LI,Sgm2),
    findsum(U2,(member([I,V],L),U2 is I * V),Sgm3),
    sum_list(LV,Sgm4),
    A0 is (Sgm1 * Sgm4 - Sgm3 * Sgm2) / (Sgm1 - Sgm2 * Sgm2).

i要素のみのならび(L,LI) :- findall(I,member([I,_],L),LI).

v要素のみのならび(L,LV) :- findall(V,member([_,V],L),LV).