LoginSignup
1
2

More than 1 year has passed since last update.

pythonを便利に使おう第三回! 数学編!

Posted at

初めに

 積分というのは原理を理解しなければ使用するときに困ります。積分といえば不定積分と定積分があって、定積分はある範囲の数値を足し合わせることで面積を出します。学校での積分は、作業量に付き段々と本来の目的を失うように思います。数学のドリルをとけば、不定積分、不定積分…という風に公式を利用しなければテストで高い点数なんて取れないでしょう。
 レベルを上げるということは理解を深めることと作業の効率化にあると思います。理解には自分の脳みそを頑張らせないといけませんが、効率化にはパソコンを使用してもいいと思います。

とかいう言い訳はさておき!

 試験でパソコンを持っていけるわけはないけれど、pythonのsympyを使って積分をしてみようと思います。

数学 IIIα

 僕の学校で数学のテストが行われたのですが、そこから適当に問題を出してきます。因みにですが死ぬほど簡単でした。つまり言えることといえば、パソコンなんて必要ありません…が、僕は80点しか取れなかったので、ミスをなくすという意味ではパソコンは100%必要ですね。

第一問 次の定積分を求めよ。(ただし積分定数Cは省いてよい)

\int \frac{2}{5x}dx\qquad\int 4x\,logxdx\qquad\int sin6x\,sin3x \\

(一応)部分積分の問題でした。

\int \frac{2}{5x}dx\\
>>> from sympy import *
>>> init_printing()
>>> x=Symbol('x')
>>> y=2/(5*x)
>>> integrate(y)
2⋅log(x)
────────
   5 
\int 4x\,logxdx\\
>>> from sympy import *
>>> init_printing()
>>> x=Symbol('x')
>>> y=4*x*log(x)
>>> integrate(y)
   2           2
2⋅x ⋅log(x) - x 

おお、何も指定せずとも部分積分もしてくれるんですね。できるかな?と予想はしていましたが、本当に出来るとは。

\int sin6x\,sin3x \\
>>> from sympy import *
>>> init_printing()
>>> x=Symbol('x')
>>> y=sin(6*x)*sin(3*x)
>>> integrate(y)
  2⋅sin(3⋅x)⋅cos(6⋅x)   sin(6⋅x)⋅cos(3⋅x)
- ─────────────────── + ─────────────────
           9                    9        

流石にちょっとだけ時間がかかりました。と言っても5秒もかかりませんでしたが。しかしこれ…本当にあってるのか?と少し不安になったため三角関数の積を和などに変換する公式を利用してこねくり回してみれば、答えと合ってることを確認できました。さすがsympy!さすがpython!

第二問 次の不定積分を求めよ。(ただし積分定数Cは省いてよい)

\int_{2}^{3} \sqrt{4x-x^2}dx\qquad\ \int_{0}^{2} 2\sqrt{16-x^2}dx\qquad\ \int_{-1}^{0} \sqrt{x^2+2x+3}dx\ \\

定積分は少しだけ関数に渡す値を増やすだけです。

\int_{2}^{3} \sqrt{4x-x^2}dx\
>>> from sympy import *
>>> init_printing()
>>> x=Symbol('x')
>>> y=sqrt(4*x-x**2)
>>> integrate(y,(x,2,3))
√3   π
── + ─
2    3
\int_{0}^{2} 2\sqrt{16-x^2}dx\
>>> from sympy import *
>>> init_printing()
>>> x=Symbol('x')
>>> y=2*sqrt(16-x**2)
>>> integrate(y,(x,0,2))
       8⋅π
4⋅√3 + ───
        3 
\int_{-1}^{0} \sqrt{x^2+2x+3}dx\
>>> from sympy import *
>>> init_printing()
>>> x=Symbol('x')
>>> y=sqrt(x**2+2*x+3)
>>> integrate(y,(x,-1,0))
0                      
⌠                      
⎮     ______________   
⎮    ╱  2              
⎮  ╲╱  x  + 2⋅x + 3  dx
⌡                      
-1 

おや?今までとは違う挙動を見せましたね。これはどういうことでしょう。定積分ではなく不定積分として書き直してやってみました。

⌠                      
⎮     ______________   
⎮    ╱  2              
⎮  ╲╱  x  + 2⋅x + 3  dx
⌡                      

ふむ…これは、sympyの限界とかそういうことなのでしょうか。予想される処理が大きすぎるため、ストッパーが発動したとか?調べてみましょう。
と、息こんで色々と調べてみたは良いものの、どうしてこうなっているのかよくわかりませんでした。代数計算として利用する際にはこの形の方が便利だとでも言うつもりなのでしょうか。
わかる方がいればコメントで教えていただければ幸いです。

最後に

 SNSを作る息抜きにするpythonは楽しいなぁ!
 webサイトを何か一つ作ってみても良いのですが、初めに作るのはSNSが良いと考えて幾星霜、依頼を出したり受けたりするためのSNS作りをしているのですが、これが一人では中々に辛い!
依頼をするためのSNSを作り終わる前に、色んな人に対して依頼を出すかもしれません。特にCSSとか、javascriptsとか、jqueryとか。
 フロントエンドの開発にまで手を回してたら今度はテスト勉強が出来なくて単位を落としてしまう!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2