Ich bin verusche vergebens eine geiegnete Funktion in meine Datenpunkte zu fitten. Die Datenpunkte haben die Form einer Funktion die gegen einen gewissen Grenzwert konvergiert. (Grenzwert ist bekannt falls das hilft)
Nun habe ich es schon mit dem von Matlab mitgelieferten power1 Typ veruscht und mit einer selbst gebastelten Funktion. Aber beide wollen nicht so richtig passen.
Hat jemand von euch eine Idee wie ich das Problem am besten angehe? Bin für jede Hilfe dankbar!
Hier die Werte zum probieren falls sie jemand braucht.
X:
1024
25344
55216
102024
192000
293888
403310
verstehe ich das richtig, dass das Problem nicht das Durchführen der Optimierung an sich, sondern viel mehr das Finden des richtigen Modells ist? Wenn ja: es ist hilfreich zu wissen, was hinter X und Y steckt. Viele Prozesse folgen bekannten Modellen. Ansonsten kann man nur völlig ins Blaue hineinraten, und was bringt schon die "perfekte" Modellfunktion, wenn man dann doch nichts damit aussagen kann?
Wenn es doch um die Durchführung geht, hier ein Beispiel, mit dem du dann geeignete Modellfunktionen testen kannst. Ich definiere immer 2 Funktionen.
1) Die Modellfunktion, von der man prüfen möchte, ob sie die Daten gut beschreibt.
2) Ein Fehlermaß, das minimiert werden soll. In dem Fall die Summe der Abstandsquadrate zwischen Ergebnis des Modells und der Vorliegenden Messung Y.
Zusätzlich brauchst du für die Optimierung mit fminsearch immer einen Startwert, von dem aus die Optimierung startet. (Mit der Curve Fitting Toolbox wird das etwas bequemer, da ich die aber nicht habe, mache ich soetwas immer direkt mit fminsearch)
Code:
X = [ 1024 25344 55216 102024 192000 293888 403310];
Y = [ 250044 292900 301343 308292 309528 310682 311646];
% ohne bekannten Grenzwert (oder als Beispiel mit 2 optimierbaren Parametern)
model1 = @(p,X) p(1)*(X./(X+p(2))); % model function Holling Type 2
e1 = @(p)sum((Y-model1(p,X)).^2); % minimiere Summe der Fehlerquadrate
p0 = [311659, 100]; % Startwert (Vektor) [p_fit, r1] = fminsearch(e1, p0); % Optimierung
figure plot(X,Y,'ko', 'markerfacecolor','black')% Daten hold on
xi = linspace(min(X), max(X),100);
plot(xi, model1(p_fit, xi), 'r-')% Kurve
% mit Grenzwert (oder als Beispiel mit 1 optimierbarem Parameter)
c = 311659;
model2 = @(p,X) c*(X./(X+p)); % model function Holling Type 2
e2 = @(p)sum((Y-model2(p,X)).^2); % minimize sum of squared errors
p0 = 200; % Startwert (Skalar) [p_fit, r2] = fminsearch(e2, p0);
plot(xi, model2(p_fit, xi), 'g-')
Wie du siehst, sind meine Ergebnisse auch nicht besonders gut. Offensichtlich ist Holling Typ 2 auch nicht die "beste" Modellfunktion, um deine Daten zu fitten. Aber ab hier kannst du alle denkbare für die Funktion einsetzen und schauen, ob etwas sinnvolles bei rum kommt.
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.