2017-04-18 3 views
1

나는 지수가 e^(ax + c) + d 인 배열에 데이터를 가지고 있습니다. 나는 그들에게 맞는 것을 그리려고 노력하고있다.matlab에 대한 지수 피팅

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

하지만 지금 어떻게해야할지 모르겠다. 나는 polyfit하여 방정식을 발견하고 나는

exp (0.5632x+2.435) 

와 polyfit에서 내가 가진 방정식의 지수를 취할 기대했다하지만 난 그런 식으로 작동하지 않는 것을 알아 냈다. 누구든지 어떤 제안이 있습니까?

답변

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