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 Integroi3 {
008    
009      interface FunktioRR {
010        public double f(double x);
011        public String toString();
012        public double intfun(double x);
013        public double derfun(double x);
014        public double defint(double x1, double x2);
015      }
016    
017      public static class PerusFunktio implements FunktioRR {
018        public double f(double x) { return 0; }
019        public String toString()  { return ""; }
020        public double intfun(double x) { return 0; }
021        public double derfun(double x) { return 0; }
022        public double defint(double x1, double x2) { return 0; }
023      }
024    
025      static class SinFun extends PerusFunktio {
026        public double f(double x) { return Math.sin(x); }
027      }
028    
029      static class ExpFun extends PerusFunktio {
030        public double f(double x) { return Math.exp(x); }
031      }
032    
033      static class OmaFun extends PerusFunktio  {
034        public double f(double x) { return 2*x- 5;      }
035      }
036    
037      public static double integroi(FunktioRR f, double x1, double x2, int tiheys) {
038        double x,dx,summa=0;
039    
040        dx = (x2- x1)/tiheys;
041    
042        for (x=x1+dx/2 ; x<x2; x+=dx)
043          summa += f.f(x)*dx;
044    
045        return summa;
046      }
047    
048    
049      public static void main(String[] args)  {
050        double ifx;
051        ifx = integroi(new OmaFun(),0,5,100);
052        System.out.println("Integraali omafun(x) väliltä [0,5] on noin "+
053                           Mjonot.fmt(ifx,7,5));
054        ifx = integroi(new SinFun(),0,Math.PI,1000);
055        System.out.println("Integraali sin(x) väliltä [0,pi] on noin "+
056                           Mjonot.fmt(ifx,7,5));
057        ifx = integroi(new ExpFun(),0,1,500);
058        System.out.println("Integraali exp(x) väliltä [0,1] on noin "+
059                           Mjonot.fmt(ifx,7,5));
060      }
061    }