Home : Map : Chapter 5 : Java : Tech : Physics :
Demo 1: Integration Methods
JavaTech
Course Map
Chapter 5
File/Package/Import
  Demo 1
  Demo 2
Access/Visibility
final & Constants
Static Import
Jar Files
  Demo 3
Applet Directories
3rd Party Packages
CLASSPATH
javadoc
CodingConventions
Exercises

    Supplements
Scope
Debug Techniques
Java Runtime
Class Class
JVM Instructions 2
JVM Processing
pack200

     About JavaTech
     Codes List
     Exercises
     Feedback
     References
     Resources
     Tips
     Topic Index
     Course Guide
     What's New

Here we demonstate the rectangular and trapezoidal approaches to numerical integration. We also demonstrate more sophisticated object oriented program design based on interface implementations.

We first create two interfaces on which we will build our function and integration method classes.

Function.java
/** An interface to provide a common method for obtaining
  * values of 1-D functions.
//
public interface Function
{

   
public double valueAt (double x);
}
Integrate.java

/** An interface to provide a common method for executing
  * integration methods.
**/
public interface Integrator
{
   
public double integrate (double lo, double hi,
                           int
n, Function fg);
}

 

Then we create two Integrate classes that implement the two types of integration mehtods:

RectInteg.java

/** Executes the rectangle slice method for
  * function integration. **/
class RectInteg implements Integrator
{
  public double integrate (double lo, double hi,
                            int n, Function f) {
    // Check data.
    if (hi <= lo || n <= 0 || f == null) return 0.0;
    double dx = (hi-lo)/n;
    double area = 0.0;

    double x_lo = lo;
    double x_hi = lo + dx;

    for (int i=0; i < n; i++) {
      double left_side = f.valueAt (x_lo);
      area += left_side * dx;
      x_lo = lo + i * dx;
    }

    return area;
  } // integrate

} // RectInteg

TrapezoidInteg.java

/** Executes the trapezoid method for function integration. **/
class TrapezoidInteg implements Integrator
{
  /** Integrate the 1-D function between lo and hi with n slices. */
  public double integrate (double lo, double hi,
                            int n, Function f) {
    // Check data.
    if (hi <= lo || n <= 0 || f == null) return 0.0;

    double dx =  (hi-lo)/n;
    double area = 0.0;

    double x_lo = lo;
    double x_hi = lo + dx;

    for (int i=0; i < n; i++) {
      double left_side = f.valueAt (x_lo);
      double rite_side = f.valueAt (x_hi);
      area += dx * (left_side + rite_side) / 2.0;
      x_lo = lo + i*dx;
      x_hi = x_lo + dx;
    }

    return area;
  } // integrate

} // TrapezoidInteg

 

The following code shows an implementation of the Function interface called PolyFunc. The applet's init() method creates an instance of the PolyFunc class and passes it as an argument in the integrate methods of instances of the two types of integration classes.

Integration is performed over the given span and with the number of slices passed in the arguments.

IntegrateApplet.java
(Output goes to browser's Java console.)

import java.applet.*;

/** This class illustrates use of Rectangular and Trapezoidal
  * methods for integration.
  *
  *  Integrator.java - interface
  *  TravezoidInteg.java - implements Integrator
  *  RectInteg.java  - implements Integrator
  *
  *  Function.java - interface
  *  PolyFunc.class - see below
 **/
public class IntegrateApplet extends Applet
{
  public void init () {

     PolyFunc pf = new PolyFunc ();

     RectInteg ri = new RectInteg ();
     double integ = ri.integrate (-2.0,2.0,100,pf);
     System.out.println ("Rectangle integ = "+ integ);

     TrapezoidInteg ti = new TrapezoidInteg ();
     integ = ti.integrate (-2.0,2.0,100,pf);
     System.out.println ("Trapezoid integ = " + integ);

  } // init

  /** Paint message in Applet window. **/
  public void paint (java.awt.Graphics g) {
     g.drawString ("IntegrateApplet",20,20);
  }

  /** This program can also run as an application. No graphics
    * needed, so it just runs the applet's init () function.
   **/
  public static void main (String [] args) {
    IntegrateApplet obj = new IntegrateApplet ();
    obj.init ();
  } // main

} // IntegrateApplet

/** Implement a simple second order polynomial. **/
class PolyFunc implements Function
{
   public double valueAt (double x) {
     return  (4.0 - x*x);
   }

} // Function

 

The output shows:

Rectangle integ = 10.659263999999999
Trapezoid integ = 10.6656

 

Exercise: Compare these values to the calculated integral value. Try some other parameters such as a bigger or lower number of slices and different integration intervals.

 

Most recent update: Oct. 21, 2005

            Tech
DecimalFormat
  Demo 1
  Demo 2

System.out.printf
  Demo 3
CJ Format Class
  Demo 4   Demo 5
Other Format Tools

Immutable Complex
Exercises

           Physics
Interpolation
Integration
  Demo 1
Simpson Rule
  Demo 2
Exercises

  Part I Part II Part III
Java Core 1  2  3  4  5  6  7  8  9  10  11  12 13 14 15 16 17
18 19 20
21
22 23 24
Supplements

1  2  3  4  5  6  7  8  9  10  11  12

Tech 1  2  3  4  5  6  7  8  9  10  11  12
Physics 1  2  3  4  5  6  7  8  9  10  11  12

Java is a trademark of Sun Microsystems, Inc.