Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Hausaufgaben, Nullstellenberechnung
Estefania - So 20.04.08 15:01
Titel: Hausaufgaben, Nullstellenberechnung
Hallo ihr lieben,
wir müssen zurzeit in der Schule ein Programm schreiben mit Delphi. Nun ist es aber so, dass dieses ganze programmieren überhaupt nicht mein Ding ist und ich es auch nicht wirklich verstehe. Ich hab schonmal geguckt über was ihr euch hier so unterhaltet und hoffe, dass wenn ich euch jetz die Aufgabenstellung erläutere, ihr mich nicht auslacht.
Also:
Wir müssen ein Programm schreiben das die Nullstellen verschiedener Funktionen berechnet.
Unsere Funktion ist: f(x) = ax 5 + bx 4 + cx ³ + dx ² + ex + f
(Es soll aber auch so sein, dass wenn man eine andere Gleichung dort einfügt, dass das Programm das dann auch berechnen)
Das Feld soll dann so aussehen: - oben in einem Labelfeld gibt man die Gleichung ein
- dann kommt a= (und dann ein editfeld), dass geht dann so bis f = editfeld
- dann gibt es eine obere und untere Grenze ( jeweils wieder mit einem Editfeld)
- und zum Schluss dann das Ausgabefeld mit Nullstellen
Dazu hat er uns folgenes gegeben:
Algorithmus:
1. Gebe Intervallgrenzen (oben, unten) ein.
2. Wenn Nullstelle dazwischen liegt, dh. f(u)= f (o) < 0 ist dann
- Bilde Mitte (m=o+u)/2
- wenn f(u)*f(m) < 0 dann ist neue obere Grenze die alte Mitte
sonst ist die alte untere Grenze die alte Mitte
( Wiederhole bis der Abstand der unteren Grenze zur oberen Grenze klein ist )
Ich hoffe da kann jetzt jemand was mit anfangen und möchte mir helfen... ich
weiß sonst nämlich nicht was ich dann machen soll...
Vielen Dank schonmal im Vorraus...
Liebe Grüße
Estefania
Gausi - So 20.04.08 15:07
Hallo und :welcome: in der Entwickler-Ecke!
Zuerstmal: Zum lachen ist das bestimmt nicht. Mal eben ein Iterationsverfahren zur Nullstellenberechnung beliebiger Funktionen ist nicht mal so eben hinprogrammiert ;-).
Soll die Gleichung wirklich so eingegeben werden können? :shock: Dann braucht man erstmal einen
PARSER. Und dann fängt der Algorithmus an. Was sind denn deine Ansätze?
btw.: Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät.
Einfach oben bei Deinem ersten Beitrag auf

oder

klicken und den Titel ändern. Danke Dir!
Estefania - So 20.04.08 18:02
Vielen Dank für deine Nachricht!
Ich denke mal, dass das für den Anfang für die Funktionsgleichung sein soll und wir das irgendwann umprogrammieren sollen sodass es dann auf alle Funktionsgleichungen geht. Meine Ansätze sind im Moment alle Mist da ich ja nicht mal weiß, mit welcher Schleife ich arbeiten soll (wir arbeiten fast nur mit schleifen, vielmehr kennen wir auch noch garnicht). Informatik fällt mir echt wahnsinnig schwer und ich würd mich echt sehr über Hilfe freuen.
Liebe Grüße
Estefania
---
Moderiert von
Narses: Beiträge zusammengefasst---
ach so und da fällt mir noch ein: bei der gleichung ist mir ein fehler unterlaufen. Es heißt am anfang gleich ax hoch 5 und danach bx hoch 4... hab das nur nicht hinbekommen...
Jakob_Ullmann - So 20.04.08 18:54
@Schleife: würde ich while-do nehmen.
@Herangehensweise: Zuerst setzt du für X einen Wert ein, indem du X als Single-Variable deklarierst. Dabei gehst du alle Werte durch, durch inkrementieren. Danach testest du bei jedem Durchgang, ob round(x) 0 ist. wenn ja, testest du, x um (0,1 / 10) - also 0,01 - zu dekrementieren. Falls der Wert danach größer als der davor ist (bei positiven Zahlen) oder kleiner als der davor (bei negativen Zahlen), inkrementierst du den Wert um 0,01. Falls sich da der Wert auch weiter von Null wegbewegt, versuchst du es mit kleineren Schritten, also 0,001. Danach kannst du glaub ich aufhören, viel genauer brauchst du es wahrscheinlich sowieso nicht.
Falls du damit nichts anfangen kannst, schreib mal, was ax, bx, cx, dx, ex und f sind.
Estefania - So 20.04.08 20:02
du hasr recht, ich kann damit nichts anfangen...
aber was meinst du mit was das is?
es is so: man soll für a,b,c,d,e,f einen wert eintragen können, wo delphi dann die nullstelle herrausfindet...
deswegen gibts ja auf dem monitor das a= und dann kommt ein editfeld wo man das eintragen soll weißte... und das geht dann halt so bis f= editfeld
liebe grüße
estefania
Horst_H - Mo 21.04.08 08:23
Hallo,
http://de.wikipedia.org/wiki/Polynom hilft dir schon wesentlich weiter, in welchem Bereich Du überhaupt Nullstellen suchen musst, speziell die reellen.
Das Hornerschema
http://de.wikipedia.org/wiki/Horner-Schema erleichtert die Berechnung und das kürzen des Polynom's (ergibt sich bei der Nullstelle automatisch ) , wenn Du eine reelle Nullstelle gefunden hast.
Ausserdem ist doch vorgegeben, dass Du Intervallschachtelung nutzen sollst. Es geht also erstmal nur um das Finden zweier Positionen x1,x2 deren Funktionswerte f(x1) und f(x2) unterschiedliches Vorzeichen haben.
Wenn Du die Koeffizienten a..f deiner Edit-Felder in ein Feld a[0]..a[Grad] einordnest , wobei hier Grad = 5 wäre, wird die Sache schon einfacher.
Gruß Horst
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!