Zurück Vor +Ebene Home Inhalt Index Hilfe

Simpsonregel

Programm zur Integration einer Funktion nach der Simpsonregel.
program Simpson(input, output);

    {Simpson-Integration einer Funktion mit n + 1 gegebenen Stuetzstellen}
    
    uses
       stdfile;
       
    const
        MaxArray = 1024;
        
    var
        fx:         array [0..MaxArray] of double;
        a, b:       double;
        m, n, i:    integer;
        h, t:       double;
        res:        double;
        sum1, sum2: double;
        
    procedure init;
        var
            fName: string;
            f:     text;
        begin {init}
        	writeln('Simpson-Integration einer Funktion f');
        	writeln;
        	writeln('Welche Datei enthaelt Intervallgrenzen und Stuetzstellen? ');
                writeln('(In simpson.dat liegt ein Beispiel.)');
        	readln(fName);
        	if StdOpen(f, fName) then begin
        	    if not StdRead(f, a) then begin
                    writeln('Erste Intervallgrenze nicht gefunden.');
                    halt
                end; {if}
                if not StdRead(f, b) then begin
                    writeln('Zweite Intervallgrenze nicht gefunden.');
                    halt
                end; {if}
                n := -1;
                repeat
                    n := n + 1;
                    if n > MaxArray then begin
                        writeln('Zu viele Stuetzstellen (mehr als ', MaxArray,
                            ') vorhanden.');
                        halt
                    end {if}
                until not StdRead(f, fx[n]);
                n := n - 1;
                close(f);
                writeln('Insgesamt ', n + 1, ' Werte gelesen.');
                writeln
            end else begin {if}
                writeln('Kann Datei "', fName, '" nicht oeffnen.');
                halt
            end {if}
         end; {init}

    procedure result;
        begin {result}
            writeln('Das Integral hat den Wert ', res:7:3)
        end; {result}

    begin {Simpson}
        init;
        h := (b - a) / n;
        if (n mod 2 <> 0) and (n > 1) then begin
            t := fx[n - 3] + 3 * (fx[n - 2] + fx[n - 1]) + fx[n];
            res := 3 * h * t / 8;
            m := n - 3;
        end else begin {if}
            res := 0;
            m := n
        end; {if}
        if m > 1 then begin
            sum1 := 0;
            sum2 := 0;
            i := 1;
            while i <= m - 1 do begin
                sum1 := sum1 + fx[i];
                i := i + 2
            end; {while}
            i := 2;
            while i <= m - 2 do begin
                sum2 := sum2 + fx[i];
                i := i + 2
            end; {while}
            res := res + h * (fx[0] + 4 * sum1 + 2 * sum2 + fx[m]) / 3
        end; {if}
        result     
    end. {Simpson}
Zurück Vor +Ebene Home Inhalt Index Hilfe

Copyright Verlag Harri Deutsch AG  Stöcker DeskTop Mathematik