Nullstellen einer Funktion berechnen
lima-city → Forum → Programmiersprachen → C/C++ und D
allgemeine funktionen
angegebenen intervall
anwenden
berechnen
beschriebene zutun
bestimmen
bestimmt passende funktionen
funktion
genaueren ermittlung
gescheites
http
intervall
kleinere intervalle
lama
lineare funktion
schnittpunkt
stetigen funktionen
tag
tornado
url
-
Heyho
Ich google mich hier schon seit einigen Tagen durchs netz, find aber nichts gescheites. Ich muss die Schnittpunkte zweier Funktionen berechnen. Da das wirklich nicht so einfach geht dacht ich, ich ermittel nullstellen der Funktion new(x) = f(x) - g(x)
Doch ich finde nichts was mir so wirklich im vorhinein hilft.
Ich hab das Qt Framework und die Boost Lib zur weiteren Hilfe, nur find ich bei deren größen irgendwie nichts gescheites...
Gibts da vllt was vorgefertigtes, was ihr findet oder kennt? Und wenn nicht, wie löse ich es sonst recht geschickt? Ich hab mir das Newton Verfahren angeschaut, aber das ist genauso mit der Schnittpunktproblematik behaftet wie es mir auf den ersten Blick scheint :(
Freue mich auf Antwort
Liebe grüße -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also das Newtonverfahren ist eigentlich der Standardweg. Bedenke aber, dass es nur auf stetigen Funktionen anwendbar ist und auch nicht immer alle Nullstellen findet. Du hast recht, dass man beim Newtonverfahren auch wieder Nullstellen bestimmen muss. Allerdings nur für eine lineare Funktion, was relativ trivial ist. Wenn es dir nicht um eine schnelle Lösung geht, würde ich dir empfehlen das Newtonverfahren selbst zu implementieren, um die Vorgehensweise zu verstehen.
-
Stimmt, das Newtonverfahren ist gut - Nullstellen bestimmen muss man bei ihm allerdings nicht (das ist es ja gerade - oder meint ihr ein anderes newtonverfahren als ich?).
Dafür muss man aber ableiten, was "blöd" sein könnt, falls es sich nicht um polynomfunktionen handelt - in diesem fall kann man aber durch ne simple matrixrechnung noch schneller auf die lösung kommen.
allgemein würd ich mir mal die maxima oder octave-libraries anschaun, oder auch die GSL, da gibt es bestimmt passende funktionen schon drin.
Beitrag zuletzt geändert: 16.7.2011 11:14:21 von tornado -
Schritte für die Selbstimplentierung:
- Intervallgrenzen angeben
Probleme:
- Grobe Nullstellensuche mit Bisektionsverfahren (verfügbares Intervall in kleinere Intervalle teilen und prüfen)
- Wenn ein Teilintervall eine Nullstelle aufweist (Vorzeichenwechsel(!)), dann Newton-Tangentenverfahren zur genaueren Ermittlung der Nullstelle anwenden
- Funktion muss stetig im angegebenen Intervall sein
Zum Newtonverfahren:
- Teilintervalle dürfen nicht zu groß gewählt werden, damit keine Nullstellen "verschluckt" werden
- Prinzipielles Verfahren (schönes Applet)
Ansonsten könnte so etwas wie Scilab ganz nützlich sein. Ist quasie ein riesen Taschenrechnerprogramm mit Lösen von Gleichungen, grafischer Diagrammausgabe, u.v.m. (Hier gehts zum Download)
- Ableitungsfunktion durch Differenzenquotienten ersetzbar (dann brauchst du die Ableitungsfunktion nicht selbst berechnen) -
Was ist denn über die Funktionen bekannt, kannst du dazu irgendwas sagen? Sind das Polynome, oder völlig beliebige stetig differenzierbare Funktionen, oder noch nicht mal das, also nicht mal stetig & diffbar, oder wie oder was nun?
-
@tornado:
Wie ich schon sagte, man muss Nullstellen bestimmen und zwar für die Tangenten an der Funktion, was im Prinzip ein Polynom ersten Grades ist. Das bekommt man also recht einfach raus.
Ansonsten würde ich mich lama-no2 anschließen.
Wenn du schon im vorraus etwas über die Funktionen weißt, dann kannst du das natürlich nutzen. Wenn es für allgemeine Funktionen anwendbar sein soll, dann bleibt dir eigentlich nur das von tangoal beschriebene zutun bzw eine vorgefertigte Bibliothek zu benutzen. -
tangoal schrieb:
Wenn ein Teilintervall eine Nullstelle aufweist (Vorzeichenwechsel(!)), dann Newton-Tangentenverfahren zur genaueren Ermittlung der Nullstelle anwenden
Du hast übersehen, dass funktionen wie z.B. x^2 die x-Achse nicht schneiden sondern nur berühren (keinen Vorzeichenwechsel), aber trotzdem eine Nullstelle haben...
Ansonsten kann ich mich meine Vorpostern nur anschließen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage