Verfasst am: 10.10.2016, 16:32
Titel: curve fit funktion verwenden
Hallo beisammen,
Ich sitze zurzeit an einem Problem das ungefähr so aussieht, ich eine gemessene Sinusspannung approximieren muss um die Maximal und Minimalwerte und den Nulldurchgang herauszufinden. Ich dachte mir ich kann das ganz einfach mit curve fit machen, das haut auch wunderbar hin, aber ich kann die Funktion die ich mit dem fit bekomme nun nicht weiter verwenden. (Heißt ableiten um Extrema und Wendepunkt zu bekommen)
wie mach ich das?
Ich habe hier bereits gefunden wie man den fit in den workspace kopiert. Wenn ich aber dann differentiate(sinefunktion,x) eingebe (wobei ich x= syms x gesetzt habe) gibts mir einen falschen Wert aus.
Leider nicht, aber ich kann genauer beschreiben was ich gemacht habe:
Zuerst habe ich aus einer Tabelle mit xlsread und reshape meinen Spannungs- und Zeitvektor (T,U) ausgelesen, dann cftool(T,U) und Sum of Sine im curve fit mit je nachdem 2-4 Termen, gegebenenfalls Fourier aber das ist hier nicht das Thema. Dann bei "Fit", Save to Workspace mit dem Namen "Sinefunction".
Und nun kommt das eigentliche Problem: Ich dachte mir es ginge auf dem einfachen Weg mit x=syms x und solve(differentiate(Sinefunction,x)=0) oder auch mit zwei "==" aber das funktioniert nicht. Auch nicht mit " solve('...') " oder diff anstatt differentiate. Ich möchte einfach auf die gefittete Funktion als Funktion mit einer Variable x zugreifen.
function[ ye, yn ] = AbleitungsNst( T,U ) % Fittype bestimmen syms x;
f=fittype('a*sin(b*x)');
% Fit bestimmen
fit1=fit(T,U,f,'StartPoint',[T(1) U(1)]);
% Ableitungen berechnen in Abhängigkeit von x [d1, d2]=differentiate(fit1,x);
% Nullstellen des Fits berechnen
ye=solve('d1=0',x); % Soll Extrema ausgeben.
yn=solve('d2=0',x); % Soll Nst ausgeben, da die 2. Ableitung = 0 die Nst des Fits end
Also das erste sieht ganz gut aus, falls es denn auch mit den fits geht.
Das mit diff funktioniert leider nicht, da die Nullstellen nur im Fit sind und nicht in den Daten selbst... ich suche also die Approximierten Nullstellen.
das mit diff() geht auch mit dem fit! Man kann sich doch in der fit-Funktion die Werte für die Parameter a und b zurückgeben lassen, plote doch einfach dann deine fit-Funktion und wende darauf diff an. Ist vielleicht etwas umständlich aber gehen müsste es.
Das mit dem "ist vielleicht etwas umständlich" ist genau das Problem!
Ich möchte das nämlich tatsächlich als Funktion schreiben da ich nämlich ca 1000 solcher Kurven zu analysieren habe.
Gibt es keine Möglichkeit meinen Fit abzuleiten und so die Extrema/Nullstellen zu finden, das wäre mathematisch so einfach... aber nicht zu coden offensichtlich!
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.