matlab代码,可直接复制看效果
x=[184
184.67
185.33
186
186.67
187.33
188
188.67
189.33
190
190.67
191.33
192
192.67
193.33
194
194.67
195.33
196
196.67
197.33
198
198.67
199.33
200
200.67
201.33
202
202.67
203.33
204
204.67
205.33
206
206.67
207.33
208
208.67
209.33
210
210.67
211.33
212
212.67
213.33
214
214.67
215.33
216
216.67
217.33
218
218.67
219.33
220]
y=[35.967
36.463
37.158
52.127
73.287
79.265
73.956
55.227
40.354
37.83
38.708
37.071
37.266
36.069
34.873
35.069
35.71
35.725
35.829
44.345
64.423
68.749
51.984
41.757
38.531
37.396
39.361
38.696
38.277
37.67
36.82
36.985
37.449
38.765
46.733
59.455
53.104
40.714
37.423
36.738
38.035
37.32
36.954
37.158
37.554
37.423
37.219
38.488
42.753
50.606
45.096
37.769
36.595
35.597
37.097]
% y=xd1(44:98);
% x=s(44:98);
%上面是需要拟合的数据点
y1=fliplr(y)/fliplr(max(y));
x1=fliplr(x)/fliplr(max(x));
% 上面是将数据从小到大排列,并且归一化。
ymax=max(y); %确定y 纵轴的最大值,将来复原使用。
%% Calculate coefficient 定义拟合的函数,这个函数工作在[01] 区间,参看fittype的帮助文件。
% fun=fittype('A*exp(-(x-mu)^2/(2*sigma^2))+A1*exp(-(x-mu1)^2/(2*sigma1^2))');
% fun=fittype('A*exp(-(x-mu)^2/(2*sigma^2))');
fun=fittype('gauss4');
[cf,gof]=fit(x1(:),y1(:),fun,'Start',[]);
a=coeffvalues(cf)
%求出拟合系数的结构体cf 。
%% 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');
%计算拟合后的数据(Y)同时将y的数值还原。
Yi=(a(1)*exp(-(xi-a(2)).^2/(2*a(3)^2))+a(4)*exp(-(xi-a(5)).^2/(2*a(6)^2))+a(7)*exp(-(xi-a(8)).^2/(2*a(9)^2))+a(10)*exp(-(xi-a(11)).^2/(2*a(12)^2)))*ymax;
% Yi=(a(1)*exp(-(xi-a(2)).^2/(2*a(3)^2))+a(4)*exp(-(xi-a(5)).^2/(2*a(6)^2))+a(7)*exp(-(xi-a(8)).^2/(2*a(9)^2)))*ymax;
% Yi=(a(1)*exp(-(xi-a(2)).^2/(2*a(3)^2)))*ymax;
figure(9);
%% plot data
plot(x,y,'ro'); % 原始数据
hold on
figure(10);
plot(xi*max(x),Yi,'b'); % 拟合曲线
拟合前的原始数据
拟合后的数据
第四个波峰拟合失败,还在思考中,若有朋友弄明白,望不吝赐教。