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 }