• 締切済み

prolog言語で積分計算

PROLOG計算 prolog言語で積分計算のできるプログラムを作っています。 積分定数Cを表示させるようにしているのですが 、3*x^3の積分の結果が 3* (x^2/2+c)+cとなってしまいます。 ()内のcを消すにはどーしたらよいでしょうか? プログラムは以下のように書きました。 t(x,x^2/2+c). t(Y ,Y*x+c) :- integer(Y). t(Y+Z,TY+TZ+c):- t(Y,TY),t(Z,TZ). t(Z*Y,Z*TY+c) :- integer(Z),t(Y,TY). t(Y^N ,(1/N)*Y^N1*TY+c):-integer(N),N1 is N+1,t(Y,TY). t(Y-Z,TY-TZ+c):-t(Y,TY),t(Z,TZ).

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「積分定数をつけるだけ」のルール, たとえば integrate(X, Y+c) :- integrate0(X, Y) を作っておき, 途中の計算は積分定数なしで済ませることができれば簡単. ところで, 「3*x^3の積分の結果」はどうやっても「3* (x^2/2+c)+c」にはならないんですが, それは問題なしでしょうか?

iajpjp
質問者

補足

ご返答ありがとうございます。 プログラムを書き直してみました。 (x,x^2/2). t(Y ,Y*x) :- integer(Y). t(Y+Z,TY+TZ):- t(Y,TY),t(Z,TZ). t(Z*Y,Z*TY) :- integer(Z),t(Y,TY). t(Y^N ,(1/N1)*Y^N1):-integer(N),N1 is N+1. t(Y-Z,TY-TZ):-t(Y,TY),t(Z,TZ). t(sin(Y), -cos(x)). t(cos(Y),sin(x)) :. t(tan(Y),-log(cos(Y))). t(1/x ,log(x)). t(X, Y+c):-t0(X, Y). 積分はうまくいくのですが、積分定数が付かないです。 よろしければアドバイスをお願いいたします。

