Excelによる数値計算

Excelによる数値計算について、少し本格的に勉強しよう。

数値計算を実際に行うためには、基本的には数値計算のプロが作成した、ライブラリ(数値計算用のサブプログラム集)を利用することが必要となる。もちは餅屋にということで、作業分担である。数値計算のソフトウエアから作成していたのでは、専門の研究がまにあわないし、信頼性もあり、効率的な数値計算のプログラムはそうなまやさしいものではないからでもある。

著者はExcelを使った数値計算については、ほとんど調べたことがないし、数値計算の専門家として、まだ、Excelが評価できるか否かわからないと考えている。この点はCやFORTRANでは定評のあるライブラリが完成しているのと大変な違いである。

以下では、最近著者が調べた範囲内で、有効そうなExcel上のライブラリを紹介し、それを使った数値計算について議論する。

線形代数の計算

数値計算の基本は線形代数の問題を如何に効率的に解くかである。そこで、線形代数のライブラリを調べてみた。その結果、次のライブラリが開発されていることがわかった。これは、フリーで公開されている。

MATRIX and LINEAR ALGEBRA Package For EXCEL

である。これをダウンロードしてくる。解凍すると、

のようなファイル群があらわれる。このうち、matrixというのがExcelのアドインである(すなわち、線形代数のライブラリ)。

このライブラリのインストールの仕方は次のようになる。

1) ツール、アドインと順にクリックする。すると、つぎのボックスが現れる:

2)そこで、参照をクリックして、matrixというアドインがあるフォルダまで辿り、開く。

ここで、OKをクリックすればよい。MATRIX and LINEAR ALGEBRA Package For EXCELというアドインが加わっていることがわかる。この状態で、このアドインのもつすべての関数が利用可能となる。

使用できる関数

行列の加減乗算

まず、行列の加減算の方法を示そう。これは、行列で説明した方法が便利であろう。しかし、このアドインを利用することにより、加算については=M_ADD(MAT1,MAT2)、減算については=M_SUB(MAT1,MAT2)という関数を利用することもできるようになる。

行列の乗算から、このアドインを利用すると便利になる。実際、つぎのようにして、行列の積が計算できるようになる。

連立一次方程式の解法

連立一次方程式

Ax=b

を解くことを考えよう。 行列で説明した方法はAの逆行列を用いる方法であったが、これは数値計算の常識に反する。ガウスの消去法の系列のガウスージョルダン法に基づく解法が、このアドインにある。実際、つぎのようにして連立一次方程式の解が求められる。

固有値の計算

固有値の計算の例を示そう。

MatEigenvalue_Jacobi は対称行列に対するヤコビ法を実行して、固有値を求める関数である。

この他、つぎのような関数がある。

  1. M_ABS 行列あるいはベクトルのユークリッドノルム
  2. M_ADD 行列の和
  3. M_BAB 相似変換
  4. M_DET 行列の行列式
  5. M_INV 逆行列
  6. M_POW 行列のべき乗
  7. M_PROD 行列の積
  8. M_SUB 行列の差
  9. M_TRAC 行列のトレース
  10. M_TRANSP 行列の転置
  11. M_ID 行列の恒等式(I)
  12. ProdScal 内積(inner)
  13. ProdVect 外積
  14. MatEigenvalue_Jacobi 対称行列に対するヤコビ法
  15. MatEigenvalue_QR 対称行列に対するQR法に基づく固有値
  16. MatEigenvector 固有ベクトル
  17. MatEigenvector_Jacobi ヤコビ法による対称行列の固有ベクトル
  18. Newton_Girard 固有値の特性方程式の係数
  19. MatRnd ランダムな行列の生成
  20. MatRndEig 与えられた固有値をもつランダム行列の生成
  21. MatRndRank 与えられた行列のランクや行列式の値を計算する
  22. MatRndSim 与えられた固有値を持つ対称行列
  23. MatRndUni 与えられた固有値を行列の生成
  24. Mat_Hilbert ヒルベルト行列
  25. Mat_Householder ハウスホルダー行列の生成
  26. Mat_Tartaglia Tartaglia行列の生成
  27. Mat_Vandermonde Vandermonde's 行列の生成
  28. Gauss_Jordan_step ガウスジョルダンアルゴリズムで解くときの1ステップずつの計算法の紹介
  29. SYSLIN 連立方程式の解法
  30. SYSLIN_ITER_G  Gauss-Seidel法で連立一次方程式を解く
  31. SYSLIN_ITER_J  Jacobi algorithm
  32. SYSLINSING 特異な線形方程式の問題を解く
  33. TRASFLIN 行列の線形変換
  34. Gram_Schmidt グラムーシュミットの直交化
  35. Mat_Cholesky コレスキー分解
  36. Mat_LU LU分解
  37. Mat_QR QR分解
  38. MatExtract 部分行列を取り出す
  39. MatOrtNorm 行列の直行化
  40. MatRotation_Jacobi 行列を回転させる

非線形方程式の解法(多次元のニュートン法)

多次元のニュートン法をExcelで実行する方法を示そう。例として2次元の場合を考える。ヤコビ行列は手で計算している。

つぎの連立非線形方程式を考える:

を考える。この方程式を解くためのExcelのBookをつぎのような手順で作成する。

まず、初期値を入れる。

つぎに、非線形方程式を入力する:

さらに、ヤコビ行列を要素を一つずつ入力する:

このとき、各要素は数式により入力しておく。そして、ニュートン反復を一回行う:

ここで、C2:F3を選択して、+印を出す:

そして、F3の右端の線に沿って、F5までドラックする:

ここで、A4:F5を選択して、+印を出す:

そして、F5の右端に沿って、反復回数に応じて下までドラックする:

こうして、解が(1.709975947, 5.848035476)であることがわかる。(newton3.xls)

 

 

 

 

 

 

 


©大石進一

2002/10/5(作成)