本次实验使用了课本某站15年6-8月降水量资料和长江中下游近30年5月平均降水量资料。将原始资料处理为距平序列。
根据公式:
r ( τ ) = 1 n − τ ∑ i = 1 n − τ ( x i − x ˉ ) ( x i + τ − x ˉ ) 1 n ∑ i = 1 n ( x i − x ˉ ) 2 r(\tau)=\frac{\frac{1}{n-\tau}\sum\limits_{i=1}^{n-\tau}(x_i-\bar{x})(x_{i+\tau}-\bar{x})}{\frac{1}{n}\sum\limits_{i=1}^{n}(x_i-\bar{x})^2} r(τ)=n1i=1∑n(xi−xˉ)2n−τ1i=1∑n−τ(xi−xˉ)(xi+τ−xˉ)
分别计算 r ( τ ) r(\tau) r(τ)(其中,一般取 τ ⩽ n 2 \tau\leqslant\frac{n}{2} τ⩽2n),并选出 ∣ r ( τ ) ∣ \left\vert r(\tau)\right\vert ∣r(τ)∣较大者所对应前期时刻的要素变量作为因子。
假设发现有 n − k , n − l , n − m n-k,n-l,n-m n−k,n−l,n−m三个时间间隔的 ∣ r ( τ ) ∣ \left\vert r(\tau)\right\vert ∣r(τ)∣较其他值大得多,则取这三个前期变量作为因子,建立自回归方程:
x ^ d , n = b k x d , n − k + b l x d , n − l + b m x d , n − m \hat{x}_{d,n}=b_kx_{d,n-k}+b_lx_{d,n-l}+b_mx_{d,n-m} x^d,n=bkxd,n−k+blxd,n−l+bmxd,n−m
仿照多元线性回归求偏回归系数的方法,得到求解自回归系数的正规方程组为:
{ b k R ( k − k ) + b l R ( k − l ) + b m R ( k − m ) = R ( k ) b k R ( l − k ) + b l R ( l − l ) + b m R ( l − m ) = R ( k ) b k R ( m − k ) + b l R ( m − l ) + b m R ( m − m ) = R ( k ) \begin{cases} b_kR(k-k)+b_lR(k-l)+b_mR(k-m)=R(k)\\ b_kR(l-k)+b_lR(l-l)+b_mR(l-m)=R(k)\\ b_kR(m-k)+b_lR(m-l)+b_mR(m-m)=R(k) \end{cases} ⎩⎪⎨⎪⎧bkR(k−k)+blR(k−l)+bmR(k−m)=R(k)bkR(l−k)+blR(l−l)+bmR(l−m)=R(k)bkR(m−k)+blR(m−l)+bmR(m−m)=R(k)
最终可解出系数,建立自回归预报方程。
从图中可发现,计算结果比实测值要更接近于总体平均,即计算振幅比实际要小。趋势上总体保持了一致,但振幅偏小,且在某些区间出现了不同的偏离特征。总的来说,趋势预报的效果较好,但对于量值定量预报效果较差。
这是由于自回归方程是以最小二乘法为基础的,在正态平稳假设下,方程的计算值是在各因子出现在某一数值条件下预报对象的条件期望值;另一方面,由于有平稳遍历性假设,因此该法不能预报出特大值和特小值,虽然是定量计算,但也只能作为趋势预报使用效果较好。
clear all
a = 'YRV_JUN.dat';
fid=fopen(a);
X=fread(fid,[30 1],'float32');
fclose(fid);
x = X-mean(X);
x=[-5,-10,-10,-2,9,3,3,-1,-17,-13,-9,19,19,3,11];
ave = mean(x);
Dx=mean(((x-ave).^2));
n=length(x);
for tao = 1:floor(n/2)
sum = 0;
for i = 1:(n-tao)
sum = sum + (x(i)-ave)*(x(i+tao)-ave);
end
r(tao)=sum/((n-tao)*Dx);
end
[B,I]=sort(abs(r),'descend');
I=num2cell(sort(I(1:3)));
[k l m]=deal(I{1:3});
A=[1,r(abs(k-l)),r(abs(k-m));
r(abs(l-k)),1,r(abs(l-m));
r(abs(m-k)),r(abs(m-l)),1];
B=[r(k);r(l);r(m)];
b=A\B;
for i = m+1:n
x_pie(i)=b(1)*x(i-k)+b(2)*x(i-l)+b(3)*x(i-m);
t(i)=i;
end
plot(t(m+1:end),x(m+1:end),'-','LineWidth',2);
hold on
plot(t(m+1:end),x_pie(m+1:end),'--','LineWidth',2);
ax = gca;
ax.XAxisLocation = 'origin';
ax.YAxisLocation = 'origin';
ax.Box = 'off';
legend('实际值','计算值')
xlabel('序号');ylabel('x');
参考资料:
《统计天气预报原理与方法》孔玉寿 钱建明 臧增亮 编著