Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
123
Task/Numerical-integration/Java/numerical-integration.java
Normal file
123
Task/Numerical-integration/Java/numerical-integration.java
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
class NumericalIntegration
|
||||
{
|
||||
|
||||
interface FPFunction
|
||||
{
|
||||
double eval(double n);
|
||||
}
|
||||
|
||||
public static double rectangularLeft(double a, double b, int n, FPFunction f)
|
||||
{
|
||||
return rectangular(a, b, n, f, 0);
|
||||
}
|
||||
|
||||
public static double rectangularMidpoint(double a, double b, int n, FPFunction f)
|
||||
{
|
||||
return rectangular(a, b, n, f, 1);
|
||||
}
|
||||
|
||||
public static double rectangularRight(double a, double b, int n, FPFunction f)
|
||||
{
|
||||
return rectangular(a, b, n, f, 2);
|
||||
}
|
||||
|
||||
public static double trapezium(double a, double b, int n, FPFunction f)
|
||||
{
|
||||
double range = checkParamsGetRange(a, b, n);
|
||||
double nFloat = (double)n;
|
||||
double sum = 0.0;
|
||||
for (int i = 1; i < n; i++)
|
||||
{
|
||||
double x = a + range * (double)i / nFloat;
|
||||
sum += f.eval(x);
|
||||
}
|
||||
sum += (f.eval(a) + f.eval(b)) / 2.0;
|
||||
return sum * range / nFloat;
|
||||
}
|
||||
|
||||
public static double simpsons(double a, double b, int n, FPFunction f)
|
||||
{
|
||||
double range = checkParamsGetRange(a, b, n);
|
||||
double nFloat = (double)n;
|
||||
double sum1 = f.eval(a + range / (nFloat * 2.0));
|
||||
double sum2 = 0.0;
|
||||
for (int i = 1; i < n; i++)
|
||||
{
|
||||
double x1 = a + range * ((double)i + 0.5) / nFloat;
|
||||
sum1 += f.eval(x1);
|
||||
double x2 = a + range * (double)i / nFloat;
|
||||
sum2 += f.eval(x2);
|
||||
}
|
||||
return (f.eval(a) + f.eval(b) + sum1 * 4.0 + sum2 * 2.0) * range / (nFloat * 6.0);
|
||||
}
|
||||
|
||||
private static double rectangular(double a, double b, int n, FPFunction f, int mode)
|
||||
{
|
||||
double range = checkParamsGetRange(a, b, n);
|
||||
double modeOffset = (double)mode / 2.0;
|
||||
double nFloat = (double)n;
|
||||
double sum = 0.0;
|
||||
for (int i = 0; i < n; i++)
|
||||
{
|
||||
double x = a + range * ((double)i + modeOffset) / nFloat;
|
||||
sum += f.eval(x);
|
||||
}
|
||||
return sum * range / nFloat;
|
||||
}
|
||||
|
||||
private static double checkParamsGetRange(double a, double b, int n)
|
||||
{
|
||||
if (n <= 0)
|
||||
throw new IllegalArgumentException("Invalid value of n");
|
||||
double range = b - a;
|
||||
if (range <= 0)
|
||||
throw new IllegalArgumentException("Invalid range");
|
||||
return range;
|
||||
}
|
||||
|
||||
|
||||
private static void testFunction(String fname, double a, double b, int n, FPFunction f)
|
||||
{
|
||||
System.out.println("Testing function \"" + fname + "\", a=" + a + ", b=" + b + ", n=" + n);
|
||||
System.out.println("rectangularLeft: " + rectangularLeft(a, b, n, f));
|
||||
System.out.println("rectangularMidpoint: " + rectangularMidpoint(a, b, n, f));
|
||||
System.out.println("rectangularRight: " + rectangularRight(a, b, n, f));
|
||||
System.out.println("trapezium: " + trapezium(a, b, n, f));
|
||||
System.out.println("simpsons: " + simpsons(a, b, n, f));
|
||||
System.out.println();
|
||||
return;
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
testFunction("x^3", 0.0, 1.0, 100, new FPFunction() {
|
||||
public double eval(double n) {
|
||||
return n * n * n;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
testFunction("1/x", 1.0, 100.0, 1000, new FPFunction() {
|
||||
public double eval(double n) {
|
||||
return 1.0 / n;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
testFunction("x", 0.0, 5000.0, 5000000, new FPFunction() {
|
||||
public double eval(double n) {
|
||||
return n;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
testFunction("x", 0.0, 6000.0, 6000000, new FPFunction() {
|
||||
public double eval(double n) {
|
||||
return n;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue