다음은  이차방정식 x^2 - x - 1  = 0 의 양의 근 즉 황금비율(golden ratio)을 구하는 자바 애플리케이션 소스이다. 황금비율을 구하는 비례방정식은   1 : x = x : (x+1) 이며, 이를 이차방정식으로 표현한 것이 x^2 - x - 1  = 0 이다.

See:  Golden ratio - Sajun.org

  1. /*
  2.  *  Filename: TestGoldenRatioApp.java
  3.  *    황금률(즉, 이차방정식 x^2 - x - 1  = 0 의 양의 근)을 계산한다.
  4.  *
  5.  *   Compile: javac -d . TestGoldenRatioApp.java
  6.  *
  7.  *   Execute: java TestGoldenRatioApp
  8.  *
  9.  *      Date:  2008/03/24
  10.  *    Author:  PH Kim   [ pkim (AT) scripts.pe.kr ]
  11.  */
  12. import java.util.ArrayList;
  13. public class TestGoldenRatioApp {
  14.     public static void printUsing() {
  15.         System.out.println("Using: java TestGoldenRatioApp [-h|-help]");
  16.         System.out.println("This calculates the value of the golden ratio.");
  17.     }
  18.     // 이차방정식 a x^2 + b x + c  = 0 의 근을 구한다.
  19.     public ArrayList<Double> findQuadraticRoot(double a, double b, double c) {
  20.         double x1, x2;
  21.         if (a == 0.0) {
  22.             throw new RuntimeException("Since the highest coefficient is zero, the given equation is not a quadratic equation.");
  23.   }
  24.         else if (b*b - 4*a*c < 0.0) {
  25.             throw new RuntimeException("Since the discriminant " + (b*b - 4*a*c) + " is negative, the given equation has no real root.");
  26.   }
  27.         x1 = (-b + Math.sqrt(b*b - 4*a*c)) / (2.0 * a);
  28.         x2 = (-b - Math.sqrt(b*b - 4*a*c)) / (2.0 * a);
  29.         ArrayList<Double> array = new ArrayList<Double>();
  30.         array.add(new Double(x1));
  31.         array.add(new Double(x2));
  32.         return array;
  33.     }
  34.     public static void main(String[] args) {
  35.        TestGoldenRatioApp app = new TestGoldenRatioApp();
  36.         if (args.length > 0 && (args[0].equals("-h") || args[0].equals("-help"))) {
  37.             app.printUsing();
  38.             System.exit(1);
  39.         }
  40.         ArrayList<Double> values = app.findQuadraticRoot(1.0, -1.0, -1.0);
  41.         double x1, x2;
  42.         x1 = values.get(0).doubleValue();
  43.         x2 = values.get(1).doubleValue();
  44.         if (x1 >= x2) {
  45.             System.out.println("The bigger root is " + x1 + ", ");
  46.             System.out.println("and the less root is " + x2 + ".");
  47.         }
  48.         else {
  49.             System.out.println("The bigger root is " + x2 + ", ");
  50.             System.out.println("and the less root is " + x1 + ".");
  51.         }
  52.     }
  53. }



컴파일> javac -d . TestGoldenRatioApp.java

실행> java TestGoldenRatioApp
The bigger root is 1.618033988749895,
and the less root is -0.6180339887498949.




Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by Scripter
,