2017-04-18 101 views
1

我有我的数据在数组中,它们的指数如e ^(ax + c)+ d。我试图给他们一个合适的位置。matlab的指数拟合

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

但我不知道现在该做什么。我发现polyfit方程,我希望把我的方程从polyfit的指数与

exp (0.5632x+2.435) 

但我想通了,它不喜欢的工作。有没有人有什么建议?

回答

1

尝试用非线性拟合:

%% 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})