Nullstellenberechnung |
06.05.2011, 19:33 | DFPWare | Auf diesen Beitrag antworten » | ||
Nullstellenberechnung Hallo Leute ich habe ein Problem, und zwar will ich ein Programm schreiben, das die Nullstellen einer Funktion berechnet. Für Quadratfunktionen klappt das auch sehr gut, da man die ja nur noch in die pq-Formel einsetzen muss. Jetzt hab ich aber eine Funktion 3. Grades(oder mehr). Damit müsste man dann ja Polynomdivision durchführen und dann in die pq-Formel einfügen, jetzt kommt aber der Haken: Für Polynomdivision braucht man eine Nullstelle der Funktion und die hat das Programm nicht, es soll bei ALLEN Funktionen funktionieren, also nicht sowas wie "Teiler von 4 sind mögliche Kandidaten für ne Nullstelle", ich hätte gerne eine möglichkeit diese erste Nullstelle auszurechnen. Aus Wikipedia werde ich leider nicht schlau, aber ich hoffe ihr könnt mir helfen. Danke Flo Meine Ideen: Hier ist einmal der Quellcode, den ich bis jetzt habe: $funktion = InputBox("Funktion", "Geben sie die zu untersuchende Funktion ein!"&@CRLF&"f(x)=", "3*x^2+21*x+6") $grad = _Funktionsuntersuchung_Grad($funktion) If $grad = 2 Then $nullstellen = _Funktionsuntersuchung_Quadratfunktion($funktion) Else _Funktionsuntersuchung_DrittenGrades($funktion) EndIf Select Case $nullstellen[0] = 0 MsgBox(0, "Nullstellen", "Die Funktion " & @CRLF & $funktion & @CRLF & "hat keine Nullstellen") Case $nullstellen[0] = 1 MsgBox(0, "Nullstellen", "Die einzige Nullstelle der Funktion " & @CRLF & $funktion & @CRLF & "ist" & @CRLF & "x= " & $nullstellen[1]) Case $nullstellen[0] = 2 MsgBox(0, "Nullstellen", "Die Nullstellen der Funktion " & @CRLF & $funktion & @CRLF & "sind" & @CRLF & "x1= " & $nullstellen[1] & @CRLF & "x2= " & $nullstellen[2]) EndSelect Func _Funktionsuntersuchung_Grad($ffunc) ;Prüft wievielten Grades die Funktion ist $func = StringTrimLeft($ffunc, StringInStr($ffunc, "x^") - 1) $split = StringSplit($func,"+|-") If $split[1] = "x^3" Then Return 3 If $split[1] = "x^2" Then Return 2 EndFunc Func _Funktionsuntersuchung_Quadratfunktion($ffunc) $func = $ffunc Dim $ausgabe[3] $a = StringLeft($func, StringInStr($func, "x^2") - 2) ;teil vor dem x^2 If Number($a) = 0 Then $func = "1*" & $func $a = StringLeft($func, StringInStr($func, "x^2") - 2) ;teil vor dem x^2 $func = StringTrimLeft($func, StringInStr($func, "x^2") + 2) ;teil vor dem +21*x wird abgeschnitten $b = StringLeft($func, StringInStr($func, "*x") - 1) ;teil vor dem *x $c = StringRight($func, StringLen($func) - StringInStr($func, "*x") - 1);teil hinter dem *x $p = $b / $a ;p $q = $c / $a ;q $diskriminante = $p ^ 2 / 4 - $q ; das was unter der Wurzel steht If $diskriminante > 0 Then ;zwei nullstellen $ausgabe[0] = 2 $ausgabe[1] = -$p / 2 + Sqrt($diskriminante) $ausgabe[2] = -$p / 2 - Sqrt($diskriminante) ElseIf $diskriminante = 0 Then ;eine nullstelle $ausgabe[0] = 1 $ausgabe[1] = -$p / 2 + Sqrt($diskriminante) ElseIf $diskriminante < 0 Then ;keine nullstelle $ausgabe[0] = 0 EndIf Return $ausgabe EndFunc Func _Funktionsuntersuchung_DrittenGrades($ffunc) ;Hier soll die Funktion 3. Grades auseinander gepflückt werden EndFunc |
||||
06.05.2011, 19:40 | Iorek | Auf diesen Beitrag antworten » | ||
Ohne etwas zu deinem Programm sagen zu können: du solltest dir mal die Cardanischen Formeln angucken, damit lassen sich die Nullstellen von Funktionen dritten Grades bestimmen. Wenn du sagst "es soll bei ALLEN Funktionen funktionieren" und das auch wörtlich meinst, dann muss ich dich leider enttäuschen, Lösungsformeln existieren nur für Funktionen maximal vierten Grades. |
||||
06.05.2011, 19:46 | DFPWare | Auf diesen Beitrag antworten » | ||
Wow danke das ging ja schnell ich werds mir mal ansehen und wenn ich noch Fragen hab dann meld ich mich nochmal Danke Flo |
||||
06.05.2011, 20:01 | DFPWare | Auf diesen Beitrag antworten » | ||
Wow das ist echt schwer.... ich hab noch nie so viele Variablen auf einer Wikipedia Seite gesehen Kann man nicht einfach die Substitution durchführen?: 4x³+8x²+12x+16 <=> 4(x³+2x²+3x+4) für x² = z : 4(z²+2z+7) Dann Polynomdivision, dann wieder z durch x² ersetzen, fertig Geht das?? Ich hoffe es, denn die Cardanischen Formeln sind doch ziemlich kompliziert Danke Flo |
||||
06.05.2011, 20:11 | Iorek | Auf diesen Beitrag antworten » | ||
Wenn du korrekt substituierst, erhältst du keine schöne Gleichung; damit hättest du z.B. und kannst damit auch nicht die pq-Formel anwenden. Es ist leider so, dass schon Nullstellen von Funktionen dritten Grades enorme Probleme bereiten können, für Funktionen vierten Grades sieht es auch nicht schöner aus. Und für alles vom Grad fünf oder höher gibt es überhaupt keine Lösungsformeln mehr. Aus welchem Grund willst du dieses Programm denn schreiben? |
||||
06.05.2011, 20:19 | DFPWare | Auf diesen Beitrag antworten » | ||
Tja dann werd ich mich wohl mal durch Wikipedia lesen. Ich will das schreiben, damit ich für die Funktionsuntersuchungen, die wir grad in der Schule machen ein Programm hab, das mir sofort alle infos geben kann, die ich haben will. Außerdem erhoffe ich mir davon dass ich das Thema besser versteh, weil ich im Moment nur 3 steh und das ist nicht unbedingt das was ich mir erhofft habe Mal abgesehen davon hab ich einfach Spaß daran selbst was zu machen, und das vorzeigen zu können. Danke DFPWare PS: Ja ich kenne GeoGebra und co. aber darum gehts mir nicht |
||||
Anzeige | ||||
|
||||
06.05.2011, 20:23 | tigerbine | Auf diesen Beitrag antworten » | ||
http://www.arndt-bruenner.de/mathe/scripts/polynome.htm Soll dich aber nicht vom Eigenversuch abhalten |
||||
06.05.2011, 20:29 | DFPWare | Auf diesen Beitrag antworten » | ||
Hey Danke, jetzt wo ich ein Beispiel hab kapier ich auch Wikipedia Sieht ja gar nicht soo schwer aus, ich glaub das bekomm ich wohl hin ;D Danke Flo |
||||
06.05.2011, 20:30 | Iorek | Auf diesen Beitrag antworten » | ||
Den Link hatte ich auch gerade noch gesucht, danke. Alternativ hätte ich noch den guten WolframAlpha anzubieten, füttert man den mit dem Funktionsterm gibt er i.A. Nullstellen, Extremwerte, Ableitung/Stammfunktion und einige andere Infos je nach Verfügbarkeit. Das soll natürlich nicht als Maschine für etwaige Hausaufgaben dienen, kann aber zur Überprüfung sehr nützlich sein. |
||||
06.05.2011, 20:34 | DFPWare | Auf diesen Beitrag antworten » | ||
Das soll natürlich nicht als Maschine für etwaige Hausaufgaben dienen, kann aber zur Überprüfung sehr nützlich sein. So war das auch eigentlich nicht gedacht, bei den HA's müssen wir eh immer Rechenweg usw... machen Ich glaub ich habs gleich kapiert ;D Flo |
||||
07.05.2011, 18:49 | DFPWare | Auf diesen Beitrag antworten » | ||
Ich meld mich auch schon wieder:S Ich habe das Programm mal hier arndt-bruenner.de/mathe/scripts/polynome.htm nach geschrieben, auch mit dem Beispiel . Ich habe aber Probleme, z.B hierbei: , weil negativ ist. Außerdem kenne ich in dieser Zeile das Zeichen nicht. Ich hoffe ihr könnt mir helfen Flo |
||||
07.05.2011, 18:51 | DFPWare | Auf diesen Beitrag antworten » | ||
Ich meine diese Zeile: y = -(u + v)/2 - ((u - v)/2)*sqr(3)·î = 0,49198126238636075 - 1,5468688872313962·î und dieses Zeichen: î |
||||
07.05.2011, 18:54 | Equester | Auf diesen Beitrag antworten » | ||
Eine negative Wurzel ist in den reellen Zahlen nicht definiert. Dein Polynom hat nur eine reelle Stelle. Die beiden anderen sind sogenannte "komplexe" Werte/Nullstellen. Im Komplexen rechnet man mit "i". Kannst dir ja hier mal die ersten zwei drei Absätze durchlesen, damit du en Eindruch hast http://de.wikipedia.org/wiki/Komplexe_Zahl |
||||
07.05.2011, 21:29 | DFPWare | Auf diesen Beitrag antworten » | ||
Und wie bekomm ich dann die eine Stelle raus? aber v hat man ja so nicht mehr Flo |
||||
08.05.2011, 00:21 | chrizke | Auf diesen Beitrag antworten » | ||
RE: Nullstellenberechnung
Also wenn du wirklich für "ALLE" Funktionen was berechnen willst, wird es da analytisch sehr schwierig (Selbst unter der Annahme dass diese "nur" nach R abbilden). Besonders da ALLE auch unstetige Funktionen beinhaltet, die so überhaupt nicht durch allgemeine Formeln zu fassen sind. Wie gesagt analytisch, also nur durch exakte mathematische Umformungen, wirst du nicht auf eine exakte Lösung kommen. Praktikabler wird da eine numerische Annäherung durch bspw. Newton-Iteration oder den Banachschen Fixpunktsatz usw. sein. Wobei auch hier Restriktionen an Stetigkeit etc. gelten. Was das ist, findest du zuhauf bei Google oder Wikipedia. |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
Die Neuesten » |
|