用BP或elman神经网络实现风速预测程序怎么写?
1个回答

x=[6.2 ,5.8 ,5.5 , 5.6 ,5.4 ,5.1 ,5.2 , 5.2 ,5.1 ,4.9 ,4.8 ,5 ,5.2 ,5.3 ...

,5.2 ,5.1 ,5.1 ,5 ,4.8 , 4.9 ,5.3 ,5.4 ,5.3 ,5.3 ,5.5 ,5.2 ,4.6 ,4.9 ...

,4.9 ,5.4 ,5.4 ,5.5 ,5.4 ,5.1 ,5 ,5.1 ,5.2 ,4.9 ,5.2 ,5.1 ,5.1 ,4.8 ,...

3.8 ,3.4 ,3.8 ,3.9 ,3.8 ,3.7 ,3.6 ,2.9 ,3.1 ,3.7 ,3.9 ,3.7 ,3.7 ,3.8 ,...

3.6 ,3.7 ,2.7 ,2.8 ,1.9 ,2.7 ,2.9 ,2.8 ,3.5 ,3.6 ,3.7 ,3.3 ,3.6 ,3.5 ,...

4.3 ,4.4 ,3.9 ,4.5 ,4.2 ,4.9 ,4.5 ,4.6 4.8, 5.7, 5.6, 5.6, 5.6, 5.6, ...

5.6,5.6, 5.6, 5.6, 5.6, 5.6,5.6 ,5.6,5.6 ,5.6 ,5.6 ,5.6 ,5.6 ,5.6 ,5.6 ...

,5.6 ,5.6 ,5.6 ,5.6 ,5.5 ,5.5 ,5.2 ,3.6 ,5.6 ,4.5 ,6.1,6.2 ,5.6 ,6.4 ,...

5.5 ,4.8 ,5.1 ,6.1 ,5.5 ,4.6 ,4.3 ,6.7 ,5.9 ,4.8 ,5.8 ,5.7 ,5.7 ,5.4 ,...

5.9 ,5.7 ,6.2 ,5.2 ,4.6 ,4.1 ,4.3 ,4.3 ,4.1 ,3.9 ,3.8 ,4.3 ,4.6,4.2,...

4.1 ,4.5 ,4.3 ,3.7 ,3.1 ,2.7 ,2.9 ,2.4 ,3 ,2.8 ,2.8];

% 该脚本用来做NAR神经网络预测

% 作者:Macer程

lag=3; % 自回归阶数

iinput=x; % x为原始序列(行向量)

n=length(iinput);

%准备输入和输出数据

inputs=zeros(lag,n-lag);

for i=1:n-lag

inputs(:,i)=iinput(i:i+lag-1)';

end

targets=x(lag+1:end);

%创建网络

hiddenLayerSize = 10; %隐藏层神经元个数

net = fitnet(hiddenLayerSize);

% 避免过拟合,划分训练,测试和验证数据的比例

net.divideParam.trainRatio = 70/100;

net.divideParam.valRatio = 15/100;

net.divideParam.testRatio = 15/100;

%训练网络

[net,tr] = train(net,inputs,targets);

%% 根据图表判断拟合好坏

yn=net(inputs);

errors=targets-yn;

figure, ploterrcorr(errors) %绘制误差的自相关情况(20lags)

figure, parcorr(errors) %绘制偏相关情况

%[h,pValue,stat,cValue]= lbqtest(errors) %Ljung-Box Q检验(20lags)

figure,plotresponse(con2seq(targets),con2seq(yn)) %看预测的趋势与原趋势

%figure, ploterrhist(errors) %误差直方图

%figure, plotperform(tr) %误差下降线

%% 下面预测往后预测几个时间段

fn=5; %比如预测步数为fn.

f_in=iinput(n-lag+1:end)';

f_out=zeros(1,fn); %预测输出

% 多步预测时,用下面的循环将网络输出重新输入

for i=1:fn

f_out(i)=net(f_in);

f_in=[f_in(2:end);f_out(i)];

end

% 画出预测图

figure,plot(1:n,iinput,'b',n:n+fn,[iinput(end),f_out],'r')

效果不是很好,但未来5个点风速应该是增大的.