AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Das mathematische Problem..... x hoch 3 - x*6
Thema durchsuchen
Ansicht
Themen-Optionen

Das mathematische Problem..... x hoch 3 - x*6

Ein Thema von fes · begonnen am 28. Mär 2004 · letzter Beitrag vom 29. Mär 2004
Antwort Antwort
fes

Registriert seit: 22. Mär 2004
33 Beiträge
 
Delphi 2005 Personal
 
#1

Das mathematische Problem..... x hoch 3 - x*6

  Alt 28. Mär 2004, 21:01
Hallo zusammen!
Ich habe hier ein Problem! (Wer hätte das gedacht?)
Folgendes:
Ich habe mir vorgenommenm, ein Programm zu schreiben, dass y für die Funktion x hoch 3 - x*6 berechnet, und zwar in 0.1-er Schritten. Das Intervall, von dem die Werte genommen werden, kann man selber eingeben.
Das war auch soweit kein Problem, aber als ich dann eine Vorzeichenanalyse(wann geht die Funktion von - nach + oder umgekehrt) noch zusätzlich mit eingebaut habe, bekam ich zwar Funktionswerte zurück, diese Werte waren zwar von der Anzahl richtig, aber um ca. 1,5 Zahlenwerte verschoben...
Ich hab alles mögliche Versucht, zusätzlicher Timer, sleep, usw... aber der Fehler besteht weiterhin...
Zur Veranschaulichung habe ich ein Bild mit angehängt...


Mein Code:


Delphi-Quellcode:
var
  Form1: TForm1;
  fx,zahler,k,x,y,z,i,A,B: Extended;


implementation

{$R *.DFM}



procedure Tform1.Graphrechnen;
begin
memo2.lines.text:= '';
a := strtofloat(edit2.text); // Intervallanfangswert = A
b:= strtofloat(edit3.text); // Intervallendungswert = B
x := A;
memo2.Lines.add( 'Berechnung von x für das Intervall '+ floattostr (a) + ' bis ' + floattostr (b));
repeat
fx:=power(x,3) - (6 * x); // Berechnung der Funktion x hoch 3 - x*6
fx:= RoundToPointPosition(fx, 5); // Wert wird gerundet
x := RoundToPointPosition(x, 3); // Wert wird gerundet
VZW; // Vorzeichenwechselanalyse
memo2.lines.add(floattostr (fx) + ' für ' + floattostr(x));
X:= x +(0.1); // x wird um 0,1 vergrößert...
until x > B; // es wird solange die Funktion berechnet, bis x gleich dem Intervallendungswert ist
exit;
end;



procedure Tform1.VZW; // Vorzeichenwechselanalyse
begin
if memo1.lines.text='then
memo1.lines.add('Berechnung von x für das Intervall '+ floattostr (a) + ' bis ' + floattostr (b));
k := x -0.1; // zur Berechnung wird der vorherige Wert genommen...
y:= power(k,3) - (6 * k);
z:= fx-y; //... um mit der Differenz ausrechnen zu können, ob der Graph im Negativen, bzw. Positiven ist

if z > 0 then //Das nicht bei jedem z > 0 die Schleife ausgefürt wird...
begin
if zahler = 1 then // ...ist ein Schutz eingebaut
exit;
zahler := +1;
memo1.Lines.add('Vorzeichenwechsel +/- bei '+ floattostr(x));
end;

if z < 0 then
begin
if zahler = -1 then
exit;
zahler := -1;
memo1.Lines.add('Vorzeichenwechsel -/+ bei '+ floattostr(x));
end;
end;


function RoundToPointPosition(Number : Extended; PointPos : Byte): Extended;
begin
 Result := StrToFloat(FloatToStrF(Number, ffNumber, 10, PointPos));
end;
end.

Ich hoffe ihr könnt mir helfen.
Vielen Dank

[edit=Luckie]Delphi-Tags. Mfg, Luckie[/edit]
Miniaturansicht angehängter Grafiken
delphi_191.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#2

Re: Das mathematische Problem..... x hoch 3 - x*6

  Alt 28. Mär 2004, 21:22
