(1)预处理数据为
ln y =ln a +b*x
(2)用 polyfit 进行多项式拟合
例如
x=[1971:1990];
y=[8.5229 8.7177 8.9221 9.0859 9.2420 9.3717 9.4974 9.6259 9.7542 9.8705
10.0072 10.1654 10.3008 10.4357 10.5851 10.7507 10.9300 11.1026 11.2704
11.4333];
用上面的指数函数进行拟合
程序如下:
% % % % % % %-----------------------
x=[1971:1990];
y=[8.5229 8.7177 8.9221 9.0859 9.2420 9.3717 9.4974 9.6259 9.7542 9.8705
10.0072 10.1654 10.3008 10.4357 10.5851 10.7507 10.9300 11.1026 11.2704
11.4333];
log_y=log(y);
P=polyfit(x,log_y,1);
logy1=P(1)*x+P(2);
y1=exp(logy1);
plot(x,y,x,y1,'*')
% % % % % % %-----------------------
结果如下
1.2 包含非其次项
拟合模型为:y=a1+a2*exp(-a3*x)
现有 x=[0 1.001 1.999 3 4 5.021 6 6.995 8 9.002];
y=[15 13.869 12.515 11.514 10.647 9.895 9.244 8.679 8.189 7.764];
对其用上述非其次指数函数拟合,
使用非线性回归函数 nlinfit.程序如下:
% % % % % % %-----------------------
x=[0
1.001
1.999
3
4
5.021
6
6.995 8
9.002];
13.869
y=[15
7.764];
12.515
11.514
10.647
9.895
9.244
8.679
8.189
myfun=inline('a(1)+a(2)*exp(-a(3)*x)','a','x') ;
a = nlinfit(x,y,myfun,[15 10,1])
I=min(x):0.1:max(x);
V=a(1)+a(2)*exp(-a(3)*I);
plot(x,y,'o',I,V)
legend('Y','V')
% % % % % % %-----------------------
注意:对于 a=nlinfit(x,y,myfun,a0)中关于 a0 初始值的选取还需要斟酌!!!
选取不当可能造成拟合程度不好……
结果如下
1.3 多个指数项函数的拟合
拟合函数模型:y=a(1)*exp(a(2)*x)+a(3)*exp(a(4)*x)
程序如下:
% % % % % % %-----------------------
X=[0.490667 0.955333 1.544 1.940667 2.48 3.026667 3.966667 4.453333
5.073333 6.033333 7.04]
Y=[253.3333 381 450 503.6667 532 520 489 481.3333 459 438.3333 422]
myfun=inline('A(1)*exp(A(2)*x)+A(3)*exp(A(4)*x)','A','x')
A = nlinfit(X,Y,myfun,[700 -0.01 -700 -1 ])
I=min(X):0.1:max(X);
V=A(1)*exp(A(2)*I)+A(3)*exp(A(4)*I);
plot(X,Y,'o',I,V)
legend('Y','V')
% % % % % % %-----------------------
程序结果如下所示:
1.4 非其次项的多个指数项函数的拟合
拟合模型:y=a(1)+a(2)*exp(a(4)*x)+a(3)*exp(-a(4)*x)
% % % % % % %-----------------------
x=[10 12.5 15 17.5 20 22.5 25 27.5 30 32.5 35 37.5 40 42.5 45 47.5 50];
y=[62.1 77.3 92.5 104 112.9 121.9 125 129.4 134 138.2 142.3 143.2 144.6
147.2 147.8 149.1 150.9];
myfunc=inline('beta(1)+beta(2)*exp(beta(3)*x)+beta(4)*exp(-beta(5)*x)
','beta','x');
beta=nlinfit(x,y,myfunc,[0.5 0.5 0.5 0.5,0.5]);
a=beta(1),k1=beta(2),k2=beta(4),m=beta(4) ,n=beta(5)
xx=min(x):max(x);
yy=a+k1*exp(m*xx)+k2*exp(-n*xx);
plot(x,y,'o',xx,yy,'r')
% % % % % % %-----------------------
结果如下图所示:
由于蠕变效应,地震发生后,地表地形会发生蠕变。其蠕变曲线 (震后形变)
是可用非其次指数函数来描述。GPS 观测数据能够观测到震后形变。然而,其却
淹没在各种波动之中,其中包括固体潮,余震等。因此,需要对其进行拟合。
下面的程序读取某个文件夹下的 GPS 数据,并拟合其蠕变曲线(震后形变)。