aus einer Simulation erhalte ich Kurvenverläufe in denen kleine Artefakte vorhanden sind. Zum besseren Verständnis habe ich einen Plot angehängt. Ich würde diese Kurve gerne glätten, bin mir aber nicht ganz sicher, was hier der beste bzw. einfachste Weg ist.
Momentan interpoliere ich kubisch mit "interp1". Bei einem Interpolations-X-Vektor mit kleiner Schrittweite, bleibt der Ausreißer aber natürlich bestehen. Eine andere Idee wäre wohl den Mittelwert aus einer vorgegeben Anzahl benachbarter Werte zu bilden. Hier bin ich mir aber etwas unsicher bezüglich einer geeigneten Umsetzung in Matlab.
Daher die Frage, ob es noch andere Möglichkeiten gibt oder Matlab evtl. fertige Funktionen für mein Anliegen anbietet.
Etwas Unterstützung würde mir sehr helfen. Daher im Vorfeld schonmal vielen Dank dafür und viele Grüße!!
Hierdurch erhalte ich eine geglättete Kurve ohne Ausreißer, die ausreichend genau mit dem ursprünglichen Verlauf übereinstimmt. Allerdings erscheint noch folgende Warnung:
"Warning: Equation is badly conditioned. Remove repeated data points or try centering and scaling."
Hat jemand eine Idee was ich ändern bzw. anpassen muss, um dieser Warnung gerecht zu werden?
dein x-vektor enthält anscheinend einige werte doppelt, er sollte normalerweise monoton steigend sein und jeder wert nur einmal vorkommen, d.h. z.B. x=[1 2 3 4 5] und nicht x=[1 2 2 3 4 5]. entferne die doppelten punkte und die warnung verschwindet, gruß
Hierbei sind [xwerte,ywerte] meine ursprünglichen Daten mit xmax als maximalen Wert auf der x-Achse. Eigentlich können doch dann keine doppelten x-Werte vorhanden sein, oder habe ich da noch einen Denkfehler?
Habe jetzt auch mal deinen Tipp befolgt und das ganze mit "polyfit" versucht:
die zeilen die du gepostet hast, sehen auf anhieb richtig aus; der fehler muss an einer anderen stelle sein. wie sehen die messdaten und der fit den anschließend aus?
die beiden Vektoren sind gleich lang. Und auch das Weglassen von 'spline' führt zum selben falschen Ergebnis. Um auszuschließen, dass es an der Interpolation liegt, habe ich "polyfit" mal mit den ursprünglichen Messdaten aufgerufen. Auch das funktioniert nicht.. Meine Messdaten kann ich leider nicht hochladen, da das csv-Format nicht unterstützt wird.
kein offensichtlicher fehler dabei, ich gehe davon aus, dass es daran liegt, dass deine x- und y- werte soweit auseinander liegen, x liegt im bereich von 1e3 und y im bereich von 1e-1; aufgrund der hohen abweichung ist das ausgleichsproblem schlecht konditioniert. die empfehlung von matlab ist, die werte zu skalieren, damit sie ungefähr die gleiche dimension haben. ich habe dein programm jetzt mal mit meinem üblichen lösungsweg angepasst; für approximationsaufgaben nutze ich i.d.r.
csaps
. dabei ist lambda ein glättungsparameter im bereich von 0 bis 1 über den du den glattheitsgrad einstellen kannst, gruß
eine Frage hätte ich dann doch noch.. rein aus Interesse habe ich zur Skalierung mal in meiner Variante den x-Vektor durch 1000 geteilt, so dass die x- und y-Werte jetzt näher beieinander liegen.. erhalte aber immer noch die gleich Fehlermeldung bei der "fit-Variante".
Habe dann mit dem gleichen x-Vektor (durch 1000 geteilt) nochmal deine Variante durchlaufen lassen.. komischerweise funktioniert die dann auch nicht mehr.. kriege als Ergebnis einen nahezu linearen Verlauf, wobei das Ganze auch sehr empfindlich auf eine Änderung von Lambda reagiert..
gute beobachtung, passt zu dem theoretischen hintergrund von csaps; der geglättete verlauf kann z.t. sehr empflindlich auf änderungen von lambda reagieren. wie man lambda richitg wählt, kann niemand sagen und es gibt auch keinen algorithmus dazu, der lambda in einer art und weise "richtig " oder "optimal" berechnet. man legt lambda durch "ausprobieren" und "experimentieren" fest. zu dem skalierungsproblem, bin mir nicht sicher, ob einfaches teilen durch 1000 ausreicht, um die kondition zu verbessern, da müsste man sich nochmal genauer mit der theorie auseinandersetzten.
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.