Zurück Vor +Ebene Home Inhalt Index Hilfe

Polynomiale Regression

Programm zur polynomialen Regression von n Datenpunkten .
Ausgegeben wird eine (dimen + 1) x (dimen + 1) Matrix A und ein (dimen + 1)-dimensionaler Vektor . Die Regressionskoeffizienten ergeben sich dann als Lösung des Gleichungssystems .
program PolynomialeRegression(input, output);

        {Programmsequenz zur polynomialen Regression von n Datenpunkten}

    uses
        stdfile;

    const
        MaxArray = 32; {<= 32767}

    var
        i, j, k, l, n: integer;
        order:         integer;
        x, y, c:       array [0..MaxArray] of double;
        a:             array [0..MaxArray,0..MaxArray] of double;
        sum:           double;

    procedure init;
        var
            fName: string;
            f:     text;
        begin {init}
            writeln('Berechnung der Matrix A und des Vektors c, mit Ar = c, sodass die r_i');
            writeln('die Koeffizienten der polynomialen Regression von n Datenpunkten sind.');
            writeln;
            writeln('In welcher Datei liegt die Funktion? (In pol_reg.dat liegt ein Beispiel.)');
            readln(fName);
            if StdOpen(f, fName) then begin
                n := -1;
                repeat
                    n := n + 1;
                    if n > MaxArray then begin
                        writeln('Die Datei "', fName, '" hat zu viele Punkte (mehr als ', MaxArray, ').');
                        halt
                    end; {if}
                until not StdRead2(f, x[n], y[n]);
                n := n - 1
            end else begin {if}
                writeln('Die Datei "', fName, '" kann nicht geoeffnet werden.');
                halt
            end; {if}
            close(f);
            writeln('Insgesamt wurden ', n + 1, ' Werte eingelesen.');
            n := n + 1;
            writeln('Geben Sie die Ordnung des Polynoms an');
            readln(order);
        end; {init}

    procedure result; begin
        for i:=1 to order+1 do begin
            for j:=1 to order+1 do begin
                write(a[i, j]:8:3, ' ')
            end; {for}
            writeln(':', c[i]:8:3)
        end {for}
    end; {result}

    begin {Polynomiale Regression}
        init;
        for i:=1 to order+1 do begin
            for j:=1 to i do begin
                k := i + j - 2;
                sum := 0.0;
                for l:=0 to n-1 do begin
                    sum := sum + exp(k*ln(x[l]))
                end; {for}
                a [i, j] := sum;
                a [j, i] := sum
            end; {for}
            sum := 0.0;
            for l:=0 to n-1 do begin
                sum := sum + y[l]*exp((i - 1)*ln(x[l]))
            end; {for}
            c[i] := sum
        end; {for}
        result
    end. {Polynomiale Regression}
Zurück Vor +Ebene Home Inhalt Index Hilfe

Copyright Verlag Harri Deutsch AG  Stöcker DeskTop Mathematik