関連するQ&A

  • 計算のやり方をわかりやすく教えて下さい。

    672+168x(←エックス)=168y×3+168z×8 672+21x(←エックス)=21y×6+21z×4 672+6x(←エックス)=6y×8+6z×9 672+tx(←エックス)=ty×14+tz×1 以上の連立方程式のそれぞれx y z tの値を求めたいのですが、計算がややこしくて答えが出せません。どなたかわかりやすく教えていただけませんでしょうか。 ちなみに左辺のxは「エックス」で、右辺のxは「かける」です。

  • 偏微分方程式の数値計算について

    偏微分方程式の解の数値計算の仕方についての質問です。 例えば、偏微分方程式の解が以下のような形だったとします。 T(x,y)=Σ(A1n*x^n+A2n*x^(-n))*cos(ny) nは変数分離定数です。A1n,A2nが積分定数です。またn=1~∞とします。 今、あるxにおけるTとyの数値計算をするとします。 つまりxを定数として扱います。 そして、上式を条件に代入して解を求めるのですが、 n=3の場合の結果が欲しい場合は、 n=1,2,3のとき連立方程式をそれぞれで解いて、 数値結果は、 (n=1の結果)+(n=2の結果)+(n=3の結果) という考え方であってますか? アドバイスをお願いします。 プログラムで数値計算をするのですがなかなかうまくいかずこまっています。

  • prologについて

    emacsというソフトでprologについて勉強しているんですが、 times,plus,exp,mod を定義してから動作の確認をしたいのです。 (<- - (times 0 ?x 0)) (<- (times (s ?x) ?y ?z) (times ?x ?y ?xy) (plus ?xy ?y ?z)) (<- - (exp (s ?n) 0 0)) (<- (exp 0 (s ?x) (s 0))) (<- (exp (s ?n) ?x ?y) (exp ?n ?x ?z) (times ?z ?x ?y)) (<- - (mod ?x ?y ?x) (< ?x ?y)) (<- (mod ?x ?y ?z) (plus ?x1 ?y ?x) (mod ?x1 ?y ?z)) と定義したのですが、確認をするときにどのように確認したらよいのか教えて頂けますでしょうか?

  • n次元の積分計算

    n次元の積分の計算です。 どなたか解説をお願い致します。 x,y∈R^N,t>0とします 積分区間を-∞~t^(-1/2)xとしたとき ∫exp(ーy^2)dy はどのように計算できるのでしょうか? 手ほどきよろしくお願い致します。

  • 線積分

    以下の線積分なのですが、どのように積分すればいいのか分かりません。 どなたか、解答もしくは方針だけでも教えてください。 F=-(GmM)/(|r|^3)・r Fとrはベクトル が与えられている。 (1) ∫[C_1]F・dr (2)∫[C_2]F・dr ただし、各積分領域は C_1については、 点(x_0,y_0,z_0)から点(x_1,y_1,z_1)への線積分で x=x_0+(x_1-x_0)t y=y_0+(y_1-y_0)t z=z_0+(z_1-z_0)t (0<=t<=1) である。 C_2については、円筒座標系で x=pcosφ y=psinφ z=h (0<=φ<=Φ) です。 わかりづらくてすみません。

  • 広義重積分の問題

    Ω={ (x , y) | 0 ≦ x , 0≦ y , x + y < 1} とします。 Ω上で ∬ ( x / (1 - x - y)^(1/2)  ) dxdy を求めよ。 という問題です。 増加列として Ωn = { (x , y) | 0 ≦ x , 0≦ y , x + y ≦ 1 / n } をとり、Ωnで重積分したあとに n → 1 とすればよいと思ったのですが… 計算してみると添付画像のようになり、分母が0に近づくので発散してしまいます。 一応ここにも式で書いておきます。 積分範囲は 0 ≦ x ≦1/n , 0≦ y ≦-x + 1/n です。   ∬ ( x / (1 - x - y)^(1/2)  ) dxdy =∫x dx ∫ {1 / (1 - x - y)^(1/2) } dy =∫x [ (2/3) (1 - x - y )^(-3/2) ] dx =(2/3) (∫{ 1 / (1 - 1/n )^(3/2) } dx - ∫{ x / (1 - x )^(3/2) } dx ) = (1/3) ・(1 / (1 - 1/n )^(3/2) )・(1/n^2) - (2/3)∫{ x / (1 - x )^(3/2) } dx                            ( √(1-x) = t  と置く。 1≦t≦√(1-1/n) ) = (1/3) ・(1 / (1 - 1/n )^(3/2) )・(1/n^2) - (2/3)∫((1-t^2)/t^3 ) ・(-2t) dt   = (1/3) ・(1 / (1 - 1/n )^(3/2) )・(1/n^2) - (2/3) [ 2t + (2/3) t^(-3)] = (1/3) ・(1 / (1 - 1/n )^(3/2) )・(1/n^2) - (2/3){2√(1-1/n) + 2/3(1-1/n)^(3/2) - 8/3} = (1/3) ・(1 / (1 - 1/n )^(3/2) )・(1/n^2) - (4/3)√(1-1/n) - 4/9 (1-1/n)^(3/2) + 16/9 私の解答はどこで間違っているのでしょうか? 回答よろしくお願いします。

  • 積分計算です。どなたか教えてください。お願いします。

    ∫1/a^2+x^2 dx を解くとき、x=atanθと置いて、置換積分計算するのは分かるのですが、計算の最後で出てくる1/a・θ+C (Cは積分定数)でθをxの式に戻すときの『操作』が分かりません。お願いします。

  • prologの記号について

    prologを勉強中です.次のように階乗を計算します fact(N, 1) :- N < 1!. fact(N, X) :- N1 is N - 1, fact(N1, Y), X is N * Y. そのとき,1行目の最後の"!"は何を表すのでしょうか? たぶん,それ以上先を実行しないという意味だと思うのですが, 正しい意味が分かりません.ご指導お願いします.

  • 重積分・積分について

    重積分・積分の問題です。 1 ∫[0,2π]cosmxcosnxdx (m,n∈Z) まず和積公式を使って cosmxcosnx=1/2{cos(m+n)x+cos(m-n)x}とし、 0→2πで積分して 1/2[1/m+n*sin(m+n)x+1/m-n*sin(m-n)x][0→2π] ここまでは解けるのですがここから解くことが出来ませんでした。 積分区間が0のときはsin0=0ですので考えないとしたんですが、 2πの時にするであろう場合分けが思いつきません。 ここから回答をお願い出来ないでしょうか。 また自分の回答に自信があまり無いので 以下の問題の答えを教えていただけないでしょうか。 2 d/dx(arcsinx)^2 =2arcsinx/(√1-x^2) 3 ∫∫∫D dxdydz/{√1-(x^2+y^2+z^2)} (D={(x,y,z)∈R^3|x^2+y^2+z^2≦1}) 被積分関数は1/{√1-(x^2+y^2+z^2)}より x^2+y^2+z^2=1上の点が特異点の広義積分である。 ここでDa:x^2+y^2+z^2≦a^2とおく。ただしa>0とする。 極座標(r,θ,ψ)を定める。 x=rsinθcosψ y=rsinθsinψ z=rcosθ とおくと Daは Ea:0≦r≦a, 0≦θ≦π,0≦ψ≦2πにうつる。 またヤコビアンはr^2sinθである。 計算は省略します。 積分すると4πa^5/5となり、 lim [a→1-0]として 答えは4π/5 でしょうか。 文章読みにくくてごめんなさい。 回答お願いします

  • 次の三重積分を解いていただけると有難いです。

    極座標変換することにより、以下の積分を計算せよ。ただし、Rとdは正の定数で,z0は0<z0<R又はR+d<z0であるような定数とする。 ∫∫∫ 1/√(x^2+y^2+(z0-z)^2) dxdydz D={R^2≦x^2+y^2+z^2≦(R+d)^2} rの範囲をどうとればいいのか分からないのと、θの積分計算で詰まってます。どなたか教えてください。

専門家に質問してみよう