![]() |
---|
Hallo liebes Forum! Ich habe eine kurze und schnelle Frage: Mit welchem Verfahren lassen sich die Nullstellen für folgende Funktion ausrechnen: Danke im voraus für die Antworten. LG Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen." |
Hierzu passend bei OnlineMathe: Funktion (Mathematischer Grundbegriff) Nullstellen (Mathematischer Grundbegriff) Vielfachheit einer Nullstelle (Mathematischer Grundbegriff) Online-Übungen (Übungsaufgaben) bei unterricht.de: |
![]() |
![]() |
. Im Voraus zwei schnelle Fragen: in welchem Intervall wirst du suchen ? hast du schon selbst herausgefunden, warum es nur eine Lösung geben wird? Danke für kurze Antworten; dann geht es hier zügig weiter .. . |
![]() |
Mit welchem Verfahren lassen sich die Nullstellen für folgende Funktion ausrechnen: Empfehlen würde ich ein Näherungsverfahren, zB Bisektion. regula falsi, Newton, konjugierte Gradienten, Levenberg-Marquardt, . Wähle deine Waffe nach eigenem Gutdünken! Aber bei genug Masochismus kannst du die Gleichung auch auf eine Gleichung dritten Grades zurückführen und exakt lösen. Falls dich nur die reelle Lösung interessiert, bekommst du dann den übersichtlichen Ausdruck ![]() den du aber noch etwas vereinfachen kannst ;-) Wenn du aber auf "kurz und schnell" Wert legst, kannst du die Angabe auch bei Wolfram Alpha eintippen und dir dort das exakte Ergebnis anzeigen lassen - sieht dann so aus ![]() |
![]() |
. Einfach super, Roman-22, welche Perlen du dieser NinaNormal hinwirfst. Da sie mit der Beantwortung meiner zu einfachen Fragen unterfordert war, wird sie nun fraglos .. :-) die gehaltvollen Körner verständisvoll und überschwenglich danked "kurz und schnell" aufpicken. . |
![]() |
Ich gehe mal davon aus, das die Funktion auf definiert ist, . nur reele NS von Interesse sind. Mir fallen 2 Verfahren ein die sich vergleichsweise einfach selbst progrmmieren lassen: 1. Bisektion 2. Newtonverfahren oder aber irgendetwas fertiges. Aber es schadet nichts, wenn man grob weiß, wie die Verfahren funktionieren. Man benötigt Startwerte. Im Beispiel für ist die Funktion nicht definiert (negative Werte unter der Wurzel Das wird für große schneller wachsen als . Die NS liegt irgendwo zwischen 0 und 1. Weiterhin kennt man die 1. Ableitung: und die ist für alle negativ, . die Funktion ist monton fallend. Weitere Nullstellen als die eine gibt es nicht. Graph zeichnen hilft auch um die Startwerte für die Suche zu finden (Das ist das "angedeutete"). Nachfolgend mein octave matlab code (nicht unbedingt schön, funktioniert aber) function bisection(f tol) # Bisektionsverfahren für reele Nullstellen # funktion, deren Nullstelle gesucht wird # Intervall in dem die Nullstelle liegt. # tol: Fehlertoleranz fuer die Approximation der Nullstelle # muss stetig sein und es muss gelten # es muss ein Vorzeichenwechsel zwischen a und liegen. if error('Startpoint should be less than endpoint.'); end; if( error('Function has same sign at both endpoints.'); end nmax=10e3; while abs(b-a) tol if(abs(f(x)) tol) break elseif else end; if( nmax) error('Max number of iteration exeeded: end; end Aufruf: # eps ist eine variable für die rechengenauigkeit bei octave bisection(@(x) 0,1,eps) ans Wenn Du schnell willst, dann nimm etwas fertiges. In der Matlabwelt . fzero (genau das war der Grund, warum ich mir mal bisection geschrieben habe, weil ich fzero scheisse fand) Aufruf: fzero(@(x) ans bisection ist sehr einfach und man kann es sicher auch leicht in jede andere Programmiersprache übertragen. Newton verwendet die Ableitung, da gibt es auch sicherlich genug Literatur und auch Programmbeispiele dazu. Für gewöhnliche Polynome hat die Matlabwelt roots (das kann auch komplexe NS): roots(1,1,1,1]) ans = Kommt tatsächlich aber auf den persönlichen Geschmack und die Anwendung an, was man braucht. Ein oder 2 Verfahren mal selbst zu programmieren schadet nicht. Ist aber nicht schnell . |
![]() |
Man könnte substituieren: de.wikipedia.org/wiki/Polynom_vierten_Grades Macht die Sache aber nicht angenehmer, eher das Gegenteil. |
![]() |
Ich habs auch mal mit dem Tangentenverfahren von Newton probiert. Kann man so herunterschreiben, wie es da im Anhang steht. Die Ableitung(en) habe ich durch die Differenzenquotienten ersetzt mit delta x = 1e-3 (irgendetwas makroskopisches...) Wenn es konvergiert, dann braucht man auch nicht viele Schritte. Die Tücken können aber noch im Detail liegen, Funktionswerte werden komplex (wenn man links der 0 anfängt, Ableitungen können zu 0 werden, was dann beim dividieren nicht gut tut (z.B. wenn man mit einer konstanten Funktion probiert). Unangenehm kann ich mir auch die Division von 2 kleinen Zahlen vorstellen. Auch habe ich beim Herumspielen bemerkt, das man die Konvergenzbedingung besser wegläßt, weil sich das Verfahren oft selbst heilt und es wenn man sich dem Ergebnis nähert wieder konvergiert. Endlosscheifen habe ich durch eine max. Anzahl an Iteratinen vermieden. Der Code (auch wenn er im Editor nicht ganz vorteilhaft dargestellt wird: function x = newton(f, start, tol) # Tangentenverfahren von Newton für eine reele Nullstellen # f: funktion, deren Nullstelle gesucht wird # start: Startwert für die Nullstellensuche # tol: Fehlertoleranz fuer die Approximation der Nullstelle # Es wird nur eine Nullstelle gefunden # makroskoisches dx=?x für die Berechnung der Ableitung als Differenzenquotient h=1e-3; delta=realmax; x=start; numDiff=@(x) (f(x+h)-f(x))/h; k=1; maxIterations=1000; convergenceCheck=0; while abs(delta) > tol y=f(x); if isinf(y) error('Function result is infinite.'); end; if iscomplex(y) error('Function result is complex.'); end; y1=numDiff(x); if(y1 == 0) error('First derivative is 0.'); end; delta=y/y1; if( convergenceCheck > 0 ) y2=(numDiff(x+h)-y1)/h; if(abs(y*y2/(y1^2)) >= 1) error('Convergence condition violated.'); end; end; x=x-delta; if( k > maxIterations ) error(sprintf("More than %d iterations." , maxIterations)); end; k=k+1; end Aufruf: newton(f,0.1,eps) ans = 5.248885986564048e-01 Dem Namen nach zu urteilen kein neues Verfahren, aber wenn man es nicht manuel mit Papier und Stift machen muss kann man damit leben. |
Diese Frage wurde automatisch geschlossen, da der Fragesteller kein Interesse mehr an der Frage gezeigt hat.
|