1、时间序列 移动平均法 clc,cleary=533.8 574.6 606.9 649.8 705.1 772.0 816.4 892.7 963.9 1015.1 1102.7;m=length(y); n=4,5; %n为移动平均的项数for i=1:length(n) %由于n的取值不同,下面使用了细胞数组 for j=1:m-n(i)+1 yhati(j)=sum(y(j:j+n(i)-1)/n(i); end y12(i)=yhati(end); %提出第12月份的预测值 s(i)=sqrt(mean(y(n(i)+1:end)-yhati(1:end-1).2); %求预测的标准误
2、差endy12, s %分别显示两种方法的预测值和预测的标准误差 指数平滑 一次指数平滑 程序:clc,clearyt=load(dianqi.txt); %读取dianqi.txt的数据,n=length(yt); %求yt的长度alpha=0.2 0.5 0.8; %输入a的值m=length(alpha)yhat(1,1:m)=(yt(1)+yt(2)/2; %求第一个预测值 索引for i=2:n yhat(i,:)=alpha*yt(i-1)+(1-alpha).*yhat(i-1,:);endyhat %求预测值err=sqrt(mean(repmat(yt,1,m)-yhat).
3、2) %求预测的标准误差xlswrite(dianqi.xls,yhat) %把预测数据写到Excel文件,准备在word表格中使用yhat1988=alpha*yt(n)+(1-alpha).*yhat(n,:) %求1988的预测值 二次指数平滑 程序clc,clearyt=load(c:UsersasusDesktop剑魔fadian.txt); %原始发电总量数据以列向量的方式存放在纯文本文件中n=length(yt);alpha=0.3;st1(1)=yt(1); st2(1)=yt(1);for i=2:n st1(i)=alpha*yt(i)+(1-alpha)*st1(i-1)
4、; st2(i)=alpha*st1(i)+(1-alpha)*st2(i-1);endxlswrite(fadian.xls,st1,st2) %把数据写入表单Sheet1中的前两列at=2*st1-st2;bt=alpha/(1-alpha)*(st1-st2);yhat=at+bt; %最后的一个分量为1986年的预测值xlswrite(fadian.xls,yhat,Sheet1,C2) %把预测值写入第3列str=C,int2str(n+2); %准备写1987年预测值位置的字符串xlswrite(fadian.xls,at(n)+2*bt(n),Sheet1,str)%把1987年
5、预测值写到相应位置 yt=load(c:UsersasusDesktop剑魔fadian.txt); %原始发电总量数据以列向量的方式存放在纯文本文件中n=length(yt);alpha=0.3;st1(1)=yt(1); st2(1)=yt(1);for i=2:n st1(i)=alpha*yt(i)+(1-alpha)*st1(i-1); st2(i)=alpha*st1(i)+(1-alpha)*st2(i-1);endxlswrite(fadian.xls,st1,st2) %把数据写入表单Sheet1中的前两列at=2*st1-st2;bt=alpha/(1-alpha)*(st1-st2);yhat=at+bt; %最后的一个分量为1986年的预测值xlswrite(fadian.xls,yhat,Sheet1,C2) %把预测值写入第3列str=C,int2str(n+2); %准备写1987年预测值位置的字符串xlswrite(fadian.xls,at(n)+2*bt(n),Sheet1,str)%把1987年预测值写到相应位置