Autor |
Beitrag |
Moet
Hält's aus hier
Beiträge: 2
WIN XP
Delphi 5
|
Verfasst: So 03.04.05 16:52
Hallo zusammen,
ich bin neu hier und beschäftige mich noch nicht solang mit Delphi. Da wir für die Uni ein recht aufwendiges Projekt haben wo man viel itterieren muß, habe ich mir ein kleines Program geschrieben, was ich aber gerne noch ausbauen möchte. Dazu suche ich die Lösung für eine Polynomgleichung 3er Ordnung, also:
0=ax³+bx²+cx+d
kann mir jemand weiterhelfen wie ich das in Delphi umsetze? Bin für alle Hilfestellungen dankbar,
Markus
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: So 03.04.05 16:55
IMHO gibt's für Polynome dritter Ordnung noch eine Lösungsformel. Ansonsten musst du Näherungsverfahren verwenden - findest du zu Hauf
AXMD
|
|
wdbee
      
Beiträge: 628
Erhaltene Danke: 1
|
Verfasst: So 03.04.05 16:57
Waren doch die Schnittpunkte einer Geraden mit einer Parabel, oder?
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: So 03.04.05 17:12
soweit ich weis sind es die Schnittpunkte des Schaubildes f(x)=ax³+bx²+cx+d mit der x-Achse (Nullstellen der Funktion). soweit ich weis wären da die Ableitungsfunktionen hilfreich. weis aber nicht mehr, wie ^^ Mein augenblicklicher Lehrer ist ein ... ************************** (was die sterne bedeuten, sag ich nicht. ^^)
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: So 03.04.05 17:14
JayEff hat folgendes geschrieben: | soweit ich weis sind es die Schnittpunkte des Schaubildes f(x)=ax³+bx²+cx+d mit der x-Achse (Nullstellen der Funktion). soweit ich weis wären da die Ableitungsfunktionen hilfreich. weis aber nicht mehr, wie ^^ Mein augenblicklicher Lehrer ist ein ... ************************** (was die sterne bedeuten, sag ich nicht. ^^) |
Die Ableitung hilft dir gar nichts, weil die die Steigung wiederspiegelt  .
AXMD
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: So 03.04.05 17:16
jaaaaaa stimmt ja ^^ sorry. aber es HÄTTE ja helfe können. Die Ableitungen sind für sooo vieles gut... wie z.B. Wende-, Hoch- und Tiefpinkte.. Warum nicht auch für nullstellen ^^ aber egal, ein versuch wars wert.. was? ^^
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: So 03.04.05 17:27
JayEff hat folgendes geschrieben: | jaaaaaa stimmt ja ^^ sorry. aber es HÄTTE ja helfe können. Die Ableitungen sind für sooo vieles gut... wie z.B. Wende-, Hoch- und Tiefpinkte.. Warum nicht auch für nullstellen ^^ aber egal, ein versuch wars wert.. was? ^^ |
Ohne Ableitung nullsetzen -> Nullstellen
Erste Ableitung nullsetzen -> Hoch- und Tiefpunkte
Zweite Abl. nulls. -> Wendepunkte
Das ganze nennt sich Kurvendiskussion
AXMD
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: So 03.04.05 22:25
Jaaaa da kams mir dann wieder ^^ hm.. nächstens schreiben wir da ne Arbeit drüber.. oder haben wir schon? oO ähm.. ich hab sonst nur gute Noten oO blöder Mathe lehrer.. keine ahnung wann Arbeit und sowas... -.- Muss unbedingt noch lernen. aber wir kommen vom Thema ab. Nur soviel: Eine Formel wie für die normale ax²+bx+c=0 kann man sicher auch ableiten, wenn man sie nicht kennt oder findet. einfach mal alle variablen lassen und nach x auflösen.. oder man gibts in den TI ein 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
atreju2oo0
Hält's aus hier
Beiträge: 4
Win XP
D6 Prof
|
Verfasst: So 03.04.05 23:46
Alle Variablen weglassen und dann 0 setzen???
Wie willste das denn machen?
Soweit ich weiß gibt es nur für Sonderfälle Lösungsformeln(wenn ein parameter 0 ist)
Ansonsten sollte Dir google und Newton-Verfahren helfen. 
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 04.04.05 09:54
Die 3 Lösungen in geschlossener Form lauten:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| pretty(solve('a*x^3+b*x^2+c*x+d=0'))
[ 1/3 2 ] [ %1 3 c a - b ] [1/6 ----- - 2/3 ---------- - 1/3 b/a] [ a 1/3 ] [ a %1 ]
[ 1/3 2 [ %1 3 c a - b [- 1/12 ----- + 1/3 ---------- - 1/3 b/a [ a 1/3 [ a %1
/ 1/3 2\] 1/2 | %1 3 c a - b |] + 1/2 I 3 |1/6 ----- + 2/3 ----------|] | a 1/3 |] \ a %1 /]
[ 1/3 2 [ %1 3 c a - b [- 1/12 ----- + 1/3 ---------- - 1/3 b/a [ a 1/3 [ a %1
/ 1/3 2\] 1/2 | %1 3 c a - b |] - 1/2 I 3 |1/6 ----- + 2/3 ----------|] | a 1/3 |] \ a %1 /]
2 3 %1 := 36 b c a - 108 d a - 8 b
1/2 3 2 2 2 2 3 1/2 + 12 3 (4 c a - c b - 18 b c a d + 27 d a + 4 d b ) a |
Die Lösung ist halt vom Computer berechnet und deswegen schlecht vereinfacht. Es gibt noch weiter vereinfachte Formeln (mehr Substitutionen). Die findet man bestimmt im Google.
Ich würde dir aber raten, das numerisch zu lösen 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 04.04.05 10:33
Irgendwo hab ich auch noch die Lösungsgleichungen vierten Grades rumliegen. Wenn ich se wiederfinde oder mein Mathematica überredet bekomme, mir die auszuspucken, poste ich se als Attachment.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Moet 
Hält's aus hier
Beiträge: 2
WIN XP
Delphi 5
|
Verfasst: Mo 04.04.05 21:49
danke für die bisherige hilfe, ich werd mal sehen was ich damit anfangen kann, bin wie gesagt wirklich noch nicht so lang dabei.
lg markus
|
|
MagicAndre1981
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 04.04.05 22:06
Hi,
schau mal hier auf DP nach.
MfG
André
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 04.04.05 22:46
atreju2oo0 hat folgendes geschrieben: | Alle Variablen weglassen und dann 0 setzen???
Wie willste das denn machen?
Soweit ich weiß gibt es nur für Sonderfälle Lösungsformeln(wenn ein parameter 0 ist)
Ansonsten sollte Dir google und Newton-Verfahren helfen.  |
Ich sagte "lassen" nicht "WEGlassen". das bedeutet: alle variablen so lassen wie sie sind und dann die gesammte funktion gleich 0 setzen und nach x auflösen.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
atreju2oo0
Hält's aus hier
Beiträge: 4
Win XP
D6 Prof
|
Verfasst: Mo 04.04.05 23:30
Ich habs zwar falsch geschrieben aber richtig verstanden.
Nur die Frage die sich stellt ist halt wie man das umstellen will?
Ich wüßte keine Möglichkeit, lasse mich aber gerne belehren.
Man braucht ja schon bei ner ^2 Funktion den "Umweg" über die quadratische Ergänzung.
Ich denke wenn läuft das in diese Richtung bei ner ^3 Funktion.
Aber ist nur ne Vermutung...
Nix genaues weiß man nciht!

