xmin=min(xdata);
xmax=max(xdata);
xinter=xmax-xmin;
% Create a simple exponential decay model.
fun = @(x,xdata)x(1)+x(2)*exp(x(3)*xdata);
x0 = [xmax+xinter/100,xinter,xmin-xinter/100];
x = lsqcurvefit(fun,x0,xdata,ydata)
funct=lsqcurvefit(fun,x0,xdata,ydata);
xhelp=xmin:xinter/100:xmax;
y=x(1)+x(2)*exp(x(3)*xhelp) % Plot the data and the fitted curve. plot(xdata,ydata,'ko',xhelp,y,'b-')
Mit dem ersten Datensatz funktioniert der Fit, beim zweiten Datensatz knickt die Funktion ab und macht Mist.
Ich habe mycurvefit.com genutzt um die Funktion zu validieren, bei den ersten Werten werden die richtigen Koeffizienten berechnet. Bei den zweiten leider nicht mehr.
Wenn die Werte noch größer werden, schmiert die Funktion ganz ab, komme nur leider nicht dahinter, warum..
Mit dem ersten Datensatz funktioniert der Fit, beim zweiten Datensatz knickt die Funktion ab und macht Mist.
Denke daran, dass die Leser zunächst keine Ahnung haben, was Du tust. Was bedeutet "Mist machen"?
Zitat:
Ich habe mycurvefit.com genutzt um die Funktion zu validieren, bei den ersten Werten werden die richtigen Koeffizienten berechnet. Bei den zweiten leider nicht mehr.
Das heißt, dass mycurvefit.com die gleichen Ergebnisse liefert wie Matlab?
Zitat:
Wenn die Werte noch größer werden, schmiert die Funktion ganz ab, ...
Bitte poste die Daten, den Code und eine Erklärung, was genau "Abschmieren" hier bedeutet. Ist sind ja wohl doch aus mathematischer Sicht die korrekten Werte, oder denkst Du, dass Matlab sich hier verrechnet?
ist überflüssig, das habe ich vergessen herauszunehmen.
Zitat:
Zitat:
Mit dem ersten Datensatz funktioniert der Fit, beim zweiten Datensatz knickt die Funktion ab und macht Mist.
Denke daran, dass die Leser zunächst keine Ahnung haben, was Du tust. Was bedeutet "Mist machen"?
Bezüglich des Mistes, den die Funktion macht hänge ich ein Bild an.
Zitat:
Das heißt, dass mycurvefit.com die gleichen Ergebnisse liefert wie Matlab?
Korrekt. Bei dem "good data" Datensatz liefert die website die exakt selben Parameter der e-Funktion. Bei dem zweiten Datensatz nicht mehr.
Zitat:
Bitte poste die Daten, den Code und eine Erklärung, was genau "Abschmieren" hier bedeutet. Ist sind ja wohl doch aus mathematischer Sicht die korrekten Werte, oder denkst Du, dass Matlab sich hier verrechnet?
Das sich der PC, bzw Matlab verrechnet will ich nicht andeuten, ich werde schon die Funktion irgendwie falsch benutzen. Es wird halt ein nicht plausibler Kurvenverlauf ermittelt. Auch der Abgleich mit genannter Website lässt darauf schließen, dass ich bei der Nutzung der
Top, danke euch beiden!
Diese Daten müssen nun aber nicht bei niedrigen Werten beginnen.
Eine mögliche Abhilfe könnte sein, sich den niedrigsten X-Wert zu schnappen, und sowohl X und Y Werte durch diesen zu teilen, sodass eine Normierung auf 1 stattfindet.
Wenn nun die Parameter mit diesem Teiler multipliziert werden, erhält man die Parameter der Gleichung, die die originalen Messwerte beschreibt.
Ob das dann auch noch funktioniert, wenn die Y-Werte bei 10^8 beginnen und nur <10 mal vorkommen müsste getestet werden (es geht hier um Betriebsfestigkeit). Ich spreche von einem Vektor der so aussieht:
x=[ 5 10 30 100 ...]
y=[1e8 2e7 4e6 ...]
Das dafür eine abklingende e-Funktion nötig ist, ist klar, es geht ums Prinzip.
Fällt euch da eine elegantere Lösung ein?
Lieben Gruß
das Nordlicht
Zuletzt bearbeitet von Nordlicht am 19.07.2017, 21:51, insgesamt einmal bearbeitet
der Fit der e-Funktion ist an sich sehr gutartig, Startwerte sind kaum ein Problem. Du darfst halt nur nicht Startwerte wählen, für die inf herauskommt.
Hier ist das gleiche Problem, die "good data" Datensätze werden gefittet wie sie sollen, die "bad data" Datensätze resultieren in einer waagerechten Geraden.
Da die anwendungsbezogenen Datensätze noch deutlich größer werden können und auch die Differenz zwischen niedrigstem X-Wert und niedrigsten Y-Wert noch verhältnismäßig klein gewählt wurde bei dem "bad data" Datensatz, kann ich nicht einfach die Startwerte kleiner wählen.
Sollte ich mich nach einer andern Fit-Funktion umsehen oder gibts da einen cleveren Workaround?
Lieben Gruß
das Nordlicht
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.