我用lsqcurvefit函数和自定义的多元参数的函数拟合实验数据,但是得到的拟合曲线总是不太理想,请大侠帮偶看看是咋回事呢。
实验数据见上传的附件。
目的是拟合实验数据中第一列定义为Xdata,第六列定义为Ydata,要利用自定义的函数拟合该数据。
命令行如下:
clear
load Kopie_von_B282A070830_temp.TXT; % load experimental data
DRS=Kopie_von_B282A070830_temp;
xdata=DRS(:,1); % frequency
ydata=DRS(:,6); % eps''
% fit function
% eps2=-imag(x(1)./(1.0+(i*2*pi*xdata*x(4)).^x(2)).^x(3)+x(6)./
%(1.0+(i*2*pi*xdata*x(9)).^x(7)).^x(8))+x(5)+x(10)*1e-14./(8.8542e-12*2*pi*xdata);
eps2=inline('-imag(x(1)./(1.0+(i*2*pi*xdata*x(4)).^x(2)).^x(3)+x(6)./(1.0+(i*2*pi*xdata*x(9)).^x(7)).^x(8))+x(5)+x(10)*1e-14./(8.8542e-12*2*pi*xdata)','x','xdata');
% define parameters
deps1 = 6;
alpha1 = 0.65;
beta1 = 0.6;
tau1 = 2.8e-7;
eps2off = 0.1;
deps2 = 2.8;
alpha2 = 0.5;
beta2 = 0.5;
tau2 = 1;
sigmadc = 1.5e2;
x0=[deps1,alpha1,beta1,tau1,eps2off,deps2,alpha2,beta2,tau2,sigmadc];
% matrix of the initial value of parameters
opt=optimset('TolFun',1e-5);
[x,resnorm,residual]=lsqcurvefit(eps2,x0,xdata,ydata,[],[],opt);
eps2=-imag(x(1)./(1.0+(i*2*pi*xdata*x(4)).^x(2)).^x(3)+x(6)./...
(1.0+(i*2*pi*xdata*x(9)).^x(7)).^x(8))+x(5)+x(10)*1e-14./(8.8542e-12*2*pi*xdata);
loglog(xdata,ydata,'o',xdata,eps2,'or');
hold on
说明下,上述命令中用的初始值x0,别人用gnuplot拟合比我的效果好多了,不解ing
[此贴子已经被作者于2007-9-22 0:18:59编辑过]