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

Warnung bei polyfit (Polynomial is badly conditioned)

 

flohaase
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 23.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2015, 17:08     Titel: Warnung bei polyfit (Polynomial is badly conditioned)
  Antworten mit Zitat      
Hallo zusammen,

ich habe mir aus Ausgangsspannung simuliert und ein Rauschen drüber gelegt:

Code:
x = 0:0.001:10;
y1 = 4*sin(x) + sin(1.3*x) + 0.9*sin(4.2*x) + 0.21*randn(1, 10001);


Nun will ich mir ein Polynom erstellen lassen, das meiner Ausgangsspannung möglichst nahe kommt:

Code:
p2 = polyfit(x, y1, 20); % Polynom 20. Grades erstellen
y2 = polyval(p2, x);


Über den Grad habe ich mir noch nicht so viele Gedanken gemacht außer: Wenig niedriger desto ungenauer, aber auch weniger rechenintensiv.

Nun bekomme ich folgende Fehlermeldung:

Code:
Warning: Polynomial is badly conditioned. Add points with distinct X values, reduce the degree of the polynomial, or try centering and scaling as described in HELP POLYFIT.


Grob übersetzt heißt das, dass die Bedingungen schlecht gewählt sind und ich für X verschiedene, individuelle Punkte wählen soll.

Leider wirft die Hilfe noch mehr Fragen auf als sie beantwortet.

Weis einer weiter?

Danke und beste Grüße
Flo
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.03.2015, 17:22     Titel:
  Antworten mit Zitat      
warum versuchst du eine sinus schwingung mit einem polynom zu fitten?
je höher der grad ist desdo mehr punkte kann man fitten. allerdings neigen hochgradige polynome schnell zum überschlagen. außerdem hast du dann x^20 und deine funktionswerte gehen bis 6 vielleicht. um mit 10^20 wieder auf 6 zu kommen müssen die koeffizienten entweder sehr klein sein oder stark alternieren. ich weis nicht ob das zielführend ist.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.03.2015, 23:14     Titel: Re: Warnung bei polyfit (Polynomial is badly conditioned)
  Antworten mit Zitat      
Hallo flohaase,

Hast Du schon die Dokumentation von POLYFIT gelesen? Dort wird erklärt, wie man die Werte so skaliert, dass das Problem besser konditioniert ist. Alles, was man tun muss, ist die beiden Outputs S und Mu ebenfalls definieren:

Code:
x = 0:0.001:10;
y1 = 4*sin(x) + sin(1.3*x) + 0.9*sin(4.2*x) + 0.21*randn(1, 10001);
[p2, S, Mu] = polyfit(x, y1, 20);

S und Mu müssen dann in POLYVAL auch wieder mit angegeben werden.

Gruß, Jan

Zuletzt bearbeitet von Jan S am 10.03.2015, 11:53, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
flohaase
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 23.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2015, 10:11     Titel: Re: Warnung bei polyfit (Polynomial is badly conditioned)
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
warum versuchst du eine sinus schwingung mit einem polynom zu fitten?
je höher der grad ist desdo mehr punkte kann man fitten. allerdings neigen hochgradige polynome schnell zum überschlagen. außerdem hast du dann x^20 und deine funktionswerte gehen bis 6 vielleicht.


Weil ich noch keine Messdaten habe, habe ich sie selber generiert, daher die sin-Funktion. In der Tat hast du Recht, dass bis Fehlermeldung nicht kommt, wenn ich die nur bis zum 8. Grad gehe (habs ich händisch ausprobiert). Was bedeutet "überschlagen"?

Jan S hat Folgendes geschrieben:
Hast Du schon die Dokumentation von POLYFIT gelesen? ... Alles, was man tun muss, ist die beiden Outputs S und Mu ebenfalls definieren:

Code:
[p2, S, Mu] = polyfit(x, y1, 20);

S und Mu müssen dann in POLYVAL auch wieder mit angegeben werden.

Gruß, Jan


Gelesen schon, aber nicht verstanden. Ich werde es so ausprobieren.

Danke und beste Grüße
Flo

EDIT

Also ich habe die weiteren Parameter jetzt eingefügt. Jetzt kommt die Fehler bis zum 23. Grad nicht. Kann mir bitte kurz einer erklären, was genau die Funktionen polyfit und polyval machen?

Mein Versuch:

Polyfit: Macht aus einer beliebig verlaufenden Kurve eine Polynom bzw. die Koeffizieten, also n Zahlen. Was macht dann polyval?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.03.2015, 10:31     Titel:
  Antworten mit Zitat      
Zitat:
Was macht dann polyval?

Zitat:
y = polyval(p,x) returns the value of a polynomial of degree n evaluated at x.

oder auch
Code:

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.03.2015, 11:58     Titel: Re: Warnung bei polyfit (Polynomial is badly conditioned)
  Antworten mit Zitat      
Hallo flohaase,

POLYFIT bestimmt die Koeffizienten des Polynoms, das in Sinne der kleinesten Fehler-Quadrate die Messwerte annähert.
POLYVAL gibt für dieses Polynom Y-Werte zu den gegebenen X-Werten aus.

Für die Berechnungen in POLYFIT muss ein Gleichungssystem gelöst werden. Wenn die X-Werte zu groß sind und nicht gleichmäßig um 0 verteilt, wirde dieses Gleichungssystem schlecht konditioniert, lässt sich also nur noch mit sehr großen Fehlern lösen. Wenn die beiden zusätzlichen Outputs genutzt werden, skaliert POLYFIT die X-Werte so, dass der Mittelwert bei 0 liegt und die Standard-Abweichung (oder Maximum, oder wie auch immer) bei 1 liegt (2 oder 5 wäre auf kein Problem). Dazu werden also ein Wert von den X-Werten abgezogen und das Ergebnis multipliziert. In POLYVAL wird dann das gleiche umgekehrt mit den X-Werten aus dem Input gemacht.

Gruß, Jan
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.