2017-04-18 4 views
1

Ich habe meine Daten in Arrays, die exponentiell wie e^(ax + c) + d sind. Ich versuche, einen Anfall zu ihnen zu ziehen.Exponentielle Anpassung für Matlab

a = data1 (:,1); 
b = data1 (:,2); 
log(b); 
p = polyfit (a,log(b),1); 

Aber ich weiß nicht, was ich jetzt tun soll. Ich fand eine Gleichung von polyfit und ich hatte gehofft, dass die exponentielle der Gleichung nehmen ich von polyfit bekam mit

exp (0.5632x+2.435) 

Aber ich herausgefunden, dass es nicht so funktioniert. Hat jemand irgendwelche Vorschläge?

Antwort

1

versuchen mit nichtlinearen Anpassung:

%% PARAMETERS (you need this part) 
clear all; 
clc, clf; 

N  = 128; % number of datapoints 
Nint  = N*10; % number of datapoints for curve interpolation 
fun  = @(prms,x) prms(4).^(prms(1)*x+prms(2))+prms(3); % write your function 
iniPrm = rand(4,1); % find some initial values for the parameters (choose meaningful values for better results) 

%% SIMULATE DATA (this is only for testing purposes) 
SNR  = .01; % signal to noise ratio for simulated data 
noise = (rand(1,N)-.5)*SNR; % create some random noise 
x  = linspace(0,10,N); % create the x axis 
y  = fun(iniPrm,x) + noise; % simulate a dataset that follows the given function 
x  = x(:); % reshape as a vector 
y  = y(:); % reshape as a vector 
X  = linspace(x(1),x(end),Nint); % interpolate the output to plot it smoothly 
plot(x,y,'.r','markersize',10); hold on; % plot the dataset 
%% FIT AND INTERPOLATE YOUR MODEL 
[out.BETA,out.RESID,out.J,out.COVB,out.MSE] = nlinfit(x,y,fun,iniPrm,[]); % model your data 
[out.YPRED,out.DELTA] = nlpredci(fun,X,out.BETA,out.RESID,'Covar',out.COVB); % interpolate your model 
out.YPREDLOWCI   = out.YPRED - out.DELTA; % find lower confidence intervals of your fitting 
out.YPREDUPCI   = out.YPRED + out.DELTA; % find upper confidence intervals of your fitting 
out.X     = X; % store the interpolated X 
%% PLOT FITTING 
plotCI = @(IO,spec) patch([IO.X(:);flipud(IO.X(:))],[IO.YPREDLOWCI(:);flipud(IO.YPREDUPCI(:))],spec{:}); % create patches: IE: patch(0:10,10:-1:0,ones(10,1)-1,1,{'r','facealpha',0.2}) 
plot(X,out.YPRED,'-b','linewidth',3); 
plotCI(out,{'r','facealpha',.3,'edgealpha',0}) 
Verwandte Themen