paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

超簡単!Pythonを使って中学・高校レベルの数学問題を解いてみた

f:id:paiza:20170317175257p:plain
秋山です。

PythonはNumpyとかSympyとか、数値計算が得意なライブラリが充実しています。もちろん中学・高校の数学で習うレベルの計算もすぐにできちゃいます。

というわけで今回はPythonでプログラミングをして、中学・高校で習う数学の問題を解いてみました。

Pythonが使えるようになれば、中学・高校レベルの数学では困らずに済む。かもしれない。

■中学2年生レベル

連立方程式

◇問題

x + y = 3
x + 3y = 13
のとき、xとyを求めよ。

Numpyを使って、連立方程式を行列計算で解いてみました。

■中学3年生レベル

2次方程式

◇問題

x^2 - 10x + 24 = 0
のとき、xを求めよ。

昔の授業では
(x - 4)(x - 6) = 0
x = 4 , 6
このような解法を習ったと思います。

この問題は、NumpyのPolynomialを使って式を作り、roots()で結果を得ることができます。

なお真面目に(?)学校で習う公式を実装してみると、こんな感じです。

■高校数学レベル

◆順列と組み合わせ

これはNumpyなどを使わなくても、Python組み込みのitertoolsで計算できます。

◇問題

・それぞれ異なる色のボールが3個ある。
1.3個から2個を選んで並べた場合、何通りのパターンがあるか求めよ。(順列)
2.3個から2個を選んで取り出した場合、何通りのパターンがあるか求めよ。(組み合わせ)


3P2とか3C2とか、そのままですね。

◆集合

集合はsetを使います。setオブジェクトとしていろいろな演算が可能になります。
問題例

・A(1,2,3,4,5)とB(1,4)という集合がある。
1.BはAの部分集合であるか否か答えよ。
2.AとBの和集合を求めよ。
3.AとBの積集合を求めよ。


虚数複素数

Pythonでは虚数が簡単に表現できます。 10j とすると虚数部10の数値として表現できます。数学では i を使うのが一般的で、 j を使うのは電気工学などの分野が多いから、Pythonでは j ということなんでしょうかね。

10j * 10j などとすると、 -100 と結果を得ることができます。
また、 .real で実数部、.imag で虚数部を取り出せます。

微分積分

Sympyという記号計算用の便利なライブラリを使います。paiza.ioには入っていないのですが……。

pip install sympy

でインストールをして、下記のコードで計算できます。

import sympy
sympy.var("x")
f = x**2-10*x+24
print(sympy.diff(f, x))
print(sympy.integrate(f, x))

f = x**2-10*x+24 を微分積分した場合、下記の結果が出力されます。

2*x - 10
x**3/3 - 5*x**2 + 24*x

極限なども求められます

import sympy
sympy.var("x")
f = x**2-10*x+24
print(sympy.limit(f, x, sympy.oo))

Sympyはこういう処理でかなり強力なので、使えるようになっておくと捗ります。

■まとめ

というわけで、Pythonを使ってこの辺の解き方を応用していけば、数学で困らずに済む。かもしれない。

もちろん学校の試験などではプログラミングできるはずがないので、学生の方はきちんと解き方を理解しておきましょう。試験大事。

エンジニアになって機械学習を始めた大人にとっては、Pythonがあれば面倒な計算もすぐできるのが便利ですね(それでも多少の数学の復習は必要ですが……)。


プログラミング初心者で、まずはPythonを基礎から学びたい!」という方は、プログラミングが動画で学べる「paizaラーニングPython入門編から始めてみると、無理なく基礎を習得できると思います。
paiza.jp

Pythonの講座も公開中!プログラミングが動画で学べるレッスン


paizaは、プログラミング未経験者・初心者向け学習サービス「paizaラーニングを、新サービスとして独立オープンいたしました。

今回記事の中で使用しているPythonの入門講座も好評公開中です。ぜひごらんください!

↓詳しくはこちら
paiza.jp

そして、paizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
paiza.jp
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

ITプログラマ・エンジニア向け転職・就活・学習サービスのpaiza