% % 单层BP神经网络
% %% 此程序matlab编程实现的BP神经网络
% % 清空环境变量
% clear all
% clc
% input=xlsread('D:\BP神经网络\程序\17000数据.xlsx')
% save data input
% output=xlsread('D:\BP神经网络\程序\卷曲温度.xlsx')
% save data output
% in=input(1:17100,1:10)';
% out=output(1:17100,1);
% %%第一步 读取数据
% input=in; %载入输入数据
% output=out; %载入输出数据
%
% %% 第二步 设置训练数据和预测数据
% input_train = in(1:10,1:16000);
% output_train =out(1:16000,1)';
% input_test = in(1:10,16001:17100);
% output_test =out(16001:17100,1)';
% %% 第三本 训练样本数据归一化
% [inputn,inputps]=mapminmax(input_train);%归一化到[-1,1]之间,inputps用来作下一次同样的归一化
% [outputn,outputps]=mapminmax(output_train);
% M=size(input,10); %输入节点个数
% N=size(output,1); %输出节点个数
%
% n=6; %隐形节点个数
% lr1=0.01; %学习概率
% lr2=0.001; %学习概率
% maxgen=100; %迭代次数
%
% %权值初始化
% Wjk=randn(n,M);Wjk_1=Wjk;Wjk_2=Wjk_1;
% Wij=randn(N,n);Wij_1=Wij;Wij_2=Wij_1;
% a=randn(1,n);a_1=a;a_2=a_1;
% b=randn(1,n);b_1=b;b_2=b_1;
%
% %节点初始化
% y=zeros(1,N);
% net=zeros(1,n);
% net_ab=zeros(1,n);
%
% %权值学习增量初始化
% d_Wjk=zeros(n,M);
% d_Wij=zeros(N,n);
% d_a=zeros(1,n);
% d_b=zeros(1,n);
%
% %%网络训练
% for i=1:maxgen
%
% %误差累计
% error(i)=0;
%
% % 循环训练
% for kk=1:size(input,1)
% x=inputn(kk,:);
% yqw=outputn(kk,:);
%
% for j=1:n
% for k=1:M
% net(j)=net(j)+Wjk(j,k)*x(k);
% net_ab(j)=(net(j)-b(j))/a(j);
% end
% temp=mymorlet(net_ab(j));
% for k=1:N
% y=y+Wij(k,j)*temp; %小波函数
% end
% end
% error(i)=error(i)+sum(abs(yqw-y));
% for j=1:n
% %计算d_Wij
% temp=mymorlet(net_ab(j));
% for k=1:N
% d_Wij(k,j)=d_Wij(k,j)-(yqw(k)-y(k))*temp;
% end
% %计算d_Wjk
% temp=d_mymorlet(net_ab(j));
% for k=1:M
% for l=1:N
% d_Wjk(j,k)=d_Wjk(j,k)+(yqw(l)-y(l))*Wij(l,j) ;
% end
% d_Wjk(j,k)=-d_Wjk(j,k)*temp*x(k)/a(j);
% end
% %计算d_b
% for k=1:N
% d_b(j)=d_b(j)+(yqw(k)-y(k))*Wij(k,j);
% end
% d_b(j)=d_b(j)*temp/a(j);
% %计算d_a
% for k=1:N
% d_a(j)=d_a(j)+(yqw(k)-y(k))*Wij(k,j);
% end
% d_a(j)=d_a(j)*temp*((net(j)-b(j))/b(j))/a(j);
% end
% end
% end
%
% % 第七步 测试样本归一化
% inputn_test=mapminmax('apply',input_test,inputps);% 对样本数据进行归一化
%
% %%网络预测
% for i=1:92
% x_test=x(i,:);
%
% for j=1:1:n
% for k=1:1:M
% net(j)=net(j)+Wjk(j,k)*x_test(k);
% net_ab(j)=(net(j)-b(j))/a(j);
% end
% temp=mymorlet(net_ab(j));
% for k=1:N
% y(k)=y(k)+Wij(k,j)*temp ;
% end
% end
%
% yuce(i)=y(k);
% y=zeros(1,N);
% net=zeros(1,n);
% net_ab=zeros(1,n);
% end
% %预测输出反归一化
% ynn=mapminmax('reverse',yuce,outputps);
%% 该代码为基于小波神经网络的预测代码
%% 网络参数配置
% clear,clc
% DATA=xlsread('testdata.xlsx');
% data=DATA(:,1:end-12);
% % data1=DATA(end-11:end,5:6)-100;
% fore=24;
% test=12;
% obs=12;
function [InsampleReal,InsamplePredict,RMSE,OutsamplePredict,AdsustedR,adftestpValue,archtestpValue,dwtestpValue,R2testpValue,FtestpValue,para1,para2,para3,para4]=WANN(data,obs,test,fore,step)
adftestpValue=[];
archtestpValue=[];
dwtestpValue=[];
R2testpValue=[];
FtestpValue=[];
data=data';
code=data(1,:);
data(1,:)=[];
xunlian=length(data(:,1))-test-obs;
if xunlian<=0
disp('数据长度不足')
InsampleReal=[];InsamplePredict=[];RMSE=[];OutsamplePredict=[];
return
end
for u=1:length(data(1,:))
% u=1;
% test=12;
shuju=data(:,u);
aa=shuju(1:end-test,:);
real(:,u)=shuju(end-test+1:end,:);
% obs=x;
yuce=fore;
% yuce=12;
% obs=18;
for i=1:xunlian
inputn(:,i)=aa(i:(obs-1+i),1);
end
outputn=aa(obs+1:xunlian+obs,1);
outputn=outputn';
P=inputn';
T=outputn';
%% 输入输出数据归一化
[P,inputps]=mapminmax(P');
[T,outputps]=mapminmax(T');
input=P';
output=T';
%%
M=size(input,2); %输入节点个数
N=size(output,2); %输出节点个数
%18
n=7; %隐形节点个数
lr1=0.005; %学习概率
lr2=0.005; %学习概率
maxgen=100; %迭代次数
seed=2;
randn('state',seed);
%%
if xunlian>12
numB=12;
else
numB=xunlian;
end
% for flag=6;%6:numB-1
% n=flag;
% %权值初始化
% Wjk=randn(n,M);Wjk_1=Wjk;Wjk_2=Wjk_1;
% Wij=randn(N,n);Wij_1=Wij;Wij_2=Wij_1;
% a=randn(1,n);a_1=a;a_2=a_1;
% b=randn(1,n);b_1=b;b_2=b_1;
%节点初始化
y=zeros(1,N);
% y=output;
net=zeros(1,n);
net_ab=zeros(1,n);
%权值学习增量初始化
d_Wjk=zeros(n,M);
d_Wij=zeros(N,n);
d_a=zeros(1,n);
d_b=zeros(1,n);
%% 输入输出数据归一化
%权值初始化
Wjk=randn(n,M);Wjk_1=Wjk;Wjk_2=Wjk_1;
Wij=randn(N,n);Wij_1=Wij;Wij_2=Wij_1;
a=randn(1,n);a_1=a;a_2=a_1;
b=randn(1,n);b_1=b;b_2=b_1;
error=zeros(1,maxgen);
%% 网络训练
for s=1:maxgen
%误差累计
error(s)=0;
% 循环训练
xx=input;
yqw=output;
for yb=1:length(xx(:,1))
x=xx(yb,:);
for j=1:n
for k=1:M
net(j)=net(j)+Wjk(j,k)*x(k);
net_ab(j)=(net(j)-b(j))/a(j);
end
temp=mymorlet(net_ab(j));
end
for j=1:n
for k=1:N
y(k)=y(k)+Wij(k,j)*temp; %小波函数
end
end
ycc=y(k);
% end
%计算误差 s=1;
error(s)=error(s)+sum(abs(yqw(yb,1)-ycc));
%权值调整
for j=1:n
%计算d_Wij
temp=mymorlet(net_ab(j));
for k=1:N
d_Wij(k,j)=d_Wij(k,j)-sum(yqw(:,1)-ycc)*temp;
end
%计算d_Wjk
temp=d_mymorlet(net_ab(j));
for k=1:M
for l=1:N
d_Wjk(j,k)=d_Wjk(j,k)+sum(yqw(:,1)-ycc)*Wij(l,j) ;
end
d_Wjk(j,k)=-d_Wjk(j,k)*temp*x(k)/a(j);
end
%计算d_b
for k=1:N
d_b(j)=d_b(j)+sum(yqw(:,1)-ycc)*Wij(k,j);
end
d_b(j)=d_b(j)*temp/a(j);
%计算d_a
for k=1:N
d_a(j)=d_a(j)+sum(yqw(:,1)-ycc)*Wij(k,j);
end
d_a(j)=d_a(j)*temp*((net(j)-b(j))/b(j))/a(j);
end
%权值参数更新
Wij=Wij-lr1*d_Wij;
Wjk=Wjk-lr1*d_Wjk;
b=b-lr2*d_b;
a=a-lr2*d_a;
d_Wjk=zeros(n,M);
d_Wij=zeros(N,n);
d_a=zeros(1,n);
d_b=zeros(1,n);
y=zeros(1,N);
net=zeros(1,n);
net_ab=zeros(1,n);
Wjk_1=Wjk;Wjk_2=Wjk_1;
Wij_1=Wij;Wij_2=Wij_1;
a_1=a;a_2=a_1;
b_1=b;b_2=b_1;
end
end
para1(:,:,u)=Wjk;
para2(:,:,u)=Wij;
para3(:,u)=a;
para4(:,u)=b;
%% %% 网络预测
%预测输入归一化
% outputtest=aa(xunlian+1:end,1);
% outputtest=outputtest';
inputtest=aa(xunlian+1:end,1);
x_testn=inputtest';
s=fore+test;
%yuce=zeros(1,s);
z=zeros(1,N);
%网络预测
x_test=mapminmax('apply',x_testn',inputps);
x_test=x_test';
for i=1:s
% i=2;
%预测输入归一化
for j=1:1:n
for k=1:1:M
net(j)=net(j)+Wjk(j,k)*x_test(k);
net_ab(j)=(net(j)-b_1(j))/a_1(j);
end
temp=mymorlet(net_ab(j));
for k=1:N
z0=z(k)+Wij(k,j)*temp ;
end
end
yuce(i,u)=z0;
z0=0;
z=zeros(1,N);
net=zeros(1,n);
net_ab=zeros(1,n);
x_test=[x_test(2:end) yuce(i,u)];
end
if step == 0
yuce(:,u) = yuce(:,u);
else
Randomerror(u,:)=normrnd(0,sqrt(var(data(:,u))),1,step);
yuce(:,u) = yuce(:,u)+mean(Randomerror(u,:));
end
%预测输出反归一化
ynn(:,u)=mapminmax('reverse',yuce(:,u),outputps);input=[];output=[];
InsampleReal(:,u)=real(:,u);
ynn(isnan(ynn)==1)=0;
ynn(isinf(ynn)==1)=0;
InsamplePredict(:,u)=ynn(1:test,u);
OutsamplePredict(:,u)=ynn(test+1:test+fore,u);
RMSE(u)=sqrt(sum((real(:,u)-ynn(1:test,u)).^2)/test);
AdsustedR(u)=sum((mean(real(:,u))-yn
Ren2021526
- 粉丝: 0
- 资源: 8
最新资源
- 基于Matlab的10kW虚拟同步发电机小信号稳定控制仿真研究,10kW同步发电机(VSG)小信号稳定控制matlab仿真 【985双一流专业的电气工程博士自用仿真】 参数可改 1从lunwen中
- 有源电力滤波器对并网变流器谐波补偿研究:光伏发电并网应用下的效果分析及其优化策略,26 有源电力滤波器补偿并网变流器谐波 以光伏发电并网为应用场景 在并网联络线处加入有源电力滤波器 补偿前thd:0
- 改进IEEE 33节点系统下的潮流计算与电压分析:含风机光伏接入,电动机应用,不含特定内容(风光280除外),改进的IEEE33节点,潮流计算,电压分析,可加风机光伏,接电动机 含风光380,不含2
- lightningx.deb
- Simulink仿真下的自适应巡航控制(ACC)系统建模:速度与间距控制策略探究,Simulink仿真:基于模型预测的自适应巡航控制系(ACC)建模 参考文献:无 仿真平台:MATLAB Simuli
- 基于三菱PLC与MCGS组态的农田智能灌溉系统:详解梯形图程序、接线图与IO分配及组态画面,基于三菱PLC和MCGS组态农田智能灌溉系统 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面 ,核
- 基于MATLAB的新能源与储能技术模型构建:光伏、飞轮储能、燃料电池与锂电池的综合应用,基于MATLAB搭建的光伏,飞轮储能,燃料电池和锂电池的模型,可以再此基础上搭建个各种形式的新能源和储能模型
- 微秒制造与超快激光应用研究:飞秒激光与石英玻璃的交互机制探索与COMSOL仿真分析,研究背景:随着微秒制造的发展,对超快激光的应用越来越广泛,对超快激光与物质作用机理的研究也越来越深入,目前做超快激光
- 西门子S7-200 PLC四层电梯组态仿真设计与程序实现,西门子S7-200PLC程序和组态王4层电梯四层电梯带组态仿真组态设计PLC设计 ,核心关键词:西门子S7-200PLC程序; 四层电梯;
- 直驱永磁同步风力发电机MATLAB仿真模型设计与分析,直驱永磁同步风力发电机MATLAB仿真模型 ,核心关键词:直驱永磁同步风力发电机; MATLAB仿真模型; 风电技术; 能源转换; 仿真模拟; 电
- 电压型单相双极性SPWM逆变仿真模型详解:原理、调制策略及载波与调制波频率影响分析,电压型单相双极性SPWM逆变仿真模型 含有对应的仿真说明,包含原理,调制策略 针对不同载波频率,调制波频率的仿真说
- COMSOL变压器油流注放电模型:仿真分析与应用探讨,COMSOL变压器油流注放电模型 ,核心关键词:COMSOL; 变压器; 油流注放电模型; 仿真模拟 ,COMSOL中变压器油流注放电模型的建立与
- "改进粒子群算法GAPSO:Matlab编程下的基本、混沌与遗传粒子群算法的程序与结果对比分析",改进粒子群算法GAPSO 采用matlab编程,有基本粒子群、混沌粒子群和遗传粒子群三种算法的程序和结
- COMSOL 6.0超声相控阵仿真模型:压力声学与固体力学对比建模介绍,COMSOL超声相控阵仿真模型 模型介绍:本链接有两个模型,分别使用压力声学与固体力学对超声相控阵无损检测进行仿真,负有模型说明
- 永磁同步电机一阶非线性自抗扰(ADRC)matlab仿真模型与参数调优研究,永磁同步电机一阶非线性自抗扰(ADRC)matlab,simulink模型 参数已调好含有参考文档,送自抗扰相关电子书 不
- 传统轿车ABS防抱死系统模糊控制策略研究:与PID及逻辑门限值控制的效能对比,联合仿真优化模型文件夹包含代码与模型原件,课题名称:传统轿车ABS防抱死系统控制策略研究 课题内容:基于Carsim和S