Python 3 で数学を。

Python 3 とライブラリで数学の問題を解いていきます。統計学や機械学習はときどき。

Python (Python 3) で数学をやるにはどうしたらいいか。その15. 平方根。"俺の性根はジョン・ライドンに叩き直されたんだ!"

このシリーズの過去記事は以下にまとめてある

py3math.hatenablog.com

当記事について

当ブログ筆者 (以下、筆者) も、Python で数学をやるにはどうしたらいいか悩んでいた時期があるから、昔の自分に向けて書いたような記事。

対象とする読者

Python の入門書を一冊か二冊、一通りやった人で、Python の基本的な構文や基本的な用語がだいたいわかっている人。

そして、公式サイトを読む努力をちゃんとする人。

平方根を求めたり、計算してみたりしよう

ここではざっとになるが、平方根を求めたり、計算してみたりする (ざっとと書いたが、当記事には必ず覚えてほしいことがある)。

ここでも SymPy を使っていくが、その前に、Python の標準ライブラリの math にある sqrt() を使用してみよう。

対話モードから:

>>> import math
>>> math.sqrt(9)
3.0

では SymPy の sqrt() を使用してみよう。

>>> import sympy as sym
>>> sym.sqrt(9)
3

上が、基本的な使い方だ。

どんどん平方根を求めてみよう。

リスト内包表記で、いろいろな数 (数値) の平方根を求めてみる。

>>> n_list = [9, 0.64, 49/81]
>>> res = [sym.sqrt(i) for i in n_list]
>>> res
[3, 0.800000000000000, 0.777777777777778]

おっと、解決したほうがよい問題が起きた (もっといえば、解決すべき問題だ)。

49/81 の計算結果である、

0.777777777777778

だ。

標準ライブラリ の sqrt() ではどうなるかやってみよう。

>>> math.sqrt(49/81)
0.7777777777777778

同じ問題が起きる。

まず標準ライブラリで解決できるか試してみよう。

fractions から Fraction() をインポートしよう。

>>> from fractions import Fraction

そして、例えば以下のように実行してみよう。

>>> n = Fraction(49, 81)
>>> math.sqrt(n)
0.7777777777777778

解決できない (いや、筆者のスキル不足で解決できないだけで、上以外に Fraction() の有効な使い方があるのかもしれないが、頑張る必要はないと思う)。

では、SymPy で解決するにはどうしたらいいだろうか。

答えは、SymPy の Rational() を使用する。

>>> sym.sqrt(sym.Rational(49, 81))
7/9

解決できた。

必ず、この Rational() を使用した解決方法を覚えておいてほしい。

次は、平方根の乗法や除法をやってみよう。

√3 * √7:

>>> sym.sqrt(3) * sym.sqrt(7)
sqrt(21)

出力は、sqrt(21) で、計算結果は合っている。

では、SymPy の pprint() を使用するとどうなるかやってみよう。

>>> sym.pprint(sym.sqrt(3) * sym.sqrt(7))
√21

こちらのほうが 、より "数学的" な表現だろう。

√36 / √12:

>>> sym.sqrt(36) / sym.sqrt(12)
sqrt(3)
>>> sym.pprint(sym.sqrt(36) / sym.sqrt(12))
√3

などと、SymPy での平方根の求め方や計算は上で書いてきたように行う。

繰り返しになるが、Rational() はいろいろな場面で役立つから、必ず覚えておいてほしい。

なお、Rational() については、当ブログ過去記事で何度も使用している。左上の検索窓から Rational() 、または Rational と打ち込めばヒットする記事もあると思う (ヒットしない記事もある)。

平方根の問題だけでなく、ぜひ、"分数" の問題もいろいろ試してみてほしい。

(つづく)。

関連過去記事

py3math.hatenablog.com

参考文献 (数式を参考)

チャート式体系数学2代数編―中高一貫教育をサポートする

チャート式体系数学2代数編―中高一貫教育をサポートする