MATLAB によるニュートン法

平成21年度 秋期 基本情報技術者試験1に出題されたニュートン法のアルゴリズムを MATLAB で作成してみた。

ニュートン法とは

ニュートン法とは,方程式の解の一つを求めるアルゴリズムである。

任意に定めた解の予測値から始めて,計算を繰り返しながらその値を真の値に近づけていく。

MATLAB によるニュートン法

ニュートン法のアルゴリズムを MATLAB で作成した。3 次方程式 3x3x23x + 1 = 0 の解(解の予測値は 2.5)の一つを求めるアルゴリズムである。

アルゴリズムの説明

3 次方程式 a3x3 + a2x2 + a1x + a0 = 0 の解の一つを,次の手順で求める。

  1. 解の予測値 x,係数 a3a2a1a0 を読み込む。
  2. 3 * a3 の値を b2 に,2 * a2 の値を b1 に,1 * a1 の値を b0 に,それぞれ求める。
  3. 次の 1. ~ 4. の処理を一定の回数繰り返す。
    1. a3x3 + a2x2 + a1x + a0 の値を求め,これを f とする。
    2. b2x2 + b1x + b0 の値を求め,これを d とする。
    3. xfd の値を印字する。
    4. xf/d の値(解の一つにより近い値となる)を求め,これを新たな x とする。

MATLAB によるアルゴリズムの実装

以下のプログラムは,MATLAB を用いて前述のアルゴリズムを実装したものである。

a = [3, -1, -3, 1]; % 係数の定義
x = 2.5; % 解の初期値

b = zeros(1, 3); % 係数計算用の配列
b(3) = 3 * a(4); % 3次の係数
b(2) = 2 * a(3); % 2次の係数
b(1) = a(2); % 1次の係数

for n1 = 2:9
    f = ((a(4) * x + a(3)) * x + a(2)) * x + a(1);
    d = (b(3) * x + b(2)) * x + b(1);
    fprintf("%f, %f, %f\n", x, f, d);
    x = x - f / d;
end

上記のコードを実行した結果を示す。

解の一つである x = 3 が得られた。

2.500000, -2.625000, 2.750000
3.454545, 4.969947, 14.074380
3.101425, 0.874168, 9.247965
3.006900, 0.055485, 8.082941
3.000035, 0.000283, 8.000425
3.000000, 0.000000, 8.000000
3.000000, 0.000000, 8.000000
3.000000, 0.000000, 8.000000

プログラムで与えた 3 次関数の形状を確認するグラフを示す。

図 3 次関数のグラフ

ニュートン法では、初期値からスタートし、反復計算によって解へと収束していく。

この過程を視覚化すると、どのように解が求められるかが直感的に理解できる。

このグラフでは、初期値 2.5 から始まり、x = 3 に収束する様子 を視覚的に示している。

図 ニュートン法を用いて解を真の値に近づけていく過程

参考文献

更新履歴

  • 2024年11月29日 新規作成
  • 2025年5月25日 アルゴリズムの説明,解を真の値に近づけていく過程を追加
  • 2025年6月4日 収束過程のプロットの説明を追加

  1. 平成21年度 秋期 基本情報技術者試験 午後 問題 問8 のデータ構造及びアルゴリズムの分野のテーマ「数値計算と計算誤差」で出題された。 ↩︎

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です