積分手法の長方形則(オイラー法)とは~計算方法やプログラムの書き方・精度を良くする方法~

制御工学

みなさん,こんにちは
おかしょです.

積分をする方法にはさまざまなものがあります.中でも長方形則は非常に単純で理解しやすく,プログラムも簡単に書くことができます.ちなみに長方形則はオイラー法と呼ばれることもあります.

この記事を読むと以下のようなことがわかる・できるようになります.

  • 長方形則(オイラー法)とはどのような手法か
  • 長方形則の計算方法
  • MATLABでのプログラムの書き方

長方形則とは

そもそも積分とは関数が表す面積を求めることです.長方形則では積分区間を長方形で区切り,面積を求めることで積分を行います.

たとえば,以下のようなcos関数を積分することを考えます.

この関数を普通に計算で初期値を0として積分すると以下のようになります.

\begin{eqnarray}
\int \cos x\ dx &=& \sin x \tag{1}
\end{eqnarray}

長方形則で積分をする場合は以下のように長方形で区切ります.

このすべての長方形の面積を求めることで関数を積分したことになり,今回の場合は面積を足し合わせた結果がsin関数になればよいことになります.

しかし,長方形ではどうしても誤差が出てしまうのであくまで長方形で近似をしているということを忘れてはいけません.

上の図の一部を拡大すると

赤い部分が抜けてしまいます.このように抜けている部分は他にも存在します.これが長方形で近似することによる誤差です.しかし,反対に飛び出して余っている部分も存在するため最終的にはプラマイゼロと考えることもできるため,それほど精度を求めないのであれば長方形則が用いられることもあります.

長方形則による積分を行うためのプログラム

長方形則による積分のプログラムは非常に簡単です.式で表すと以下のように表されます.

\begin{eqnarray}
y_{k+1} &=& y_k+f(x_k) \times dt \tag{2}
\end{eqnarray}

上式において,\(y\)が積分結果,\(f(\cdot)\)は積分したい関数,\(dt\)は積分間隔を表す.

MATLABでプログラムを書く場合は以下のようになります.

time = 9.5;
dt = 0.1;

y = zeros(time/dt, 1);
t = zeros(time/dt, 1);

for i=1:time/dt-1
    y(i+1) = y(i)+cos(t(i))*dt;
    t(i+1) = t(i)+dt;
end

figure(1)
plot(t,y)

上記のプログラムを実行することで,cos関数を長方形則で積分した結果のsin関数の図が表示されるはずです.

長方形則の精度を良くする方法

長方形則では誤差が生じることを,図を用いて説明しましたが長方形則でも誤差を小さくすることができます.

その方法とは積分間隔を小さくすることです.つまり,区切る長方形の幅をできる限り小さくすることで制度を良くすることができます.

たとえば,先ほどのcos関数を積分する際に積分間隔を0.5とした時と0.01とした時では以下のようになります.

左が積分間隔0.5,右が積分間隔0.01とした時を表しています.図を見ると明らかに右の方が抜け落ちている部分や逆に余っている部分がないことがわかります.

まとめ

ここでは長方形則による積分の方法を解説しました.長方形則は積分間隔によっては精度が悪くなりますが,計算が単純で計算量が少なくて済むというメリットがあります.精度は必要なくスピード重視の場合は,長方形則は有効な手段であると言えます.

続けて読む

長方形則の次に簡単な積分手法として台形則と言うものがあります.この手法については以下の記事で解説しているのでそちらを参考にしてください.

「現在準備中です...」

Twitterでは記事の更新情報や活動の進捗などをつぶやいているので気が向いたらフォローしてください.

YouTubeでも制御工学や電子工作などの解説をしているので,ぜひのぞいてみてください.

それでは最後まで読んでいただきありがとうございました.

コメント

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