clc
clear all;
%% 生成训练样本
input=0:0.01:15; %样本输入值
c=2/(sqrt(3).*pi.^(1/4));
d=1/sqrt(2);
u=input/2-1;
targ=d.*c.*exp(-u.^2/2).*(1-u.^2); % 目标函数的样本输出值
figure(1)
plot(input,targ,'gd-')
title('原始样本 输入-输出')
% y=[];
% for t=-2:0.01:1;
% yn=0;
% for i=0:7
% yn=yn+0.8*sin(7*i*pi*t/5)*(1+3.4*cos(i*pi*t/5));
% end
% y=[y,yn];
% end
% t=-2:0.01:1;
% figure(1)
% plot(t,y,'g.-')
% title('样本输入-输出')
% input=t;
% targ=y;
%% 参数初始化
M=size(input,1); %输入层节点个数
N=size(targ,1); %输出层节点个数
P=size(input,2); %训练样本个数
n=20; %隐层节点个数
lr1=0.01; %学习速率
lr2=0.001; %学习速率
SSE=1; %均方误差初始值设为1
% mc=0.9; %动量因子
err_goal=0.00001; %设定期望的误差
max_epoch=500; %设定最大循环次数
%权值初始化(随机初始化)
Wjk=rand(n,M);Wjk_1=Wjk;Wjk_2=Wjk_1;
Wij=rand(N,n);Wij_1=Wij;Wij_2=Wij_1;
a=rand(1,n);a_1=a;a_2=a_1;
b=rand(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);
%% 输入输出数据归一化
% [inputn,inputps]=mapminmax(input);
% [outputn,outputps]=mapminmax(targ);
% figure(2)
% plot(inputn,outputn,'gd-')
% title('归一化的样本 输入-输出')
Xmax=max(input);Xmin=min(input);
inputn=(input-Xmin)/(Xmax-Xmin);
Ymax=max(targ);Ymin=min(targ);
outputn=(targ-Ymin)/(Ymax-Ymin);
figure(2)
plot(inputn,outputn,'gd-')
title('归一化的样本 输入-输出')
%% 网络训练
epoch=1;
error=[];
error(epoch)=0;
x=inputn(:,1);
yqw=outputn(:,1);
for i=1:N
for j=1:n
for k=1:M
net(j)=net(j)+Wjk(j,k)*x(k);
end
net_ab(j)=(net(j)-b(j))/a(j);
temp=f_myfei(net_ab(j));
y(i)=y(i)+Wij(i,j)*temp; %小波函数
end
end
%计算误差和
error(epoch)=error(epoch)+sumsqr(yqw-y); %sumsqr(平方和)
SSE=error(end)/2;
while ( SSE>err_goal & epoch<max_epoch)
epoch=epoch+1;
%误差累计
error(epoch)=0;
for kk=1:P
% 循环训练
%权值调整
%计算d_Wij
for i=1:N
detai(i)=yqw(i)-y(i);
for j=1:n
temp=f_myfei(net_ab(j));
d_Wij(i,j)=detai(i)*temp;
end
end
%计算d_Wjk
sum=0;
for j=1:n
temp=d_myfei(net_ab(j));
for i=1:N
sum=sum+detai(i)*Wij(i,j)*temp/a(j);
end
detah(j)=sum;
sum=0;
for k=1:M
d_Wjk(j,k)=detah(j)*x(k);
end
end
%计算d_b
d_b=-detah;
%计算d_a
for j=1:n
d_a(j)=-detah(j)*(net(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;
% % 权值参数更新-采用基于动量的梯度下降法
% Wij=Wij-lr1*(1-mc)*d_Wij+mc*(Wij_1-Wij_2);
% Wjk=Wjk-lr1*(1-mc)*d_Wjk+mc*(Wjk_1-Wjk_2);
% b=b-lr2*(1-mc)*d_b+mc*(b_1-b_2);
% a=a-lr2*(1-mc)*d_a+mc*(a_1-b_2);
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_2=Wjk_1;Wjk_1=Wjk;
% Wij_2=Wij_1;Wij_1=Wij;
% a_2=a_1;a_1=a;
% b_2=b_1;b_1=b;
x=inputn(:,kk);
yqw=outputn(:,kk);
for i=1:N
for j=1:n
for k=1:M
net(j)=net(j)+Wjk(j,k)*x(k);
end
net_ab(j)=(net(j)-b(j))/a(j);
temp=f_myfei(net_ab(j));
y(i)=y(i)+Wij(i,j)*temp; %小波函数
end
end
%计算误差和
error(epoch)=error(epoch)+sumsqr(yqw-y);
end
SSE=error(end)/(2*P);
[ epoch SSE]
end
%% 网络预测
%预测输入归一化
input_test = input;
output_test = targ;
% x=mapminmax('apply',input_test,inputps);
x=input_test;
%网络预测
yuce=[];
for kk=1:P
x_test=x(:,kk);
for j=1:n
for k=1:M
net(j)=net(j)+Wjk(j,k)*x_test(k);
net_ab(j)=(net(j)-b(j))/a(j);
end
temp=f_myfei(net_ab(j));
for i=1:N
y(i)=y(i)+Wij(i,j)*temp ;
end
end
yuce(:,kk)=y.';
y=zeros(1,N);
net=zeros(1,n);
net_ab=zeros(1,n);
end
% for kk=1:P
% x=inputn(:,kk);
% yqw=outputn(:,kk);
% for i=1:N
% for j=1:n
% for k=1:M
% net(j)=net(j)+Wjk(j,k)*x(k);
% end
% net_ab(j)=(net(j)-b(j))/a(j);
% temp=f_myfei(net_ab(j));
% y(i)=y(i)+Wij(i,j)*temp; %小波函数
% end
% end
% yuce(:,kk)=y.';
% y=zeros(1,N);
% net=zeros(1,n);
% net_ab=zeros(1,n);
% end
%预测输出反归一化
% ynn=mapminmax('reverse',yuce,outputps);
ynn=yuce;
%% 结果分析
figure(3)
plot(ynn,'b-')
hold on
plot(outputn,'g--')
title('预测交通流量','fontsize',12)
legend('预测交通流量','实际交通流量')
xlabel('时间点')
ylabel('交通流量')
hold off
figure(4)
plot(error,'r*:')
title('预测误差','fontsize',12)
基于小波神经网络的非线性函数逼近.zip_函数逼近_小波分析_小波神经_小波神经网络_神经网络逼近
版权申诉
5星 · 超过95%的资源 8 浏览量
2022-09-23
02:21:01
上传
评论 2
收藏 28KB ZIP 举报
小贝德罗
- 粉丝: 70
- 资源: 1万+
最新资源
- 基于Java的设计模式实现源码
- 基于Javascript的母婴之家网站设计源码
- 基于Vue的电商购物网站设计源码
- 基于Java的elasticsearch视频教程配套Maven工程eshelloword设计源码
- 基于Typescript的兔子饭店经营类游戏源码设计免费送cocoscreator
- 基于Java的web快速开发数据权限管理脚手架wonder-server设计源码
- 基于Apache Log4cxx的C++日志库设计源码
- 基于Vue3的likeadmin免费任意商用管理后台设计源码
- 基于JavaScript的Chrome扩展WeNote分享插件设计源码
- 基于C++的中泰EM9108S动态库开发示例源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