资源简介
matlab风速预测程序,基于时间序列的风速预测程序
代码片段和文件信息
function main
clear;clf;clc;
load data_wind wind;y=chafeng(wind2);%x做一次差分得y
[cqcs]=fangcha(y);%求y的自,偏自相关系数存于cqcs中并画他们的序列图
%选ARMA(4,0)模型;
%[p1p2]=ARMA(62y);%求已知阶数ARMA模型的参数
[p1p2]=ARMA(60y);%求已知阶数AR模型的参数
%[p1p2]=ARMA(01y);%求已知阶数MA模型的参数
result=[];N=size(y2);%p1=[-0.0172 0.2932 0.2161 0.1603];
n=size(p11);
for k=1:n %%%%验证模型对y的符合度
result(k)=y(k);
end;
for k=n+1:N
sum1=0;
for i=1:n
sum1=sum1+p1(i)*y(k-i);
end;
result(k)=sum1;
end;
for k=1:10 %%%%对y的预测
sum1=0;
for i=1:n
sum1=sum1+p1(i)*result(k+N-i);
end;
result(k+N)=sum1;
end;
% subplot(223);plot(y);hold on;
plot(result‘r‘);title(‘一次差分‘);%%%画图
result1(1)=wind(1);
for k=2:N %%%%回代得到x的预测,这是一次差分的逆过程
result1(k)=wind(k-1)+result(k-1);
end;
%for k=N+1:N+10
for k=2:N
result1(k)=result1(k-1)+result(k-1)
end;
%subplot(224);
plot(result1‘*-‘);
hold on;
plot(wind‘r+-‘);
grid on
xlabel(‘Time(h)‘)
ylabel(‘Vw(m/s)‘)
legend(‘预测‘‘实际‘);
%title(‘拟合后‘);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [faitheta]=ARMA(pqwind)
%%函数[faitheta]=ARMA(pqwind)
%%%pq:ARMA模型的阶数,wind:原始序列值,
%%fai:对应p的参数,theta:对应q的参数
N=size(wind2);
theta=[];
gama=[];G=[];g=[];
for k=0:20%%%%%%%%%%%%%%%%%%%%%%%%%求fai
sum=0;
for i=1:N-k
sum=sum+wind(i)*wind(i+k);
end;
gama(k+1)=sum/N;
end;
for k=1:p
g(k)=gama(q+k+1);%%生成g向量
for i=1:p
G(ki)=gama(abs(q+k-i)+1);%%%生成G矩阵
end;
end;
fai=inv(G)*g‘;%%%%公式 5-83
%由于求MA模型参数时涉及到非线形方程组的求解,没有统一的公式,本程序只就q=123时给出程序
y=[]; %%%求theta
k=0;i=0;
for k=p+1:N
sum=0;
for i=1:p
sum=sum+fai(i)*wind(k-i);
end;
y(k-p)=wind(k)-sum;
end;
k=0;i=0;
gama1=[];
for k=0:20
sum=0;
for i=1:N-k-p
sum=sum+y(i)*y(i+k);
end;
gama1(k+1)=sum/N;
end;
syms a1 a2 a3 g1 g2 g3 g4 delta;
switch q%%%%%分别根据q=123求非线性方程组 公式5-77
case 1
s=solve(‘g1=delta*(1+a1)‘‘g2=delta*(-a1)‘deltaa1);
theta(1)=subs(s.a1{g1gama1(1)}{g2gama1(2)});
case 2
s=solve(‘g1=delta*(1+a1+a2)‘‘g2=delta*(-a1+a1*a2)‘‘g3=delta*(-a2)‘deltaa1a2);
kk=subs(s.a1(1){g1gama1(1)}{g2gama1(2)}{g3gama1(3)});
kk=subs(s.a2(1){g1gama1(1)}{g2gama1(2)}{g3gama1(3)});
case 3
s=solve(‘g1=delta*(1+a1+a2+a3)‘‘g2=delta*(-a1+a1*a2+a2*a3)‘‘g3=delta*(-a2+a2*a3)‘‘g4=delta*(-a3)‘deltaa1a2a3);
theta(1)=subs(s.a1{g1gama1(1)}{g2gama1(2)}{g3gama1(3)}{g4gama1(4)});
theta(2)=subs(s.a2{g1gama1(1)}{g2gama1(2)}{g3gama1(3)}{g4gama1(4)});
theta(3)=subs(s.a3{g1gama1(1)}{g2gama1(2)}{g3gama1(3)}{g4gama1(4)});
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=chafeng(windN)%%函数差分
%%%%x:原始序列,N:差分的次数
%%%y:差分后的序列
p=[];
i=size(wind2);
for k=N+1:i
p(k-N)=wind(k)-wind(k-N);
end;
y=p;
%%%%%%%%
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4311 2009-05-05 03:20 time_series.m
----------- --------- ---------- ----- ----
4311 1
- 上一篇:FFT的图像配准
- 下一篇:双缝干涉实验的matlab实现
相关资源
- 一类时间序列的多重分形分析
- matlab时间序列分析工具程序
- MATLAB_时间序列
- MATLAB在时间序列分析中的应用_张善文
- 时间序列教程
- MATLAB在时间序列分析中的应用-张善文
-
风电MATLAB/SIMUli
nk程序 - 时间序列分析实验报告
- 基于Matlab的ARMA模型时间序列分析法仿
- 基于MATLAB的时间序列分析建模、预测
- 时间序列实验报告
- matlab DFA降趋脉动分析算法实现
- 时间序列模型ARIMA的讲解与matlab代码实
- 混沌时间序列分析与预测工具箱 开源
- kernel adapting filter
- 时间序列的分析——模型的识别与预
- 时间序列分析与matlab实现
- 风速模型MATLAB文件
- matlab 时间序列分析源代码
- 奇异谱分析
- matlab时间序列工具箱
- 用Runge-Kutta方法求解Mackey-Glass时间序列
- 谐波叠加法模拟风速时程
- 时间序列转换为邻接矩阵
- 基于小波神经网络的时间序列预测的
- 基于bp神经网络的时间序列预测matla
- 基于OLS 算法完成MG 时间序列问题
- MATLAB在时间序列建模预测及程序代码
- 小波神经网络的时间序列预测-短时交
- 时间序列ARMA模型源代码
评论
共有 条评论