積分公式なしで面積を計算 | rpnアドホック [実践] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 実戦 | rpnアドホック | 気になる数字をrpnで探求!rpnをアドホックに楽しもう。

HOME > 実践 > rpnアドホック > 積分公式なしで面積を計算

hatena twitter facebook rss ソーシャルブックマーク

積分公式なしで面積を計算

 デカルト座標に描かれた直線や曲線とx軸との間の面積を求めたい時、どうすればいいでしょう。例えば以下のグラフの":"の部分の面積を知りたいわけです。

^y 100
|                                    :
|                                  *::
|                                  :::
|                                :::::
|                              * :::::
|                             ::::::::
|                          *::::::::::
|                         ::::::::::::
|                      *::::::::::::::
|                     ::::::::::::::::
|                  *::::::::::::::::::
|              *::::::::::::::::::::::
|          *::::::(この面積を求める):: x
|o *:::*::::::::::::::::::::::::::::::10
*-------------------------------------->


高校数学の知識によれば、曲線の数式を定積分すると答えが出てきますが、公式を覚えるのも大変ですし、積分が原理的に難しい数式も存在します。どんなn次式でも、三角関数でも、数式で表せない図形であっても、簡単に面積を求められる方法はないのでしょうか。

実は面積を求めるだけなら、数値積分という方法があります。積分公式を使わずに、細かく分けた領域を繰り返し計算することで、面積を割り出します。つまり、定積分せずに面積を求めることができるわけです。これで数学的センスの有無や積分公式を覚えるといった努力は必要ありません。

情報デカルト座標に関しては、実践コーナー(数学アラカルト)にデカルトの夢と奇妙な図形があります。興味のある人は閲覧ください。

面積を求めるには

 まずは簡単な例から始めましょう。以下のデータがあるとします。先の数値がx軸の値で次の数値がy軸の値です。

  0 10
  1 10
  2 10
  3 10
  4 10


rpnで「@x 10 @x 1 + #x -r 5」と記述すれば同じ結果を得られます。このデータをグラフ化します。"*"と"*"を繋げてイメージしてみてください。

  >rpn @x 10 @x 1 + #x -r 5 | xyp -x,4 -y,20 -m -s1,5 -n | npd
  ^y 20
  |
  |
  15
  |
  |
  |
  *0     a *・・・・・・・・・* d       *         *
  |        ・         ・
  |        ・         ・
  |        ・         ・
  5     (*とx軸で囲まれる面積を求める)
  |        ・         ・
  |        ・         ・                   x
  |o     b ・         ・ c                 4
  +--------1---------2---------3--------->


単純にxが0から4までのyの値を足すと面積になるような気がします。rpnで計算すると、

  >rpn @x 10 @x 1 + #x -r 5 | rpn :sigma
  50


結果が50と出ましたが、それぞれ5つの数字を合計しただけで、面積ではありませんね。面積を出すのなら上のグラフにあるように、a-b-c-dで囲まれる領域を計算して、4倍しなければいけません。

  >rpn @x 10 @x 1 + #x -r 5 | rpn :integral
  40


今度は40と答えが出ましたが、正確な面積は四角形なので縦×横、つまり「4x10=40」なので正しい値です。

sigmaはy軸の値を合計するプログラム、integralは台形公式(台形則)を使った数値積分プログラムです。

値積分(台形公式)による面積の求め方(1次式)

 次は右斜めの直線で囲まれる面積を計算してみましょう。数式は以下のとおりです。

  y = 10x    ただし、0 <= x <= 4


これをrpnで記述すると次のように書けます。

  >rpn @x @x 10 * @x 1 + #x -r 5
  0 0
  1 10
  2 20
  3 30
  4 40


この結果をグラフ化します。"*"と"*"を繋げてイメージしてみてください。

  >rpn @x @x 10 * @x 1 + #x -r 5 | xyp -x,4 -y,50 -m -s1,10 -n | npd
  ^y 50
  |
  40
  |                                      *
  |
  30
  |                            *
  |
  20
  |                  * d
  |               ・  ・
  10          ・      ・ (*とx軸で囲まれる
  |      a *         ・      面積を求める)
  |        ・         ・                   x
  |o     b ・         ・ c                 4
  *--------1---------2---------3--------->


さて、x=0から4までの面積を求めるのですが、一気に計算するのではなく、まずはx=1からx=2までの面積を求めてみましょう。a-b-c-dで囲まれる台形の面積を計算するわけです。

同じ計算方法でx=0と1の間、x=2と3の間、x=3と4の間の面積を計算して、4つ合計すると全体の面積が求められます。なお、肝心の台形の面積を計算する公式は小学校で学びます。

                                                上底
                                              ・・・・・・・・
               (上底 + 下底) * 高さ           ・       ・
  台形の面積 = --------------------      高さ ・ (台形) ・
                        2                     ・         ・
                                              ・・・・・・・・・・・・
                                                下底


グラフ中のa,b,c,dの記号で考えると「((a - b) + (d - c)) * (c - b) / 2」となるのですが、bとcはx軸上で0になるので、実際には「(a + d) * (c - b) / 2」が面積を求める数式になります。早速、rpnで計算してみると、

  >rpn @x @x 10 * @x 1 + #x -r 5 | rpn :integral
  80


