WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Annäherung einer Messreihe mit einer e-Funktion

 

Fred

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2008, 12:52     Titel: Annäherung einer Messreihe mit einer e-Funktion
  Antworten mit Zitat      
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?


steffi
Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 07.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2008, 15:59     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Fred

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2008, 19:01     Titel:
  Antworten mit Zitat      
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.
 
steffi
Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 07.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2008, 07:33     Titel:
  Antworten mit Zitat      
Die Daten, die du gepostet hast, nähern sich jetzt auch vielleicht nicht so unbedingt der e-Funktion an....

In MATLAB kannst du über das Curve Fitting Tool versuchen:
Code:

Wobei das verwandte Modell das gleiche ist wie in Excel. Es gibt aber ein zweites Exponentialmodell, vielleicht passt das besser....

Viel Erfolg
_________________

Wenn ich bei der Arbeit mit Computern eins gelernt habe dann das ich einem Computer nur soweit traue wie ich ihn werfen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 06.08.2008, 08:20     Titel:
  Antworten mit Zitat      
Moin,

@steffi: cftool gibts nur zusammen mit der Curve Fitting Toolbox...

@Fred:
Ich hab mal ein wenig rumprobiert, auf Grundlage meiner Erfahrungen im Studium:
Code:

function fitte_die_kurve

daten = [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];

t = daten(:,1);
y = daten(:,2);

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);

end
 

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
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
steffi
Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 07.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2008, 08:27     Titel:
  Antworten mit Zitat      
@Steve: hast natürlich recht, du bist nicht umsonst 'Meister'... Ich merk immer erst zu Hause wie gut mein Arbeitsplatz ausgestattet ist Wink
_________________

Wenn ich bei der Arbeit mit Computern eins gelernt habe dann das ich einem Computer nur soweit traue wie ich ihn werfen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 06.08.2008, 08:47     Titel:
  Antworten mit Zitat      
So, ich hab es jetzt auch mal mit dem cftool probiert (es geht wirklich nichts über top ausgestattete Unis Wink)

Ergebnis: Die Gleichung müsste a*exp(b*x) + c*exp(d*x) mit a=4.144*10^-9, b=29.34, c=6.092 und d=3.856 lauten.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Fred

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2008, 20:53     Titel:
  Antworten mit Zitat      
Der plot sieht ja schon mal ganz gut aus, danke! Kann man sich jetzt auch die Formel bzw. die Variablen anzeigen lassen?
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 06.08.2008, 21:51     Titel:
  Antworten mit Zitat      
Hi,

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.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
jaepen
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 13.04.09
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 23.04.2009, 10:39     Titel:
  Antworten mit Zitat      
steve hat Folgendes geschrieben:
Moin,

@steffi: cftool gibts nur zusammen mit der Curve Fitting Toolbox...

@Fred:
Ich hab mal ein wenig rumprobiert, auf Grundlage meiner Erfahrungen im Studium:
Code:

function fitte_die_kurve

daten = [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];

t = daten(:,1);
y = daten(:,2);

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);

end
 

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??

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
mind83
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 11.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.04.2009, 15:03     Titel:
  Antworten mit Zitat      
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)

Goodness of fit:
SSE: 1.161e+004
R-square: 0.9599
Adjusted R-square: 0.9199
RMSE: 62.21


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?

Auswertung_Messreihe1 (cftool)_1.rar
 Beschreibung:

Download
 Dateiname:  Auswertung_Messreihe1 (cftool)_1.rar
 Dateigröße:  5.82 KB
 Heruntergeladen:  734 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
RMSE

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2016, 16:04     Titel:
  Antworten mit Zitat      
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.
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.