rm /blog

IT系技術職のおっさんがIT技術とかライブとか日常とか雑多に語るブログです。* 本ブログに書かれている内容は個人の意見・感想であり、特定の組織に属するものではありません。/All opinions are my own.*

暇つぶしのリーマン積分

暇つぶしで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分