Hi,
du willst doch nur die Änderung des Vorzeichens deiner Funktion betrachten.
In deinem Beisplel: f(x) = x^3 - 6x

Dazu benötigst du alle Nullstellen:
f(x) = 0;
x1 = -2.45; x2 = 0; x3 = 2,45

jetzt lässt du einfach x gegen jede der Nullstellen streben.
> lim (x^3-6x) --> - unendlich
x -> -2.45
x < -2.45

> lim (x^3-6x) --> + unendlich
x -> -2.45
x > -2.45

==> so haben wir hier einen VZW (- --> +)


MFG
devnull

[EDIT]Ich hab noch irgendwo Source, da ich schon mal das gleiche programmiert hab; nur halt für DOS.
Ich schick dir den Source[/EDIT]
-- Never change a running system --
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#3

Re: Das mathematische Problem..... x hoch 3 - x*6

  Alt 28. Mär 2004, 21:46
Mit deiner VZW-Funktion rechnest du nicht den Schnittpunkt des Graphen mit der X-Achse aus, sondern den der ersten Ableitung mit der X-Achse, du bestimmst also einen Extrempunkt (die Funktion hat einen Hochpunkt bei -sqrt(2) und einen Tiefpunkt bei sqrt(2), aufgrund deiner Methode bekommst du -1,3 und 1,5 raus).
Um wirklich den Schnittpunkt mit der x-Achse zu bestimmen, darfst du nicht die Differenz zwischen zwei Punkten nehmen, sondern das Vorzeichen eines Punktes selbst im Vergleich zum vorangehenden:
Delphi-Quellcode:
procedure Tform1.VZW; // Vorzeichenwechselanalyse
begin
  if memo1.lines.text='then
    memo1.lines.add('Berechnung von x für das Intervall '+ floattostr (a) + ' bis ' + floattostr (b));
  k := x -0.1; // zur Berechnung wird der vorherige Wert genommen...
  y := power(k,3) - (6 * k);

  if sign(fx) <> sign(y) then // wenn Vorzeichen anders ist
    // dann bestimmen wir die Richtung des Wechsels
    if sign(fx) = -1 then
      memo1.Lines.add('Vorzeichenwechsel +/- bei '+ floattostr(x))
    else if sign(fx) = 1 then
      memo1.Lines.add('Vorzeichenwechsel -/+ bei '+ floattostr(x));
end;
Über die Effizienz und Genauigkeit dieser Methode ließe sich streiten, aber so funktioniert's jedenfalls einigermaßen, abgesehen davon daß immer noch nach oben gerundet wird, und bei glatten Werten 0,1 dazugerechnet wird. Optimieren darfst du

@devnull: wollte er die Nullstellen nicht rauskriegen?
  Mit Zitat antworten Zitat
fes

Registriert seit: 22. Mär 2004
33 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Das mathematische Problem..... x hoch 3 - x*6

  Alt 28. Mär 2004, 21:56
@tommie-lie
Tausend Dank, das war genau dass, was ich gesucht habe!
  Mit Zitat antworten Zitat
runger
(Gast)

n/a Beiträge
 
#5

Re: Das mathematische Problem..... x hoch 3 - x*6

  Alt 29. Mär 2004, 06:58
Hallo fes,

dein Code sieht aus wie an die Wand geklatschte Spaghetti.
Bitte lies doch mal die Beiträge zum Pascal Stil durch.
Nicht böse gemeint, nur als Tip!

Rainer
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Das mathematische Problem..... x hoch 3 - x*6

  Alt 29. Mär 2004, 08:07
Zitat von runger:
dein Code sieht aus wie an die Wand geklatschte Spaghetti.
Bitte lies doch mal die Beiträge zum Pascal Stil durch.
Nicht böse gemeint, nur als Tip!
Rainer
Guter Tip. So wie fes seinen Source formattiert hat lese ich ihn erst gar nicht durch.
Dauert mit zu lange. Bei korrekter Formattierung wird die Lesbarkeit erheblich gesteigert.
I come from outer space to save the human race
  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:57 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