裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

数学問題-3

2020年11月10日 | ブログラミング
Python では sympy を使う
WolframAlpha の「高等学校 数学」の例題を解いてみる
https://ja.wolframalpha.com/examples/mathematics/koukousugaku/
 
二重根号の簡約は,直接的に解を求める事が出来ない(simplify では解が得られない)。
そこで,解法の基礎に帰って,それを sympy で解く。
 
問題 sqrt(124 - 6*sqrt(291)) を簡約する
 
>>> from sympy import *
>>> import math

>>> var('a, b, x, y')
(a, b, x, y)

>>> x = 124
>>> y = 10476 # = 36*291 = 4*2619
>>> simplify(sqrt(x-sqrt(y))) # math.sqrt(x - math.sqrt(y))
sqrt(124 - 6*sqrt(291))
>>> simplify(sqrt(x-2*sqrt(y//4)))
sqrt(124 - 6*sqrt(291))

>>> simplify(sqrt(a+b-2*sqrt(a*b))) # この形にしたい
sqrt(a + b - 2*sqrt(a*b)) # == sqrt(b) - sqrt(a), b > a
>>> eq1 = Eq(a+b, x)
>>> eq2 = Eq(a*b, y//4)
>>> res = solve([eq1, eq2]) # 連立方程式を解く
>>> res
[{a: 27, b: 97}, {a: 97, b: 27}] # a = 27, b = 97 が解
>>> a2, b2 = list(res[0].values())
>>> a2+b2
124
>>> a2*b2
2619
>>> ans0 = sqrt(a2+b2-2*sqrt(a2*b2)) # math.sqrt(124 - 2*math.sqrt(2619))
>>> ans1 = sqrt(max(a2, b2)) - sqrt(min(a2, b2)) # math.sqrt(97) - math.sqrt(27)
>>> ans0 == ans1
False # 等しくはないが
>>> ans1.evalf(), ans0.evalf()
(4.65270537908947, 4.65270537908947) # 実質的に等しい
>>> (ans0 - ans1).evalf()
0.e-121



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 数学問題-2 | トップ | 数学問題-二重根号の簡約(R ... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事