Verfasst am: 28.04.2009, 10:29
Titel: Koeffizienten mit der cftoolbox für Funktionen bestimmen
Hallo zusammen,
ich probiere schon seit ein paar Tagen die Koeffizienten die mir das cftool berechnet herauszubekommen.
Im Endeffekt benötige ich das um eine Wachstumsprozess beschreiben zu können.
im Moment bin ich bei diesem Programmcode angelangt
das Ergebnis, das mir vom cftool geliefert wird, ist in der Visualisierung genau das was ich brauche. Das beste Ergebnis wird mir bei exponentiellem Fitting geliefert.
Hier mein Code:
Code:
x=[01246810];
y=[0-106.693270000000-206.664010000000-348.174410000000... -403.579730000000-621.608620000000-495.334410000000];
f_ = clf;
figure(f_);
set(f_,'Units','Pixels','Position',[445242688486]);
legh_ = []; legt_ = {}; % handles and text for legend
xlim_ = [Inf -Inf]; % limits of x axis
ax_ = axes;
set(ax_,'Units','normalized','OuterPosition',[0011]);
set(ax_,'Box','on');
axes(ax_);
hold on;
% --- Plot data originally in dataset "Ablationstiefe vs. Pulsanzahl Messreihe 1"
x = x(:)
y = y(:)
h_ = line(x,y,'Parent',ax_,'Color',[100],...
'LineStyle','none', 'LineWidth',2,...
'Marker','square', 'MarkerSize',6);
xlim_(1) = min(xlim_(1),min(x));
xlim_(2) = max(xlim_(2),max(x));
legh_(end+1) = h_;
legt_{end+1} = 'original Werte';
% --- Create fit "Exponential (Robust: LAR, Algo: Trust-Region)"
fo_ = fitoptions('method','NonlinearLeastSquares','Robust','LAR',...
'MaxFunEvals',10000,'MaxIter',10000);
ok_ = isfinite(x) & isfinite(y);
if ~all( ok_ ) warning( 'GenerateMFile:IgnoringNansAndInfs', ...
'Ignoring NaNs and Infs in data' );
end
st_ = [-382.24438889714349-0.0473519847695289890-0.047351984769528989];
set(fo_,'Startpoint',st_);
cflibhelp exponential
ft_ = fittype('exp2');
%ft_ = fittype({'a*exp(b*x)+c*exp(d*x)'},'coefficients',{'a','c'})
%ft_ = fittype('a*exp(b*x)+c*exp(d*x)');
% Fit this model using new data
%cf_ = cfit(Pulsanzahl(ok_),Abaltionstiefe(ok_),ft_,fo_);
General model Exp2:
cf_(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)
und
coeffnames(cf_)
coeffvalues(cf_)
liefert
ans =
'a'
'b'
'c'
'd'
ans =
1.0e+006 *
1.7889 -0.0000 -1.7889 -0.0000
Koeffizienten a und b stimmen bei beiden Varianten überein c und d jedoch nicht
Letztendlich möchte ich für cf_(x) = a*exp(b*x) + c*exp(d*x), a, b, c und d bestimmen können und somit für beliebige x Werte die gleiche Funktion herausbekommen, die mir visuell auch ausgegeben wird.
Mit den oben gelieferten Werten für a, b, c und d kann ich jedoch nicht die im Graph ausgegebenen Werte mit cf_(x) = a*exp(b*x) + c*exp(d*x) berechnen????
und genau das verstehe ich nicht.
Berechnet habe ich es einmal in Matlab und einmal in Excel beide liefern mir die gleichen Ergebnisse jedoch passen sie nicht zum Graph.
ich habe auch schon andere Fittings programmiert z.b mit ezyfit oder mit lsqcurvefit jedoch sind die Ergebnisse eher schlecht, da ich vor allem die initialen Parameter für a, b, c und d nicht wirklich angeben kann.
Die Ausgabe der Koeffizienten in dem Beispiel mit COEFFVALUES ist korrekt. Die Anzeige ist an der Stelle nur verwirrend, da die Koeffizienten sehr unterschiedliche Grössenordnung haben. Beweis?
Code:
coeffnames(cf_) format long
test=coeffvalues(cf_)
test(1)
test(2)
test(3)
test(4)
mein Fehler du hast Recht
habe wohl den Wald vor lauter Bäumen nicht gesehen!
aber danke für deinen schnellen Denkanstoß!
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.