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

Polynom 2.Grads, robust-Fit

 

OptiOpi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2011, 09:52     Titel: Polynom 2.Grads, robust-Fit
  Antworten mit Zitat      
Hallo,

ich suche nun schon seit Tagen nach einer Lösung um meine Daten mit einem Polynom 2. Ordnung zu fitten.

Prinzipiel funktioniert das mit polyfit(x,y,n) ganz gut. So kann ich den Fit-Plot über den Scater-Plot der Messpunkte mit den Fehlerbalken legen.

Das Problem ist jetzt jedoch, dass polyfit keine Option für "robust" bietet so wie "fit()". Ausreißer sollen vernachlässigt werden. Das benötigt die option "robust".

Mit den GUI der CurveFitting Toolbox kann "robust" eingeschaltet werden - leider kann ich in dem Ergebnis-Graph aber die Feher und die Punkte nicht zuschalten.

Die Toolbox verwendet den Befehl "fit()" zum fitten. Im generierten Code findet sich das so:
Code:

fo_ = fitoptions('method','LinearLeastSquares','Robust','On');
ok_ = isfinite(x) & isfinite(y);
ft_ = fittype('poly2');

% Fit this model using new data
cf_ = fit(x(ok_),y(ok_),ft_,fo_);



Wenn ich diesen Code für den Fit jedoch in meinem Program ausführen möchte bekomme ich immer den Fehler:

??? Error using ==> subsindex
Function 'subsindex' is not defined for values of class 'fittype'.


Kann mir jemand sagen was ich falsch mache? Oder wie man fit bzw polyfit mit "robust = on" für einen Polynom 2. Grads zum laufen bringt?

Ich würde mich sehr über eine leicht verständliche Antwort freuen Wink

Besten Gruß


Harald
Forum-Meister

Forum-Meister


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

wie sieht denn dein Code letztlich aus?

Ich denke auch, dass es geschickter wäre, mit ROBUSTFIT zu arbeiten.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2011, 11:53     Titel: Polynom 2.Grads, robust-Fit
  Antworten mit Zitat      
Danke Harald,

An ROBUSTFIT() bin ich auch schon gestoßen. Leider kann ich damit aber nicht den Grad des fit-Polynoms angeben. Matlab nimmt einen linearen Verlauf an.

Bei POLYFIT() kann man den Grad angeben aber nicht die Option Robust.

Und mit FIT() sollte beides gehen. Bekomme ich aber nicht zum Laufen. Ist bestimmt nicht schwer. Aber trotz MatlabHilfe schaffe ichs nicht.

Leider habe ich noch keinen code außer dem, der in der Frage steht. Für Polyfit(ohne robust) und Robustfit(linear) schon, aber das ist im Prinzip ein Einzeiler.



LG
 
Harald
Forum-Meister

Forum-Meister


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

du brauchst bei ROBUSTFIT ja nur das Quadrat als Beobachtung hinzufügen, und schon hast du ein Polynom zweiten Grades. "Lineare Regression" bedeutet Linearität in den Parametern, aber nicht in den Beobachtungen. Insbesondere fallen Polynome unter lineare Regression.

Ich habe mal das Beispiel aus der Doku zu ROBUSTFIT entsprechend angepasst:
Code:
x = (1:10)';
y = 10 - 2*x + x.^2 + randn(10,1);
y(10) = 0;

bls = regress(y,[ones(10,1) x x.^2])

brob = robustfit([x x.^2],y)

scatter(x,y,'filled'); grid on; hold on
plot(x,bls(1)+bls(2)*x+bls(3)*x.^2,'r','LineWidth',2);
plot(x,brob(1)+brob(2)*x+brob(3)*x.^2,'g','LineWidth',2)
legend('Data','Ordinary Least Squares','Robust Regression')


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.12.2011, 10:24     Titel:
  Antworten mit Zitat      
Servus,.. ja super. Es funktioniert.

Aber verstehen tue ich es nicht. Was ist die Beobachtung? Und was passiert bei dem Audruck [x x.^2] als Laufvariable?

Vielen Dank für die Hilfe
 
Harald
Forum-Meister

Forum-Meister


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

als Beobachtung bezeichnet man in der Regression bei einem Modell y = f(x) salopp gesagt die x-Werte.
Ich könnte z.B. als Modell nehmen z = a*x + b*y + c, nur dass bei uns y = x^2 ist.
Für regress oder robustfit werden diese x-Werte in einer Matrix angeordnet. Was meinst du mit "Laufvariablen"? Davon spricht man doch eigentlich nur im Zusammenhang von Schleifen?

Grüße,
Harald
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.