Verfasst am: 05.08.2008, 12:52
Titel: Annäherung einer Messreihe mit einer e-Funktion
Hallo zusammen,
ich habe folgendes Problem:
Ich habe mehrere Messreihen in Excel wie z.B.:
x y
0.08 5.0
0.16 10.0
0.23 15.0
0.30 20.0
0.35 25.0
0.40 30.0
0.45 35.0
0.49 40.0
0.52 45.0
0.54 50.0
0.60 60.0
0.63 70.0
0.67 80.0
0.69 90.0
0.71 100.0
0.74 115.0
0.76 135.0
0.77 150.0
0.79 170.0
0.80 200.0
0.81 225.0
0.82 260.0
Um die Daten besser Auswerten zu können, benötige ich eine Näherungsformel. Ich denke mal dass die Form y= m*e^t angemessen ist. Die Frage ist dann, mit welcher Funktion, welchem Programm ich auf die Variablen m und t komme? Habt ihr vielleicht eine Idee?
Wenn du die Daten in Excel hast, kannst du die Excel-funktion RKP verwenden. Oder mehr "visuell" die Daten in ein ExcelDiagramm plotten, dann zusätzlich einen Trend mit in das Diagramm plotten und über "Formel anzeigen" gleichzeitig die Werte mit im Diagramm anzeigen lassen.
_________________
Wenn ich bei der Arbeit mit Computern eins gelernt habe dann das ich einem Computer nur soweit traue wie ich ihn werfen kann.
Fred
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 05.08.2008, 19:01
Titel:
Die Möglichkeiten der Trendlinie in Excel reichen aber leider nicht aus um eine vernünftige e-Funktion zu erzeugen. Deswegen würde ich das gerne in Matlab machen.
function idf = myfun(b) % p = expfit(daten);
X = [ones(size(t))exp(b*t)];
% X = [ones(size(t)) exp(b*t) t.*exp(b*t)];
a = X\y;
idf = sum(sum(y-[ones(size(t))exp(b*t)]*a).^2);
% idf = sum(sum(y-[ones(size(t)) exp(b*t) t.*exp(b*t)]*a).^2); end
B = fminsearch(@myfun,8);
X = [ones(size(t))exp(B*t)];
% X = [ones(size(t)) exp(B*t) t.*exp(B*t)];
a = X\y;
T = (0.08:.05:.83)';
plot(daten(:,1),daten(:,2),T,[ones(size(T))exp(B*T)]*a) % plot(daten(:,1),daten(:,2),T,[ones(size(T)) exp(B*T) T.*exp(B*T)]*a) legend('raw','fitted',0);
Anhand dessen kannst du sehen, dass es nicht unbedingt eine einfache e-Funktion sein muss.
Vielleicht kannst du damit ja ein wenig rumprobieren...
Modellgleichung: a0 + a1*e^(b*t)
Auskommentiert: a0 + a1*e^(b*t) + a2*t*e^(b*t)
@Steve: hast natürlich recht, du bist nicht umsonst 'Meister'... Ich merk immer erst zu Hause wie gut mein Arbeitsplatz ausgestattet ist
_________________
Wenn ich bei der Arbeit mit Computern eins gelernt habe dann das ich einem Computer nur soweit traue wie ich ihn werfen kann.
ja, das sollte gehen. Im Results Window steht das Modell mit den berechneten Werten der Parameter. Mit 'Save to Workspace' kannst Du das auch nach Matlab rausschreiben lassen.
_________________
function idf = myfun(b) % p = expfit(daten);
X = [ones(size(t))exp(b*t)];
% X = [ones(size(t)) exp(b*t) t.*exp(b*t)];
a = X\y;
idf = sum(sum(y-[ones(size(t))exp(b*t)]*a).^2);
% idf = sum(sum(y-[ones(size(t)) exp(b*t) t.*exp(b*t)]*a).^2); end
B = fminsearch(@myfun,8);
X = [ones(size(t))exp(B*t)];
% X = [ones(size(t)) exp(B*t) t.*exp(B*t)];
a = X\y;
T = (0.08:.05:.83)';
plot(daten(:,1),daten(:,2),T,[ones(size(T))exp(B*T)]*a) % plot(daten(:,1),daten(:,2),T,[ones(size(T)) exp(B*T) T.*exp(B*T)]*a) legend('raw','fitted',0);
Anhand dessen kannst du sehen, dass es nicht unbedingt eine einfache e-Funktion sein muss.
Vielleicht kannst du damit ja ein wenig rumprobieren...
Modellgleichung: a0 + a1*e^(b*t)
Auskommentiert: a0 + a1*e^(b*t) + a2*t*e^(b*t)
Gruß
Alex
Hallo
Kannst du vll ein paar Sätze dazu schreiben, wie du das gemacht hast?
Irgendwie versteh ich das nicht. Wo bzw worunter kann man das nachlesen??
Ich versuche auch im Moment einen "Wachstumsprozess" funktional zu beschreiben.
ich wollte eigentlich das cftool dafür verwenden.
Auf den ersten Blick macht das cftool auch genau das was ich mir vorstelle
Ich benutze beim Fitting den Exponential Type.
Im Result Window wird auch die ausgewählt Funktion ausgegeben und die vermeintlich berechneten Koeffizienten
General model Exp2:
f(x) = a*exp(b*x) + c*exp(d*x)
Coefficients (with 95% confidence bounds):
a = 1.789e+006 (-1.666e+014, 1.666e+014)
b = -0.09195 (-3234, 3234)
c = -1.789e+006 (-1.666e+014, 1.666e+014)
d = -0.09188 (-3233, 3233)
Mein Problem jedoch ist, dass die vom cftool berechneten und vom cftool graphisch dargestellten Werte, sich nicht mit den vom tool bestimmten Funktionskoeffizienten berechnen lassen.
Bei der Berechnung verwendet ich die angegebene Funktion
f(x) = a*exp(b*x) + c*exp(d*x)
und die ausgegebenen Funktionskoeffizienten
a = 1.789e+006
b = -0.09195
c = -1.789e+006
d = -0.09188
Für die Graphische Ausgabe müssen die Funktionswerte doch auch berechnet werden aber warum stimmen sie nicht mit denen von mir berechneten überein???
oder werden im Result Window nicht die benutzten Koeffizienten angezeigt?
Altes Thema, ich weiß. Aber vllt. stößt hier ja noch mal jmd. drauf und fragt sich das selbe.
Der RMSE Error liegt in deinem Fall bei 63! Das ist eine erhebliche Abweichung von einer perfekten Funktion, dadurch kann er dir natürlich die deine exakten Werte wiedergeben.
Gernell gilt, dass das cftool lediglich versucht eine Funktion an die Werte anzunähern, da die Werte aber meistens nicht perfekt sind, wird das cftool auch keine perfekte Funktion rausspucken, die dann die Initialwerte auch ausspuckt.
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.