2018年5月25日金曜日

電卓で五次方程式を解く 前編

先日「算額タイムトンネル」という本を読みました。
過去とつながった算額を通しての和算vs.現代数学!
というなかなか面白い内容でした。
一般人がついてこられるようにか、数学的にはあまり高度なことは書いてありませんでしたが。
本書では、電卓で五次方程式を解くということをやっていました。
算木vs.電卓!(笑)
解こうとしていた方程式は、

270000x^5-12757830x^4+213355227x^3-1588201740x^2+5174433603x-5700629340=0

というものでした。
今回はこの問題をネタにして遊んでみたいと思います。

本書ではこの問題について、
「砂浜で、砂金をひと粒落としたから捜せ、って言われた感じ」
「何千という可能性を泥臭く試し、地道に解くしかない問題だ」
「美しさの欠片もなく、普段の波瑠であれば見向きもしなかっただろう」
などとひどいことを言っていました。
波瑠というのはこの小説の主人公の名前です。
地道に解くしかないと決めつけて思考を放棄していますね。
だったら地道に解くしかないということを証明してみせてほしいものです。

主人公は解を見つけるために電卓で組み立て除法を実行していたようです。
組み立て除法とは、多項式を一次式で割るときの計算方法です。

例えば、2x^3-9x^2+13x-6という多項式をx-3で割ってみましょう。

数字を3段に書いて計算します。
一段目には多項式の係数2,-9,13,-6を順に書きます。
x^2の項がない場合などは0を記入します。
二段目はとりあえず空けておきます。
三段目は一段目と二段目の合計を書いていきます。
まず左端、一列目の一段目と二段目の合計を三段目に記入します。
最初は最高次の係数の2をそのまま記入することになります。
三段目に記入したら、その数字を3倍して次の列の二段目に記入します。
この3はx-3の3です。x-5で割る場合は5を掛けます。
2列目について合計を三段目に記入し、それを3倍したものを次の列の二段目に記入。
合計を三段目に記入します。
これを繰り返すと、三段目には2,-3,4,6が記入されることになります。
2 -9 13 -6
   6 -9 12
----------
2 -3  4  6
2,-3,4は商の多項式の係数、6は余りとなります。
つまり、2x^3-9x^2+13x-6=(x-3)(2x^2-3x+4)+6
ということです。
x-1で割ると余りが0となり、(x-1)(2x^2-7x+6)と因数分解できます。
2x^2-7x+6はx-2で割り切れ、(x-2)(2x-3)と因数分解できます。
最初の多項式は(x-1)(x-2)(2x-3)となります。

主人公は電卓を7個用意して、まずはそのうちの6個に
多項式の係数
270000
-12757830
213355227
-1588201740
5174433603
-5700629340
を入力したという描写がありました。
具体的な描写はここだけでしたので7台の電卓を使ってどのような計算を行っていたのか
よく分かりませんでしたが、組み立て除法の計算方法から推測してみます。
最初に各係数を入力したのは恐らく定数演算機能を使うためでしょう。
多くの電卓では演算子のボタンを続けて2回押すと定数計算モードになります。
3××2=
と押すと答えの6が表示され、3を掛けるという部分が記憶されます。
続けて
4=
と押すと今度は3*4の結果である12が表示されます。
多項式の係数を次数の高い順にa,b,c,d,e,fとし、
各係数の入力された電卓をA,B,C,D,E,F、もう1台の電卓をGとします。
Aには掛け算、B~Fには足し算を設定したと思われます。

例えばx-3で割る場合
Aに3=を入力(810000)
Bに810000=を入力(-10327830)
Gに3××-10327830=を入力(定数演算記憶 -35843490)
Cに-35843490=を入力(177511737)
Gに177511737=を入力(532535211)
Dに532535211=を入力(-1055666529)
Gに-1055666529=を入力(-3166999587)
Eに-3166999587=を入力(2007434016)
Gに2007434016=を入力(6022302048)
Fに6022302048=を入力(321672708)
という計算をします。
最後の結果が0であれば解だということです。
メモリー計算とかを使えばもう少し楽に計算できるかもしれませんが、
それだと7台目の電卓は使わないんですよねー。
なのでこういう計算をしていたんじゃないかなと思います。

同じ計算を1台の電卓で行った場合、
270000*×3=を入力(810000)
-12757830=を入力(-11947830)
×3=を入力(-35843490)
+213355227=を入力(177511737)
×3=を入力(532535211)
-1588201740=を入力(-1055666529)
×3=を入力(-3166999587)
+5174433603=を入力(2007434016)
×3=を入力(6022302048)
-5700629340=を入力(321672708)
と計算できます。

