エクセルによる多元多次(連立)方程式の解決法

n次方程式をソルバーで解く前回の記事の続き記事です。前回の記事はこちらになります。

前回の記事を書いてから、①複素数を含む方程式と解の完全対応。②多元(x,y,zなど異なる文字を含む式)の方程式の解決法。③複数の文字の積を含む式の解法。について、もう少し考えて、使いやすいツールを作れないものかと少し考えていたのですが、まず②多元の方程式の解決法。について、恐らくうまく解決する方法を見つけたと思いますので共有します。

※前回の復習
前回は、エクセルの中で行列を展開して、行列の積を計算することで、高次方程式の一応の概算の解法を表すことができました。高次方程式とは、$${x^6+34x^5-2x^3+12x^2+3x+17=0}$$みたいな式です。この方程式の解を示すために、直交行列$$[P}$$と対角行列$${D}$$の積によって作られる行列

$${X=P^{-1}AP}$$

を使って、($${E}$$は単位行列)

$${X^6+34X^5-2X^3+12X^2+3X+17E}$$

を計算し、計算後の行列の全ての要素の2乗和を最小にする対角行列$${D}$$を求めるのが基本的な求め方となります。
前回は、対角行列の要素を変数、全ての要素の2乗和を目的セルに設定して、エクセルのソルバー機能を使い計算するようにしてみました。行列$${X}$$による方程式を簡単に入力できるように、シートの作成例も前回の記事に置いてあります。上の行列計算式の固有値は、元の方程式の解の数値に一致するため、元の方程式の解を対角行列の要素に含めて計算した$${X}$$を元に計算すると、上の行列計算式の結果が$${0}$$(零行列)になることを利用しています。ちなみに、数値の概算はできますが、平方根を含む厳密な数値として表すことは、残念ながらできません。

今回の記事では、前回の内容を元に、xだけの方程式ではなく、x、yを含む方程式、ついでに、連立方程式の形を取るものについて、大まかな数値を知るためのエクセルソルバーを作っていきます。と言っても、手順の追加は少なめです。

手順
X、Yについて、それぞれ$${P^{-1}AP}$$を計算する。(用いた直交行列は、試した範囲ではXとYについて同じ行列を使っていますが、恐らく違う直交行列同士でも機能します。)
例) $${x^2+3y^3=3.     3x^2-2y=5}$$

$${X=P^{-1}D_xP    Y=P^{-1}D_yP}$$

作ったX、Yを元に、求めたい方程式と同じ行列計算式を作る。連立方程式を求めたい場合は、方程式の数分だけ作る。

$${X^2+3Y^3-3E     3X^2-2Y=5}$$

全ての行列計算式の計算結果の要素を、2乗和を取って、ソルバーの目的セルに指定します。
X、Yの対角行列の要素は、x、yの想定されうる解の個数がそれぞれ2個、3個であるなら、最大値の3個に合わせて、3個の対角要素を用意しておくと良い。従って、例の行列計算を行う場合は、3行3列の行列を用意しておくといい。XについてYについて、それぞれに3行3列で全ての行列を用意しておく。全ての対角要素はソルバーの変数で変化させられるようにしておく。

上記の計算式のソルバーの結果例。複素数解を含むかどうかのチェックはしていないため、まだ計算の途中

(上記の計算式のソルバーの結果例。複素数解を含むかどうかのチェックはしていないため、まだ計算の途中)

ソルバーによる計算結果の見方。
ソルバーによる計算結果は、同じ行同じ列同士の対角要素毎にxとyの解のひとつと対応しているので、同じ行同じ列毎に見る。対角行列を指定しているセルの、対角要素のそれぞれ1列右の要素に1を入れると、1を入れたセルの左と下のセルが異なる値になるように、ソルバーの解を求めることができるので、例えばyについて、一番下の行を除く全ての行の、対角要素のひとつ右隣のセルに1を入れておけば、重解を含まない全てのyについての解を求めることができる。ただし、対応するxが違えば、yの次数以上のyの解を求めることも可能になるため、yの解を求める時には、xの対角要素は、あるxの解ひとつで固定すれば良い。

この使い方を使って解を全て求めるには、順序として次の順序が考えられる。

まずyの対角要素の右隣のセルに1を入れてソルバーを計算する。出てきたyの解を全て覚えておく。→yの値それぞれについて、全てのyの対角要素をyの解のひとつの値に固定する。xの右隣のセルに1を入れて、ソルバーで、対応するxの解を全て計算する。→出てきたyの値の数ぶんだけ、同じ操作を繰り返す。

xが2次、yが3次の方程式については、全て実数解であれば2×3=6個解があるはずなので、6個の解の組み合わせを見つけることを目指す。もちろん、複素数解も含んでいるはずなので、その場合は、前回の記事に書いてある通りに、複素数を解に持つ方程式の複素数解の求め方にあるように、行列を拡張すれば、全ての複素数解を含む、方程式の解を求めることができる。

今回の方法を含めて、行列を使った方程式の解法は、いずれも一般解ではなく数値解を求める方法なので、どこまで応用としていろんな人に便利に使ってもらえるかどうかはわからないですが、面白いと思って試しに使ってもらえたら嬉しいと思います。最後まで読んでいただき、ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?