Newtonverfahren in C++
Ich möchte auf Grund einer Hausaufgabe das Newton-Verfahren, zur Berechnung der Nullstellen einer gebrochen-rationalen Funktion, in C++ realisieren.
Zurzeit gehe ich in die 12. Klasse einer FOS also mein Wissen über C++ ist sehr gering, weswegen ich nach Hilfe in einem Forum suche.
Ich brauche nicht zwingend eine Lösung aber ich wüsste gerne Funktionen mit denen sich diese Aufgabe realisieren lässt.
Gegeben ist eine Funktion: (5x^3 - 8) / (6x - 2)
Mit dem Newton-Verfahren sollen nun die Nullstellen berechnet werden.
Die Funktion ist im Programm Festgelegt und muss nicht vom Nutzer eingegeben werden. Ebenso ist die Ableitung der Funktion festgelegt.
Nun soll ein Startwert eingegeben werden und die Nullstellen sollen ausgegeben werden.
Danke schon mal im voraus.
Formel - Newton Verfahren
Zurzeit gehe ich in die 12. Klasse einer FOS also mein Wissen über C++ ist sehr gering, weswegen ich nach Hilfe in einem Forum suche.
Ich brauche nicht zwingend eine Lösung aber ich wüsste gerne Funktionen mit denen sich diese Aufgabe realisieren lässt.
Gegeben ist eine Funktion: (5x^3 - 8) / (6x - 2)
Mit dem Newton-Verfahren sollen nun die Nullstellen berechnet werden.
Die Funktion ist im Programm Festgelegt und muss nicht vom Nutzer eingegeben werden. Ebenso ist die Ableitung der Funktion festgelegt.
Nun soll ein Startwert eingegeben werden und die Nullstellen sollen ausgegeben werden.
Danke schon mal im voraus.
Formel - Newton Verfahren
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 354640
Url: https://administrator.de/contentid/354640
Ausgedruckt am: 25.11.2024 um 10:11 Uhr
2 Kommentare
Neuester Kommentar
Moin,
also wenn ich das richtig verstanden habe (das Newton-Prinzip bei Wikipedia), so näherst du dich der Nullstelle langsam.
Folglich musst du deine obige Formel einfach nur mehrmals anwenden:
Schreibe eine Funktion, die die obige Formel mit deiner genannten Funktion ausrechnet.
Mit dem hieraus gewonnenem Ergebnis rufst du die selbe Funktion quasi wieder rekursiv auf. Mit dem Ergebnis wieder rekursiv, usw.
Das Ganze machst du so lange, bis du als Ergebnis eine Null erhältst.
Mehr müsste das nicht sein....
Kann mich aber auch irren
also wenn ich das richtig verstanden habe (das Newton-Prinzip bei Wikipedia), so näherst du dich der Nullstelle langsam.
Folglich musst du deine obige Formel einfach nur mehrmals anwenden:
Schreibe eine Funktion, die die obige Formel mit deiner genannten Funktion ausrechnet.
Mit dem hieraus gewonnenem Ergebnis rufst du die selbe Funktion quasi wieder rekursiv auf. Mit dem Ergebnis wieder rekursiv, usw.
Das Ganze machst du so lange, bis du als Ergebnis eine Null erhältst.
Mehr müsste das nicht sein....
Kann mich aber auch irren
Zitat von @em-pie:
Moin,
also wenn ich das richtig verstanden habe (das Newton-Prinzip bei Wikipedia), so näherst du dich der Nullstelle langsam.
Folglich musst du deine obige Formel einfach nur mehrmals anwenden:
Schreibe eine Funktion, die die obige Formel mit deiner genannten Funktion ausrechnet.
Mit dem hieraus gewonnenem Ergebnis rufst du die selbe Funktion quasi wieder rekursiv auf. Mit dem Ergebnis wieder rekursiv, usw.
Das Ganze machst du so lange, bis du als Ergebnis eine Null erhältst.
Naja nicht ganz Moin,
also wenn ich das richtig verstanden habe (das Newton-Prinzip bei Wikipedia), so näherst du dich der Nullstelle langsam.
Folglich musst du deine obige Formel einfach nur mehrmals anwenden:
Schreibe eine Funktion, die die obige Formel mit deiner genannten Funktion ausrechnet.
Mit dem hieraus gewonnenem Ergebnis rufst du die selbe Funktion quasi wieder rekursiv auf. Mit dem Ergebnis wieder rekursiv, usw.
Das Ganze machst du so lange, bis du als Ergebnis eine Null erhältst.
Bis man sich an eine Nullstelle genähert hat, das kann eine Null sein muss aber nicht.
Mehr müsste das nicht sein....
Kann mich aber auch irren
@CorvoAttano
Also gut, du brauchst dafür eine Stammfunktion und eine Ableitung, dann würdest du einen Punkt auswählen und so lange durch iterieren bis es reicht.
Ich würde das ungefähr so schreiben(in C++).
float Stammfunktion(float x)
{
return ((5*x)*(5*x)*(5*x) - 8) / (6*x - 2);
}
float Ableitung(float x)
{
..... //musst du selber schreiben
}
int main()
{
float startwert = 0;
float x = startwert;
for(int i = 0; i < 10; i++)
{
x = x - (Stammfunktion(x)/Ableitung(x));
std::cout >> x;
}
}
Der Code ist nicht getestet, es sind sehr wahrscheinlich ein paar Fehler drin.
Aber einen Ansatz hast du jetzt