|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Do 07.04.05 11:43
Hier geht es doch darum, die Nullstellen per Programm zu finden und nicht von Hand. Von wegen Variablen "lassen" und so...
@MagicAndre1981: Das Programm auf DP hab ich mir angeschaut (den Source). Nullstellen per Enumeration zu finden ist keine gute Lösung. Genausowenig sollte man die Lösungsformel direkt benützen. Das ist numerisch gesehen sehr schlecht.
Der (wohl einzig) brauchbare, d.h. numerisch stabile Weg um Nullstellen eines Polynoms (höheren Grades) zu berechnen geht so: Du nimmst das Polynom und interpretierst es als charakteristisches Polynom einer Matrix. Um die Nullstellen zu finden löst du dann das zugehörige Eigenwertproblem (d.h. Ax=ax). Also konkret überführst du das Polynom in eine äquivalente Matrix (-> Companion Matrix) und findest dort die Eigenwerte via QR-Algorithmus!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 07.04.05 20:10
@delphiphan: Könntest Du das mal am Beispiel einer quadratischen Funktion y=ax^2+bx+c demonstrieren?
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Do 07.04.05 22:25
Als Demonstration ist das quadratische Polynom vielleicht nicht so geeignet. Wie dem auch sei. Man hat also das Polynom ax^2+bx+c und will die Nullstellen haben. Zunächst teilt man die Gleichung durch a: x^2+b/a*x+c/a. Offensichtlich hat dieses Polynom die gleichen Nullstellen, kommt aber schon mit 2 Parametern aus. Die zugehörige Companion Matrix lautet dann:
Quelltext 1: 2:
| A = [0 -c/a] [1 -b/a] |
Es gilt also: det(A-I*x) = x^2+b/a*x+c/a (= charakteristisches Polynom der Matrix A)
Man sucht jetzt halt Werte für x, für die die obere Determinante Null wird (d.h. der Ausdruck in der Klammer singulär wird). Man muss jetzt halt eben die Eigenwerte berechnen. Das macht man numerisch am besten mit dem QR Algorithmus (mit Householder Matrizen). Das lässt sich aber nur mit konkreten Zahlen durchführen und nicht mit unbekannten Parametern a, b, c. Ich könnte das jetzt hier also höchstens an einem konkreten Zahlenbeispiel rechnen. Ist aber eher ne langweilige Sache und bringt nicht viel.
Den QR Algorithmus für das Eigenwertproblem findet man im Internet. Man spaltet A in Matrizen Q und R auf, sodass gilt A = Q*R (Q orthogonal und R rechte obere Dreiecksmatrix). Dann setzt man die Matrizen wieder zusammen, aber in verkehrter Reihenfolge: A2=R*Q, diese Matrix spaltet man wieder auf A2=Q2*R2. Dann fügt man sie wieder (verkehrt) zusammen A3=R2*Q2. Usw. Schlussendlich erhält man dann eine Dreiecksmatrix mit den Eigenwerten in der Diagonalen. QR zu implementieren ist vielleicht nicht ganz einfach. (Um die Konvergenz zu begünstigen/beschleunigen gibt's noch mathematische Tricks, die ich hier jetzt nicht erwähnt hab... Zusätzlich wird die Matrix R normalerweise gar nicht berechnet sondern sofort upgedated...).
Es gibt aber noch andere Methoden, z.B. die Jacobimethode, welche die Matrix geschickt rotiert (Givens-Rotationen), bis sie diagonal ist. Ist etwas weniger effizient, dafür einfacher zu implementieren.
Aber du musst das ja nicht selbst programmieren, sondern nur den QR Algorithmus oder die Jacobimethode im Internet suchen. Wenn du Glück hast findest du sogar eine fertige Prozedur, welche dir die Nullstellen berechnet.
PS: Leider versteht man unter QR Algorithmus normalerweise nur die Aufspaltung einer Matrix und nicht das Berechnen der Eigenwerte. Und unter dem Namen Jacobimethode ist auch ein Algorithmus zur Lösung von linearen Gleichungssystemen bekannt.  Ich denke du solltest im Inet trotzdem fündig werden. Ansonsten hab ich die Algorithmen alle auf Papier (aber nicht in Pascal). Weiss aber nicht, ob ich die einfach so posten darf. Wohl eher nicht.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 19.06.05 12:46
Sorry, dass ich diesen Thread nochmal aufrühre, hab eben meine Unterlagen für Polynome vierten Grades wiedergefunden. Siehe Anhang.
Höhere Lösungsgleichungen werden aber leider nicht mehr vernünftig aufgelöst.
Einloggen, um Attachments anzusehen!
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: So 19.06.05 13:27
Es gibt auch keine Formeln mehr für Polynome 5. Grades  Übrigens: Da kann man noch vieles substituieren, damit man gleiche Terme nicht mehrfach berechnen muss.
Übrigens (allgemeine Bemerkung): Man sollte solche Probleme iterativ lösen, da das Auswerten von langen Formeln vermutlich länger geht und zweitens auch das schlechtere Resultat liefert.
|
|