Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Frage aus dem Bereich: Lineare Regression (https://www.delphipraxis.net/178755-frage-aus-dem-bereich-lineare-regression.html)

kamel08 25. Jan 2014 12:47

Frage aus dem Bereich: Lineare Regression
 
Ich suche ein Äquivalent zur

Excel-Funktion 'SCHÄTZER'

Aus einigen bekannten X-und Y-Werten berechnet / 'schätzt' diese Funktion
den Y-Rückgabewert für einen gegebenen X-Wert.

Vielen Dank.

Furtbichler 25. Jan 2014 13:46

AW: Frage aus dem Bereich: Lineare Regression
 
Was passiert bei einer Googlesuche mit "Delphi Lineare Regression" und Vermeiden einer Endlosrekursion?

kamel08 25. Jan 2014 17:31

AW: Frage aus dem Bereich: Lineare Regression
 
Danke für die Antwort.
Ich habe natürlich erstmal selbst tagelang gesucht und versucht und leider
keine Alternative zur Funktion 'Schätzer' gefunden.
Meine 'Google'-Suchen ergaben sehr viel zum Hauptthema 'Lineare Regression',
aber keinen Sourcecode zum Finden der Unbekannten.

Hier ist das Microsoft-Beispiel:
http://office.microsoft.com/de-de/ex...005209096.aspx

Die Gleichung für SCHÄTZER lautet: a+bx, mit:

An der Stelle komme ich nicht weiter.

Panthrax 25. Jan 2014 18:21

AW: Frage aus dem Bereich: Lineare Regression
 
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

kamel08 25. Jan 2014 18:38

AW: Frage aus dem Bereich: Lineare Regression
 
Vielen herzlichen Dank für Deine Mühe.

Ich werde mir das asap anschauen, vielleicht noch heute abend.

kamel08 29. Jan 2014 12:49

AW: Frage aus dem Bereich: Lineare Regression
 
Das war genau das, was ich gesucht habe!
Es funktioniert wunderbar. Thanks. :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz