裏 RjpWiki

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

Julia で二重根号を外す

2022年10月01日 | Julia

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

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村