暇つぶしのリーマン積分

暇つぶしでSin(x)を0⇒πまでリーマン積分するJavaプログラムをつくった。
引数に刻み幅(100とか1000とか)を渡すとその間隔でπを割ってリーマン和を取り、
結果を標準出力する。


public class HimatubusiSinXIntegrate {

public static void main(String[] args) {

try {

int kankaku = Integer.parseInt(args[0]);

if (kankaku <= 0) {
throw new Exception("Argument is less or equal than 0.(" + args[0] + ")");
}

double ans = integrateSinx(kankaku);

System.out.println("回数=" + kankaku);
System.out.println("解=" + ans);

} catch(Exception e) {
e.printStackTrace();
}

}

private static double integrateSinx(int kankaku) {
double pi = Math.PI;
double ans = 0.0;
double ikkaibun = pi / kankaku;
for (double a = 0.0; a < pi ; a = a + ikkaibun) {

ans = ans + (Math.sin(a) * ikkaibun);

}

return ans;


}

}



Sin(x)を0⇒πで積分すると、理論値では解は2となるが
リーマン積分では結果は近似値として算出される。
刻み幅の大きさは解の精度に直結する。
内部的にはint型変数「kankaku」にそれを格納して管理しており
その解は以下のようになる。

回数=10
解=1.9835235375094544

回数=100
解=1.9998355038874456

回数=1000
解=1.9999983550656881

回数=10000
解=1.9999999835503612

回数=100000
解=1.9999999998351097

刻み幅が10万となる結果でほぼ2に近似することを確認した。

仕事のやる気が失せたので暇つぶしにやってみた。
プログラミング:1分
実験:2分
この文章書くの:5分




この記事へのコメント