Registriert seit: 18. Feb 2005
286 Beiträge
Delphi 2010 Enterprise
|
AW: Frage aus dem Bereich: Lineare Regression
25. Jan 2014, 19:21
Delphi-Quellcode:
program Project1;
{$AppType Console}
uses
System.Math,
System.SysUtils;
type
TFunction<T, TResult> = reference to function ( const X: T): TResult;
TSchätzfunktion = TFunction<Extended, Extended>;
function ErzeugeSchätzer( const X, Y: array of Extended): TSchätzfunktion;
{ http://office.microsoft.com/de-de/excel-help/Schätzer-HP005209096.aspx }
var
MittelwertX, MittelwertY: Extended;
Zähler, Nenner: Extended;
Index: NativeInt;
Wert: Extended;
A, B: Extended;
begin
Assert(Length(X) = Length(Y));
MittelwertX := Mean(X);
MittelwertY := Mean(Y);
Zahler := 0;
for Index := 0 to High(X) do
Zahler := Zahler + (X[ Index] - MittelwertX) * (Y[ Index] - MittelwertY);
Nenner := 0;
for Wert in X do
Nenner := Nenner + Sqr(Wert - MittelwertX);
B := Zahler / Nenner;
A := MittelwertY - B * MittelwertX;
Result :=
function ( const X: Extended): Extended
begin
Result := A + B * X;
end;
end;
procedure Run;
var
F: TSchätzfunktion;
I: NativeInt;
X, Y: Extended;
begin
F := ErzeugeSchätzer(
[0, 2],
[0, 1]
);
WriteLn(' X':6, ' Y':6);
for I := -10 to 10 do
begin
X := I / 2;
Y := F(X);
WriteLn(X:6:2, Y:6:2);
end;
end;
begin
try
Run;
except
on E: Exception do
WriteLn(E.ClassName + ' : ' + E. Message);
end;
if DebugHook <> 0 then
ReadLn;
end.
Ausgabe:
Code:
X Y
-5.00 -2.50
-4.50 -2.25
-4.00 -2.00
-3.50 -1.75
-3.00 -1.50
-2.50 -1.25
-2.00 -1.00
-1.50 -0.75
-1.00 -0.50
-0.50 -0.25
0.00 0.00
0.50 0.25
1.00 0.50
1.50 0.75
2.00 1.00
2.50 1.25
3.00 1.50
3.50 1.75
4.00 2.00
4.50 2.25
5.00 2.50
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
Geändert von Panthrax (25. Jan 2014 um 19:24 Uhr)
|
|
Zitat
|