実際の面積は三角形なので縦×横÷2、つまり「4x40/2=80」ですから、ピッタリですね。

数値積分(台形公式)による面積の求め方(2次式)

 さて、次は積分なしには面積が計算できなさそうな例です。2次式の放物線を描いてみます。数式は以下のとおりです。

       2
  y = x    ただし、0 <= x <= 4


x=0から4までの値をrpnで計算してみます。

  >rpn @x @x . * @x 1 + #x -r 5
  0 0
  1 1
  2 4
  3 9
  4 16


2次式なので、x軸の数値の増加に比べて、y軸の数値の増加がとても大きいですね。これをグラフ化すると以下のようになります。*と*を繋げてイメージしてみてください。

  >rpn @x @x . * @x 1 + #x -r 5 | xyp -x,4 -y,20 -m -s1,5 -n | npd
  ^y 20
  |
  |
  15                                     *
  |                                     `
  |                                   `
  |                                 `
  10                              `
  |                            *`d
  |                          ・`・
  |                       ・ `  ・  (*とx軸で囲まれる
  5                    ・  `    ・       面積を求める)
  |                a * `       ・
  |                ` ・         ・         x
  |o       *  `    b ・         ・ c       4
  *--------1---------2---------3--------->


ここで凹型の曲線が感じられる、x=2からx=3までの面積を求めてみます。まず、a-b-c-dで囲まれる台形を考えます。そして、x軸0~1、1~2、2~3、3~4の4つに分けて、それぞれの面積を計算して合計するわけです。

  >rpn @x @x . * @x 1 + #x -r 5 | rpn :integral
  22


面積は22と計算されました。しかし、ここで問題があります。a-b-c-dで囲まれる台形の面積("・"で繋がるライン)と実際の曲線("`"で繋がるライン)との間に小さな隙間があります。台形の面積のほうがちょっと大きいですよね。

曲線を直線で近似するのですから、ズレが生じるのは当然と言えば当然です。では、ここでx=2と3の間ではなくx=2.0から2.1の間のように細かくしていけばどうでしょう。曲線と直線の近似は0に近づくような気がしませんか。

そこで、x軸を4つに分割するのではなく、もっと細かく40個に分割して、それぞれの台形の面積を計算後、最後に合計してみます。実際にrpnで計算するのは簡単です。x軸の増分を0.1ずつにして、41回繰り返せばOKです。

  >rpn @x @x . * @x .1 + #x -r 41 | rpn :integral
  21.34


面積が22から21.34に変わりましたが、これでも正確とは限りません。正確な面積を知るには定積分する以外にありません。そこで、y=x^2を積分してみます。

                3
   r  2     +- x -+ r    1   3
  ∫ x dx = | --- |   = --- r
   0        +- 3 -+ 0    3


ここではx=4、つまり、r=4なのでrpnで計算すると正確な面積が出てきます。

  >rpn 4 3 p 3 /
  21.3333


21.3333(循環小数)が正しい面積になります。台形公式によるものとの誤差は4つの区分で計算した場合が3%で、40個の区分で計算した場合が0.03%となります。実用上、問題のない精度でしょう。

  >rpn 22 21.3333 :err
  0.0303045

  >rpn 21.34 21.3333 :err
  0.000313964


この数値積分の誤差ですが、台形n個の近似から10倍の台形10n個に増やせば、誤差を1/10^2倍にできます。実際、台形4個の近似から台形40個の近似にすることで、数は10倍になったので、誤差は1/100になるはずですが、果たして、上の例では0.0303045から0.000313964ですから、確かに1/100になっています。

このように数値積分は、x軸の値に対応するy軸の値さえあれば、直線であっても曲線であっても面積を求めることができます。応用範囲は広いと言えるでしょう。

情報乱数を使って面積から円周率πを計算することができます。モンテカルロ法といいます。実践コーナー(数学アラカルト)にモンテカルロでπを求めるがありますので、興味のある人は閲覧ください。

警告rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。

情報sigmaとintegralはビジネス統計(推定編)に同梱されています。errははビジネス統計(単回帰編)に同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

rpnアドホック

アドホックに楽しもう

※実践コーナーのTOP

紹介 rpnの利用シーンはこちら…

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ
物語データを見抜くojt物語もどうぞ

実践他の分野への挑戦は実践TOP

応用rpnアプリケーションは応用TOP

書籍紹介

記事に関連した書籍

本ウェブサイトで扱った話題に関連した書物で、スタッフが実際に読了したものを紹介。

書籍数学の書籍
数の世界は思ったよりもエキサイティング

書籍投資の書籍
失敗しない投資には広範囲で実践的な知識が必要

警告バックスラッシュはエンマークに読み替えて下さい(IE)。
バックスラッシュとエンマーク

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn試用版と標準版(2kリビジョン)はダブルクォートで囲って下さい。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS参照ください。

注意rpnの障害情報はこちら

警告rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。あくまで無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。