WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Nebenbedingungen beim Curve Fitting - polyfit()?

 

Flash
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 28.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2011, 09:48     Titel: Nebenbedingungen beim Curve Fitting - polyfit()?
  Antworten mit Zitat      
Hallo,

bei der Auswertung von Messdaten möchte ich durch die einzelnen Messpunkte y über x einen möglichst gut passenden Graphen y = f(x) legen. Mit

Code:
coefs = polyfit(x, y, 3)


habe ich bereits eine Funktion gefunden, die mir die Koeffizienten für ein Polynom einen Grades meiner Wahl ausgibt (im Beispiel 3); klappt so weit.

Da mir jedoch die zu erwartenden Form des Graphen in etwa bekannt ist, möchte ich gerne zwei Nebenbedingungen einführen:

    * Am Punkt x=0 soll auch x' = 0 gelten
    * Der lineare Anteil des Polynoms, also der ersten Grades, soll gleich Null sein, polyfit oder eine beliebige andere Funktion soll mir also ein Ergebnis (a b 0 d) für die Koeffizienten liefern
.

Wie das möglich ist, habe ich bisher nicht herausgefunden - kann mir hier jemand helfen? Vielen Dank im Vorraus!

(p.s. Curve fitting toolbox wäre vorhanden, ist aber natürlich kein Schaden wenn es auch ohne geht)
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2011, 10:25     Titel:
  Antworten mit Zitat      
Hallo,

da muss man sich ein wenig selber behelfen. Du willst:
y = a*x^3 + b*x^2 + d
Die Bedingung y'(0) = 0 ist darin ja schon enthalten.

Du kannst das nun auch als lineares Gleichungssystem auffassen und lösen:
Code:
p = [x.^3 x.^2 ones(size(x))] \ y

für Spaltenvektoren x und y. p enthält dann a, b und d.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Flash
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 28.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2011, 11:43     Titel:
  Antworten mit Zitat      
Hi Harald, vielen Dank für deine Antwort!

Oben habe ich nicht erwähnt, dass die Messdaten jetzt nicht unbedingt beste Qualität (viele störende Einflussfaktoren) haben und die gesuchte Funktion f(x) sicher nicht durch alle Punkte laufen wird (wenn überhaupt durch einen einzigen). Dann kann ich das nicht wirklich als mathematisches Gleichungssystem betrachten sondern brauche eine Funktion, die mir einen Graph mit minimalen Residuen (Abweichungen von den Messpunkten) durch meine Punkte legt - oder habe ich deinen Lösungsansatz da falsch interpretiert?

Ein einfaches Beispiel, um zu verdeutlichen, was mein Problem ist:

Meine Messdaten sein:

Code:
x = [1 2 3 4 5]
y = [1 4.5 5 15 23]
.

Hierdurch soll nun eine Funktion f(x) = a*x² + 0*x + c gelegt werden. Das Ergebnis einer einfachen quadratischen Interpolation ohne meine beiden Nebenbedingungen zeigt der angehängte Plot.

Beispielplot.png
 Beschreibung:

Download
 Dateiname:  Beispielplot.png
 Dateigröße:  7.38 KB
 Heruntergeladen:  990 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2011, 11:51     Titel:
  Antworten mit Zitat      
Hallo,

bei Regression jeglicher Art ist es meist so, dass das Gleichungssystem überbestimmt ist, d.h. mehr Gleichungen als Unbekannte und daher keine exakten Lösungen. Der \ - Operator löst solche Gleichungssysteme automatisch so, dass die Summe der Quadrate der Residuen minimiert wird. Probiers doch einfach mal aus Smile

Insbesondere solltest du mit meiner Methode (ohne Nebenbedingungen) dieselben oder zumindest vergleichbare Ergebnisse bekommen wie von polyfit - nur wahrscheinlich schneller.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Matt Lappen
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 23.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2011, 11:59     Titel:
  Antworten mit Zitat      
Hi,
Hier mal mein Standard-Ansatz für Probleme derart.
das 'Schätzen' von Polynomen ist ein Least-Square-Problem, welches sich mit Matlab einfach berechnen lässt.
Nehmen wir an, wir haben folgende Daten:
Code:
x=[1:100]';
y=sort(rand(100,1));

Du Möchtest ein Poynom, welches eine Eingangsgröße hat, die Terme 2. und 3. Ordnung enthält. Definiere hierfür das Model für die gewünschten Terme (Matlab-Hilfe für x2fx() gibt Aufschluss) und bilde die Designmatrix:
Code:
model=[2;3];
X=x2fx(x,model);    %Designmatrix für [x^2 x^3]

Die Parameterschätzung lautet nun:
Code:
b=(X'*X)\X'*y;       %Least-Square-Schätzung der Parameter    

b enthält die Koeffizienten der Terme, wie in model ( [2.Ordnung, 3.Ordnung]) definiert. Berechnen kannst du das Modell auf zwei Arten:
Code:
yhat1=X*b;            %Berechnung der Ausgangswerte
%Alternativ mit Polyval berechnen
yhat2=polyval([fliplr(b') 0 0],x);

Ich hoffe das ist verständlich, das ganze entspricht auch Haralds-Lösung. Die Darstellung hier ist nur etwas 'aufgerollt', um es verständlich darzustellen.
Gruß,
Matt
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2011, 12:05     Titel:
  Antworten mit Zitat      
Hallo Matt,

die Least-Square - Schätzung kannst du weglassen, da der \ - Operator das automatisch macht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Matt Lappen
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 23.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2011, 12:14     Titel:
  Antworten mit Zitat      
Hey Harald,
was meinst du mit 'weglassen'?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2011, 12:25     Titel:
  Antworten mit Zitat      
Hallo,

ich meine damit, dass man das Gleichungssystem, auch wenn es überbestimmt ist, weiterhin direkt mit \ lösen kann. Beispiel:

Code:
A = rand(100,10); b = rand(100,1);
tic; x1 = A \ b; toc
tic; x2 = (A'*A)\A'*b; toc
max(abs(x1-x2))

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Matt Lappen
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 23.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2011, 12:48     Titel:
  Antworten mit Zitat      
Tatsache, hatte ich so gar nicht auf'm Schirm. Besten Dank für den Tipp.
Private Nachricht senden Benutzer-Profile anzeigen
 
Flash
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 28.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2011, 13:51     Titel:
  Antworten mit Zitat      
Code:
x = [1 2 3 4 5]';
y = [1 4.5 5 15 23]';
p = [x.^2 ones(size(x))] \ y;
x2 = 0:0.1:5;
y2 = .9238 * x2.^2 - .4618;


Funktioniert! Danke euch beiden! Very Happy

Zitat:
Der \ - Operator löst solche Gleichungssysteme automatisch so, dass die Summe der Quadrate der Residuen minimiert wird.

Das war mir nicht bekannt, deshlab meine Rückfrage. Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.