1

方程式の解を見つけるための二分法を実装しようとしています。

方程式の形式は次のようなり
ます。 20, -20 ≤ q,s,t ≤ 0 e -20 ≤ u ≤ 20

入力例:

3
1. 0 0 0 0 -2 1
1 0 0 0 -1 2
1 -1 1 -1 -1 1

を与える必要があります:

0.7071
不可能
0.7554

これを実装してみたのですが結果が小数点以下4桁で表示できず、abとcがxxの形式で小数点以下1桁しかないことに気付きました。問題はここからだと思います。どんな助けでも大歓迎です。これが私のコードです

class p07{
public static void main(String [] args){
    Scanner in = new Scanner(System.in);
    int n= in.nextInt();

    for (int i=0 ; i < n; i++)
        bss(in.nextInt(), in.nextInt(),in.nextInt(), in.nextInt(),in.nextInt(), in.nextInt());

}

public static void bss(int p, int q, int r, int s, int t, int u){
    double fa=0, fb=0, fc=0;

    boolean flag=true;

    double a=-20;
    double b=a;

    while(flag){

        fa=p*Math.exp(a) + q*Math.sin(a) + r*Math.cos(a) + s*Math.tan(a) + t*Math.pow(a,2) + u;
        fb=p*Math.exp(b+1) + q*Math.sin(b+1) + r*Math.cos(b+1) + s*Math.tan(b+1) + t*Math.pow(b+1,2) + u;

        a++;b++;

        if( (fa < 0 && fb > 0) || (fa > 0 && fb < 0) )
            flag=false;
    }

    System.out.println("a= "+a+", b= "+b);
    System.out.println("f(a)= "+fa+", f(b)= "+fb);

    int k=4;
    double c=0.000;

    while(k!=0){

        c = (a+b)/2;
        fa = p*Math.exp(a) + q*Math.sin(a) + r*Math.cos(a) + s*Math.tan(a) + t*Math.pow(a,2) + u;
        fc = p*Math.exp(c) + q*Math.sin(c) + r*Math.cos(c) + s*Math.tan(c) + t*Math.pow(c,2) + u;

        if( fa < fc)
            b=c;
        else
            a=c;
        k--;
        System.out.println("a= "+a+",b= "+b+", c= "+c);
    }
    double sol =p*Math.exp(c) + q*Math.sin(c) + r*Math.cos(c) + s*Math.tan(c) + t*Math.pow(c,2) + u;
    System.out.println(sol);
}

}

4

1 に答える 1