2分法の数値計算例(Java) |
- プログラムソース
import java.io.*;
import java.util.*;
class Nibun
{
public static void main()
{
int count;
double a,b,m,eps;
String s;
count=0;
a=0.0;
b=0.0;
m=0.0;
eps=1.0e-5; //収束条件
Nibun f=new Nibun();
System.out.println("範囲の左の値と右の値をスペースを空けて入力して下さい。");
try
{
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
s=br.readLine();
StringTokenizer st=new StringTokenizer(s," ");
a=Double.parseDouble(st.nextToken());
b=Double.parseDouble(st.nextToken());
}
catch(Exception e)
{
System.out.println(e);
}
do
{
count++;
m=(a+b)/2.0;
if(f.f(m)*f.f(a)<0) b=m;
else a=m;
if(count==1000)
{
System.out.println("収束しませんでした。");
}
} while(!(Math.abs(a-b)<eps));
System.out.println("解の値は" + m + "\n収束するのに" + count + "回かかりました。");
}
double f(double x)
{
return x*Math.sin(x)+Math.log(x);
}
}
- プログラム実行結果
範囲の左の値と右の値をスペースを空けて入力して下さい。
0.5 1.0
解の値は0.66410064697265625
収束するのに16回かかりました。
Press any key to continue
この2分法のプログラムを実行したら、解の予想範囲の入力を求められます。求めたい解に応じて値を入力してください。今回は16回の計算回数となりました。
|
|
|
|
|
|