Zurück Vor +Ebene Home Inhalt Index Hilfe

Lineare Regression

Programm zur multidimensionalen linearen Regression von n Datenpunkten in dimen Dimensionen. 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 MultiDim(input, output);

    {Multidimensionale lineare Regression}
    
    uses
        stdfile;
        
    const MaxArray = 32;
    
    var
        n, dimen: integer;
        x, a:     array[1..MaxArray, 1..MaxArray] of double;
        y, c:     array[1..MaxArray] of double;
        sum:      double;
        i, j, l:  integer;
        
    procedure init;
        var
            fName: string;
            f:     text;
            t:     double;
            i:     integer;
        begin {init}
            writeln('Multidimensionale lineare Regression');
            writeln;
            writeln('Welche Datei enthaelt die Daten? (In multidim.dat liegt ein Beispiel.)');
            readln(fName);
            if StdOpen(f, fName) then begin
                if not StdRead(f, t) then begin
                    writeln('Fehler beim Lesen von n');
                    halt
                end; {if}
                if t > MaxArray then begin
                    writeln('n ist zu gross (groesser als ', MaxArray, ').');
                    halt
                end; {if}
                n := round(t);
                if not StdRead(f, t) then begin
                    writeln('Fehler beim Lesen von dimen');
                    halt
                end; {if}
                if t >= MaxArray then begin
                    writeln('dimen ist zu gross (groesser als ', MaxArray - 1, ').');
                    halt
                end; {if}
                dimen := round(t);
                for i := 1 to dimen do begin
                    if not StdReadn(f, n, @x[i, 1]) then begin
                        writeln('Fehler beim Lesen der ', i, '-ten Arrayzeile.');
                        halt
                    end {if}
                end; {for}
                if not StdReadn(f, n, @y[1]) then begin
                    writeln('Fehler beim Lesen des y-Vektors.');
                    halt
                end; {if}
                close(f)
            end else begin {if}
                writeln('Kann Datei "', fName, '" nicht oeffnen.');
                halt
            end {if}
        end; {init}

    procedure result;
        var
            i, j: integer;
        begin {result}
            writeln('Man findet die Matrix');
            for i := 1 to dimen + 1 do begin
               for j := 1 to dimen + 1 do begin
                   write(a[i, j]:7:3)
               end; {for}
               writeln
            end; {for}
            writeln;
            writeln('und den Vektor');
            for i := 1 to dimen + 1 do begin
                writeln(c[i]:7:3)
            end {for}
        end; {result}

    begin {MultiDim}
        init;
        for i := 1 to n do begin
            x[1, i] := 1
        end; {for}
        for i := 1 to dimen + 1 do begin
            for j := 1 to i do begin
                sum := 0;
                for l := 1 to n do begin
                    sum := sum + x[i - 1, l] * x[j - 1, l]
                end; {for}
                a[i, j] := sum;
                a[j, i] := sum
            end; {for}
            sum := 0;
            for l := 1 to n do begin
                sum := sum + y[l] * x[i - 1, l]
            end; {for}
            c[i] := sum
        end; {for}
        result     
    end. {MultiDim}
Zurück Vor +Ebene Home Inhalt Index Hilfe

Copyright Verlag Harri Deutsch AG  Stöcker DeskTop Mathematik