DEFINITION MODULE Integral;
(*------------------------------------------------------------------------*)
(* Stell einige Routinen zur numerischen Integration zur Verfuegung. *)
(* Module providing procedures for numerical integration. *)
(*------------------------------------------------------------------------*)
(* Implementation : Michael Riedl *)
(* Licence : GNU Lesser General Public License (LGPL) *)
(*------------------------------------------------------------------------*)
(* $Id: Integral.def,v 1.4 2018/03/02 10:48:13 mriedl Exp mriedl $ *)
FROM LMathLib IMPORT Funktion1;
PROCEDURE InitGaussInt(Nst : CARDINAL);
(*----------------------------------------------------------------*)
(* Initialisiert die St"utzstellen und Gewichte der Gauss- *)
(* integration, mu\3 vor dem ersten Aufruf von GaussInt *)
(* gerufen werden ! *)
(* Der Parameter Nst gibt an, mit welcher St"utzstellenanzahl *)
(* gearbeitet werden soll. *)
(* Lit : H.R.Schwarz 'Numerische Mathematik', *)
(* B.G.Teubner 1988, 2.Auflage, S.353 ffg. *)
(*----------------------------------------------------------------*)
PROCEDURE GaussInt(Untergr,Obergr : LONGREAL;
N : CARDINAL;
Funk : Funktion1) : LONGREAL;
(*----------------------------------------------------------------*)
(* Berechent das Integral der Funktion Funk(x) im Intervall *)
(* UnterGr..OberGr nach dem Gauss-Algorithmus. *)
(* *)
(* Untergr : Beginn des Integrationsbereichs *)
(* Obergr : Ende des Integrationsbereichs *)
(* N : Anzahl der Intervalle im Integrationsbereich *)
(* Funk : Funktion, "uber die integriert wird *)
(* *)
(* GaussInt mu\3 vor dem ersten Aufruf mit InitGaussInt *)
(* initialisiert werden, ansonsten wird standartm"a\3ig mit einer *)
(* Zweipunkteformel gerechnet. *)
(*----------------------------------------------------------------*)
PROCEDURE GaussIntKonst(Untergr,Obergr : LONGREAL;
N : CARDINAL;
NSt : CARDINAL;
Funk : Funktion1) : LONGREAL;
(*----------------------------------------------------------------*)
(* Berechent das Integral der Funktion Funk(x) im Intervall *)
(* UnterGr..OberGr nach dem Gauss-Algorithmus. *)
(* *)
(* Untergr : Beginn des Integrationsbereichs *)
(* Obergr : Ende des Integrationsbereichs *)
(* N : Anzahl der Intervalle im Integrationsbereich *)
(* NSt : Anzahl der St"utzstellen *)
(* Funk : Funktion, "uber die integriert wird *)
(*----------------------------------------------------------------*)
PROCEDURE SimpInt(Untergr,Obergr : LONGREAL;
genau : LONGREAL;
MaxIter : CARDINAL;
VAR Iter : CARDINAL;
Funk : Funktion1) : LONGREAL;
(*----------------------------------------------------------------*)
(* Berechent das Integral der Funktion Funk(x) im Intervall *)
(* UnterGr..OberGr nach dem Simpson -Algorithmus. *)
(* *)
(* Untergr : Beginn des Integrationsbereichs *)
(* Obergr : Ende des Integrationsbereichs *)
(* genau : Anzahl der Intervalle im Integrationsbereich *)
(* MaxIter : Maximale Anzahl der Simpson-Iterartionen *)
(* Iter : Anzahl der durchgefuehrten Iterationen *)
(* Funk : Funktion, "uber die integriert wird *)
(*----------------------------------------------------------------*)
PROCEDURE Romberg(UnterGr : LONGREAL;
OberGr : LONGREAL;
genau : LONGREAL;
MaxIter : CARDINAL;
VAR Iter : CARDINAL;
Funk : Funktion1) : LONGREAL;
(*----------------------------------------------------------------*)
(* Berechent das Integral der Funktion Funk(x) im Intervall *)
(* UnterGr..OberGr nach dem Romberg-Algorithmus. *)
(* *)
(* Untergr : Beginn des Integrationsbereichs *)
(* Obergr : Ende des Integrationsbereichs *)
(* genau : Anzahl der Intervalle im Integrationsbereich *)
(* MaxIter : Maximale Anzahl der Simpson-Iterartionen *)
(* Iter : Anzahl der durchgefuehrten Iterationen *)
(* Funk : Funktion, "uber die integriert wird *)
(* *)
(* Wenn Iter > MaxIter, wird die globale Variable Fehler auf *)
(* TRUE gesetzt und Fehlerflag entsprechend gesetzt. *)
(*----------------------------------------------------------------*)
PROCEDURE Quadrature(Untergr,Obergr : LONGREAL;
eps : LONGREAL; (* Geforderte Genauigkeit *)
VAR err : LONGREAL; (* Fehlerabsch"atzung *)
Funkt : Funktion1) : LONGREAL;
(*----------------------------------------------------------------*)
(* Modula-Implementation des Algol-Algorithmus der modifizierten *)
(* Romberg-Integration nach Bulirsch/Stoer. *)
(* *)
(* Untergr : Beginn des Integrationsbereichs *)
(* Obergr : Ende des Integrationsbereichs *)
(* eps : Geforderte Genauigkeit der Integration *)
(* err : Fehlerabschaetzung *)
(* Funk : Funktion, "uber die integriert wird *)
(* *)
(* Lit : Num.Math. 9, 1967, 271-278 *)
(*----------------------------------------------------------------*)
PROCEDURE NumInt(VAR X,Y : ARRAY OF LONGREAL;
N : CARDINAL) : LONGREAL;
(*----------------------------------------------------------------*)
(* Berechnet das Integral einer in Form von N Datenpunkten *)
(* X[i],Y[i] gegebenen Funktion (z.B. Me\3punkte) nach der *)
(* Trapetzregel. *)
(*----------------------------------------------------------------*)
PROCEDURE Simson(VAR Y : ARRAY OF LONGREAL;
H : LONGREAL;
N : CARDINAL) : LONGREAL;
(*----------------------------------------------------------------*)
(* Berechnet das Integral einer in Form von N Datenpunkten *)
(* Y[i] gegebenen Funktion mit Schrittweite H nach dem Simpson *)
(* Algorithmus. *)
(*----------------------------------------------------------------*)
PROCEDURE SimCum(VAR Y : ARRAY OF LONGREAL;
H : LONGREAL;
N : CARDINAL) : LONGREAL;
(*----------------------------------------------------------------*)
(* A modified simpsons rule and fortran subroutine for *)
(* cumulative numerical integration of a function defined by *)
(* data points. *)
(* *)
(* Y : Function / measurement values *)
(* H : Stepwidth of Mantissa (data point need to have equal *)
(* distances) *)
(* N : Number of data points *)
(* *)
(* Blake, L. V.; Naval Research Laboratory (1971) *)
(*----------------------------------------------------------------*)
END Integral.