clc;
clear;
%% 绘制自定的双峰高斯曲线
A1=2;
mu1=35;
sigma1=10;
A2=3;
mu2=90;
sigma2=10;
x=0:0.1:200
y=A1*exp(-(x-mu1).^2/(2*sigma1^2))+A2*exp(-(x-mu2).^2/(2*sigma2^2))
plot(x,y,'*');
hold on
y1=fliplr(y)/fliplr(max(y));
x1=fliplr(x)/fliplr(max(x));
ymax=max(y);
%% 尝试用高斯拟合自行拟合并绘图
%fun=fittype('nA1*exp(-(x-nmu1)^2/(2*nsigma1^2))+nA2*exp(-(x-nmu2)^2/(2*nsigma2^2))')
%[cf,gof]=fit(x1(:),y1(:),fun,'Start',[]);
%% Interpolate the data
% k=1:length(x1);
% ki=linspace(1,length(x1),2000);
% xi=interp1(k,x1,ki,'linear');%一维线性插值
% yi=interp1(k,y1,ki,'linear');
% Yi=cf.nA1*exp(-(xi-cf.nmu1).^2/(2*cf.nsigma1^2))*ymax+cf.nA2*exp(-(xi-cf.nmu2).^2/(2*cf.nsigma2^2))*ymax
% plot(xi*max(x),Yi,'b');
%% 用matlab自带高斯拟合进行拟合并绘图
pop=y';
cdate=x';
ftype = fittype('Gauss2');
[f,gof,output]= fit(cdate,pop,ftype);
x1=x;
y1=y;
y2=f(x1);
plot(x1,y1,'r.',x1,y2,'k-','LineWidth',2),xlabel('t'),ylabel('f(t)');
legend('原始数据点','拟合曲线')
以上是代码,我用双高斯函数拟合时始终不能拟出两个高斯峰,但是用CTOOL里的'Gauss2'就可以拟合的非常好?
1.PNG
(32.14 KB, 下载次数: 3)
2017-4-5 12:36 上传
用GAUSS2拟合
2.PNG
(28.78 KB, 下载次数: 2)
2017-4-5 12:36 上传
用自己给的双高斯函数拟合