1

ユーザーに任意の数値 (通常は大きな数値) を要求し、それを変数 "mu" に格納するプログラムがあります。次に、ユーザーに 4 つの重要な値を入力するように求めます。作成しようとしている式は、単純に 4 つの重要な値を取り、それらを w、x、y、および z に設定します。私が持っている式はそのようなものです。ムー = w^a * x^b * y^c * z^d. ここで、a、b、c、d はこれらの可能な 17 の値 {{-5、-4、-3、-2、-1、-1/2、-1/3、-1/4、0、1 のいずれかです。 /4、1/3、1/2、1、2、3、4、5}。プログラムのポイントは、選択された各指数が mu に最も近い値になるまで、考えられる各値を調べることです。たとえば、ユーザーが mu を 200,000 と入力し、w、x、y、z の入力が 45,180,402,110 であるとします。次に、プログラムの仕事は、45^a * 180 ^b * 402^c * 110^d が mu または 200,000 に最も近くなるように、どの値を指数として設定するかを推測することです。今、whileループを使用してこれを機能させようとしていますが、私のプログラムは正しい推測を選択していないようです。(編集して比較する別のエラーを追加しましたが、正しいとは思いません)

これまでの私のコードは次のとおりです。

double[] Guess = { -5, -4, -3, -2, -1, -1.0 / 2, -1 / 3, -1.0 / 4.0, 0,
                1.0 / 4.0, 1.0 / 3.0, 1.0 / 2.0, 1, 2, 3, 4, 5 };
        int a = 0;
        int b = 0;
        int c = 0;
        int d = 0;
        double er = 0.0;


        out.print("Enter a value for mu:");
        double mu = in.nextDouble();
         double er1 = Math.abs((mu-mu)/mu);
        out.print("Enter your first favorite positive value:");
        double w = in.nextDouble();
        out.print("Enter your second favorite positive value:");
        double x = in.nextDouble();
        out.print("Enter your third favorite positive value:");
        double y = in.nextDouble();
        out.print("Enter your fourth favorite positive value:");
        double z = in.nextDouble();
        while (a < Guess.length) {
            double W = Math.pow(w, Guess[a]);
            while (b < Guess.length) {
                double X = Math.pow(x, Guess[b]);
                while (c < Guess.length) {
                    double Y = Math.pow(y, Guess[c]);
                    while (d < Guess.length) {
                        double Z = Math.pow(z, Guess[d]);
                        er = ((W * X * Y * Z) - mu) / mu; //calculates percent error
                        if (er < 0)
                        {
                         er = er1 * -1;
                        }
                        if (er < er1){
                          er1 = er;
                        }

                        d++;
                    }
                    d = 0;
                    c++;
                }
                c = 0;
                b++;
            }
            b = 0;
            a++;
        }

        out.print("error = " + er);

私が間違っている可能性があること、または追加する必要がある可能性があることについて、誰かが洞察を持っていますか? 助けてくれてありがとう!while ループで正しい数値が得られることはわかっていますが、a、b、c、d またはパーセント エラーを正しく設定していないと思います。

編集 = 取得するエラー値は非常に大きいです。莫大な価値。

4

1 に答える 1

2

これをチェックしてください!

public static void main(String[] args) {
        double[] Guess = { -5, -4, -3, -2, -1, -1.0 / 2, -1 / 3, -1.0 / 4.0, 0, 1.0 / 4.0, 1.0 / 3.0, 1.0 / 2.0, 1, 2, 3, 4, 5 };
        int[] Result = {0,0,0,0};
        double e = 0.0;
        boolean first = true;
        double mu=200000, w=45,x=180,y=402,z=110;

        for(int a = 0; a<Guess.length; a++)
        {
            double W = Math.pow(w,Guess[a]);
            for(int b = 0; b<Guess.length; b++)
            {
                double X = Math.pow(x,Guess[b]);
                for(int c = 0; c<Guess.length; c++)
                {
                    double Y = Math.pow(y, Guess[c]);
                    for(int d = 0; d<Guess.length; d++)
                    {
                        double Z = Math.pow(z, Guess[d]);
                        double temp = Math.abs (W*X*Y*Z - mu);
                        if (first)
                        {
                            e = temp;
                            first = false;
                        }
                        else if (temp<e)
                        {
                            e=temp;
                            Result[0]=a;
                            Result[1]=b;
                            Result[2]=c;
                            Result[3]=d;
                        }
                    }
                }
            }
        }

        System.out.print("Error = " + e*100/mu + '\n');
        System.out.print("a=" + Guess[Result[0]] + "\nb=" + Guess[Result[1]] + "\nc=" + Guess[Result[2]] + "\nd=" + Guess[Result[3]] + '\n');
        }
于 2013-09-16T19:13:27.497 に答える