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}