Nullstellenberechnung

Neue Frage »

DFPWare Auf diesen Beitrag antworten »
Nullstellenberechnung
Meine Frage:
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
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.
DFPWare Auf diesen Beitrag antworten »

Wow danke das ging ja schnell Augenzwinkern
ich werds mir mal ansehen und wenn ich noch Fragen hab dann meld ich mich nochmal Augenzwinkern
Danke
Flo
DFPWare Auf diesen Beitrag antworten »

Wow das ist echt schwer.... ich hab noch nie so viele Variablen auf einer Wikipedia Seite gesehen verwirrt
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 Augenzwinkern
Geht das?? Erstaunt2
Ich hoffe es, denn die Cardanischen Formeln sind doch ziemlich kompliziert Augenzwinkern
Danke
Flo
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?
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 Augenzwinkern
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
 
 
tigerbine Auf diesen Beitrag antworten »

http://www.arndt-bruenner.de/mathe/scripts/polynome.htm

Soll dich aber nicht vom Eigenversuch abhalten
DFPWare Auf diesen Beitrag antworten »

Hey Danke, jetzt wo ich ein Beispiel hab kapier ich auch Wikipedia Big Laugh
Sieht ja gar nicht soo schwer aus, ich glaub das bekomm ich wohl hin ;D
Danke
Flo
Iorek Auf diesen Beitrag antworten »

Den Link hatte ich auch gerade noch gesucht, danke. smile

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.
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
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
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: î
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 Augenzwinkern

http://de.wikipedia.org/wiki/Komplexe_Zahl

Wink
DFPWare Auf diesen Beitrag antworten »

Und wie bekomm ich dann die eine Stelle raus?
aber v hat man ja so nicht mehr
Flo
chrizke Auf diesen Beitrag antworten »
RE: Nullstellenberechnung
Zitat:
(...)
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

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.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »