AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mathematisches Problem

Ein Thema von AMD_prozessor · begonnen am 2. Mär 2007 · letzter Beitrag vom 2. Mär 2007
Antwort Antwort
AMD_prozessor

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

Mathematisches Problem

  Alt 2. Mär 2007, 12: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
AMD_prozessor

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

Re: Mathematisches Problem

  Alt 2. Mär 2007, 12:40
Hallo!

Tschuldigung!!! Die Grenzwertrechnung funzt so. Ich hatte statt der Limes() Funktion die SinXdivX Funktion in der Ausgabeschleife. So hier:

Delphi-Quellcode:
procedure TValueTable.ToolButton2Click(Sender: TObject);
var i: Integer; X: RealType;
begin
  //Grenzwertberechnung
  X := 0.1;
  for i := 1 to 100 do
  begin
    AddXValue(X);
    AddYValue( SinXdivX(X) ); //Hier kommen die negativen Zahlenwerte, weil nicht Grenzwert,
    AddTValue(i); //sondern sin(x)/x berechnet wird
    inc(FTblRow);
    fTable.RowCount := fTable.RowCount + 1;
    X := X + 0.1;
  end;
end;
statt so hier, wie es richtigerweise sein muss:

Delphi-Quellcode:
procedure TValueTable.ToolButton2Click(Sender: TObject);
var i: Integer; X: RealType;
begin
  //Grenzwertberechnung
  X := 0.1;
  for i := 1 to 100 do
  begin
    AddXValue(X);
    AddYValue( Limes(SinXdivX,X) ); //So ist es richtig. Jetzt stimmt auch das Ergebnis
    AddTValue(i);
    inc(FTblRow);
    fTable.RowCount := fTable.RowCount + 1;
    X := X + 0.1;
  end;
end;
So, nun funtzt das Ganze. Die Grenzwertberechnung ist also doch richtig.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: Mathematisches Problem

  Alt 2. Mär 2007, 12:53
Hat(te) nicht wirklich etwas mit deinem Problem zu tun, aber:  Result := (sin(X)/X)*(180/pi); Du solltest statt die Gegenkathete ins Gradmaß () lieber den Winkel ins Bogenmaß umrechnen .
sin(x * Pi / 180) / x
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 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