Download this file

Integral.def    156 lines (133 with data), 9.4 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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.