2017-04-18 17 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}) 
関連する問題