ボタンを押した回数を比較すると、前者が98回、後者が83回(笑)。
しかも、後者の途中の=は多分省略可能。
電卓を7台も用意した意味がないですね。
桁数は10桁で収まっているようですので、10桁の計算ができる電卓なら
なんとかなりそうではあります。
しかしながら、この計算では複素数解を見つけることはできないですね。
電卓では虚数を含む計算はできません。
(実部と虚部に分ければ計算できないではないですが)
また、無理数の計算も無理っぽいです。
実際には5次方程式の解が有理数にならないことは多々あります。



主人公は5つの有理数解を持つと考えて計算していたようですので、
あの多項式は整数係数の一次式の積に分解できると仮定して考えます。

まずは各係数に公約数がないかどうか確認です。
あるわけないと思いますが、270000の素因数は2,3,5だけですから、大した手間ではありません。
2,5で割り切れない係数があることは一目で分かりますので3で割れるかどうかだけ確認します。
そしたら、びっくりしたことに全部3で割り切れるんですね!
よって、次の方程式を解けばよいです。

90000x^5-4252610x^4+71118409x^3-529400580x^2+1724811201x-1900209780=0

4次の係数とかは3では割り切れませんのでこれ以上は無理です。
この多項式をf(x)とします。
f(x)をよく見ると奇数次の係数は正で偶数次の係数は負になっています。
xが負のとき、奇数次の項目は負、偶数次の項目も負ですから、f(x)は負です。
負の解はありません。
最高次のx^5の係数が正ですので、x→∞のとき、f(x)→∞
xがある値より大きければf(x)は常に正となります。
x^5とx^4の項だけに注目すると、係数の比は
4252610/90000=47.25・・・
ですので、xがこの比より大きければx^5とx^4の項の和は正と言えます。
逆にxがこの比より小さければx^5とx^4の項の和は負です。
3次と2次の項の係数の比は7.44・・・
1次の項の係数と定数項の比は1.10・・・
ですので、xが1.1以下であればf(x)は負であり、xが47..3以上であればf(x)は正です。
よって、f(x)=0の解はすべて1<x<47.2の範囲にあります。





まずは整数解を見つけたいと思います。
1から47まで順に調べてもいいのですが、もう少し楽にならないかちょっとあがいてみましょう。
桁数が大きいと計算が面倒ですので、1の位だけを考えてみます。
1の位というのは10で割った余りということです。
x^5,x^4,x^2の係数は10の倍数ですので無視できます。
他の係数も10で割った余りに置き換えてみると、
9x^3+x
という恐ろしくシンプルな式になりました。
x=0~9のときのf(x)の値(を10で割った余り)を計算してみると、
f(0)=0,f(1)=0,f(2)=4,f(3)=6,f(4)=0,f(5)=0,f(6)=0,f(7)=4,f(8)=6,f(9)=0
ですので、xの1の位は0,1,4,5,6,9の6種類だけです。

定数項1900209780の約数でない数でもう少し調べてみましょう。
2,3,4,5,6,7では割り切れますので8で調べてみます。
各係数を8で割った余りに置き換えると、
f(x)=6x^4+x^3+4x^2+x+4
です。
ちなみに負の数の余りはどう計算すればいいかというと、
割り切れる場合は0で問題ないですね。
割り切れない場合、絶対値の余りを計算して8から引けばよいです。
8の倍数を足したり引いたりしても余りは変わらないはずですから、
値が正になるように8の倍数を足してから余りを計算してもよいです。
-1に8を足すと7ですから、-1を8で割ったときの余りは7です。
f(x)=6x^4+x^3+4x^2+x+4
について、f(x)の値(8で割った余り)を調べましょう。
この計算も組み立て除法と同じようにできます。
一段目に各係数を書いて、組み立て除法と同じ計算をすればよいです。
三段目に掛ける数値はxです。
各計算で8以上の値になる場合は8で割った余りに置き換えます。
最後に記入する数がf(x)の値です。
f(0)=4,f(1)=0,f(2)=6,f(3)=4,f(4)=0,f(5)=0,f(6)=2,f(7)=4
ですので、xを8で割った余りは1,4,5のいずれかです。

11での余りについても調べてみましょう。
f(x)=9x^5+x^4+10x^3+6x^2+3x+4
f(0)=4,f(1)=0,f(2)=0,f(3)=9,f(4)=5,f(5)=7,f(6)=0,f(7)=3,f(8)=5,f(9)=0,f(10)=0
ですので、xを11で割った余りは1,2,6,9,10のいずれかです。
8で割った余りが1,4,5
10で割った余りが0,1,4,5,6,9
11で割った余りが1,2,6,9,10
となる数は1以上47以下の範囲では1,9,20,21,45の5つです。
これで5つの解が見つかりました。
めでたしめでたし。

嘘です。これで終わりではありません。
後編に続きます。

0 件のコメント:

コメントを投稿