Advertisement
Guest User

Fowler

a guest
Oct 24th, 2014
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.81 KB | None | 0 0
  1. package fowler;
  2.  
  3. import java.math.BigDecimal;
  4. import java.math.RoundingMode;
  5.  
  6. /**
  7.  *
  8.  * @author Dale Diaz
  9.  */
  10. public class Fowler {
  11.  
  12.     public static void main(String[] args) {
  13.  
  14.         // Value for function of L
  15.         final int L = 2;
  16.  
  17.         //////////////////////////////////////////////////
  18.         ////////// Compute {(148!) / [(13!) * (81!) * (2!) * (52!)]} * e^13L
  19.         ////////////////////////////////////////////////////////////////////////
  20.        
  21.         // Numerator of the first inner fraction
  22.         BigDecimal numerator;
  23.  
  24.         // Calculate the numerator of the numerator variable (148!)
  25.         BigDecimal num1 = new BigDecimal("1");
  26.         for (int i = 1; i <= 148; i++) {
  27.             num1 = num1.multiply(new BigDecimal(i + ""));
  28.         }
  29.  
  30.         // Calculate the denominator of the numerator variable (13!81!2!52!)
  31.         BigDecimal num2 = new BigDecimal("1");
  32.  
  33.         // 13!
  34.         for (int i = 1; i <= 13; i++) {
  35.             num2 = num2.multiply(new BigDecimal(i + ""));
  36.         }
  37.         // 81!
  38.         for (int i = 1; i <= 81; i++) {
  39.             num2 = num2.multiply(new BigDecimal(i + ""));
  40.         }
  41.         // 2!
  42.         for (int i = 1; i <= 2; i++) {
  43.             num2 = num2.multiply(new BigDecimal(i + ""));
  44.         }
  45.         // 52!
  46.         for (int i = 1; i <= 52; i++) {
  47.             num2 = num2.multiply(new BigDecimal(i + ""));
  48.         }
  49.  
  50.         // Compute the numerator
  51.         numerator = num1.divide(num2);
  52.  
  53.         // Numerator * e^(13L)
  54.         BigDecimal e = new BigDecimal(Math.E);
  55.         BigDecimal coefficient = new BigDecimal(Math.E);
  56.        
  57.         // If L < 0, raise to the absolute value of L and divide the result into one
  58.         if (L < 0) {
  59.             coefficient = e.pow(13 * Math.abs(L));
  60.             coefficient = BigDecimal.valueOf(1).divide(coefficient, 200, RoundingMode.HALF_UP);
  61.         } else {
  62.             coefficient = e.pow(13 * L);
  63.         }
  64.        
  65.         System.out.println("Coefficient: " + coefficient);
  66.        
  67.         numerator = numerator.multiply(new BigDecimal(coefficient + ""));
  68.  
  69.         System.out.println("Numerator*e^(13L): " + numerator + "\n");
  70.  
  71.         //////////////////////////////////////////////////
  72.         ////////// Compute the sum from 0 to 15 of
  73.         ////////// {(148!) / [(i)! * (94-i)! * (15-i)! * (39+i)!]} * e^(iL)
  74.         ////////////////////////////////////////////////////////////////////////
  75.        
  76.         BigDecimal sum = new BigDecimal("0");
  77.        
  78.         // d1-d4 are the four denominator values in the combinatoric value
  79.         BigDecimal d1;
  80.         BigDecimal d2;
  81.         BigDecimal d3;
  82.         BigDecimal d4;
  83.         BigDecimal dProduct = new BigDecimal("1");
  84.         BigDecimal sumCoefficient = new BigDecimal("0"); // Represents E^(iL)
  85.  
  86.         // Compute the combinatoric value for each value of i and sum each result
  87.         for (int i = 0; i <= 15; i++) {
  88.             System.out.println("i = " + i);
  89.            
  90.             // Reset d1-d4
  91.             d1 = new BigDecimal("1");
  92.             d2 = new BigDecimal("1");
  93.             d3 = new BigDecimal("1");
  94.             d4 = new BigDecimal("1");
  95.  
  96.             // Compute i!
  97.             if (i == 0) {
  98.                 d1 = new BigDecimal("1");
  99.             } else {
  100.                 for (int j = 0; j < i; j++) {
  101.                     d1 = d1.multiply(new BigDecimal((j + 1) + ""));
  102.                 }
  103.             }
  104.             System.out.println("d1: " + d1);
  105.            
  106.             // Compute (94-i)!
  107.             if ((94 - i) == 0) {
  108.                 d2 = new BigDecimal("1");
  109.             } else {
  110.                 for (int j = 0; j < (94 - i); j++) {
  111.                     d2 = d2.multiply(new BigDecimal((j + 1) + ""));
  112.                 }
  113.             }
  114.             System.out.println("d2: " + d2);
  115.            
  116.             // Compute (15-i)!
  117.             if ((15 - i) == 0) {
  118.                 d3 = new BigDecimal("1");
  119.             } else {
  120.                 for (int j = 0; j < (15 - i); j++) {
  121.                     d3 = d3.multiply(new BigDecimal((j + 1) + ""));
  122.                 }
  123.             }
  124.             System.out.println("d3: " + d3);
  125.            
  126.             // Compute (39+i)!
  127.             if ((39 + i) == 0) {
  128.                 d4 = new BigDecimal("1");
  129.             } else {
  130.                 for (int j = 0; j < (39 + i); j++) {
  131.                     d4 = d4.multiply(new BigDecimal((j + 1) + ""));
  132.                 }
  133.             }
  134.             System.out.println("d4: " + d4);
  135.            
  136.             // Compute dProduct
  137.             dProduct = new BigDecimal("1");
  138.             dProduct = dProduct.multiply(d1);
  139.             dProduct = dProduct.multiply(d2);
  140.             dProduct = dProduct.multiply(d3);
  141.             dProduct = dProduct.multiply(d4);
  142.             System.out.println("Combinatoric Denominator: " + dProduct);
  143.            
  144.             // Compute e^(iL)
  145.             sumCoefficient = new BigDecimal(Math.E);
  146.            
  147.             // If L is negative, raise sumCoefficient to the absolute value of the exponent and divide it into one
  148.             if (L < 0) {
  149.                 sumCoefficient = sumCoefficient.pow(i * Math.abs(L));
  150.                 sumCoefficient = BigDecimal.valueOf(1).divide(sumCoefficient, 200, RoundingMode.HALF_UP);
  151.             }
  152.            
  153.             System.out.println("E^il: " + sumCoefficient);
  154.            
  155.             // Change dProduct to represent the combinatoric value times the coefficient e^iL
  156.             dProduct = dProduct.multiply(sumCoefficient);
  157.             System.out.println("Denominator * E^iL: " + dProduct);
  158.            
  159.             // Add the current denominator value to the overall sum
  160.             sum = sum.add(dProduct);
  161.             System.out.println("Current sum: " + sum + "\n");
  162.            
  163.         }
  164.        
  165.         // Compute the outer numerator and store it in outerNumerator
  166.         System.out.println("Numerator: " + numerator + " Divided by dProduct: " + dProduct);
  167.         BigDecimal outerNumerator = numerator.divide(dProduct, 200, RoundingMode.HALF_EVEN);
  168.         System.out.println("Outer Numerator: " + outerNumerator);
  169.        
  170.         // Compute 1/root(2pi) * 1/[e^((L^2)/2)]
  171.         double exp = (double)L*(double)L/2;
  172.         System.out.println("exp: " + exp);
  173.         double coef = Math.pow(Math.E, exp);
  174.         System.out.println("coef: " + coef);
  175.         double ecoef = Math.sqrt(2 * (Math.PI));
  176.         System.out.println("ecoef: " + ecoef);
  177.         double product = coef * ecoef;
  178.         System.out.println("product: " + product);
  179.         // Divide whole product by 1 to invert
  180.         product = 1 / product;
  181.         System.out.println("product inverted: " + product);
  182.         BigDecimal prod = new BigDecimal(product + "");
  183.         System.out.println("Overall Numerator: " + prod.multiply(outerNumerator));
  184.  
  185.     }
  186.  
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement