Julia で二重根号を外す
二重根号を外すには `sympy.sqrtdenest()` を使う。
using SymPy
x = √(5 + 2√Sym(6))
x |> N
3.1462643699419723423291350657155704455124771291873287012324867174426654953709
y = sympy.sqrtdenest(√(Sym(5) + 2√Sym(6)))
y |> N
3.1462643699419723423291350657155704455124771291873287012324867174426654953709
x - y |> N
0
1. 工夫が必要な例
以下はいずれも単に simplify() するだけでは解けない。
数式の項を取り出す args も役に立つ。
@syms x
y = 1 + 2(x+3) - 3x^2
y.args
(7, -3*x^2, 2*x)
1.1. 例 1
各項を別々に sqrtdenest し,簡約化する。
using SymPy
@syms x, f, s
x = √(2 + √Sym(15)/2) - √(2 - √Sym(15)/2)
f, s = x.args
(sqrt(sqrt(15)/2 + 2), -sqrt(2 - sqrt(15)/2))
f = sympy.sqrtdenest(f)
s = sympy.sqrtdenest(s)
y = f + s |> simplify
x |> N
1.732050807568877293527446341505872366942805253810380628055806979451933016908798
y |> N
1.732050807568877293527446341505872366942805253810380628055806979451933016908798
または,式を2乗して簡約化し,平方根を取る。
x^2 |> simplify |> sqrt
1.2. 例 2
x = 2√Sym(3)/√(Sym(6) -√Sym(27)) - √Sym(2)/√(Sym(9) - 4√Sym(5))
f, s = x.args
(-sqrt(2)/sqrt(9 - 4*sqrt(5)), 2*sqrt(3)/sqrt(6 - 3*sqrt(3)))
f = sympy.sqrtdenest(f) |> simplify
s = sympy.sqrtdenest(s) |> simplify
y = f + s |> simplify
x |> N
-2.127001479758296282603298193936525220323279534045494771601492023532366539644017
y |> N
-2.127001479758296282603298193936525220323279534045494771601492023532366539644017
1.3. 例 3
二重根号を外してから簡約化する。
x = 2/(1 + √Sym(2) + √Sym(3)) + √(2 - √Sym(3))
sympy.sqrtdenest(x) |> simplify
1
x |> N
1.0