ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基于RBF神经网络的函数曲线拟合

2021-03-24 15:55:40  阅读:312  来源: 互联网

标签:曲线拟合 函数 神经网络 拟合 x2 RBF x1 径向


上次的微信小文中,我们通过在MATLAB中导入libsvm工具包,进行了函数拟合的实验。本次仿真实验中,我们使用RBF神经网络进行函数拟合。

1、RBF网络简介

径向基函数(Radical Basis Function, RBF)是多维空间插值的传统技术,是一种高效的前馈式神经网络,它具有其他前向网络所不具有的最佳逼近性能和全局最优特性,并且结构简单,训练速度快。其结构与多层前向网络类似,是一种三层的前向网络。第一层为输入层,由信号源结点组成;第二层为隐藏层,隐藏层节点数视所描述问题的需要而定,隐藏层中神经元的变换函数(径向基函数)是对中心点径向对称且衰减的非负非线性函数,该函数是局部响应函数;第三层为输出层,它对输入模式作出响应。

2、所用函数介绍

(1) newrb()

该函数可以用来设计一个近似(approximate)径向基网络。其调用格式为:

[net,tr]=newrb(P,T,GOAL,SPREAD,MN,DF)。

其中,P为Q组输入向量组成的R*Q维矩阵;T为Q组目标分类向量组成的S*Q 维矩阵;GOAL为均方误差目标(Mean Squared Error Goal),默认为0.0;SPREAD为径向基函数的扩展速度,默认为l;MN为神经元的最大数目,默认为Q;DF为两次显示之间所添加的神经元数目,默认为25;net与tr是该函数的返回值,前者为RBF网络,后者为训练记录。

(2)newrbe()

该函数用于设计一个精确径向基网络。其调用格式为:

net=newrbe(P,T,SPREAD)

其中,P为Q组输入向量组成的R*Q维矩阵;T为Q组目标分类向量组成的S*Q维矩阵;SPREAD为径向基函数的扩展速度,默认为1。

newrb()不同,newrbe()能够基于设计向量快速、无误差地设计一个径向基网络。

(3) radbas()

该函数为径向基传递函数。其调用格式为:

A=radbas(N)

info=radbas(code)

其中,N为输入(列)向量的S*Q维矩阵;A为函数返回矩阵,与N一一对应,即N中的每个元素通过径向基函数得到A; info=radbas(code)表示根据code值的不同返回有关函数的不同信息。包括

derive——返回导函数的名称。

name——返回函数全称。

output——返回输入范围。

active——返回可用输入范围。

3、仿真结果

在仿真实验中,所使用的待拟合函数为:

F=20+x12-10*cos(2*Π*x1)+x22-10*cos(2*Π*x2);

图片

图1 实验结果及误差

从实验结果来看,RBF神经网络拟合图像与原始的函数图像基本相同,将它们两者相减得到的结果作为误差,由误差图像可看出,RBF对非线性函数的拟合效果很好。


孙宁,重庆大学无线通信技术实验室硕士研究生,主研方向为AI在无线通信中的应用。


附:代码及注释

%%MATLAB标准三连

clc;clear;clear all

%%产生训练样本(训练输入,训练输出)

ld= 400;%ld 为样本例数

x = rand(2,ld);%产生2 *ld 的矩阵

x= (x - 0.5)*1.5 *2;%将x 转换到[-1.5 1.5]之间

x1 = x(1,:);%x 的第一行为x1,第二行为x2

x2 = x(2 ,:);

F=20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2);%构建需要拟合的函数

%%建立RBF 神经网络

net=newrb(x, F);%采用approximate RBF神经网络。spread为默认值

%%产生测试样本

interval=0.1 ;%步长,用于产生样本

[i, j] = meshgrid( - 1.5:interval:1.5);

row= size( i);

tx1 = i(:);

tx1 = tx1';

tx2 = j(:);

tx2 = tx2';

tx=[tx1; tx2];

ty = sim(net, tx);

%%画出函数三维图

interval = 0.1 ;

[x1, x2]=meshgrid(-1.5:interval:1.5);

F=20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2);

subplot(1, 3,1)

mesh(x1, x2, F);

zlim([0, 60] )

title('函数图像')

%%画出拟合的函数图像

v= reshape(ty, row);

subplot(1, 3, 2)

mesh(i,j,v);

zlim([0,60])

title('RBF拟合结果')

%%误差图像

subplot(1, 3, 3)

mesh(x1, x2, F-v);

zlim( [ 0,60])

title ('误差图像')

set(gcf, 'position', [300, 250, 900,400])



标签:曲线拟合,函数,神经网络,拟合,x2,RBF,x1,径向
来源: https://blog.51cto.com/15127585/2670713

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有