{ "cells": [ { "cell_type": "markdown", "id": "ce5d9df2", "metadata": {}, "source": [ "# 四次方程式を解く\n", "\n", "フェラーリの方法では、まず四次方程式を変数変換し、三次項のない次の形にします。\n", "\n", "$$\n", "y^4+py^2+qy+r=0.\n", "$$\n", "\n", "次に、多項式が二つの二次式に因数分解されるよう、レゾルベントの\n", "パラメーター $u$ を選びます。$u$ が満たす条件は、次の三次方程式です。\n", "\n", "$$\n", "u(p+u)^2-4ru-q^2=0.\n", "$$\n" ] }, { "cell_type": "markdown", "id": "aa63359a", "metadata": {}, "source": [ "## 三つの構造的な場合分け\n", "\n", "複二次方程式($q=0$)は、二次方程式を2回解くだけで解けます。一般の\n", "三次項のない四次方程式では、三次レゾルベントを使います。最後に、モニックな\n", "四次方程式の三次項は $x=y-b/4$ によって消去します。非モニックな多項式は、\n", "その前に正規化します。\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "905d616d", "metadata": {}, "outputs": [], "source": [ "declare symbol x, y, u: MathValue\n", "\n", "def solveBiquadratic\n", " (p : MathValue)\n", " (q : MathValue)\n", " : (MathValue, MathValue, MathValue, MathValue) :=\n", " let (s1, s2) := qF' 1 p q\n", " (r1, r2) := qF' 1 0 (- s1)\n", " (r3, r4) := qF' 1 0 (- s2)\n", " in (r1, r2, r3, r4)\n" ] }, { "cell_type": "markdown", "id": "04d22c92", "metadata": {}, "source": [ "## 複二次方程式への近道\n", "\n", "$x^4-5x^2+4=0$ では、$t=x^2$ と置換すると $(t-1)(t-4)=0$ が\n", "得られます。まず $t$ について解き、各値の平方根を正負ともに取れば、四つの解が\n", "すべて得られます。\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "79e4b59d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "$(2, -2, 1, -1)$" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "solveBiquadratic (-5) 4\n" ] }, { "cell_type": "markdown", "id": "321c1efc", "metadata": {}, "source": [ "## フェラーリの方法の一般分岐\n", "\n", "すでに三次項がない次の多項式を考えます。\n", "\n", "$$\n", "y^4-15y^2-10y+24\n", " =(y+3)(y+2)(y-1)(y-4).\n", "$$\n", "\n", "ここでは $(p,q,r)=(-15,-10,24)$ なので、実際に複二次方程式ではありません。\n", "このレゾルベントには、計算に都合のよい解 $u=1$ があります。\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "b197dfb2", "metadata": {}, "outputs": [], "source": [ "def p : MathValue := -15\n", "def q : MathValue := -10\n", "def r : MathValue := 24\n", "def chosenU : MathValue := 1\n", "\n", "def resolvent (u : MathValue) : MathValue :=\n", " u * (p + u)^2 - 4 * r * u - q^2\n", "\n", "def factorPlus : MathValue :=\n", " y^2 + (p + chosenU) / 2\n", " + sqrt chosenU * (y - q / (2 * chosenU))\n", "\n", "def factorMinus : MathValue :=\n", " y^2 + (p + chosenU) / 2\n", " - sqrt chosenU * (y - q / (2 * chosenU))\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "8400ad4c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "$0$" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "resolvent chosenU\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "34aa89fd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "$(y^{2} + y - 2, y^{2} - y - 12)$" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "(factorPlus, factorMinus)\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "9ea1631f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "$((1, -2), (4, -3))$" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "(qF factorPlus y, qF factorMinus y)\n" ] }, { "cell_type": "markdown", "id": "caed1bd8", "metadata": {}, "source": [ "## 因数分解が成り立つ理由\n", "\n", "レゾルベントの解 $u$ を一つ選ぶと、三次項のない四次式を次の二つの式へ\n", "分解できます。\n", "\n", "$$\n", "y^2+\\frac{p+u}{2}\n", " \\pm\\sqrt{u}\\left(y-\\frac{q}{2u}\\right)=0.\n", "$$\n", "\n", "二次方程式ソルバーを2回呼び出すことで、四つの解をすべて得られます。\n" ] }, { "cell_type": "markdown", "id": "36b0ae0e", "metadata": {}, "source": [ "## まとめ\n", "\n", "二つの実行経路はフェラーリの証明をそのまま反映しています。複二次方程式の場合は\n", "ただちに二次方程式へ還元し、一次項が0でない場合はレゾルベントの解を一つ使って\n", "二つの二次因子を取り出します。Egisonでは、厳密な因数分解と四つの解を記号のまま\n", "保てます。\n" ] } ], "metadata": { "kernelspec": { "display_name": "Egison", "language": "egison", "name": "egison" }, "language_info": { "codemirror_mode": "egison", "file_extension": ".egi", "mimetype": "text/x-egison", "name": "egison" } }, "nbformat": 4, "nbformat_minor": 5 }