001    import fi.jyu.mit.ohj2.*;
002    /**
003     * Ohjelmalla integroidaan numeerisesti funktio-olio.
004     * @author Vesa Lappalainen
005     * @version 1.0, 25.03.2003
006     */
007    public class Integroi2 {
008    
009      interface FunktioRR {
010        public double f(double x);
011      }
012    
013      static class SinFun implements FunktioRR {
014        public double f(double x) { return Math.sin(x); }
015      }
016    
017      static class ExpFun implements FunktioRR {
018        public double f(double x) { return Math.exp(x); }
019      }
020    
021      static class OmaFun implements FunktioRR  {
022        public double f(double x) { return 2*x- 5;      }
023      }
024    
025      public static double integroi(FunktioRR f, double x1, double x2, int tiheys) {
026        double x,dx,summa=0;
027    
028        dx = (x2- x1)/tiheys;
029    
030        for (x=x1+dx/2 ; x<x2; x+=dx)
031          summa += f.f(x)*dx;
032    
033        return summa;
034      }
035    
036    
037      public static void main(String[] args)  {
038        double ifx;
039        ifx = integroi(new OmaFun(),0,5,100);
040        System.out.println("Integraali omafun(x) väliltä [0,5] on noin "+
041                           Mjonot.fmt(ifx,7,5));
042        ifx = integroi(new SinFun(),0,Math.PI,1000);
043        System.out.println("Integraali sin(x) väliltä [0,pi] on noin "+
044                           Mjonot.fmt(ifx,7,5));
045        ifx = integroi(new ExpFun(),0,1,500);
046        System.out.println("Integraali exp(x) väliltä [0,1] on noin "+
047                           Mjonot.fmt(ifx,7,5));
048      }
049    }