Python では sympy を使う
WolframAlpha の「高等学校 数学」の例題を解いてみる
https://ja.wolframalpha.com/examples/mathematics/koukousugaku/
WolframAlpha の「高等学校 数学」の例題を解いてみる
https://ja.wolframalpha.com/examples/mathematics/koukousugaku/
二重根号の簡約は,直接的に解を求める事が出来ない(simplify では解が得られない)。
そこで,解法の基礎に帰って,それを sympy で解く。
そこで,解法の基礎に帰って,それを 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))
>>> 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
>>> ans0 == ans1
False # 等しくはないが
>>> ans1.evalf(), ans0.evalf()
(4.65270537908947, 4.65270537908947) # 実質的に等しい
>>> (ans0 - ans1).evalf()
0.e-121
※コメント投稿者のブログIDはブログ作成者のみに通知されます