Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

11

05.07.2008, 16:54

Wie machst du das eigentlich mit der Berechnung der Nullstellen?

Ich meine wenn du eine Fkt n-ten Grades bekommst, schaffst du es doch irgendwann nicht mehr einfach nur die Pq-Formel darauf anzuwenden.
Nehmen wir mal ein Beispiel:

Quellcode

1
2
3
4
5
6
7
8
9
10
f(x) = x³ -x² -22x + 40
f(x) =0 <-> x³-x² -22x +40 =0
f(x) = (x-2) * p(x)
(x³-x²-22x+40) : (x-2) = x²+x-20 = p(x)

f(x) = (x-2)* (x²+x-20)
<-> 
x-2=0 oder x²+x-20=0

und hier greift deine PQ-Formel..


Falls ich falsch liege bitte verbessern hab nun schon 2 Wochen Ferien und da verdummt man doch etwas xD

Grüße Toa

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

12

05.07.2008, 17:23

Jedes Polynom kann minestens in die Form (ax^2 + bx + c)* (...) gebracht werden. Und wenn du Glück hast gehts sogar noch weiter. :)
(Abspalten von Nullstellen).

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

13

05.07.2008, 17:42

Zitat von »"drakon"«

Jedes Polynom kann minestens in die Form (ax^2 + bx + c)* (...) gebracht werden. Und wenn du Glück hast gehts sogar noch weiter. :)
(Abspalten von Nullstellen).


was denkst du was ich da oben mache o.0 xD
(Linearfaktoren abspalten (x-n))

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

14

05.07.2008, 17:45

Zitat von »"Abcd1234"«


Gibt es da nicht evtl auch eine ganz Einfache lösung??

Wenn dir das zu kompliziert ist beschränke dich doch auf Polynome.

ax³+bx²+cx+d

Dann fragst du den Benutzer nach den Werten von a, b, c und d. Das kannst du dann ganz einfach in C++ ausrechen. Das wäre eine erste einfache Implementierung. Wenn du willst kannst du das auch so erweitern, dass du Polynome beliebigen Grades akzeptierst, aber das ist allemal simpler als nen parser für beliebige Rechnungen.

PS: Ab dem 3ten Grad kommt man kaum drumherum Nullstellen zu raten. Oder man verwendet Numerische Verfahren. z.B. das Newtonverfahren ist da ziemlich einfach und auch recht fix.
http://de.wikipedia.org/wiki/Newtonverfahren

15

06.07.2008, 14:44

Zitat von »"Toa"«

Wie machst du das eigentlich mit der Berechnung der Nullstellen?

Ich meine wenn du eine Fkt n-ten Grades bekommst, schaffst du es doch irgendwann nicht mehr einfach nur die Pq-Formel darauf anzuwenden.
Nehmen wir mal ein Beispiel:

Quellcode

1
2
3
4
5
6
7
8
9
10
f(x) = x³ -x² -22x + 40
f(x) =0 <-> x³-x² -22x +40 =0
f(x) = (x-2) * p(x)
(x³-x²-22x+40) : (x-2) = x²+x-20 = p(x)

f(x) = (x-2)* (x²+x-20)
<-> 
x-2=0 oder x²+x-20=0

und hier greift deine PQ-Formel..


Falls ich falsch liege bitte verbessern hab nun schon 2 Wochen Ferien und da verdummt man doch etwas xD

Grüße Toa


Ich führe bei der Berechnung der Nullstellen auch keine Rechenverfahren an sondern die Nullstellen werden durch probieren herausgefunden. Damit dies nicht so lange dauert werden die Bereiche in denen die Nullstellen sind immer weiter eingegrenzt.

