今まで
f = 2*(-3*sqrt(2) + sqrt(19 - 10*sqrt(2)) + 3)/(-2 + sqrt(2) + sqrt(2)*sqrt(19 - 10*sqrt(2)))
のような,分母に平方根が含まれている式を有理化するとき,二段階に分けて行っていた。一段階での結果を見て第二段階へ行かなくてはならないし,面倒この上ない。
den = denominator(f)
terms = den.args;
temp = -terms[1] - terms[2] + terms[3];
terms = den.args;
temp = -terms[1] - terms[2] + terms[3];
den * temp |> expand;
temp2 = 32 + 16sqrt(Sym(2));
den = den * temp * temp2 |> expand |> simplify;
num = numerator(f) * temp * temp2 |> expand |> simplify;
f2 = num / den
f2 |> println
temp2 = 32 + 16sqrt(Sym(2));
den = den * temp * temp2 |> expand |> simplify;
num = numerator(f) * temp * temp2 |> expand |> simplify;
f2 = num / den
f2 |> println
-sqrt(19 - 10*sqrt(2))/4 + 1/4 + 3*sqrt(2)/4
有理化後の式 f2 が元の式 f と等しいことを確認する。
f == f2
trueChatGPT に聞いてみて,驚いた。
apart() があるのは知っていたが,以下のように一発で答えが出るというのは知らなかった。便利だ。
dummy # 変数は使わないので,何でもよい
apart(f, dummy) |> println
-sqrt(19 - 10*sqrt(2))/4 + 1/4 + 3*sqrt(2)/4
※コメント投稿者のブログIDはブログ作成者のみに通知されます