Excelユーザー関数:コレスキー分解

スポンサーリンク

Excelで対象行列に対するコレスキー分解(Cholesky decomposition)を算出するユーザー関数です。

Excelで振動の固有モードなどを算出する際に使用できます。

VBAコード

説明

コレスキー分解はLU分解の一種ですが、正則な対称行列にのみ適用できます。

Aを対象行列、Lを左下三角行列、Uを右上三角行列としたときに

$$
A=LU=LL^t=U^tU
$$

という性質を持っています。

つまり、スカラーで言えば平方根を求める操作になります

通常のLU分解とは違い、部分的ピボット選択は不要で計算コストも少なくて済みます。

右上三角行列Uを求める際は、対角項と非対角項に分けて計算を行います。

Aの要素をaij、Uの要素をuijとしたとき、

(1)対角項uii(j=i)の場合

$$
u_{ii}=\sqrt{a_{ii}-\displaystyle\sum_{k=1}^{i-1}u_{ki}^2}
$$

となります。

u11の場合は、総和を求める必要が無いため、

$$
u_{11}=\sqrt{a_{11}}
$$

となります。

(2)非対角項uijの場合

$$
u_{ij}=\frac{a_{ij}-\displaystyle\sum_{k=1}^{i-1}u_{ki}u_{kj}}{u_{ii}}
$$

となります。

1行目(i=1)であるu1jの場合も総和を求める必要がないため

$$
u_{1j} = \frac{a_{1j}}{u_{11}}
$$

となります。

使い方

例えば、下記のような対称行列のコレスキー分解を計算してみます。

$$
\begin{bmatrix}4&12&-16\\12&37&-43\\-16&43&98\end{bmatrix}
$$

3行3列の範囲を指定し、

=Cholesky(行列範囲)

と入力し、CTRL+SHIFT+ENTERを押します。

CTRL+SHIFT+ENTERはExcelで配列数式を扱う際の操作になります。

この例の行列の場合

右上三角行列Uは

$$
\begin{bmatrix}
2&6&-8\\
0&1&5\\
0&0&3
\end{bmatrix}
$$

となります。

参考資料

CQ出版社、VisualBasicによる固有値計算&振動解析プログラム、黒田英夫著

なお、現在は絶版となっていて、古本はプレミアの値段がついてしまっています。

コメント

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