赞
踩
风功率预测的方式主要有两种,一种为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)
本着取自CSDN,还之CSDN,记录下来,以备后用,如有不妥的地方欢迎指出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。