当前位置:   article > 正文

BP神经网络实现风功率预测_神经网络预测风速

神经网络预测风速

风功率预测的方式主要有两种,一种为BP神经网络预测,另一种为ARMA时间序列预测。
以下为用MATLAB实现BP神经网络预测风速的代码。
学习使用MATLAB神经网络工具箱看过的书籍。
在这里插入图片描述

输入的数据是风速数据。

%% 本脚为实现BP神经网络对时间序列数据的预测--应用于风速预测
%输入为一系列风速数据即可预测下一时间节点的风速值
%% 导入数据
clc,clear,close all
load('windspeedoutT.mat');   %导入风速的.mat文件
T=windspeedoutT;   %输入风速文件
figure  %创建新的窗口
plot(T)  %在新窗口命令后画风速图,默认为在最新的窗口画图
%% 定义训练集与测试集的个数
num_all_data = length(T);
% 前75%的数据作为训练数据
num_train = floor( num_all_data * 0.75 );  %训练数据个数不能整除时向下取整
% 后25%的数据作为测试数据
num_test = num_all_data - num_train;
% 转化为narnet需要的序列数据(神经网络需要的数据为横向排列的元胞数组的形式)
y_train_nn = num2cell(T(1:num_train) )';
y_test_nn = num2cell(T(1+num_train:end))';
%% 网络的建立 
%延迟,即当前值依赖于过去的多少个值
feedback_delays = 1:10;
% 隐含层节点的个数
num_hd_neuron = 4;   
% narnet构建
net = narnet(feedback_delays, num_hd_neuron);   %建立narnet网络(非线性自结合的时间序列网络)
[Xs,Xi,Ai,Ts] = preparets(net,{},{}, y_train_nn);   %实现时间序列数据自动编排,Xs、Xi编排之后的输入和输出,Xi、Ai是初始化输入延迟状态和初始层延迟状态
[net,tr]  = train(net,Xs,Ts,Xi,Ai);     %训练网络 输入编排过后的相应数据 
%view(net)  %展示网络图形
figure
plotperform(tr)   %输出训练过程均方差值变化过程
Y = net(Xs,Xi);   %使用该网络得到输出
perf = perform(net,Ts,Y);  %计算网络的均方差
fprintf( 'neural network: mse on training set : %.6f\n', perf );  %输出均方差
%% 神经网络进行预测(测试集范围内预测)
yini = y_train_nn(end-max(feedback_delays)+1:end);   %取出训练集最后没用到的值
[Xs,Xi,Ai] = preparets(net,{},{},[yini y_test_nn]);    %[数组1 数组2]  表示拼接
y_pred_nn = net(Xs,Xi,Ai)';  %调用网络进行预测
y_pred_nn = cell2mat( y_pred_nn );   
y_test_nn = cell2mat( y_test_nn )';
%% 神经网络预测全数据集
y_train_test_all = num2cell(T)';
[Xs,Xi,Ai] = preparets(net,{},{},y_train_test_all);    %[数组1 数组2]  表示拼接
y_pred_all = net(Xs,Xi,Ai)';  %调用网络进行预测
y_pred_all = cell2mat( y_pred_all );   
figure
title('NARNET预测')
hold on
plot( T(10:1300), 'r', 'linewidth', 2 ); %测试数据实际值曲线
plot( y_pred_all, 'b--', 'linewidth', 2 ); %测试数据的预测值曲线
legend({ '真实值', '神经网络预测值'})
 %% 预测测试集未来的数值
% [Y,Xf,Af] = net(Xs,Xi,Ai);
% [netc,Xic,Aic] = closeloop(net,Xf,Af); %实现闭环
% %view(netc)
% y_predict=netc(cell(0,2),Xic,Aic);   
% y_predict = cell2mat( y_predict )';
% %plot(y22);
% %% 画图,计算mse
% figure
% title('NARNET预测')
% hold on
% plot( y_test_nn, 'r', 'linewidth', 2 ); %测试数据实际值曲线
% plot( y_pred_nn, 'b--', 'linewidth', 2 ); %测试数据的预测值曲线
% legend({ '真实值', '神经网络预测值'}) 
% 
% figure
% title('NARNET预测之后')
% hold on
% plot( y_test_nn, 'r', 'linewidth', 2 ); %测试数据实际值曲线
% plot( [y_pred_nn;y_predict], 'b--', 'linewidth', 2 ); %测试数据的预测值曲线

nn_per_error = mean(abs(y_pred_nn-y_test_nn) ./ y_test_nn); %相对误差
nn_mse_error = mean( (y_pred_nn - y_test_nn).^2 ); %均方差
fprintf('nn model: relative error on test set: %.6f\n', nn_per_error);
fprintf('nn model: mse on test set: %.6f\n', nn_mse_error)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

本着取自CSDN,还之CSDN,记录下来,以备后用,如有不妥的地方欢迎指出。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/971876
推荐阅读
相关标签
  

闽ICP备14008679号