Matlab BPNet系统辨识

  • 2-20-10-1
  • 1-6-2-1 * 2
  • 代码

2-20-10-1

function DualModelIden
%% 参数初始化
l = 0.009; % 学习率
alfa = 0.05; % 动量因子cells1 = 20; % 隐层神经元个数
cells2 = 10;w1 = rand(cells1,2); % 随机赋值第一层连接权系数 [20 ,2]
w2 = rand(cells2,cells1); % 随机赋值第二层连接权系数 [10, 20]
w3 = rand(1,cells2); % 随机赋值第三层连接权系数 [1, 10]yw1 = rand(cells1,1); % 随机赋值第一层输出阈值 [20, 1]
yw2 = rand(cells2,1); % 随机赋值第二层输出阈值 [10, 1]
yw3 = rand; % 随机赋值第三层输出阈值 [1]ts=0.001; % 样本
n = 1000; % 样本数
yn = rand(1,n); % 随机赋值输出(预测)
y = rand(1,n); % 随机赋值输出(真实)counts = 1; % 计数值初始化x = [0,0]'; % 输入u_1 = 0; % 上一时刻的输入
y_1 = 0; % 上一时刻的输出times = 300; % 训练轮数
e=zeros(1,times); % 均方差初始值设为0
%% 学习过程
for i=1:times % 学习轮数ei=0;for a=1:n % 样本数time(a)=a*ts;u(a)=0.50*sin(3*2*pi*a*ts);y(a)=u_1^3+y_1/(1+y_1^2);net1=w1*x-yw1; % 第一层网络的输入 [20, 1]out1=logsig(net1); % 第一层网路的输出 [20, 1]net2=w2*out1-yw2; % 第二层网络的输入 [10, 20]*[20 ,1]=[10, 1]out2=logsig(net2); % 第二层网络的输出 [10, 1]net3=w3*out2-yw3; % 第三层网络的输出 [1]yn(a)=net3; % 第三层网络的输出 [1]det3=y(a)-yn(a); % 计算偏差 [1]det2=((det3*(w3))*out2)*(1-out2); % ([1, 10]'*[10 ,1])*[10, 1] = [10, 1]det1=((det2'*(w2))*out1)*(1-out1); % [20, 1]w1=w1+det1*x'*l; % [20, 2]w2=w2+(det2*out1')*l; % [10, 20]w3=w3+(det3*out2')*l; % [1, 10]yw1=-det1*l+yw1;yw2=-det2*l+yw2;yw3=-det3*l+yw3;ei=ei+det3^2/2;e(i)=ei;      x(1)=u(a); % 更新输入x(2)=y(a);u_1=u(a);y_1=y(a);end % 结束一次样本遍历if ei<0.008break;endcounts=counts+1;end % 结束学习
%% 计算学习的曲线
x = [0,0]'; % 输入
yn_test = rand(1,n); % 随机赋值输出(预测)
y_test = rand(1,n); % 随机赋值输出(真实)
u_1 = 0; % 上一时刻的输入
y_1 = 0; % 上一时刻的输出
ts=0.1; % 样本
n = 1000; % 样本数
for a=1:nu(a)=sin(2*pi*a*ts/25) + sin(2*pi*a*ts/10);y_test(a)=u_1^3+y_1/(1+y_1^2);net1=w1*x-yw1;out1=logsig(net1);net2=w2*out1-yw2;out2=logsig(net2);net3=w3*out2-yw3;yn_test(a)=net3;x(1)=u(a);x(2)=y_test(a);u_1=u(a);y_1=y_test(a);
end
%% 绘图
figure(1);
subplot(2,1,1);
plot(time,y,'b-',time,yn,'r-');
legend('true', 'forecast')
grid on
title('BP学习方法逼近y=0.5*(1+cos(x))');
xlabel('x轴');
ylabel('y=0.5*(1+cos(x))');if (counts<times)count=1:counts;sum=counts;
else count=1:times;sum=times;
endsubplot(2,1,2);
plot(count,e(1:sum));
grid on;
title('BP算法学习曲线');
xlabel('迭代次数');
ylabel('Mean-Square-Error');figure(2);
plot(time,y_test,'b-',time,yn_test,'r-');
legend('true', 'forecast')
grid on
title('BP学习方法逼近y=sin(2*pi*k/25) + sin(2*pi*k/10)');
xlabel('x轴');
ylabel('y=sin(2*pi*k/25) + sin(2*pi*k/10)');
return


1-6-2-1 * 2

function DualModelIden
%% 参数初始化
l = 0.009; % 学习率
alfa = 0.05; % 动量因子cells1 = 6; % 隐层神经元个数
cells2 = 2;w1_1 = rand(cells1,1); % 随机赋值第一层连接权系数 [6 ,1]
w2_1 = rand(cells2,cells1); % 随机赋值第二层连接权系数 [2, 6]
w3_1 = rand(1,cells2); % 随机赋值第三层连接权系数 [1, 2]
yw1_1 = rand(cells1,1); % 随机赋值第一层输出阈值 [6, 1]
yw2_1 = rand(cells2,1); % 随机赋值第二层输出阈值 [2, 1]
yw3_1 = rand; % 随机赋值第三层输出阈值 [1]w1_2 = rand(cells1,1); % 随机赋值第一层连接权系数 [6 ,1]
w2_2 = rand(cells2,cells1); % 随机赋值第二层连接权系数 [2, 6]
w3_2 = rand(1,cells2); % 随机赋值第三层连接权系数 [1, 2]
yw1_2 = rand(cells1,1); % 随机赋值第一层输出阈值 [6, 1]
yw2_2 = rand(cells2,1); % 随机赋值第二层输出阈值 [2, 1]
yw3_2 = rand; % 随机赋值第三层输出阈值 [1]ts=0.001; % 样本
n = 1000; % 样本数
yn = rand(1,n); % 随机赋值输出(预测)
y = rand(1,n); % 随机赋值输出(真实)counts = 1; % 计数值初始化x = [0,0]'; % 输入u_1 = 0; % 上一时刻的输入
y_1 = 0; % 上一时刻的输出times = 300; % 训练轮数
e=zeros(1,times); % 均方差初始值设为0
%% 学习过程
for i=1:times % 学习轮数ei=0;for a=1:n % 样本数time(a)=a*ts;u(a)=0.50*sin(3*2*pi*a*ts);y(a)=u_1^3+y_1/(1+y_1^2);net1_1=w1_1*x(1)-yw1_1; % 第一层网络的输入 [6, 1]out1_1=logsig(net1_1); % 第一层网路的输出 [6, 1]net2_1=w2_1*out1_1-yw2_1; % 第二层网络的输入 [2, 6]*[6 ,1]=[2, 1]out2_1=logsig(net2_1); % 第二层网络的输出 [2, 1]net3_1=w3_1*out2_1-yw3_1; % 第三层网络的输出 [1]y_1=net3_1; % 第三层网络的输出 [1]net1_2=w1_2*x(2)-yw1_2; % 第一层网络的输入 [6, 1]out1_2=logsig(net1_2); % 第一层网路的输出 [6, 1]net2_2=w2_2*out1_2-yw2_2; % 第二层网络的输入 [2, 6]*[6 ,1]=[2, 1]out2_2=logsig(net2_2); % 第二层网络的输出 [2, 1]net3_2=w3_2*out2_2-yw3_2; % 第三层网络的输出 [1]y_2=net3_2; % 第三层网络的输出 [1]yn(a) = y_1 + y_2; % 计算两个模型的总输出det3=y(a)-yn(a); % 计算偏差 [1]det3_1=det3; % 计算偏差 [1]det2_1=((det3_1*(w3_1))*out2_1)*(1-out2_1); % ([1, 2]*[2 ,1])*[2, 1] = [2, 1]det1_1=((det2_1'*(w2_1))*out1_1)*(1-out1_1); % [6, 1]w1_1=w1_1+det1_1*x(1)'*l; % [6, 1]w2_1=w2_1+(det2_1*out1_1')*l; % [2, 6]w3_1=w3_1+(det3_1*out2_1')*l; % [1, 2]yw1_1=-det1_1*l+yw1_1;yw2_1=-det2_1*l+yw2_1;yw3_1=-det3_1*l+yw3_1;det3_2=det3; % 计算偏差 [1]det2_2=((det3_2*(w3_2))*out2_2)*(1-out2_2); % ([1, 2]*[2 ,1])*[2, 1] = [2, 1]det1_2=((det2_2'*(w2_2))*out1_2)*(1-out1_2); % [6, 1]w1_2=w1_2+det1_2*x(2)'*l; % [6, 1]w2_2=w2_2+(det2_2*out1_2')*l; % [2, 6]w3_2=w3_2+(det3_2*out2_2')*l; % [1, 2]yw1_2=-det1_2*l+yw1_2;yw2_2=-det2_2*l+yw2_2;yw3_2=-det3_2*l+yw3_2;ei=ei+det3^2/2;e(i)=ei;      x(1)=u(a); % 更新输入x(2)=y(a);u_1=u(a);y_1=y(a);end % 结束一次样本遍历if ei<0.008break;endcounts=counts+1;end % 结束学习
%% 计算学习的曲线
x = [0,0]'; % 输入
yn_test = rand(1,n); % 随机赋值输出(预测)
y_test = rand(1,n); % 随机赋值输出(真实)
u_1 = 0; % 上一时刻的输入
y_1 = 0; % 上一时刻的输出
ts=0.1; % 样本
n = 1000; % 样本数
for a=1:nu(a)=sin(2*pi*a*ts/25) + sin(2*pi*a*ts/10);y_test(a)=u_1^3+y_1/(1+y_1^2);net1_1=w1_1*x(1)-yw1_1; % 第一层网络的输入 [6, 1]out1_1=logsig(net1_1); % 第一层网路的输出 [6, 1]net2_1=w2_1*out1_1-yw2_1; % 第二层网络的输入 [2, 6]*[6 ,1]=[2, 1]out2_1=logsig(net2_1); % 第二层网络的输出 [2, 1]net3_1=w3_1*out2_1-yw3_1; % 第三层网络的输出 [1]y_1=net3_1; % 第三层网络的输出 [1]net1_2=w1_2*x(2)-yw1_2; % 第一层网络的输入 [6, 1]out1_2=logsig(net1_2); % 第一层网路的输出 [6, 1]net2_2=w2_2*out1_2-yw2_2; % 第二层网络的输入 [2, 6]*[6 ,1]=[2, 1]out2_2=logsig(net2_2); % 第二层网络的输出 [2, 1]net3_2=w3_2*out2_2-yw3_2; % 第三层网络的输出 [1]y_2=net3_2; % 第三层网络的输出 [1]yn_test(a) = y_1 + y_2; % 计算两个模型的总输出x(1)=u(a);x(2)=y_test(a);u_1=u(a);y_1=y_test(a);
end
%% 绘图
figure(1);
subplot(2,1,1);
plot(time,y,'b-',time,yn,'r-');
legend('true', 'forecast')
grid on
title('BP学习方法逼近y=0.5*(1+cos(x))');
xlabel('x轴');
ylabel('y=0.5*(1+cos(x))');if (counts<times)count=1:counts;sum=counts;
else count=1:times;sum=times;
endsubplot(2,1,2);
plot(count,e(1:sum));
grid on;
title('BP算法学习曲线');
xlabel('迭代次数');
ylabel('Mean-Square-Error');figure(2);
plot(time,y_test,'b-',time,yn_test,'r-');
legend('true', 'forecast')
grid on
title('BP学习方法逼近y=sin(2*pi*k/25) + sin(2*pi*k/10)');
xlabel('x轴');
ylabel('y=sin(2*pi*k/25) + sin(2*pi*k/10)');
return



并联网络与单个网络效果类似,没有跑出书上的效果,个人估计的原因是权值更新部分的问题,这里写的是两个网络的权值更新方法一样,书上的没看懂所以这么写的。
而且看着两个的仿真图,他的预测把真实值的峰值给摸掉了,是不是可以用来做平滑!!!

代码

韦巍《智能控制基础》课本例3-9 双模型系统辨识代码

Matlab BPNet系统辨识相关推荐

  1. Matlab BPNet逼近函数

    Matlab BPNet逼近函数 1-6-1结构 1-4-2-1结构 不同的写法(效果差不好) 代码 1-6-1结构 function BPNet %% 参数初始化 l = 0.09; % 学习率 n ...

  2. Matlab BPNet线性+非线性逼近

    Matlab BPNet线性+非线性逼近 线性部分确定+BPNet逼近非线性 最小二乘逼近线性部分+BPNet逼近非线性 BPNet逼近线性部分+BPNet逼近非线性 代码 线性部分确定+BPNet逼 ...

  3. 基于MATLAB控制系统辨识系列3-梯度矫正参数估计法

    目录 一.原理 二.算法步骤: 三.代码实现: 梯度矫正参数估计法-RGC(recursive gradient correction) 一.原理 参数估计结构,与最小二乘法相似:增益矩阵x新息 基本 ...

  4. 离散系统模型的辨识matlab程序,基于MATLAB的系统辨识及离散时间全通系统

    基于 !"#$"% 的系统辨识及离散时间全通系统! 施秀萍 王嘉梅 虎雁华 (云南民族学院物理与电子电气信息工程学院,昆明,&'(()*) 摘 要 基于 !"#$ ...

  5. 基于MATLAB控制系统辨识系列2-最小二乘法

    最小二乘算法及优化算法,纵向比较得出结论:只需要在程序中更改响应的迭代公式即可,简单明了. 目录 一.辨识算法之最小二乘法 二.程序代码 三.程序运行结果 一.辨识算法之最小二乘法 方法 递推公式 性 ...

  6. MATLAB系统辨识工具箱介绍(完结)

    目录 一.辨识的基本理论 二.MATLAB系统辨识工具箱实例介绍 2.1 实例介绍 2.1 进入系统辨识工具箱界面 2.2 加载数据 2.3 导入数据 2.3 数据画图(数据预处理) 2.4 模型估计 ...

  7. Matlab仿真PID控制(带M文件、simulink截图和参数分析)

    文章目录 0.符号说明 1.如何根据连续系统建立差分方程 1.1.获取连续系统的传递函数 1.2.获取离散系统的传递函数 1.3.转换为差分方程 2.基本PID控制原理 3.比较PID输出,分析参数产 ...

  8. 一阶系统开环传递函数表达式_自控原理之系统辨识--入门介绍

    写在最前: 你在调PID的时候,肯定也想过,有没有一些科学有用的方法,可以调出准确的PID参数,而不是花很多时间瞎调. 如果你想知道系统辨识能做什么,可以看我之前写过的文章,通过系统辨识出传递函数,来 ...

  9. matlab两轮自平衡小车,基于MATLAB的两轮自平衡小车系统模型辨识.pdf

    基于MATLAB的两轮自平衡小车系统模型辨识 学兔兔 第1期 (总第170期) 机 械 工程 与 自动 化 NO.1 2012年 2月 MECHANICAL ENGINEERING & AUT ...

最新文章

  1. eureka集群只注册一个_一、Spring Cloud Eureka服务注册中心
  2. Dell Kace K1000测试报告
  3. index.php后有乱码后缀,phpExcel在线下wamp环境下,正常导出,同样的代码到线上Linux导出文件无法打开,修改文件后缀为.xls后乱码...
  4. 基于Modbus TCP-IP协议的WEINVIEW HMI与PC通讯
  5. python phpstudy_phpStudy后门分析及复现
  6. Helm安装和项目使用
  7. 如何html设置下载的字体呢?
  8. jsp mysql 鲜花_jsp+servlet+mysql实现的在线鲜花商城源码附带视频指导运行教程
  9. 一、Spark大数据技术基础
  10. 文本挖掘学习笔记(三):文档相似度、文档分类和情感分析
  11. 【薛定谔方程求解】基于MATLAB的薛定谔方程求解仿真
  12. 山东省教师教育网-学习课程
  13. nodejs代码将word转成图片
  14. 两种方法用宏定义写出swap(x,y)
  15. web.config与mysql的连接 appsettings_Web.config配置文件中定义了如下数据库连接串
  16. FileZilla软件安装教程
  17. unity游戏动画 从入门到住院 二 模型导入
  18. Go语言 - 并发控制
  19. echarts中y轴设置刻度_ECharts中y坐标轴刻度的属性
  20. 区块链学习笔记21——ETH智能合约

热门文章

  1. 清华大学心理学系主任彭凯平: 千万不要以为孤独了,我就完蛋了 ——“空巢青年”系列讨论之六
  2. PCIe固态存储与HDD普通硬盘性能对比测试
  3. expdp和impdp用法,备份oracle库
  4. ue html编辑器获取纯文本,百度文本编辑器(Ueditor)怎么获取内容?
  5. 成功必备的15种心态
  6. 联想一体机开机出现error1962:no operating system found.
  7. 2008-2020年全国各省劳动生产率
  8. php--tp5萤石摄像头接口
  9. 【Selenium】驱动chrome以手机模拟器方式打开wap页面
  10. 269个JavaScript工具函数,助你提升工作效率(下)