Z.b werden zuerst im Bereich -1000 bis 1000 die Bereiche gespeichert in denen sich die Nullstellen befinden z.b im Bereich zwischen 1 und 2. Dann wird im nächsten Durchlauf bei der nächsten Kommastelle also von 1.1 - 2.9 geguckt zwischen welchen beiden Werten sich die Nullstelle befindet also z.b zwischen 2.4 und 2.5 dies wird dann weiter fortgesetzt bis mir die Nullstellen genau genug ermittelt worden sind. Natürlich kann es auch sein das eine Nullstelle genau bestimmbar ist und nicht zwischen zweit Werten mehr liegt dann wird diese zahl natürlich sofort als Nullstelle festgehalten :)

Das System funktioniert recht gut und ich konnte hiermit bisher bei jeder beliebiegen Funktion bis zum 15ten Grades alle Nullstellen ermitteln.

Es gibt auch sicher schon solche Rechenprogramme aber ich hatte spass daran auch sowas selber mal zu programmieren. Evtl werde ich das ganze auch noch erweitern, so dass man mit meinem Programm eine vollständige Kurvenuntersuchung machen kann :)
Wäre aufjedenfall mal eine Herausforderung besonders wenn dann auch noch eine Kurve gezeichnet werden muss.

Nur eine schwachstelle gibt es bisher.. Wenn sich Nullstellen auserhalb des Bereiches -1000 und 1000 befinden können diese Bisher nicht berechnet werden..

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

06.07.2008, 14:57

jap, das verfahren klingt ganz vernünftig :)

vielleicht könnte dich das interessieren.

17

06.07.2008, 17:01

Ist es denn evtl nötig, dass ich den X Bereich erhöhe in dem er nach 0 STellen sucht oder denkt ihr, dass es ausreichend ist, wenn er im Bereich -1000 bis 1000 nach Nullstellen sucht?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

18

06.07.2008, 17:06

das hängt ganz vom polynom ab würd ich mal sagen.
am einfachsten lässt du dem benutzer die möglichkeit offen das intervall selber einzustellen...

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

19

06.07.2008, 18:20

Zitat von »"Abcd1234"«



Ich führe bei der Berechnung der Nullstellen auch keine Rechenverfahren an sondern die Nullstellen werden durch probieren herausgefunden.


Das mit dem Intervall erübrigt sich wenn du es wie folgt machst...

Eine Nullstelle ist auf jedenfall Teiler von q d.h wenn wir so ein Polynom haben :

x²+25x-8

dann ist eine Nullstelle auf jedenfall Teiler von q .. und wenn du eine Nullstelle hast kannst du einen Linearfaktor abspalten d.h (x-a).. dann nur noch durch das Polynom teilen sodas du ein neues p(x) erhälst und fertig ^.^

20

07.07.2008, 10:43

Zum Parsen: lex & yacc, bzw. flex und bison. Fuer gewoehnlich braucht man nichtmal Bibliotheken dazulinken. Es ist auch gleich ein Tutorial mit dabei, das dir zeigt, wie ein einfache Taschenrechner a la bc fuer die Kommandozeile programmiert wird. Desweiteren kannst du auch eine Skriptsprache nutzen. Gute Erfahrungen habe ich mit Lua gemacht.

Zitat

Jedes Polynom kann minestens in die Form (ax^2 + bx + c)* (...) gebracht werden. Und wenn du Glück hast gehts sogar noch weiter. (Abspalten von Nullstellen).

Das stimmt nicht. Desweiteren gibt es keine allgemeine Loesungsformel fuer Polynome vom Grade 5 oder hoeher.

Zitat

Z.b werden zuerst im Bereich -1000 bis 1000 die Bereiche gespeichert in denen sich die Nullstellen befinden z.b im Bereich zwischen 1 und 2. Dann wird im nächsten Durchlauf bei der nächsten Kommastelle also von 1.1 - 2.9 geguckt zwischen welchen ...

Wie waers, wenn du ein Bisektionsverfahren verwendest, du halbierst dein Intervall jedesmal. Sollte wesentlich schneller gehen.

Zitat


Nur eine schwachstelle gibt es bisher.. Wenn sich Nullstellen auserhalb des Bereiches -1000 und 1000 befinden können diese Bisher nicht berechnet werden..

Was ist, wenn das Polynom keine Nullstellen hat?

Werbeanzeige