Polynome n-ten Grades durch n+1 Punkte legen? |
31.08.2005, 16:34 | krauthaufen | Auf diesen Beitrag antworten » | ||
Polynome n-ten Grades durch n+1 Punkte legen? Ich möchte ein Programm schreiben, das durch beliebig viele Punkte ein Polynom legen kann. Dazu verwende ich die Cramersche Regel. nun habe ich das Problem, dass ich nicht weiß wie man die Determinante einer N x N - Matrix berechnet. Ich habe mal auf wikipedia gesucht und folgendes gefunden: http://de.wikipedia.org/math/a6eb6455927f82dbba7780d6372a2399.png http://de.wikipedia.org/wiki/Determinant...lgemeine_Formel Mein Problem ist nun, dass ich diese Formel beim besten Willen nicht verstehe und keine Ahnung habe, wie ich das berechnen soll. kann mir das irgen jemand für Normalsterbliche erklären?? Wäre sehr hilfreich |
||||
31.08.2005, 16:48 | yeti777 | Auf diesen Beitrag antworten » | ||
RE: Polynome n-ten Grades durch n+1 Punkte legen? Hallo Krauthaufen! Ich würde nicht das Determinantenverfahren zur Auflösung des linearen Gleichungssystems wählen. Das ist mehr für theoretische Überlegungen geeignet. Wie wäre es mit dem GAUSS'schen Eliminationsverfahern? Gruss yeti |
||||
31.08.2005, 16:50 | JochenX | Auf diesen Beitrag antworten » | ||
ich empfehle dir eine rekursive programmierung der determinantenberechnung quadratischer matrizen dazu sollte sich das laplacesche entwicklungsverfahren eignen schau mal, ob du das findest, sonst könnte ich mal versuchen, etwas pseudocode hinzuwerfen :P mfg jochen edit: naja, wenns nur um LGS lösen geht, stimme ich yeti zu |
||||
31.08.2005, 16:58 | pimaniac | Auf diesen Beitrag antworten » | ||
RE: Polynome n-ten Grades durch n+1 Punkte legen? edit: //naja etwas zu langsam aber immerhin selbe idde wie loed :-) sorry yeti da muss ich wiedersprechen, Gaussches Verfahren ist für die Umsetzung am Computer sicher nicht das beste (händisch natürlich schon). Ich find dass Determinanten nach folgender Regel am einfachsten zu programmieren sind. Schreib eine rekurisive Funktion die folgendes macht //pseudocode funktion det(matrix) if(matrix=2x2) then ouput(determinante(matrix)) else { help=0 n=dim(matrix) for i=1..n do help=help+(-1)^(i+1)*a1i*det(matrix -zeile(1) -spalte(i)) } output(help) Das Funktioniert folgendermaßen: Man kann eine MAtrix berechnen indem man die erste Zeile oder Spalte nimmt und jedes Element dieser Zeile/Spalte mit der Dterminante der Matrix multipliziert die man bekommt wenn man die Zeile und SPatle in dem sich das Element befindet wegläßt. z.B.: bei fragen wir immer fragen |
||||
31.08.2005, 17:04 | krauthaufen | Auf diesen Beitrag antworten » | ||
Auf die Idee mit dem Eliminationsverfahren das zu machen bin ich auch schon gekommen, habe mir allerdings gedacht, dass das rechenaufwendiger ist als das Determinanten-system. (Habe das mal in der Schule gelernt) Wobei wenn ich mir ansehe, dass ich z.B. eine 8 x 8 Determinante in keine Ahnung wie viele kleinere zerlegen muss glaube ich das nicht mehr. Das gaussche eliminationsverfahren habe ich mir angesehen und finde es eigentlich recht einfach! Nur mein Problem ist nun, dass ich ein Programm schreiben muss, das das für ein Gleichungssystem mit n Unbekannten kann. Trotzdem guter Vorschlag, danke! Ich werde jetzt versuchen, das C++ beizubringen. //EDIT: @pimac: Das werde ich versuchen, weil das Eliminationsverfahren ist wirklich ein bisschen schwierig am Computer zu schreiben. |
||||
31.08.2005, 17:10 | JochenX | Auf diesen Beitrag antworten » | ||
hallo pi, da fehlt noch was.... beachte, dass du ab und an auch noch ein minus einfügen musst beim entwickeln wenn du immer in der ersten zeile entwickelst brauchst du für jede geradnummerige spalte ein -1 davor mfg jochen @krauthaufen: das eliminationsverfahren wurde schon sehr oft implementiert das sollte also durchaus machbar sein numeriker haben die probleme eher anderweitig: wie bekomme ich dieses verfahren auch für 2000x2000-koeffizientenmatrizen in annehmbarer zeit gelöst!? |
||||
Anzeige | ||||
|
||||
31.08.2005, 17:11 | AD | Auf diesen Beitrag antworten » | ||
Nur als Anmerkung: Algorithmisch gibt es wesentlich effizientere Verfahren zur Polynominterpolation, z.B. mit der Newton-Basis. |
||||
31.08.2005, 17:13 | Calvin | Auf diesen Beitrag antworten » | ||
RE: Polynome n-ten Grades durch n+1 Punkte legen?
Die Vorzeichen sind nicht richtig. Bei der Zahl 2 muss ein Minuszeichen hin, also Die Vorzeichen sind nach dem "Schachbrettschema" verteilt: Beim Programmieren geht das mit EDIT Ui, bin ich langsam |
||||
31.08.2005, 17:22 | krauthaufen | Auf diesen Beitrag antworten » | ||
Frage: was meinst du mit dim(matrix) ? |
||||
31.08.2005, 17:24 | pimaniac | Auf diesen Beitrag antworten » | ||
erstens mal schande über mein haupt, ich sollt mich wohl nicht einfach auf mein restwissen vertrauen mit dim(Matrix) mein ich im ENdeffekt die größe der matrix, die ja imme rkliener wird. Also einfach die ZEilen bzw. Spaltenanzahl |
||||
31.08.2005, 18:02 | krauthaufen | Auf diesen Beitrag antworten » | ||
Also: Ich habe jetzt ein programm geschrieben und das liefert mir zur Determinante 4 2 0 9 3 0 9 4 0 den Wert 5 kann das richtig sein?? Kann das bitte jemand überprüfen? Wäreeuch sehr verbunden! |
||||
31.08.2005, 18:05 | derkoch | Auf diesen Beitrag antworten » | ||
ist falsch! der wert der determinante, die du aufgeschrieben hast ist 0! der wert einer determinante ist 0, wenn einer zeile oder eine spalte der determinante null ist!! |
||||
31.08.2005, 18:41 | krauthaufen | Auf diesen Beitrag antworten » | ||
Nochmal: Diesmal habe ich mir die Unterdeterminanten ausgeben lassen: 4 1 0 3 0 0 2 0 0 = 4 * 0 0 0 0 + -1 * 3 0 2 0 + 0 * 3 0 2 0 Das ist doch -1 oder? Zumindest gibt mein Programm das aus! Ideen was da falsch sein könnte? |
||||
31.08.2005, 18:48 | Egal | Auf diesen Beitrag antworten » | ||
Ich habs extra mal groß geschrieben für dich. |
||||
31.08.2005, 18:49 | therisen | Auf diesen Beitrag antworten » | ||
Hallo, warum verwendest du eigentlich nicht die kubische Spline-Interpolation? Ich möchte nämlich mal sehen, wie du ein Polynom 100. Grades für 101 Punkte berechnest... Gruß, therisen |
||||
31.08.2005, 18:51 | krauthaufen | Auf diesen Beitrag antworten » | ||
@Egal: Ich habe das zur kenntnis genommen. Ich wollte nur wissen was ich dann falsch mache wenn das Ergebnis offensichtlich falsch ist. |
||||
31.08.2005, 19:01 | Egal | Auf diesen Beitrag antworten » | ||
Da ich nicht weiss was für eine Art Code du geschrieben hast wäre es müssig hier jetzt darüber zu philosophieren. Ich denke einfach mal du hast falsch programmiert. |
||||
31.08.2005, 19:06 | krauthaufen | Auf diesen Beitrag antworten » | ||
Was ich meine ist Folgendes: ich habe dieses Beispiel im Kopfnachgerechnet und kommme auch zu dem Ergebnis -1. Das heißt doch, dass ich offensichtlich einen Denkfehler in meiner Überlegung haben muss. Die Determinante einer 2x2 matrix berechnet sich doch aus: a[0][0]*a[1][1] - a[0][1]*a[1][0] oder? |
||||
31.08.2005, 19:16 | pimaniac | Auf diesen Beitrag antworten » | ||
deine 3 kleinen matrizen haben jeweils determinate 0 also ist auch die summe null problem mit 101 punkten ist natürlich bei meinem algorithmus gegeben zum oriogrammieren is es halt easy |
||||
31.08.2005, 19:21 | Egal | Auf diesen Beitrag antworten » | ||
Also bezugnehmend auf dein Beispiel:
und die 3. is ja wieder die selbe wie die 2. Wie genau bist du jetzt auf -1 gekommen? |
||||
31.08.2005, 20:09 | AD | Auf diesen Beitrag antworten » | ||
Die Berechnung ist gar nicht das Problem (s.o. mein Hinweis mit der Newton-Basis), aber die Eigenschaften dieses Polynoms ... einfach nur noch grauenhaft (wildes Hin- und Herschwingen). Da sind kubische Splines eindeutig die bessere Wahl. |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
Die Neuesten » |
|