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

Probleme mit Curvefitting

 

redeemer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2009, 17:34     Titel: Probleme mit Curvefitting
  Antworten mit Zitat      
Hallo erstmal,
erstmal muss ich erwähnen dass ich ein absoluter Matlab Nooby bin und nun habe ich auch noch die Aufgabe, die zwei unbekannten A und B der Formel p=A*e^(B/T) herauszufinden (wohl über Annäherung). Dazu steht mir eine Tabelle mit p's und T's zur Verfügung.
Code:

T=[273,278,283,288,293,298];
p=[0.6,0.9066,1.2132,1.7332,2.3198,3.1997];
 


Ich habe jetzt versucht über Curve Fitting Tool (das ja ein Interface hat) anzunähern (mit Gauss Newton), was eigentlich auch echt gut geklappt hat. Ich wollte dann das Ganze exportieren (Generating m-File) weil ich es in Skript brauche, aber nun funktioniert es nicht im Command Fenster. Letztlich ist es meine Aufgabe A und B auszulesen und dann den Graphen für die herausgefundenen Werte zu plotten (was eigentlich nicht das Problem sein sollte). Nun mal der Code aus der m-file (der bei mir im Command Window keinen Graphen plottet):
function fit44(T,p)

Code:

%FIT44    Create plot of datasets and fits
%   FIT44(T,P)
%   Creates a plot, similar to the plot in the main curve fitting
%   window, using the data that you provide as input.  You can
%   apply this function to the same data you used with cftool
%   or with different data.  You may want to edit the function to
%   customize the code and this help message.
%
%   Number of datasets:  1
%   Number of fits:  1

 
% Data from dataset "p vs. T":
%    X = T:
%    Y = p:
%    Unweighted
%
% This function was automatically generated on 10-Aug-2009 17:31:36

% Set up figure to receive datasets and fits
f_ = clf;
figure(f_);
set(f_,'Units','Pixels','Position',[685 308 680 484]);
legh_ = []; legt_ = {};   % handles and text for legend
xlim_ = [Inf -Inf];       % limits of x axis
ax_ = axes;
set(ax_,'Units','normalized','OuterPosition',[0 0 1 1]);
set(ax_,'Box','on');
axes(ax_); hold on;

 
% --- Plot data originally in dataset "p vs. T"
T = T(:);
p = p(:);
h_ = line(T,p,'Parent',ax_,'Color',[0.333333 0 0.666667],...
     'LineStyle','none', 'LineWidth',1,...
     'Marker','.', 'MarkerSize',12);
xlim_(1) = min(xlim_(1),min(T));
xlim_(2) = max(xlim_(2),max(T));
legh_(end+1) = h_;
legt_{end+1} = 'p vs. T';

% Nudge axis limits beyond data limits
if all(isfinite(xlim_))
   xlim_ = xlim_ + [-1 1] * 0.01 * diff(xlim_);
   set(ax_,'XLim',xlim_)
else
    set(ax_, 'XLim',[265, 305]);
end


% --- Create fit "fit 4"
fo_ = fitoptions('method','NonlinearLeastSquares','Algorithm','Gauss-Newton','MaxFunEvals',10000);
ok_ = isfinite(T) & isfinite(p);
if ~all( ok_ )
    warning( 'GenerateMFile:IgnoringNansAndInfs', ...
        'Ignoring NaNs and Infs in data' );
end
st_ = [1 1 ];
set(fo_,'Startpoint',st_);
ft_ = fittype('A*exp(B/T)',...
     'dependent',{'p'},'independent',{'T'},...
     'coefficients',{'A', 'B'});

% Fit this model using new data
cf_ = fit(T(ok_),p(ok_),ft_,fo_);


% Plot this fit
h_ = plot(cf_,'fit',0.95);
legend off;  % turn off legend from plot method call
set(h_(1),'Color',[1 0 0],...
     'LineStyle','-', 'LineWidth',2,...
     'Marker','none', 'MarkerSize',6);
legh_(end+1) = h_(1);
legt_{end+1} = 'fit 4';

% Done plotting data and fits.  Now finish up loose ends.
hold off;
leginfo_ = {'Orientation', 'vertical'};
h_ = legend(ax_,legh_,legt_,leginfo_{:}); % create and reposition legend
set(h_,'Units','normalized');
t_ = get(h_,'Position');
t_(1:2) = [0.167402,0.795455];
set(h_,'Interpreter','none','Position',t_);
xlabel(ax_,'');               % remove x label
ylabel(ax_,'');               % remove y label
 


Hoffe ihr könnt mir hier helfen, es ist auch noch ziemlich eilig Very Happy

