n = 6600;
Data = xlsread('wind shuju.xlsx');%数据库
SourceData = Data(1:n);%训练集
step=600;%后1000个测试
origin=Data(6001:6600);%error1准备参数
TempData=SourceData;
TempData=detrend(TempData);%去趋势线
TrendData=SourceData-TempData;%趋势函数
figure('name', '箱型图')
boxplot(Data);
title('箱型图');
H=adftest(TempData);
difftime=0;
SaveDiffData=[];
while ~H
SaveDiffData=[SaveDiffData,TempData(1,1)];
TempData=diff(TempData);%差分,平稳化时间序列
difftime=difftime+1;%差分次数
H=adftest(TempData);%adf检验,判断时间序列是否平稳化
end
u = iddata(TempData);
test = [];
for p = 1:5
for q = 1:5
m = armax(u,[p q]);
AIC = aic(m);
test = [test;p q AIC];
end
end
test1=[];
n=Data(6001:6600,1);
n1=iddata(n);
m = armax(u,[1 1]); %由上一步的值得出最合适的p,q
P1=predict(m,n1,1);
PreR=P1.OutputData
PreR=PreR' %此就是预测值
if size(SaveDiffData,2)~=0
for index=size(SaveDiffData,2):-1:1
PreR=cumsum([SaveDiffData(index),PreR])
end
end
x=[1:1:600];
a=[1:1:600];
plot(x,PreR,'r-o',a,Data(6001:6600,1),'b--+');
figure
plot(PreR,':og')
hold on
plot(origin,'-*');
legend('预测输出','期望输出')
title('AMRA预测输出','fontsize',12)
ylabel('风速(m/s)','fontsize',12)
xlabel('样本','fontsize',12)
xlswrite('E:\MA\bin\hunhe\predict.xlsx', PreR);
error=PreR-origin;%预测误差
error1=(origin-PreR)./origin; %相对误差
y1=diag(error);
y2=diag(error1);
xlswrite('E:\MA\bin\hunhe\error.xlsx', y1);
xlswrite('E:\MA\bin\hunhe\error1.xlsx', y2);
MAE=(sum(abs(y1)))/600; %绝对平均误差 24对误差
RMSE=sqrt((sum(y1.^2))/600);%RMSE 均方根误差公式
n = length(TempData);
meanTempData = mean(TempData);
varTempData = var(TempData);
ACF = zeros(1, 21); % 初始化ACF向量,只包括前20滞后
lags = 0:20; % 创建滞后向量,只包括前20滞后
% 计算ACF
for k = 0:20
sum = 0;
for t = (k+1):n
sum = sum + (TempData(t) - meanTempData) * (TempData(t-k) - meanTempData);
end
ACF(k+1) = sum / ((n-k) * varTempData); % 计算ACF值
end
% 初始化PACF向量
PACF = zeros(1, 21);
% 计算PACF
for k = 0:20
if k == 0
PACF(1) = ACF(1); % 0滞后是ACF的第一个值
else
% 准备回归数据
Y = TempData(k+1:end); % 当前时间点及其之后的值
X = [ones(length(Y), 1), TempData(1:end-k)]; % 包含常数项和滞后值的矩阵
% 执行回归
beta = regress(Y, X);
residuals = Y - X * beta; % 计算残差
PACF(k+1) = var(residuals) / var(Y); % 计算PACF值
end
end
% 绘制ACF和PACF图
figure;
subplot(2,1,1);
stem(lags, ACF, 'filled');
title('自相关函数 (ACF)');
xlabel('滞后阶数');
ylabel('ACF值');
subplot(2,1,2);
stem(lags, PACF, 'filled');
title('偏自相关函数 (PACF)');
xlabel('滞后阶数');
ylabel('PACF值');
% 创建一个新的图形窗口
figure;
% 在第一个子图中绘制绝对误差
subplot(1, 2, 1); % 1行2列的第一个子图
plot(y1); % 绘制绝对误差数据
title('绝对误差'); % 设置子图标题
grid on; % 开启网格
% 在第二个子图中绘制相对误差
subplot(1, 2, 2); % 1行2列的第二个子图
plot(y2); % 绘制相对误差数据
title('相对误差'); % 设置子图标题
grid on; % 开启网格