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;