RBF函数在神经网络控制中较为常见,MATLAB中早已集成了一个newrb的函数,在一些场景下使用起来还比较方便。尤其是涉及到进行函数逼近的时候。
参考链接

  • http://blog.sina.com.cn/s/blog_9b8d0abd0101o7rn.html
  • https://blog.csdn.net/m0_37602827/article/details/87691307

基本用法

NEWRB Design a radial basis network.
Synopsis
[net,tr] = newrb(P,T,GOAL,SPREAD,MN,DF)
Description
Radial basis networks can be used to approximate functions. NEWRB adds neurons to the hidden layer of a radial basis network until it meets the specified mean squared error goal.

NEWRB(P,T,GOAL,SPREAD,MN,DF) takes these arguments,
P - RxQ matrix of Q input vectors.
T - SxQ matrix of Q target class vectors.
GOAL - Mean squared error goal, default = 0.0.
SPREAD - Spread of radial basis functions, default = 1.0.
MN - Maximum number of neurons, default is Q.
DF - Number of neurons to add between displays, default = 25.
and returns a new radial basis network.

newrb设计了径向基网络,调用格式:
net = newrb
[net,tr] = newrb(P,T,goal,spread,MN,DF)
P-Q组输入向量组成的R×Q维矩阵;
T-Q组目标分类向量组成的S×Q维矩阵;
goal-均方误差,默认值为0;
spread-径向基函数的扩展速度,默认值为1;
MN-神经元的最大数目,默认是Q
DF-两次显示之间所添加的神经元数目,默认值为25;
net-返回值,一个径向基网络;
tr-返回值,训练纪录。
该函数设计的径向基网络net可用于函数逼近。径向基函数的扩展速度spread越大,函数的拟合就越平滑。但是,过大的spread意味着需要非常多的神经元以适应函数的快速变化。如果spread设定过小,则意味着需要许多神经元来适应函数的缓慢变化,这样一来,设计的网络性能就不会很好。

示例

%%%%%%%%%%一元函数逼近%%%%%%%%%%
clear,clc;
x=linspace(-20,20,100); %神经网络输入值
t=10*x-30*sin(x)-80*tansig(x); %神经网络目标值
plot(x,t,'+'); %待逼近的函数图像
hold on
net=newrb(x,t,1,2); %平方和误差小于1
y=net(x);%神经网络输出值
plot(x,y,'g'); %仿真的函数图像
title('RBF神经网络函数逼近');
xlabel('输入值');
ylabel('目标值/输出值');
mse(y,t) %平方和误差
%%%%%%%%%%二元函数逼近%%%%%%%%%%
clear,clc
t=0:0.1:10*pi; %辅助参数
x=(t+0.5*pi).*sin(t+0.5*pi); %神经网络输入值(指标1)
y=(t+0.5*pi).*cos(t+0.5*pi); %神经网络输入值(指标2)
z=1.5*t; %神经网络目标值
net=newrb([x;y],z,0.001,2); %平方和误差小于0.001
zf=net([x;y]);%神经网络输出值
plot3(x,y,zf,'r'); %仿真的函数图像
hold on
plot3(x,y,z,'+'); %待逼近的函数图像
title('RBF神经网络函数逼近');
xlabel('输入值(指标1)');
ylabel('输入值(指标2)');
zlabel('目标值/输出值');
grid on
mse(zf,z) %平方和误差

注意事项

首先应该特别注意数据的维度,对于上面的P和T,P是R×Q维矩阵,其中R是输入层神经元数目(即输入个数),Q是有多少组数据;T是S×Q维矩阵,其中S是输出层神经元数目(即输出个数),Q与输入应对应。

网络结构

得到的net网络,输入net可以直接查看其参数,
查看RBF网络的参数和查看BP网络的参数都是一样的方法,MATLAB的命令为net.IW{1},net.LW{2},net.b,只是代表的意义不一样,在BP里面net.IW{1}是输入层到隐藏层的权重,net.LW{2}是隐藏层到输出层的权重,net.b是阈值;在RBF里面,net.IW{1}就是各神经元的基向量,net.LW{2}是隐藏层到输出层的权重,net.b{1}是基宽,net.b{2}是输出层的阈值,比如下面这个例子:

