はじめに
Pythonには様々なライブラリがあり、標準・外部ともに便利なものがたくさんあります。
今回は外部ライブラリのsympyを用いて、数学の入試問題の答えを求めてみます。
・プログラミングを通して、数学を勉強してみたいと思ってる人
・数学に対して苦手意識を持ってる人
・何か作りたいものはないけど、プログラミングを始めてみたい人
Pythonを通して数学と戯れませんか?🐍🎸
解いた問題は、qiitaに備忘録として投稿し、他の人にも共有してみましょう!!
▶外部ライブラリにつき、予めインストールを要します。(以下、入力例)
conda install sympy #エラーが起これば、下のコマンドを実行してください。
pip install sympy
目次
本編
積分
数式
信州大で出題された問題: e^{\!-x}sin\left(x \right)
コーディング
from sympy import *
x = Symbol('x')
sol = integrate(exp(x*-1)*sin(x))#信州大 積分
print(sol)#答えは、-exp(-x)*sin(x)/2 - exp(-x)*cos(x)/2
はい、これだけで終わりです。
驚いた方もいらっしゃるのはないでしょうか。
最初なので、一行ずつ説明します。
x = Symbol('x')
- 数学的には、xを変数としてます
- プログラミング的には、左辺のxとは未知数であることを右辺で表現してます
sol = integrate(exp(x*-1)*sin(x))
- 数学的には、問題の積分計算をしてます
- プログラミング的には、右辺で積分した返り値を左辺のsolに代入してます
プログラミングは一般的に右辺にどういう動作をするか記述するため、左辺は自由に決めて問題ありません。
既存のコードを見る際は、初めに左辺の変数名を参考にしつつ、右辺で何をしてるのか気にしてみてください。
print(sol) #-exp(-x)*sin(x)/2 - exp(-x)*cos(x)/2
- 数学的に言うと、積分の答えを書いてるといった感じです。
- プログラミング的には、solの中身を標準出力しています。
- 標準出力はプログラミングの基本のため、これから幾度も出会うことでしょう。
- Pythonのprint関数は+αの機能が数多くあるので、各自で調べてみてください。
solの値は積分定数が0に限るので、正確には-exp(-x)*sin(x)/2-exp(-x)*cos(x)/2+Cです
三角関数
数式
2019年横浜市立(医)で出題された問題: tan\left(π/24 \right)
コーディング
from sympy import *
sol2 = 1/(tan(pi/24)) #2019年横浜市立(医)
print(sol2) #答えは1/(-(sqrt(2)/4 + sqrt(6)/4)/(-sqrt(2)/4 + sqrt(6)/4) + 1/(-sqrt(2)/4 + sqrt(6)/4))
-
数学的補足
- 今回の問題は、pi/12(=15°)の半角が、pi/24(=7.5°)あることの発見がカギ。
- まずは、sin30°やcos30°の値から半角の公式よりsinとcosのpi/12(=15°)の値を求める
-
プログラミング的補足:
- 開発者がコメントを残したいときは、文頭に特定の記号を入れます。
- Pythonでは、#を入れるとその文の後ろではコメントアウトされます。
↓--以下、tan(π/24)を手作業で解く時に必要な値(参考)--↓
sin15°= -sqrt(2)/4 + sqrt(6)/4
cos15°= sqrt(2)/4 + sqrt(6)/4
sin7.5° = -sqrt(3)*sqrt(1/2 - sqrt(2)/4)/2 + sqrt(sqrt(2)/4 + 1/2)/2
cos7.5° = sqrt(1/2 - sqrt(2)/4)/2 + sqrt(3)*sqrt(sqrt(2)/4 + 1/2)/2
実数解と虚数解をもつn次方程式
数式
2021年早稲田大学で出題された問題: x^{\!4}+5x^{\!3}-3x^{\!2}+4x+2 ※(1+√3i)/2を解に持つことは明示
コーディング
from sympy import *
x = Symbol('x')
sol3 = solve((x**4)+5*(x**3)-3*(x**2)+4*(x)+2,x) #2021年早稲田大学
print(sol3) #[-3 - sqrt(7), -3 + sqrt(7), 1/2 - sqrt(3)*I/2, 1/2 + sqrt(3)*I/2]
-
数学的補足:
- 今回は4次方程式のため、解は4つ存在する
- (1+√3i)/2、(1-√3i)/2の和と積は1である⇔x^2-x+x+1=0
- 「実数係数のn次方程式が虚数解を持つとき、その共役複素数も解となる」性質より残り2つとなる
- 与式とx^2-x+x+1の商がx^2+6x+2なので、残りの2つはこの二次方程式の解(実数解)となる
("b^2-4ac = 7" かつ "b=3, a=1/2" のとき、c=1 ⇔ a=1, b=6, c=2の二次方程式 ⇔ x^2+6x+2=0となり、今回の4次方程式の残りの二つの解はこの二次方程式の解となると解釈しても良い)
-
プログラミング的補足:
- 少なくとも、Pythonではべき上の表現を**で表現できます。
References
More Info
- About Sympy:https://www.sympy.org/en/index.html
- About How to Use Sympy: https://note.nkmk.me/python-sympy-factorization-solve-equation/
About me
- SNS landing page(lit.link): https://lit.link/myon123
- GitHub: https://github.com/myon-bioinformatics
- Qiita: https://qiita.com/myon-bioinformatics
- Twitter(仕事用): https://twitter.com/myonitbusiness
- Twitter(プライベート用): https://twitter.com/myonmusicpgdev
- tumblr: https://www.tumblr.com/myon-helloworld
- Reddit: https://www.reddit.com/user/myon_reddit
- Pixiv: https://www.pixiv.net/users/87109499
- YouTube(Composer): https://www.youtube.com/channel/UC22_pvlkQynYsrSpAfyzEzA
- SpeakerDeck: https://speakerdeck.com/myon_bioinformatics
- マシュマロ(質問箱): https://marshmallow-qa.com/myonitbusiness
- LINE: https://line.me/R/ti/p/@661cphit
- Microsoft TechNet: https://social.msdn.microsoft.com/Profile/myon.TechNet
- プロフカード: https://profcard.info/u/ziUhwgZihSSTLZdqPZ0gz5aru6A3
- ニコニコ動画(niconico): https://www.nicovideo.jp/user/126513036
- Wish List: https://www.amazon.co.jp/hz/wishlist/ls/290EJPJ3PAS73?ref_=wl_share
- 転職ドラフト: https://job-draft.jp/users/58541
- RESUME.id: https://www.resume.id/myon
- Wantedly: https://www.wantedly.com/id/myon123
- Mastodon: https://mstdn.social/@myon
- mixi: https://mixi.jp/show_profile.pl?id=68...
- Instagram: https://www.instagram.com/myonmusicpgdev
- Pinterest: https://www.pinterest.jp/myonmusicpgdev
- Wantedly: https://www.wantedly.com/id/myon123
- Forkwell: https://portfolio.forkwell.com/@myon