Polynome n-ten Grades durch n+1 Punkte legen?

Neue Frage »

krauthaufen Auf diesen Beitrag antworten »
Polynome n-ten Grades durch n+1 Punkte legen?
Also ich habe ein für mich relativ komplexes Problem!

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
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
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
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
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.
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!?
 
 
AD Auf diesen Beitrag antworten »

Nur als Anmerkung: Algorithmisch gibt es wesentlich effizientere Verfahren zur Polynominterpolation, z.B. mit der Newton-Basis.
Calvin Auf diesen Beitrag antworten »
RE: Polynome n-ten Grades durch n+1 Punkte legen?
Zitat:
Original von pimaniac
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.:


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 geschockt
krauthaufen Auf diesen Beitrag antworten »

Zitat:
funktion det(matrix)


if(matrix=2x2) then ouput(determinante(matrix))
else
{
help=0
n=dim(matrix)
for i=1..n do
help=help+a1i*det(matrix -zeile(1) -spalte(i))
}
output(help)


Frage: was meinst du mit dim(matrix) ?
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
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!
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!!
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?
Egal Auf diesen Beitrag antworten »

Zitat:

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!!


Ich habs extra mal groß geschrieben für dich.
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
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.
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.
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?
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
Egal Auf diesen Beitrag antworten »

Also bezugnehmend auf dein Beispiel:
Zitat:

4 1 0
3 0 0
2 0 0

=

4 *
0 0
0 0

+

-1 *
3 0
2 0

+

0 *
3 0
2 0



und die 3. is ja wieder die selbe wie die 2. Wie genau bist du jetzt auf -1 gekommen?
AD Auf diesen Beitrag antworten »

Zitat:
Original von therisen
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...

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). geschockt
Da sind kubische Splines eindeutig die bessere Wahl.
Neue Frage »
Antworten »



Verwandte Themen

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