このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1274827528/110
#  [1] 授業単元:プログラミング演習 
#  [2] 問題文(含コード&リンク):(1)x^2*cosx の0〜π/2までの積分 (2)(logx)^2 
#  の1〜eまでの積分 
#  

シンプソンの公式([],H,S1,S) :- S is S1 * H / 3,!.
シンプソンの公式([A,B,C|R],H,S1,S) :-
        S2 is S1 + A + 4 * B + C,
        シンプソンの公式([C|R],H,S2,S).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

f(X,Y) :- Y is X^2 * cos(X).

'等間隔シンプソン法を使ってx^2*cosx の0〜π/2までの積分'(_標本点数,_面積) :-
        標本点数は3以上の奇数である(_標本点数),
        刻みは(_標本点数,_刻み),
        標本点ならびを得る(_標本点数,_刻み,_等間隔標本点データならび),
        シンプソンの公式(_等間隔標本点データならび,_刻み,0,_面積).

標本点数は3以上の奇数である(_標本点数) :- _標本点数 >= 3,1 is _標本点数 mod 2.

刻みは(_標本点数,_刻み) :- _刻み is (pai / 2 - 0) / (_標本点数 - 1).

標本点ならびを得る(_標本点数,_刻み,_等間隔標本点データならび) :-
        findall(Y,(for(1,M,_標本点数),X is 0 + (M - 1) * _刻み,f(X,Y)),_等間隔標本点データならび),!.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

f(X,Y) :- Y is log(X) ^ 2.

'等間隔シンプソン法を使って(logx)^2の1〜eまでの積分'(_標本点数,_面積) :-
        標本点数は3以上の奇数である(_標本点数),
        刻みは(_標本点数,_刻み),
        標本点ならびを得る(_標本点数,_刻み,_等間隔標本点データならび),
        シンプソンの公式(_等間隔標本点データならび,_刻み,0,_面積).

標本点数は3以上の奇数である(_標本点数) :- _標本点数 >= 3,1 is _標本点数 mod 2.

刻みは(_標本点数,_刻み) :- _刻み is (exp(1) - 1) / (_標本点数 - 1).

標本点ならびを得る(_標本点数,_刻み,_等間隔標本点データならび) :-
        findall(Y,(for(1,M,_標本点数),X is 1 + (M - 1) * _刻み,f(X,Y)),_等間隔標本点データならび),!.