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:
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
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.
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;
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')
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
Einstellungen und Berechtigungen
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
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.