二次方程式の曲線は3点指定すれば一意に決まる,というのは中学校で習う数学の知識です.
ただ,本当に3点決まれば,一意に決まるのか?イマイチ納得行かない人のために,行列演算の形で説明しようと思います.
二次方程式†
- これ↓が二次方程式の形です.
- &mimetex(\Large ax^2+bx+c=y);
- もちろん
- yが左辺だったり,
- &mimetex((x-p)^2=y-q); だったり
- &mimetex(y=x^2+ax+b); だったり
- と色々形はありますが,
- 今回は説明のためにこの形で統一します.
- さて,二次方程式の曲線は,定数 &mimetex(a, b, c); の3つで定義されます.この3つの値が決まるということは,二次方程式の曲線が一意に決まることと等価です.両方は表裏一体の事実です.
- では,定数 &mimetex(a, b, c); を一意に決めるためにはどうすれば良いのか?行列演算で書いてみると,すっきりします.
行列演算と二次方程式†
- この基本形↓
- をベクトルの乗算で書き表すと,次式になります.
- &mimetex(\Large\left(\begin{array}{ccc}x^2&x&1\end{array}\right)\Large\left(\begin{array}{c}a\\b\\c\end{array}\right)\Large = \Large y);
- この行列演算が二次方程式と等価だというのは理解して頂かないと,先に行けません.要は数学的に何も変換してなくて,数式の表現方法を変えただけですよ,ということです.
- &mimetex(\Large\left(\begin{array}{ccc}x^2&x&1\end{array}\right)\left(\begin{array}{c}a\\b\\c\end{array}\right) = ax^2+bx+c = y);
- これだけだと,ただの内積と同じです.
- 今,点が1つ与えられるということは, &mimetex((x, y)); の組が1つ与えられます.
- 行列の中では &mimetex(x^2); も利用してますから, &mimetex(x^2_1, x_1, y_1); の組が指定されたことに等しいです.
- &mimetex(\Large\left(\begin{array}{ccc}x^2_1&x_1&1\end{array}\right)\left(\begin{array}{c}a\\b\\c\end{array}\right)\Large = y_1);
点の数と行列演算†
- さて,中学で習う数学では,方程式のグラフを一意に決定するためには最低3点指定しなければならないと教わります.
- さっきの行列演算で行くと,こんな感じです,
- &mimetex(\Large \left(\begin{array}{ccc}x^2_1&x_1&1\\x^2_2&x_2&1\\x^2_3&x_3&1\end{array}\right)\left(\begin{array}{c}a\\b\\c\end{array}\right) = \left(\begin{array}{c}y_1\\y_2\\y_3\end{array}\right));
- さて,ここから,行列を要素単位でなく行列ごとに書くと,こんな感じになります.
- &mimetex(\Large \text{A}\text{X} = \text{Y});
- ここで, &mimetex(\text{A}, \text{X}, \text{Y}); はそれぞれ以下の式で定義されます.
- &mimetex(\Large \text{A} = \left(\begin{array}{ccc}x^2_1&x_1&1\\x^2_2&x_2&1\\x^2_3&x_3&1\end{array}\right));
- &mimetex(\Large \text{X} = \left(\begin{array}{c}a\\b\\c\end{array}\right));
- &mimetex(\Large \text{Y} = \left(\begin{array}{c}y_1\\\\y_2\\\\y_3\end{array}\right));
- 通常ベクトル &mimetex(\text{X}); には変数 &mimetex(x); や &mimetex(y); が入るのが普通ですが,今回は &mimetex(x); や &mimetex(y); が既知で &mimetex(a, b, c); が未知ですので,ベクトル &mimetex(\text{X}); を割り当てました.
- ここで,ベクトル &mimetex(\text{X}); を求めたい訳であるが,両辺とも左から逆行列を乗算することで結果を求められる.
- &mimetex(\qquad\qquad\qquad \text{A}\text{X} = \text{Y});
- &mimetex(\text{A}^{-1}\text{A}\text{X} = \text{A}^{-1}\text{Y}); ←行列 &mimetex(\text{A}); の逆行列 &mimetex(\text{A}^{-1}); を左側からかける
- &mimetex(\qquad\qquad\qquad\quad\qquad \text{X} =\text{A}^{-1}\text{Y}); ←逆行列をかけたので &mimetex(\text{A}); がキャンセルされた
- 今行列 &mimetex(\text{A}); は正方行列であり,各行は独立である*1.
- よって &mimetex(\text{A}); は正則行列であり,逆行列 &mimetex(\text{A}^{-1}); が存在する.
- よって独立な*23点を指定した場合, &mimetex(\text{A}^{-1}); が求められ, &mimetex(\text{X}); が求められる.これにより,方程式の曲線が一意に決まる.
最低何点必要なの?†
- さて,ポイントとなる「最低何点あれば点数が求められるのか」という質問に対しては,行列 &mimetex(\text{A}); がどんな特性を持つか,による.
- 行列 &mimetex(\text{A}^{-1}); が存在しなければ ベクトル&mimetex(\text{X}); が求められない.
- 前述した通り,独立した3点を与えた場合,行列Aは正則行列になり,逆行列&mimetex(\text{A}^{-1});が存在する.
- 4点以上与えられた場合は行列Aは,正方行列にならないが,擬似逆行列を求めることはできる.この場合でも*3擬似逆行列を求めることができるため,方程式の曲線の形を一意に決定することが可能です.
問題は2点以下しか与えられなかった場合です.
- 2点しか与えられなかった場合は,行列 &mimetex(\text{A}); は以下のような形になります.
- &mimetex(\huge \text{A} = \left(\begin{array}{ccc}x^2_1&x_1&1\\x^2_2&x_2&1\end{array}\right));
- これだと,行列 &mimetex(\text{A}); が正方行列ではないため,逆行列が求められません.つまり &mimetex(\text{X}); が求まらないため,方程式の曲線を一意に決定することができません.
もうちょっと厳密に詰める†
正方行列でない場合,同じ行列の転置行列をかけることで正方行列にする方法があります.これでも駄目だよ,という話.
- 転置行列を左からかけて擬似逆行列を求めます.
- &mimetex(\huge \text{A}^{\top}\text{A} = \left(\begin{array}{cc}x^2_1&x^2_2\\x_1&x_2\\1&1\end{array}\right)\left(\begin{array}{ccc}x^2_1&x_1&1\\x^2_2&x_2&1\end{array}\right));
- この擬似逆行列 &mimetex(\left(\text{A}^{\top}\text{A}\right)); は形だけは正方行列ですが,実はこの行列の階数は2です.
さぁ,いきなり階数なんて言葉が出てきても慌てない.
- 元々行列 &mimetex(\text{A}); は2行の要素を持っており,それぞれが独立である訳です.
- その行列 &mimetex(\text{A}); をこねくりまわして出てきた行列 &mimetex(\text{A}^{\top}\text{A}); は形だけは3行の情報を持ちながらも,その性質は2行の情報と変わらない,という意味です.
- 実際に適当な値を入れてみるとわかります. &mimetex(\Large\left(x_1=1, x_2=-1\right)); を代入してみましょう.
- &mimetex(\Large\text{A}=\left(\begin{array}{ccc}1&1&1\\1&-1&1\end{array}\right));
- さて,転置行列をかけるとどうなるか,
- &mimetex(\Large\text{A}^{\top}\text{A}=\left(\begin{array}{cc}1&1\\1&-1\\1&1\end{array}\right) \left(\begin{array}{ccc}1&1&1\\1&-1&1\end{array}\right)=\left(\begin{array}{ccc}2&0&2\\0&2&0\\2&0&2\end{array}\right));
- こんな行列になります.
- 1行目と3行目が等しくなってるのが分かりますよね?
つまり,この行列が持ってる情報は2行分の情報しかなく,3行目の情報は冗長であります=階数が2しかありません.
- ちなみに無理やりこの逆行列を求めようとすると,行列式が0になるため,求められません.
- &mimetex(\Large \det \left(\text{A}^\top\text{A}\right) = \det \left(\begin{array}{ccc}2&0&2\\0&2&0\\2&0&2\end{array}\right) = 0);
- 逆行列が求められない,つまり &mimetex(\text{X}); が求まらないため,方程式の曲線を一意に決定することができません.
試しにもう1点†
- 先ほどの例よりもう少し複雑な例を紹介.&mimetex(\Large\left(x_1=1, x_2=2\right)); を代入してみましょう.
- &mimetex(\Large\text{A}=\left(\begin{array}{ccc}1&1&1\\4&2&1\end{array}\right));
- こんな感じの行列ができる
- 転置行列を左からかけてみる
- &mimetex(\Large\text{A}^{\top}\text{A}=\left(\begin{array}{cc}1&4\\1&2\\1&1\end{array}\right) \left(\begin{array}{ccc}1&1&1\\4&2&1\end{array}\right)=\left(\begin{array}{ccc}17&9&5\\9&5&3\\5&3&2\end{array}\right));
- こんな行列になります.
- 一目見ただけでは階数が3あるように見えますが,この行列も階数が2しかありません.
- 例えば1行目から2行目と3行目を引くと以下のような行列になります.
- &mimetex(\Large \left(\begin{array}{ccc}17&9&5\\9&5&3\\5&3&2\end{array}\right) \rightarrow \left(\begin{array}{ccc}3&1&0\\9&5&3\\5&3&2\end{array}\right));
- 続いて,3倍にした3行目を2倍にした2行目から引くと,以下のような行列になります.
- &mimetex(\Large \left(\begin{array}{ccc}3&1&0\\9&5&3\\5&3&2\end{array}\right) \rightarrow \left(\begin{array}{ccc}3&1&0\\18&10&6\\15&9&6\end{array}\right) \rightarrow \left(\begin{array}{ccc}3&1&0\\3&1&0\\15&9&6\end{array}\right));
- 今度は1行目と2行目が等しくなりました.
- この様に,3行3列の行列に見えて,実際は独立な元は2本しかなく,この行列の階数も2だった訳です.
- 実際に行列式も0です.
- &mimetex(\Large \det \left(\text{A}^\top\text{A}\right) = \det \left(\begin{array}{ccc}17&9&5\\9&5&3\\5&3&2\end{array}\right) = 0);
実際に点から方程式の曲線を一意に決定する方法†
- 試しに, &mimetex(\Large x^2-7x+6=y); の方程式に則って試してみる
- この場合 &mimetex(\Large \left(\begin{array}{ccc}a&b&c\end{array}\right)^{\top} = \left(\begin{array}{ccc}1&-7&6\end{array}\right)^{\top}); である訳ですが,これを曲線上の点から求める
- ちなみにこれがグラフ
- 適当に点を打ってみる
- (0, 6) と (2, -4) と (6, 0)
- これが通過する点もプロットした図
- まずは行列を構築する.
- &mimetex(\Large \text{A}=\left(\begin{array}{ccc}0&0&1\\4&2&1\\36&6&1\end{array}\right));
- &mimetex(\Large \text{Y}=\left(\begin{array}{c}6\\-4\\0\end{array}\right));
- &mimetex(\Large \left(\begin{array}{ccc}0&0&1\\4&2&1\\36&6&1\end{array}\right)\left(\begin{array}{c}a\\b\\c\end{array}\right)=\left(\begin{array}{c}6\\-4\\0\end{array}\right));
- 逆行列を計算する
- 逆行列の演算はExcelのminverse関数でもScilabでもMATLABでもoctaveでも使って求めれば良い
- これぐらいなら掃き出し法で自分でも計算できるはず
- &mimetex(\Large \text{A}^{-1}=\huge\frac{1}{48}\Large\left(\begin{array}{ccc}4&-6&2\\-32&36&-4\\48&0&0\end{array}\right));
- 行列演算
- &mimetex(\Large \text{X} = \text{A}^{-1}\text{Y} =\huge\frac{1}{48}\Large\left(\begin{array}{ccc}4&-6&2\\-32&36&-4\\48&0&0\end{array}\right)\left(\begin{array}{c}6\\-4\\0\end{array}\right)=\huge\frac{1}{48}\Large\left(\begin{array}{c}48\\-336\\288\end{array}\right)=\left(\begin{array}{c}1\\-7\\6\end{array}\right));
- &mimetex(\Large \text{X} = \left(\begin{array}{c}1\\-7\\6\end{array}\right));
- この通り a=1, b=-7, c=6 が求まった.
もっと厳密な話†
- 今回のこの逆行列が求まらない状況は本当は方程式の解不定に該当する.
- 4点以上利用する場合は,解不能な状況に陥る可能性もあるのだが,この場合も,逆行列を求める方法で一応求まる.まぁ,それに関してはいつか解説するという方向で.
:数学