Edited at

バームクーヘン積分を数値積分(等差数列)で近似して実装した。

More than 1 year has passed since last update.


はじめに

バームクーヘン積分を見た時非常に綺麗でびっくりしたのでC#で作ってみようと思った。

なお筆者はまだ習っていないので間違えている可能性が高い。


バームクーヘン積分とは

ある連続関数y=f(x)、x軸、x=xmin、x=xmaxで囲まれた図形をy軸で回転させた回転体の体積を求める方法の1つ。

V=\int_{x_{min}}^{x_{max}}2\pi x|f(x)|dx

参考


数値積分

等差数列を使い体積をこう近似する。

等差数列はfor文とほぼ同じなのですぐに実装できる。

プログラムに実装する際、精度を上げるため公差を1でなく10^-6ぐらいにするがだいたいこんな感じ。

V\approx\sum_{x=x_{min}}^{x_{max}}2\pi x |f(x)| \times 1


実装

C#で実装した。

        public static void Main()

{
double i = 0.000001; //微小な厚み、公差
double xmin = 0; //回転軸から近い側までの距離。
double xmax = 5; //遠い側まで。
double v = 0; //求める体積
for (double x = xmin; x < xmax; x += i)
{
v += 2 * 3.14159265 * x * Math.Abs(f(x)) * i;
}
Console.WriteLine(v);
Console.ReadKey();
}
static double f(double x)
{
return (5);//関数を入れる。 この場合高さ5の円柱になる
//return (Math.Pow(x,2)); //y=x^2
}


結果


凡例


  • パラメータ

図形の形

結果

他の方法で求めた体積(googleの電卓を使い一部のみ記載)


出力


  • xmin=0,xmax=5,f(x)=5

高さ5、半径5の円柱

392.699002721882

392.699081699 (pi * 5^2 * 5)


  • xmin=0,xmax=5,f(x)=5-x

高さ5、半径5の円錐

130.899693740589

130.8996939 (pi * 5^2 * 5 / 3)


  • xmin=0,xmax=1.57079(≒pi/2),f(x)=Math.Cos(x)

cos(x) (0<=x<=pi/2)を回転させたもの

3.58641908970833


  • xmin=0,xmax=1.57079(≒pi/2),f(x)=Math.Tan(x)

tan(x) (0<=x<pi/2)を回転させたもの

112.105602058229


終わりに

バームクーヘン積分、凄いですね。とてもスマートで綺麗。

作ったプログラムもある程度の精度できちんと動いてるようです。