Thema: Delphi Mathematisches Problem

Einzelnen Beitrag anzeigen

AMD_prozessor

Registriert seit: 1. Apr 2006
9 Beiträge
 
#1

Mathematisches Problem

  Alt 2. Mär 2007, 13:23
Hallo!

Wer kann mir hier helfen? Ich will den Grenzwert einer mit func übergebenen Funktion
berechnen. So weit, so gut. Aber beim Test mit der Funktion sin(x)/x die für x->oo
den Grenzwert 0 hat (laut Formelsammlung) erhalte ich sogar negative Werte. Das heißt,
wenn ich eine Anzahl Berechnungen mache, hört das Programm nicht bei 0 auf, sondern
berechnet mir danach negative Werte also den vermutlichen Grenzwert -oo
Wo liegt mein Fehler im Algo. Ich setze mal voraus, das meine Formelsammlung den
richtigen Grenzwert angibt. Also sollte mein Algo auch auf Grenzwert 0 kommen. Da
müsste mein Programm doch aber mit Rechnen aufhören, wenn die 0 erreicht ist.
Was mach ich also falsch?

Delphi-Quellcode:
//Hier noch die Funktion:
Type TDerivedFunc = function(X: RealType): RealType;

function SinXdivX(X: RealType): RealType; //RealType = (Single,Double,Extended,Currency)
begin // |-----> wegen Rechengenauigkeit
  Result := (sin(X)/X)*(180/pi);
end;

function TValueTable.Limes(func: TDerivedFunc; X: RealType): RealType;
var //|---------------->//ValueTable ist eine Tabelle auf TForm zur Ergebnisanz.
 i: Integer; //Laufvariable
 eps: RealType; //eps=>Minimaler Wert, der nicht unterschr. werden darf
 res: RealType; //Differenz zweier aufeinanderfolgender Ergebnisse
 buf: array[0..1] of RealType; //Puffer für Differenzberechnung
 idx: Integer; //Index in diesen Puffer
begin
  i := 0;
  res := 0.1;
  eps := 0.0000001; //Ergebnis darf nicht kleiner werden
  buf[0] := 0.0; //Anfangswerte in Puffer
  buf[1] := res;
  {$B+}
  while res > eps do
  begin
    res := Abs(buf[1]-buf[0]); //Differenz berechnen
    if i mod 2 = 0 then idx := 0 else idx := 1; //Pufferindex berechnen
    buf[idx] := func(X); //aktuelles Ergebnis in Puffer
    inc(i);
  end;
  {$B-}
  Result := buf[idx]; //Ergebnis ausgeben
end;
  Mit Zitat antworten Zitat