Funktion aus Werte-Paar < Numerik < Hochschule < Mathe < Vorhilfe
|
Guten Tag,
Ich habe folgendes Problem, und würde mich sehr auf eine baldige Beantwortung freuen.
Gegeben sind die Versuchsergebnisse als Wertepaare im X-Y-Koordinatensystem.
Aus diesen etwa 500 Wertepaaren will ich mir eine Funktion (wenn moeglich 3ten Grades) herleiten.
Dies will ich als Makro in VBA programmieren.
Meine Frage lautet nun;
Mit welchem Verfahren kann ich auf die Funktion schliessen, und wie funktioniert dieses Verfahren?
--------------------------------------------------------------------------------------------- Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 11:59 Fr 25.03.2005 | Autor: | DaMenge |
Hi,
also mit Funktionentheorie scheint es mir hier nichts zu tun zu haben - ich verschiebe es mal in die Numerik.
Zu deiner Frage : für ein Polynom dritten Grades reichen vier Punkte aus um es eindeutig zu bestimmen - jeder zusätzliche Punkt bedeutet dann ein überbestimmtes Gleichungssystem, dass man dann möglichst Minimal bzgl. irgendeiner Größe Lösen muss - normaler Weise verwendet man dann die Methode der kleinsten Fehlerquadrate oder Ähnliches.
Nachteil: Der Graph muss noch nichtmal durch einen der Punkte gehen
Vorteil: relativ übersichtliche (aber mit minimalem Fehler behaftete) Funktion für alle Punkte
Es gibt aber auch noch die Möglichkeit, dass du jeweils vier Punkte zusammenfasst und darauf ein kubisches Polynom machst und dann den letzten Punkt davon mit den nächsten drei zusammenfasst und darauf das nächste kubische Polynom herleitest - das wären dann kubische Splines
Vorteil: Der zusammengesetzte Graph geht durch alle Punkte
Nachteil viel Polynome zusammengesetzt, aber auch nur stückweise kubisch.
Jetzt kommt es darauf an, was du machen willst und wieviel Vorwissen du schon hast, dann kann man dir bestimmt weiter helfen.
viele Grüße
DaMenge
|
|
|
|
|
Ich gehe bei meiner Antwort von folgenden Voraussetzungen aus:
1. Du meinst: Bei einer Messreihe gehorchen die y-Werte dem Gesetz
y = [mm] a*x^{3}+b*x^{2}+c*x+d.
[/mm]
Dabei sind a, b, c und d mit Hilfe der Messwerte zu bestimmen.
Wegen der Messungenauigkeiten lassen sich diese aber nicht genau bestimmen; deshalb werden ein paar hundert Messungen durchgeführt (für 4 Unbekannte würden sonst 4 reichen), und aus diesen sollen die "besten" Werte ausgewählt werden.
2. Du bist mit Matritzenrechnung vertraut (sonst wird alles zu kompliziert).
-------------------------------------------------------------------------------------------
Lösung (für 4 Unbekannte und 500 Messwerte):
Ansatz: Stelle dir vor, du hättest die Werte a, b, c und d gefunden und sie würden zu allen Messwerten genau passen. Gib in dein Programm alle 500 x-Werte ein. Bilde daraus die Matrix A mit 500 Zeilen und 4 Spalten.
In der 1. Zeile gibst du von Messwert [mm] x_{1} [/mm] der Reihe nach (natürlich per Programm errechnet) die Werte [mm] x_{1}^{3}, x_{1}^2, x_{1} [/mm] und 1 ein. In die 2. Zeile gehört demnach von [mm] x_{2} [/mm] die Folge [mm] x_{2}^{3}, x_{2}^2, x_{2} [/mm] und 1 usw. bis zur 500-sten Zeile.
Als nächstes bildest du den Spaltenvektor s mit den Variablen a, b, c und d.
Wenn du nun dir richtigen Zahlen für a, b, c und d kennen würdest, ergäbe das Matritzenprodukt A*s einen 500-zeiligen Spaltenvektor, der in jeder Komponente genau die passenden y-Werte enthielte, die zu dem Gesetz und damit zu deinen Messwerten passen würde. Bilde also noch einen 500-zeiligen Spaltenvektor y mit deinen 500 Messwerten (jeweils passend für die zeile mit den x-Werten.)
Betrachte nun die Gleichung A*s=y. A und y sind bekannt, s unbekannt. Wenn die Messwerte das Gesetzt genau erfüllen, musst du "nur" das Gleichungssystem lösen. Es ist überbestimmt, die ersten 4 Zeilen würden zur Lösung genügen.
Tatsächlich stellst du nun fest, dass in Folge der Messfehler kein Vektor s gefunden werden kann, ohne dass sich Gleichungen widersprechen. Gesucht ist somit keine genaue Lösung (zu den ungenauen Messwerten gibt es sie nicht), sondern nur die "beste".
Definition: Unter der "besten" Lösung des o.a. Gleichungssystems verstehe ich den Vektor s, bei dem folgendes geschieht:
Kennt man s und rechnet man die linke Seite der Gleichung A*s aus, erhält man einen Spaltenvektor mit "theoretischen" y-Werten. Nun Bildet man den Differenzvektor zu den "gemessenen" y-Werten. Dieser Vektor enthält komponentenweise die Fehler. Die "beste" Lösung ist diejenige, bei der die Summe dieser Fehlerquadrate minimal wird.
Dies ist der theoretische Hintergrund für die Begründung des nun folgenden einfachen Lösungsverfahrens:
Du bildest nun noch die zu A transponierte Matrix [mm] A^{T} [/mm] und multiplizierst das obige Gleichungssystem von links mit [mm] A^{T}:
[/mm]
( [mm] A^{T}*A)*s=A^{T}*y
[/mm]
Dieses Gleichungssystem hat nur noch 4 Zeilen und ist leicht mit dem Gauß-Verfahren (oder gar per Hand ) zu lösen. Du erhältst sofort a, b, c und d. Es sind diejenigen Werte, die die Summe der Fehlerquadrate zwischen den aus den x-Werten errechneten und den tatsächlich gemessenen y-Werten
minimal machen.
Eine theoretische Beweisführung, dass das Verfahren mit der Multiplikation von links mit [mm] A^{T} [/mm] so funktioniert, würde den Rahmen dieses Artikels sprengen. Ich kann aber leider auf kein Lehrbuch verweisen, da ich dies noch nirgendwo gefunden, sondern mir als Student mal selber überlegt habe.
|
|
|
|
|
Zunächst mal vielen Dank für die Antworten, die bringen mich schon etwas weiter, da ich nun weiss nach was ich suchen soll...
Da ich ein eigenständiges Programm in Visual Basic erarbeiten will, wäre es gut wenn ich die Idee mit der Matrixberechnung umgehen könnte, da dies sehr umständlich zu programmieren ist. Obwohl die Idee schon sehr meinen Bedürfnissen entspricht...
Ich würde gerne die "Methode der kleinsten Quadrate"einsetzen. Doch leider habe ich im Internet noch keine Vorgehensweise für den nicht linearen Fall gefunden. Es wird lediglich die lineare Regression angesprochen. Ich würde gerne, wie oben beschrieben, eine Funktion 3. Grades erhalten.
Könnten mir bitte Eine/r kurz Beschreiben wie diese Methode im nicht linearen Fall funktioniert, oder eventl. einen Link angeben wo ich die benötigten Informationen finde?
Vielen Dank für Eure Bemühungen!
|
|
|
|
|
Hallo,
nun da es sich um eine Funktion 3. Grades handelt, ist zu betrachten:
[mm]\sum\limits_{i = 1}^{500} {\left( {y_i \; - \;a\;x_i^3 \; - \;b\;x_i^2 \; - \;c\;x_i \; - \;d} \right)^2 \; \to \;\min } [/mm]
Diese Summe wird minimal wenn die partiellen Ableitungen nach a,b,c und d verschwinden:
[mm]
\begin{gathered}
\frac{\delta }
{{\delta a}}\;:\; - 2\;\sum\limits_{i = 1}^{500} {x_i^3 \;} \left( {y_i \; - \;a\;x_i^3 \; - \;b\;x_i^2 \; - \;c\;x_i \; - \;d} \right)\; = \;0 \hfill \\
\frac{\delta }
{{\delta b}}\;:\; - 2\;\sum\limits_{i = 1}^{500} {x_i^2 \;} \left( {y_i \; - \;a\;x_i^3 \; - \;b\;x_i^2 \; - \;c\;x_i \; - \;d} \right)\; = \;0 \hfill \\
\frac{\delta }
{{\delta c}}\;:\; - 2\;\sum\limits_{i = 1}^{500} {x_i \;} \left( {y_i \; - \;a\;x_i^3 \; - \;b\;x_i^2 \; - \;c\;x_i \; - \;d} \right)\; = \;0 \hfill \\
\frac{\delta }
{{\delta d}}\;:\; - 2\;\;\sum\limits_{i = 1}^{500} {\left( {y_i \; - \;a\;x_i^3 \; - \;b\;x_i^2 \; - \;c\;x_i \; - \;d} \right)\;} = \;0 \hfill \\
\end{gathered} [/mm]
Daraus ergibt sich ein 4x4 Gleichungssystem, das zu lösen ist.
Gruß
MathePower
|
|
|
|