裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

SymPy だけでは解けない積分(?)

2021年11月26日 | ブログラミング

SymPy だけでは解けない積分

完全版は https://r-de-r.github.io/jupyterlab/pi.html

2019 の日付のある誰かのツイートで「Wi-fi パスワードを数式にするのが流行っている」とかあって,そこで示されているのが

  だ。

SymPy でやれば簡単じゃないかと思って,やってみるとおやまあという結果だったので記事にしてみる。

  using SymPy
  @syms x
  expression = (x^3 * cos(x/2) + 1/2) * sqrt(4-x^2)
  expression |> println
  sqrt(4 - x^2)*(x^3*cos(x/2) + 0.5)

なにはともあれ,やってみる。

  a = integrate(expression, (x, -2, 2))

随分時間がかかって,出てきた答えが以下のようなもの。2 つの定積分の和という答えを出してもらっても困る。ちなみに,Integral という関数はない。integrate だ。

  a |> println
  1.0*Integral(1.0*x^3*sqrt(4 - x^2)*cos(x/2), (x, -2, 2)) + 1.0*Integral(0.5*sqrt(4 - x^2), (x, -2, 2))

前半部分をもう一度やってみる。

  b = integrate(x^3*sqrt(4 - x^2)*cos(x/2), (x, -2, 2));

なんの進展もない結果が帰ってくる。後で対処する。

  b |> println
  Integral(x^3*sqrt(-(x - 2)*(x + 2))*cos(x/2), (x, -2, 2))

後半部分をやってみる。

  c = integrate(0.5*sqrt(4 - x^2), (x, -2, 2))

こちらはすぐに,(1.0* というのは気に入らないが)きれいな答えが得られた。π だ。

  c |> println
  1.0*pi

さて,b の integrate(x^3 sqrt(-(x - 2) (x + 2)) * cos(x/2), (x, -2, 2)) だが。

  b0 = integrate(x^3 * sqrt(-(x - 2) * (x + 2)) * cos(x/2), (x, 0, 2));

結局何も進展しない。

  b0 |> println
  Integral(x^3*sqrt(2 - x)*sqrt(x + 2)*cos(x/2), (x, 0, 2))

ここで,式をちゃんと見ると,う?奇関数(懐かしい用語)。

  expression2 = x^3 * sqrt(4 - x^2) * cos(x/2)
  expression2 |> println
  x^3*sqrt(4 - x^2)*cos(x/2)
  expression2(x => -x) |> println
  -x^3*sqrt(4 - x^2)*cos(x/2)

奇関数でした。なので,a の第 1 項は 0 なので,a の答えは a の第 2 項の π ということになる。

やれやれ。

#####

R では,数値微分しかできないのでやってみる。

> y = function(x) (x^3 * cos(x/2) + 1/2) * sqrt(4-x^2)
> options(digits=16)
> integrate(y, -2, 2)
3.141592653589796 with absolute error < 2e-09

#####

WolframAlpha でやってみた。数値積分になるが。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 2 直線の交点 SymPy/Julia | トップ | Julia で出生性比をプロットする »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事