Excelの関数、マクロ(VBA)を用いて、ニュートン法による多項式の解を求めます。

ニュートン法の内容については、基礎科学/数値計算/ ニュートン法 のページをご覧ください。


ニュートン法による計算のExcelサンプル・ソフトウエアを作成していますので、 ダウンロードしていただければと思います。

ニュートン法サンプル(newton's_method.xls)

サンプル

1.関数の設定

サンプル・ファイルでは、6つの項までに対応した関数f(x)を定義できます (6つの項としたのは、Excelのグラフから得られる近似曲線の最高次数が6次であることが理由で、 特に深い意味はありません)。


多項式

サンプル・ファイルのピンク色のセルに数値を入力することで、関数f(x)は定義されます。


関数f(x)の定義
図1-1 関数f(x)の定義

なお、乗数n1~n6は、1、2・・・等の自然数だけでなく、 0、0.333、-2など実数にも対応しています。

また、すべてのセルに数値を入力する必要はありません。

例えば、


関数f(x)の例

という関数については、ai=1、ni=2(i=1~6のどれか一つ)、 c=-2を入力すれば計算できます。

以降の説明では、(1-2)式を例として話をすすめていきます(この式は、√2を小数で表す計算方法になります)。


2.計算前の設定

計算実行前に必要な設定は次の通りです。


  • (1)収束判定指数αの設定
  • (2)最大ループ回数の設定
  • (3)関数計算範囲/グラフの表示設定

(1)収束判定指数αの設定

収束判定指数αの値によって近似解の精度が決まります。

あまり小さな値を設定すると、計算の収束性が著しく悪化しますので注意が必要です。

サンプル・ファイルでは、α=10-6としています。


収束判定指数αの設定

(2)最大ループ回数の設定

ニュートン法は反復計算を行い、近似解の精度を上げていく方法です。 そのため、収束判定指数αよりもf(x)が小さくならない場合、 無限ループ計算を行うリスクが発生します。 それを防止するために、最大ループ回数を設定しておきます。


最大ループ回数の設定

(3)関数計算範囲/グラフの表示設定

この設定は、初期値設定の参考データとして必要になります。


例えば、f(x)が3次曲線の場合、f(x)=0となるxの値は最大3個存在することになります。 その場合、どの答えが算出されるかは初期値に依存します。

また、f(x)=0となるxの値がどのあたりにあるかをざっくり調べるには、 目で見て確認するのが一番手っ取り早い方法です。 その際、関数f(x)の計算範囲とグラフの表示範囲を自由に設定できなければ、 適当な初期値を見つけ出すのが困難になります。


今回は、f(x)=x2-2という関数を例にとっています。 この答はご存じの通り1.41421356・・・になりますが、答えを知らない場合は、 適当にグラフを書いて見て、どこらへんで関数f(x)がx=0と交わっているかを確認しなければなりません。

下図のようにグラフ表示してみれば、f(x)=0を満たすxは-1~-2、1~2の範囲にあることがわかります。

なお、計算範囲の設定はセルに値を入力すればそのまま計算に反映されますが、 グラフ表示範囲設定については、セルに数値入力後、「グラフ表示設定」ボタンを押さない限り反映されません。


関数計算範囲/グラフの表示設定


3.初期値の設定と計算実行

前述の2章(3)「関数の計算範囲とグラフの表示範囲設定」を適当に行うことで、 f(x)=0を満たすxの値のあたりづけが行えました。

そこで、求めたい解近傍の値を初期値x0ととり、セルに入力します。

今回はx0=-0.1とします。


初期値の設定
図3-1 初期値の設定

計算を実行するには、初期値入力セルの下にある「計算開始」ボタンをクリックします。

すると計算が実行され、収束解、反復回数、収束解でのf(x)の値が表示されます。

またグラフ上には、収束解を求める過程で得られた x1、x2・・・xiが表示されます。


収束解
図3-2 収束解

今回は、(1-2)式の計算=“√2を求める計算”を例としてあげていますので、収束解が-1.414であることから、 近似解としてはOKであることがわかります。


4.マクロ(VBA)

ここでは、サンプル・ファイルに使用したマクロの一部について解説します。

マクロは、下図4-1に示すシートに記述しています。


マクロ記述シート
図4-1 マクロ記述シート

Sheet3には、Excelシートに配置しているボタン


  • グラフ表示設定
  • 計算開始

を押した時に、マクロが作動するように設定されています。


ボタン

作動するマクロは、


・グラフ表示設定 グラフ表示範囲設定マクロ:
setaxis(graphモジュール)
・計算開始ボタン ニュートン法による反復計算マクロ:
conv_calc(calcモジュール)

になります。


ここでは、ニュートン法の計算に関するマクロについて解説します。

マクロを記述しているところは、下図左側にある「標準モジュール/calc」をダブルクリックします。 すると、下図右側に「Sub conv_calc()」が表示されます。


Sub conv_calc()

記述の最初の方は、表示などの設定になりますので、ここでは省略します。

さて、関数の定義部分から始めます。

多項式は(1-1)式で表せます。


多項式

これを見るとわかるように、 a1xn1、a2xn2、・・・、a6xn6 の各項は、係数や乗数の値が違うだけで、同じ計算方法になります。

そこでまずは、各項の係数と乗数の値を入力セル(ピンク色の部分)から取得します。


セル値の変数への割り当て

サンプル・ファイルでは、関数f(x)が6つの項による多項式のため、ループ回数は6回になります。 上述のjmaxの値を変え、それに対応してExcelシートの入力セルを設定すれば、 自由に関数f(x)の項数を変更できます。


次に、収束計算部分について見ていきます。

まずは、関数f(xi)の計算を行います。

関数f(xi)の計算において、Excelでは計算できないケースが存在しますので、その場合分けを行います。 計算できないケースは次の二つです。


  • (1)次数が負で、xi=0のとき(例えば、x-1=1/xは発散)
  • (2)次数が分数で、xi<0のとき(例えば、√xiは虚数)

計算の場合分け

次に、算出したf(xi)が収束条件を満たすかどうか?を判定し、条件を満たすなら解をセルに出力し、 満たさなければ、xi+1を求めてf(xi+1)を計算し、再度判定を行います。


収束計算

非常に簡単なマクロしか使っていませんので、いろいろ試しに変えてみてください。


コメント


役に立った 役に立たなかった

広告

広告募集中
サイズ:150×150

広告募集中
サイズ:150×150

広告に関するお問い合せ

イベント・学会・展示会


学べる探せる設計技術-沐エンジニアリング

Ads by Google

Ads by Google

Ads by Google


技術計算製作所のソフトウエア購入は


Vectorソフトライブラリ/ビジネス

Amazon

技術計算製作所

技術計算製作所

画像をクリックするとpdfが開きます。