% 下面例子中有几处转置,是为了符合平时表达习惯设置的,具体使用时需要注意不要因此出错,
% 尤其是当数据不是一维时可能会和下面不太一样
clear all
P = [1 2 3];
T = [2.0 4.1 5.9];
net = newrbe(P,T);
c = net.iw{1}'        % 注意转置
W = net.lw{2}
b = net.b{1}
bi= net.b{2}x = [0];
for j=1:1:3h(j)=exp(-norm(x'-c(:,j))^2*(b(j)^2))
end% 下面三个式子得出的结果是一样的
W*h'+bi    % 注意转置
net(0)
0.56*exp(-(0.83225*sqrt((2-0)^2 ))^2 )+4.16*exp(-(0.83225*sqrt((3-0)^2 ))^2 )+1.46

利用MATLAB中的newrb函数进行函数逼近相关推荐

  1. Matlab中用于数据预测spline()函数的使用

    Matlab中用于数据预测spline()函数的使用 ​ 再matlab中spline函数是利用三次方样条数据插值 语法 s = spline(x,y,xq) pp = spline(x,y) s = ...

  2. matlab中load seamout,matlab中的save与load函数

    matlab中的save与load函数 用save函数,可以将工作空间的变量保存成txt文件或mat文件等. 比如: save peng.mat p j 就是将工作空间中的p和j变量保存在peng.m ...

  3. 邹检验 matlab,科学网—Matlab中一个很有用的函数:regionprops - 邹兴文的博文

    Matlab中一个很有用的函数:regionprops 已有 6712 次阅读 2010-1-30 22:52 |个人分类:开发经验|系统分类:科研笔记| 有用的函数, regionprops Mat ...

  4. 函数调用matlab,Matlab中一个函数调用另外一个函数的操作方法

    这篇文章为各位带来的内容是Matlab中一个函数调用另外一个函数相关的,对此感兴趣的用户可以去下文看看Matlab中一个函数调用另外一个函数的操作教程. Matlab中一个函数调用另外一个函数的操作方 ...

  5. matlab怎么调用主函数,Matlab中一个函数调用另外一个函数的操作步骤

    原创Matlab中一个函数调用另外一个函数的操作步骤 编辑:小安 来源:PC下载网时间:2019-11-18 13:27:35 最近很多伙伴才刚刚安装入手Matlab这款软件,而本节就重点介绍了关于M ...

  6. Matlab中产生正态分布随机数的函数normrnd-----用来产生高斯随机矩阵

     Matlab中产生正态分布随机数的函数normrnd-----用来产生高斯随机矩阵 功能:生成服从正态分布的随机数 语法: R=normrnd(MU,SIGMA) R=normrnd(MU,SI ...

  7. Matlab中print, fprint, fscanf, disp函数的用法

    最近一直在用python,导致学习的一些函数就有点混淆,趁着这会儿看代码,就再回顾下Matlab中print, fprint, fscanf, disp函数的用法 一.print() 函数可以把函数图 ...

  8. matlab2018中变压器模块,利用MATLAB中Sim+Power+Systems模库时变压器模型的参数计算及其仿真结果比较...

    [实例简介] 变压器模型 matlab 仿真 参数计算 第21卷第1期向秋风,等:利用 MATLAB中 Sim Power System模库时变压器模型的参数计算及其仿真结果比较 17 其标幺值:R= ...

  9. 利用MATLAB中 MuPADNotebook组件将程序语言表达式转为数学表达式

    前言 在论文写作或数模竞赛中,常需要把已经在程序中列写好的方程或表达式转为数学表达式,呈现在论文或其他书面文本中,利用MATLAB中 MuPADNotebook组件可以在保证高转换准确度的同时,提高我 ...

最新文章

  1. 从sql中image类型字段中导出图片
  2. Linux下通过源码编译安装程序
  3. 《Unity开发实战》——3.9节鼠标悬停时高亮显示材质
  4. 安卓 屏蔽子控件点击事件
  5. dell笔记本电脑驱动_笔记本电脑摄像头打不开,怎么办?总结经验(基于摄像头本身是完好的)...
  6. python 购物车分析_python 简易购物车程序解析
  7. Java基础知识面试题(2020最新版)
  8. 爬虫 + 数据分析 - 7 CrawlSpider(全站爬取), 分布式, 增量式爬虫
  9. lpush rpush 区别_redis中lpush、rpush、lset、lrem是什么
  10. CMYK与RGB颜色区别
  11. 半球贴180度全景图片
  12. 镜像电流源特点_镜像电流源原理及其应用电路
  13. Python Parser的用法
  14. 如何把流程图转换为软件设计(初稿)
  15. ArcGIS API for JavaScript 4.X Basemap类(史上最全)
  16. uwp windows_如何在Windows 10的UWP游戏中监视FPS
  17. Python爬虫入门【19】: B站博人传评论数据抓取 scrapy
  18. python爬取网上租房信息_用python爬取租房网站信息的代码
  19. JSON从入门到大师
  20. vue.esm.js?efeb:571 [Vue warn]: Property or method subItem is not defined on the instance but refe

热门文章

  1. Vue+ElementUI 关于兼容浏览器的问题
  2. .net 6.0 RijndaelManaged 解码变化
  3. 数据科学猫:数据预处理 之 数据分箱(Binning)
  4. Hold住政务云“新蓝海”,华为云“立而不破”
  5. Python小白数据科学教程:SciPy精讲
  6. 验证概念(四)验证点的提取和执行
  7. gcc安装报错解决方法
  8. node.js 记录 第二天
  9. 截取Excel字符串的部分字符
  10. C语言 去掉字符串首尾两端特定字符之外的其余特定字符