Added files via upload
Integration Calculator v1.0
This commit is contained in:
Binary file not shown.
@@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user