このディレクトリの索引

相加平均(L,_相加平均) :-
    算術平均(L,_相加平均).

算術平均([],N,S,M) :- M is S / N,!.
算術平均([A|R],N,S,M) :- S1 is S + A,算術平均(R,N,S1,M) .

算術平均(L,M) :- length(L,N),算術平均(L,N,0.0,M).

標準偏差([],N,M,S,V) :- V is sqrt(S / (N - 1)),!.
標準偏差([A|R],N,M,S,V) :- S1 is (A - M) ^ 2,S2 is S + S1,標準偏差(R,N,M,S2,V).

標準偏差(L,V) :- length(L,N),算術平均(L,M),標準偏差(L,N,M,0.0,V) .

平均偏差(L,_平均偏差) :-
    算術平均(L,Avg),
    length(L,N),
    平均偏差(L,Avg,0.0,Amd),
    _平均偏差 is Amd / N.

平均偏差([],_,X,X).
平均偏差([A|R1],Avg,Y,X) :-
    Y2 is Y + abs(A-Avg),
    平均偏差(R1,Avg,Y2,X).

尖度(_標本,_尖度) :-
    length(_標本,_標本数),
    算術平均(_標本,_算術平均),
    分散(_標本,_分散),
    findsum(U,(member(A,_標本),U is (A-_算術平均) ^ 4),X1),
    _尖度 is X1 / ((sqrt(_分散) ^ 4) * _標本数).

尖度([],N,M,S1,S2,V) :- V is S2 / (M * S2 ^ 2).
尖度([A|R],N,M,S1,S2,V) :-
    S3 is (A - M) ^ 2,
    S4 is (A - M) ^ 4,
    S5 is S1 + S3,
    S6 is S2 + S4,
    尖度(R,N,M,S5,S6,V).

分散(L,V) :-
    length(L,N),
    算術平均(L,M),
    分散(L,N,M,0.0e+00,V).

分散([],N,M,S,V) :- V is S / N,!.
分散([A|R],N,M,S,V) :-
    S1 is (A - M) ^ 2,
    S2 is S + S1,
    分散(R,N,M,S2,V).

相乗平均(L,_相乗平均) :-
    幾何平均(L,_相乗平均).

幾何平均([],N,S,M) :- M is exp(S / N),!.
幾何平均([A|R],N,S,M) :-
    S0 is ln(A),
    S1 is S + S0,
    幾何平均(R,N,S1,M).

幾何平均(_標本ならび,_幾何平均) :-
    length(_標本ならび,_標本数),
    幾何平均(_標本ならび,_標本数,0,_幾何平均).

加重平均(_標本ならび,_加重平均) :-
    findsum(_重み,member([_重み,_],_標本ならび),S),
    findsum(M,(member([A,B],_標本ならび),M is A * B),S2),
    _加重平均 is S2 / S,!.

偏差値(_母集合,_偏差値ならび) :-
    加算(_母集合,_算術合計),
    length(_母集合,_ならびの長さ),
    _算術平均 is _算術合計 / _ならびの長さ,
    標準偏差(_母集合,_標準偏差),
    findall(_偏差値,(   member(_値,_母集合) ,
                        偏差値(_値,_算術平均,_標準偏差,_偏差値)),
            _偏差値ならび).

偏差値(_標本値,_算術平均,_標準偏差,_偏差値) :-
    _偏差値 is 10 * (_標本値 - _算術平均) / _標準偏差 + 50.

中央値(_標本ならび,_中央値) :-
    medium(_標本ならび,_中央値).

medium(L,_中央値) :-
    quicksort(L,L2),
    length(L2,Len),
    Len2 is Len // 2,
    medium(L2,Len2,_中央値).

medium(L,Len,_中央値) :-
    append(L1,[_中央値|L2],L),
    length(L1,Len),
    length(L2,Len),!.
medium(L,Len,_中央値) :-
    Len2 is Len - 1,
    append(L1,[_中央値1,_中央値2|L2],L),
    length(L1,Len2),
    length(L2,Len2),
    _中央値 is (_中央値1 + _中央値2) / 2.

最小公倍数(N1 * A,B,C) :-
    integer(B),
    最小公倍数(A,B,C),
    N1 is C // A,!.
最小公倍数(A,N2 * B,C) :-
    integer(A),
    最小公倍数(A,B,C),
    N2 is C // B,!.
最小公倍数(N1 * A,N2 * B,C) :-
    最小公倍数(A,B,C),
    N1 is C // A,
    N2 is C // B,!.
最小公倍数(A,B,X) :-
    integer(A),
    integer(B),
    最大公約数をユークリッドの互除法で求める(A,B,C),
    X is A * B // C.

最小公倍数([N1 * A|R],X) :-
    findall(U,member(_ * U,[N1 * A|R]),L1),
    最小公倍数(L1,X),
    最小公倍数_2([N1 * A|R],X),!.
最小公倍数([A,B],X) :-
    最小公倍数(A,B,X),!.
最小公倍数([A|R],X) :-
    最小公倍数(R,B),
    最小公倍数(A,B,X),!.

最大公約数(M,N,X) :-
    最大公約数をユークリッドの互除法で求める(M,N,X),!.

最大公約数をユークリッドの互除法で求める(M,N,N) :-
    0 is M mod N,!.
最大公約数をユークリッドの互除法で求める(M,N,X) :-
    Mod is M mod N,
    最大公約数をユークリッドの互除法で求める(N,Mod,X).