暇つぶしのリーマン積分
暇つぶしで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分