RBF的逼近实例详解

  • 题目
  • 解题思路
  • 代码
  • 运行结果
  • 代码详解

题目

采用RBF网络对如下模型进行逼近
G(s)= 133/(s^2+25s)
网络结构为2-5-1结构取x(1) = u(t),x(2) = 3(t-1),η=0.50,α=0.05,网络的初始权值取0到1之间的随机值。考虑到网络的第一个输入范围为[0,1],离线测试可得第二个输入范围为[0,10],取高斯基函数的参数取值为
b_j = 1.5,j =1,2,3,4,5.
网络的第一个输入为u(k) = sint。仿真中,只调节权值w,取固定的c_j和b

解题思路

用于逼近的RBP网络如下图所示
本题的模型结构
通过这两张图我们可以得到权值为
w_j (t)=w_j (t-1) +Δw_j(t)+α(w_j (t-1)-w_j (t-2))

代码

chap_5.m(RBF网络程序)

function [sys,x0,str,ts] = s_function(t,x,u,flag)
switch flag,
case 0,[sys,x0,str,ts] = mdlInitializeSizes
case 3,sys = mdlOutputs(t,x,u);
case{2,4,9}sys = [];
otherwiseerror(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts] = mdlInitializeSizes
sizes = simsizes;  %设置模块参数结构体
sizes.NumContStates =0;               %模块连续变量个数
sizes.NumDiscStates =0;              %模块离散变量个数
sizes.NumOutputs    =1;              %模块输出变量个数
sizes.NumInputs     =2;              %模块输入变量个数
sizes.DirFeedthrough=1;              %模块是否前后贯通,输入是否能直接控制输出
sizes.NumSampleTimes=0;              %模块采样时间
sys=simsizes(sizes);                 %模块设置完成后传递给sys参数
x0 = [];
str = [];
ts = [];
function sys = mdlOutputs(t,x,u)
persistent  w w_1 w_2 b ci
xite = 0.50;
alfa = 0.05;
if t == 0b =1.5;ci = [-1 -0.5 0 0.5 1;-10 -5 0 5 10];w = rands(5,1);w_1 = w;w_2=w_1;
end
ut = u(1);
yout = u(2);
xi = [ut yout]';
for j = 1:1:5h(j) = exp(-norm(xi-ci(:,j))^2/(2*b^2));
end
ymout = w' * h';
d_w = 0*w;
for j = 1:1:5d_w(j) = xite *(yout - ymout)*h(j);
end
w = w_1 + d_w +alfa *(w_1 - w_2);
w_2 = w_1;
w_1 = w;
sys(1)=ymout;

chap_5b.m(逼近对象程序)

function [sys,x0,str,ts] = s_function(t,x,u,flag)
switch flag,
case 0,[sys,x0,str,ts] = mdlInitializeSizes
case 1,sys = mdlDerivatives(t,x,u);
case 3,sys=mdlOutputs(t,x,u);
case{2,4,9}sys = [];
otherwiseerror(['Unhandled flag = ',num2str(flag)]);
end
function[sys,x0,str,ts] = mdlInitializeSizes
sizes = simsizes;  %设置模块参数结构体
sizes.NumContStates =2;               %模块连续变量个数
sizes.NumDiscStates =0;              %模块离散变量个数
sizes.NumOutputs    =1;              %模块输出变量个数
sizes.NumInputs     =1;              %模块输入变量个数
sizes.DirFeedthrough=0;              %模块是否前后贯通,输入是否能直接控制输出
sizes.NumSampleTimes=0;              %模块采样时间
sys=simsizes(sizes);                 %模块设置完成后传递给sys参数
x0 = [0,0];
str = [];
ts = [];
function sys = mdlDerivatives(t,x,u)
sys(1) = x(2);
sys(2) = -25*x(2) +133*u;
function sys=mdlOutputs(t,x,u)
sys(1) = x(1);

画图

close all;
figure(1);
plot(t,y(:,1),'r',t,y(:,2),'k:','linewidth',2);
xlabel('time(s)');ylabel('y and ym');
legend('ideal signal','signal approximation');

运行结果

代码详解

初始化

function [sys,x0,str,ts] = mdlInitializeSizes
sizes = simsizes;  %设置模块参数结构体
sizes.NumContStates =0;               %模块连续变量个数
sizes.NumDiscStates =0;              %模块离散变量个数
sizes.NumOutputs    =1;              %模块输出变量个数
sizes.NumInputs     =2;              %模块输入变量个数
sizes.DirFeedthrough=1;              %模块是否前后贯通,输入是否能直接控制输出
sizes.NumSampleTimes=0;              %模块采样时间
sys=simsizes(sizes);                 %模块设置完成后传递给sys参数
x0 = [];
str = [];
ts = [];

初始时的权值等数据

