Added files via upload

Integration Calculator v1.0
This commit is contained in:
Simon O'Shea
2020-02-17 16:29:03 -05:00
committed by GitHub
parent a4f76a00bf
commit 5a4ba553af
2 changed files with 171 additions and 0 deletions
Binary file not shown.
+171
View File
@@ -0,0 +1,171 @@
/**
* @author Simon O'Shea
*/
import java.text.DecimalFormat;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Integrate {
public static double functionValue(double A, double B, double C, double D, double E, double F, double x) {
double value = 0;
value = (A * Math.pow(x, 5)) + (B * Math.pow(x, 4)) + (C * Math.pow(x, 3)) +
(D * (Math.pow(x, 2)) + (E * x) + F);
return value;
}
public static double antiDerivative(double A, double B, double C, double D, double E, double F, double a, double b) {
A = A / 6.0; B = B / 5.0; C = C / 4.0; D = D / 3.0; E = E / 2.0;
double first = (A * Math.pow(a, 6)) + (B * Math.pow(a, 5)) + (C * Math.pow(a, 4)) + (D * Math.pow(a, 3)) +
(E * Math.pow(a, 2)) + (F * a);
double last = (A * Math.pow(b, 6)) + (B * Math.pow(b, 5)) + (C * Math.pow(b, 4)) + (D * Math.pow(b, 3)) +
(E * Math.pow(b, 2)) + (F * b);
return last - first;
}
public static double midpointRule(double A, double B, double C, double D, double E, double F, double startInterval, double endInterval, double numInterval) {
double sum = 0, temp;
double width = (endInterval - startInterval) / numInterval;
double start = startInterval + (width / 2.0);
for(double i = start; i <= endInterval; i = i + width) {
temp = functionValue(A, B, C, D, E, F, i);
sum += temp;
}
return sum * width;
}
public static double trapezoidRule(double A, double B, double C, double D, double E, double F, double startInterval, double endInterval, double numInterval) {
double sum = 0, b1, b2;
double width = (endInterval - startInterval) / numInterval;
for(double i = startInterval; i < endInterval; i = i + width) {
b1 = functionValue(A, B, C, D, E, F, i);
b2 = functionValue(A, B, C, D, E, F, (i + width));
sum += (width * ((b1 + b2) / 2.0));
}
return sum;
}
public static double simpsonsRule(double A, double B, double C, double D, double E, double F, double startInterval, double endInterval, double numInterval) {
double mid = midpointRule(A, B, C, D, E, F, startInterval, endInterval, numInterval);
double trap = trapezoidRule(A, B, C, D, E, F, startInterval, endInterval, numInterval);
return ((2.0 * mid) + trap) / 3.0;
}
public static String percentError(double actual, double estimate) {
double error = (estimate - actual) / actual;
if(error == 0)
return "none";
return String.format("%.9f %%", error);
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
DecimalFormat formatter = new DecimalFormat("#,###.00");
try {
System.out.println("Please enter the \"a\" bound of integration: ");
double a = input.nextDouble();
System.out.println("Please enter the \"b\" bound of integration: ");
double b = input.nextDouble();
if(b < a) {
System.out.println("Error: \"a\" must be less than \"b\"");
System.exit(0);
}
System.out.println("Please enter the number of sub-intervals: ");
int n = input.nextInt();
if(n <= 0) {
System.out.println("The amount of sub-intervals must be greater than or equal to 0.");
System.exit(0);
}
System.out.println("Please enter 6 values: ");
double A = input.nextDouble();
double B = input.nextDouble();
double C = input.nextDouble();
double D = input.nextDouble();
double E = input.nextDouble();
double F = input.nextDouble();
input.close();
System.out.printf("%n%n%nFunction being integrated: %.2fx^5 + %.2fx^4 + %.2fx^3 + %.2fx^2 + %.2fx + %.2f%n%n", A, B, C, D, E, F);
Double actual = antiDerivative(A, B, C, D, E, F, a, b);
double midpoint = midpointRule(A, B, C, D, E, F, a, b, n);
double trapezoid = trapezoidRule(A, B, C, D, E, F, a, b, n);
double simpsons = simpsonsRule(A, B, C, D, E, F, a, b, n);
System.out.printf("-> The exact value (found by using the Fundamental Theorem of Calculus): %s // error: %s%n%n",
formatter.format(actual), percentError(actual, actual));
System.out.printf("-> The estimated value (found by using the Midpoint Reimann Sum method): %s // error: %s%n%n",
formatter.format(midpoint), percentError(actual, midpoint));
System.out.printf("-> The estimated value (found by using the Trapezoidal Reimann Sum method): %s // error: %s%n%n",
formatter.format(trapezoid), percentError(actual, trapezoid));
System.out.printf("-> The estimated value (found by using the Simpsons Reimann Sum method): %s // error: %s%n%n",
formatter.format(simpsons), percentError(actual, simpsons));
}
catch(InputMismatchException x) {
System.out.println("Error: Invalid input type");
System.exit(0);
}
catch(NoSuchElementException y) {
System.out.println("Error: No input");
System.exit(0);
}
}
}