Danke schon einmal
redeemer


redeemer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2009, 17:46     Titel:
  Antworten mit Zitat      
sorry, des war der falsche Code, der wars:

Code:


%FIT44    Create plot of datasets and fits
%   FIT44(T,P)
%   Creates a plot, similar to the plot in the main curve fitting
%   window, using the data that you provide as input.  You can
%   apply this function to the same data you used with cftool
%   or with different data.  You may want to edit the function to
%   customize the code and this help message.
%
%   Number of datasets:  1
%   Number of fits:  1

 
% Data from dataset "p vs. T":
%    X = T:
%    Y = p:
%    Unweighted
%
% This function was automatically generated on 10-Aug-2009 17:31:36

% Set up figure to receive datasets and fits
f_ = clf;
figure(f_);
set(f_,'Units','Pixels','Position',[685 308 680 484]);
legh_ = []; legt_ = {};   % handles and text for legend
xlim_ = [Inf -Inf];       % limits of x axis
ax_ = axes;
set(ax_,'Units','normalized','OuterPosition',[0 0 1 1]);
set(ax_,'Box','on');
axes(ax_); hold on;

 
% --- Plot data originally in dataset "p vs. T"
T = T(:);
p = p(:);
h_ = line(T,p,'Parent',ax_,'Color',[0.333333 0 0.666667],...
     'LineStyle','none', 'LineWidth',1,...
     'Marker','.', 'MarkerSize',12);
xlim_(1) = min(xlim_(1),min(T));
xlim_(2) = max(xlim_(2),max(T));
legh_(end+1) = h_;
legt_{end+1} = 'p vs. T';

% Nudge axis limits beyond data limits
if all(isfinite(xlim_))
   xlim_ = xlim_ + [-1 1] * 0.01 * diff(xlim_);
   set(ax_,'XLim',xlim_)
else
    set(ax_, 'XLim',[265, 305]);
end


% --- Create fit "fit 4"
fo_ = fitoptions('method','NonlinearLeastSquares','Algorithm','Gauss-Newton','MaxFunEvals',10000);
ok_ = isfinite(T) & isfinite(p);
if ~all( ok_ )
    warning( 'GenerateMFile:IgnoringNansAndInfs', ...
        'Ignoring NaNs and Infs in data' );
end
st_ = [1 1 ];
set(fo_,'Startpoint',st_);
ft_ = fittype('A*exp(B/T)',...
     'dependent',{'p'},'independent',{'T'},...
     'coefficients',{'A', 'B'});

% Fit this model using new data
cf_ = fit(T(ok_),p(ok_),ft_,fo_);


% Plot this fit
h_ = plot(cf_,'fit',0.95);
legend off;  % turn off legend from plot method call
set(h_(1),'Color',[1 0 0],...
     'LineStyle','-', 'LineWidth',2,...
     'Marker','none', 'MarkerSize',6);
legh_(end+1) = h_(1);
legt_{end+1} = 'fit 4';

% Done plotting data and fits.  Now finish up loose ends.
hold off;
leginfo_ = {'Orientation', 'vertical'};
h_ = legend(ax_,legh_,legt_,leginfo_{:}); % create and reposition legend
set(h_,'Units','normalized');
t_ = get(h_,'Position');
t_(1:2) = [0.167402,0.795455];
set(h_,'Interpreter','none','Position',t_);
xlabel(ax_,'');               % remove x label
ylabel(ax_,'');               % remove y label

 
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 11.08.2009, 10:48     Titel:
  Antworten mit Zitat      
Hallo,

was funktioniert nicht? Ich habe die zwei Zeilen für p und T kopiert und ausgeführt, dann den unteren Code kopiert und ausgeführt und ein nettes Bild bekommen ...

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
redeemer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2009, 05:52     Titel:
  Antworten mit Zitat      
ok des scheint bei mir jetzt auch zu funktionieren Wink jedoch habe ich nun das Problem, dass ich einen cfit brauche, weil ich sonst die Coeffizienten in meiner Gleichung nicht auslesen kann (coeffvalues). Da ich aber keine Ahnung vom Codeschreiben hab und das auch mit mehrmaligem Probieren nicht hinbekommen hab, kann evtl jemand von euch den Code so abändern, dass ich die coeffvalues auch noch auslesen kann? Dann wäre ich wirklich beruhigt Razz
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 12.08.2009, 07:43     Titel:
  Antworten mit Zitat      
Moin,

die einfachen Werte bekommst du über
Code:
cf_.A
cf_.B
allerdings ohne die Vertrauensbereiche.

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