if t == 0b =1.5;ci = [-1 -0.5 0 0.5 1;-10 -5 0 5 10];w = rands(5,1);w_1 = w;w_2=w_1;
end`隐藏层的输出`。
```javascript
for j = 1:1:5h(j) = exp(-norm(xi-ci(:,j))^2/(2*b^2));
end

RBF网络的输出(理想输出)

ymout = w' * h';

调节权值

d_w = 0*w;
for j = 1:1:5d_w(j) = xite *(yout - ymout)*h(j);
end
w = w_1 + d_w +alfa *(w_1 - w_2);
w_2 = w_1;

一般情况RBF Network只有三层,其中从输入层到隐层之间并没有权重连接,而是直接将用隐层的RBF计算与不同的中心(隐层神经元)的距离或者相似度,距离越远,相似度越低,神经元的激活程度就越小,作用也就越不明显,此外这个过程也可以以Kernel SVM的角度理解: 把原始低维的数据进行转换到高维空间中(高斯核对应无穷维)的特征转换。因而RBF Network的隐层激活函数可以说就是径向基函数,而一般Neural Network的激活函数则是一些如sigmod, tanh等非线性函数。当然很明显,RBF Network由于只有隐层到输出层的权重连接,因而训练速度会大大加快。

RBF网络的逼近实例详解相关推荐

  1. android中怎么网络判断,Android中判断网络是否连接实例详解

    Android中判断网络是否连接实例详解 在android中,如何监测网络的状态呢,这个有的时候也是十分重要的,方法如下: public class ConnectionDetector { priv ...

  2. php 检测网络,PHP+Ajax 检测网络是否正常实例详解

    本文实例讲述了PHP+Ajax实时自动检测是否联网的方法.分享给大家供大家参考.具体实现方法如下: html部分代码: /p> "http://www.w3.org/TR/xhtml1 ...

  3. BP网络逼近仿真实例详解

    BP网络逼近仿真实例详解 题目 解题思路 代码 运行结果 代码详解 题目 使用BP网络逼近对象 采样时间取1ms.输入信号为u(k) = 0.5sin(6πt).神经网络为2-6-1结构,权值为W_1 ...

  4. 怎样在两个局域网内共享一台打印机 。常用网络命令及命令实例详解

    怎样在两个局域网内共享一台打印机 怎样在两个局域网内共享一台打印机 我们公司有两间办公室,原先布线的时候用一个路由器延伸出多个接口预埋在墙里并做上插头,IP地址是自动分配的,网关是192.168.0. ...

  5. android xutils json请求,Android Xutils3网络请求的封装详解及实例代码

    Xutils3网络请求的封装详解 封装了一个Xutil3的网络请求工具类,分享给大家,本人水平有限,不足之处欢迎指出. 使用前先配置xutils3: 1.gradle中添加 compile 'org. ...

  6. Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)

    Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一) 本文目录: 一.[旋转的精灵女孩]案例运行效果 二.Three.js简介 三.Three.js代码正常运行显示条件 (1)不载入 ...

  7. java测试类 main方法_Java使用agent实现main方法之前的实例详解

    Java使用agent实现main方法之前的实例详解 创建Agent项目 PreMainExecutor 类,在main方法之前执行此方法 public class PreMainExecutor { ...

  8. java中匿名内部类详解_java 中匿名内部类的实例详解

    搜索热词 java 中匿名内部类的实例详解 原来的面貌: class TT extends Test{ void show() { System.out.println(s+"~~~哈哈&q ...

  9. java中将json字符串_Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

最新文章

  1. 4 Skills that will Dramatically Increase Your Chance of Thriving as a Multipotentialite2017-12-09
  2. Linux学习之系统编程篇:条件变量(pthread_cond_init / wait / signal / broadcast / destroy)
  3. 求两个集合是否有交集 c语言_高中数学:集合与函数概念知识点总结
  4. c#实现Socket网络编程
  5. Connection to node 0 (/192.168.204.131:9092) could not be established
  6. Java面向对象(14)--包装类的使用
  7. a href='?out=login'是什么意思
  8. java核心-多线程-Java多线程编程涉及到包、类
  9. C++中的STL--基本概念
  10. 【洛谷P3410】拍照题解(最大权闭合子图总结)
  11. 【分享】哪些句子一眼就会让你爱上
  12. 人类与AI结合的最佳形态是什么样?
  13. Linux-apache的编译安装1
  14. 普通人在互联网还有机会么?
  15. Swift翻译之-关于Swift
  16. 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第一节课笔记
  17. android 手机屏幕实际大小,揭秘手机屏幕误区 大尺寸≠大可视面积
  18. Adobe flash player ActiveX、NPAPI、PPAPI 的区别
  19. 新浪新闻发布Z世代洞察报告:Z世代偏爱深入“吃瓜” 对元宇宙兴趣强烈
  20. QLabel显示多行文本

热门文章

  1. 一哥答疑:数据工程师的出路在哪?
  2. 1286. 太空电梯
  3. Hive SQL执行mapreduce任务卡在Kill Command
  4. 时序分析 26 - 时序预测 Prophet包初探
  5. Spring Security 前后端分离
  6. 图像边界扩展及去除(普通方法)
  7. 睡你的人等不及,爱你的人等得起
  8. @跨境人 今日起,这些新规开始实施
  9. 2022年12月六级真题第1套(共8页)
  10. Mysql之更新数据_UPDATE