【入門】対称行列と二次形式【数値計算】

【入門】対称行列と二次形式【数値計算】 数値計算
【入門】対称行列と二次形式【数値計算】

今後について

ここまでで二次形式の行列表現、多項式表現が等しいことを証明したわけだが、
これが本当に同じなのかを各ツール、各言語で確認するのを挟もうと思う。

しかし、一点問題がある。

現状の行列表現のままだと、行列を利用した一括変換ができない
for文使えば解決ではあるのだけど、
折角だから、ベクトル、行列であるが故の利点を享受しておきたい。

ベクトルxを複数セットするには?

\(x\)はベクトルなため、ここに全座標を入れてあげれば、二次形式の計算結果が一括で得られそうには見える。
しかし、それは、\(x\)が一つにまとまっていればの話となる。

このままだと\(x^T\)と\(x\)は別のベクトルとして計算されるので、期待した結果は得られない。
ベクトルを行列にせずにfor文で回せば良いだけではあるが、今回はそれをしないための仕掛けを入れる。

仕掛け

行列同士の積は、複数回の内積を実施しているに過ぎない。
内積は分解すると、アダマール積と1の定数関数の畳み込みに分解できる。
(1の定数関数は常に1になる関数)

以下のように変形する。
\(x\)は各変量の全空間の座標を持った行列とする。

\(
x^TAx=x^TA\circ x^T
\begin{bmatrix}
1\\
\vdots\\
1
\end{bmatrix}
\)

\(x^T\)と\(x\)を行列として積と取ると、直積をとったような関係になって、
計算結果が\(x\)の1要素に対して\(x\)の全要素の積を\(x\)の全要素分になって、行列が拡張されてしまう。
それを抑制するためにアダマール積で内積の途中まで計算させておいて、定数関数で内積を取り直すことで直積のような関係を解消している。
\(x\)の積を内積の手順を分解してうまくコントロールしたってことになる。

この式を利用して各ツール、各言語で演算さえてみることになる。

まとめ

  • 対称行列と二次形式について説明。
  • 二次形式は多項式表現と行列表現ができる。
    • 行列表現ができると計算がしやすくなる。
    • しかし、全座標を入れるにはfor文を使用する必要がある。
      • for文を削除するための仕掛けを入れておいた。

MATLAB、Python、Scilab、Julia比較ページはこちら

コメント

タイトルとURLをコピーしました