数学とプログラミングのどちらも勉強中です。片方ずつやるより一緒にやったほうが効率が良いのではないか、かつ問題を解くだけだったりプログラムを写経するよりは理解が進むと考えました。
今回は有理数と無理数について。分数と√の書き方を学びます。以下の式を例として実行していきます。
$$\frac{\sqrt{60}\times\sqrt{2}}{5 \sqrt{5}} \div \sqrt{\frac{3}{2}}$$
数式引用:生き抜くための高校数学
計算はJupyter Notebook上で行っています。
import numpy as np
from fractions import Fraction
Fraction((np.sqrt(60)*np.sqrt(2))/(5*np.sqrt(5)))/Fraction(3,2)**0.5
>> Fraction(7205759403792795, 9007199254740992)
分数はFraction、√はnumpyのsqrtをそれぞれ使うため、事前にimportしています。
一番最初のFractionはなくてもいいですね。7205759403792795/9007199254740992を計算すると0.8000000000000002になります。
手で計算する場合は4/5 = 0.8になるはずですが、プログラムで計算すると\(\sqrt{2}\)のような無限小数は表現できないため途中で切り捨てられた結果、先の結果のように近似した値になってしまいます。
以下のように\(\sqrt{3/2}\)を表現しようとするとエラーになるので、0.5乗しています。
np.sqrt(Fraction(3,2))
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
AttributeError: 'Fraction' object has no attribute 'sqrt'
The above exception was the direct cause of the following exception:
(中略)
TypeError: loop of ufunc does not support argument 0 of type Fraction which has no callable sqrt method
Fractionをわざわざ書かなくても計算結果は変わらないようです。ただプログラムを読むときに/ばかりだとわかりにくいので書いておいたほうが良いのかもしれません。
np.sqrt(60)*np.sqrt(2)/(5*np.sqrt(5))/np.sqrt(3/2)
>>0.8000000000000002
こちらもどうぞ

生き抜くための高校数学: 高校数学の全範囲の基礎が完璧にわかる本
★☆★☆★☆★☆★☆★☆★☆ 佐藤優氏(作家・元外務省主任分析官)大絶賛!! 「この本ならば、最後までやり抜くことができる。 数学に苦手意識を持つ大人にも子どもにも使える好著。」 ★☆★☆★☆★☆★☆★☆★☆ ベストセラー「新体系・高校数学...
https://amzn.to/3xE2H1f