我有一个程序要求用户输入任何数字(通常是一个大数字)并将其存储在变量“mu”中。然后它要求用户输入任何4个重要值。我试图创建的公式简单地取4个有效值并将它们设置为w,x,y和z。我的公式是这样的。 mu = w ^ a * x ^ b * y ^ c * z ^ d。其中a,b,c,d是这些可能的17个值中的任何一个{{-5,-4,-3,-2,-1,-1 / 2,1,-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或我的百分比错误
EDIT =我获得的错误值很大。巨大的价值。
答案 0 :(得分: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');
}