2016-04-11 22 views
0

最小値が正しく設定されていないという問題が発生しています。最大値は完全に設定されていますが、最小値が0未満であることがわかります。このスニペットを実行すると、最小値が決して設定されていないようです。何か案は?関数の極限を決定する

編集:ポイントは-1から3にする必要があります曲線はここでイメージだ: The curve

public class FindingExtrema { 
    public static void main(String[] args) { 
     double lowestPoint = 0; 
     double highestPoint = 0; 
     double y; 

     double x = -1; 
     int timesCalculated = 0; 

     while (x <= 3) { 
      y = run(x); 

      if (y < lowestPoint) { 
       lowestPoint = y; 
       System.out.printf("y: %1$.5f", y); 
      } 

      if (y > highestPoint) { 
       highestPoint = y; 
      } 

      x += .00001; 
      timesCalculated++; 
     } 

     System.out.println("Done!"); 
     System.out.printf("Lowest: %1$.5f, Highest: %2$.5f; Calculated %3$d times\n", lowestPoint, highestPoint, timesCalculated); 
    } 

    private static double run(double x) { 
     return Math.cbrt(2 * x) - Math.sqrt(8 * x) + x + 16; 
    } 
} 
+1

あります。 Math.sqrt(8 * x)は虚数です。 Wolfram Alpha上の関数は、Javaコードで実際に使用している関数ではありません。 –

+0

それでは、どうすれば解決できるのでしょうか? 'Math.sqrt(8 * x)を0に置き換えるだけですか? – kneeki

+0

Javaで正しい関数を書くことで、それを解決しようとしています。なぜなら、ここにあるものは、あなたが提供したグラフのようには見えないからです。 –

答えて

1

表現

Math.cbrt(2 * x) - Math.sqrt(8 * x) + x + 16; 

はあなたのグラフの方程式の右辺と同等ではありません - あなたは、キュービングおよび二乗と混同平方根と混同立方根を得ています。

正しい式は、あなたの関数をx <0のために定義されていない

(2 * x * x * x) - (8 * x * x) + x + 16 
2

が、私は最小値が0未満

でなければならないことを知っていますそれをグラフ化すれば、そうではありません。私は0から3の範囲であなたの関数をGoogleに接続し、最小値は15.431のようなものでした。

+0

私がlowestPointのデフォルト値を100に設定すると、15.xxxxに設定されていることがわかりますが、それは正しいとは言えません。 -.- – kneeki

+0

@kneekiこれはJavaで書いた関数の正しい値ですが、あなたが書いたかった関数ではないと思います。 –

0

ポイントポイントを次のように設定します。

double lowestPoint = 1000; 

元の式を入れてもらえますか?マイナスの値に平方根を見つけることはできません。

SQRTは パブリック静的ダブルSQRTは(ダブルA)

は正しくdouble値の丸めた正の平方根を返します。特別なケース:◦引数がNaNまたは0より小さい場合、結果はNaNです。 ◦引数が正の無限大の場合、結果は正の無限大になります。 ◦引数が正のゼロまたは負のゼロの場合、結果は引数と同じになります。 それ以外の場合、結果は引数の値の真の数学的平方根に最も近いdouble値です。パラメータ:a - 値戻り値:aの正の平方根。引数がNaNまたは0より小さい場合、結果はNaNになります。

関連する問題