home *** CD-ROM | disk | FTP | other *** search
- (*****************************************************************************)
- (* INTEGRAL.INC *)
- (* *)
- (* Berechnung eines bestimmten Integrals von f *)
- (*****************************************************************************)
-
- Procedure Integrate;
-
- Var a,b,g,err,I,LastI :Real;
- k :Integer;
-
-
- Function Simpson (a,b :Real; k :Integer) :Real;
-
- Var h,S :Real;
- i :Integer;
-
- Begin
- h := (b-a)/(k+k);
- S := fn(a,0) + fn(b,0);
- For i:=0 to k-1 do
- S := S + 4*fn(a+(i+i+1)*h,0);
- For i:=1 to k-1 do
- S := S + 2*fn(a+2*i*h,0);
- Simpson := S * h/3;
- End;
-
-
- Begin
- ClrScr;
- WriteLn ('Berechnung des Integrals von f(x)'); WriteLn;
- Write ('von a='); Read (a);
- Write (' bis b='); Read (b);
- Write (' mit relativer Genauigkeit g='); ReadLn (g); WriteLn; WriteLn;
- k := 4;
- LastI := Simpson (a, b, 2);
- Repeat
- I := Simpson (a, b, k); (* Simpson-Näherung *)
- err := abs ((I-LastI)/I); (* relativer Fehler *)
- LastI := I;
- k := k * 2 (* Stützstellen verdoppeln *)
- until (err <= g) or (k > MaxIter);
- If k <= MaxIter then
- Begin
- WriteLn ('Integral: I = ', I:m:n); WriteLn;
- WriteLn ('absoluter Fehler: dI = ', err:m:n); WriteLn;
- End
- else
- WriteLn ('Maximale Anzahl von Iterationen überschritten!')
- End;