基于RBF改进-实验报告_第1页
基于RBF改进-实验报告_第2页
基于RBF改进-实验报告_第3页
基于RBF改进-实验报告_第4页
基于RBF改进-实验报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于RBF的回热系统故障诊断RBF实验名称:基于RBF的回热系统故障诊断。RBF神经网络优点及结构:尽管BP神经网络具有很好的非线性映射能力和灵活的网络结构等优点,但存在着收敛速度慢缺点。而RBF神经网络无论在逼近能力、分类能力和学习速度等方面均优于BP神经网络。RBF神经网络结构和BP神经网络类似,都属于多层前向网络。典型的RBF神经网络由输入层、隐含层、输出层组成,其结构如图一所示。 图一 RBF神经网络结构图 其中输入层由输入信号的源节点组成, 第二层为隐含层,第三层为输出层,输出神经网络对输入的响应。其中隐含层的激活函数称为径向函数(RBF),该函数是一种局部分布的关于中心点对称的非负

2、非线性函数,实现了从输入空间到隐含层空间的非线性变换;而隐含层空间到输出层空间的变换是线性的,使隐含层的输出按权值叠加,得到RBF网络的输出。构成RBF的基本思想是:用RBF作为隐含层节点的“基”构成隐含层空间,这样就可以将输入向量直接(不通过权连接)映射到隐含层空间。当RBF的中心和宽度确定后,这样映射关系就确定了。而隐含层空间到输出层空间的映射是线性的,即网络的输出是隐含层节点输出的线性加权和。此处的权即为网络可调参数。由此可见,从总体上看,网络由输入到输出的映射是非线性的,然而网络输出对可调参数而言却是线性的。这样网络的权就可由线性方程组解出或用RLS方法递推计算,从而大大加快学习速度并

3、避免局部极小问题。这也是RBF神经网络的优势存在。 这里描述RBF神经网络的构造;RBF神经网络的隐含层由一组径向基函数构成,与每个隐含层节点相关的参数向量为中心Cj和宽度j。隐含层节点计算输入与中心的欧几里得范数作为径向基函数的自变量rj2。典型的径向基函数有很多,但是我们在此处选用uj=exp(-rj2/c2)(高斯函数)作为径向函数;隐含层的输出按权值叠加,得到RBF网络输出。假设RBF神经网络输出层、隐含层,、输出层的节点数为I、J、K,当输入为X=(x1,x2,x3,xn)时,隐含层第j个神经元的输出为: (j=1,2,3,J)其中为高斯基函数的中心,是一个I维的向量;宽度也就是高斯

4、基函数的方差,是一个数值量。输出层由隐含层输出线性组合而成,其第k个神经元输出为: (k=1,2,3,K)实验流程:开始初始化,读取所要训练的样本数据和设定的目标向量,直接调用matlab里面的程序,对隐含层和输出层各单元的权值和输出进行求解,在进行计算目标值和实际输出的偏差E,判断E是否满足设定要求,如果所有误差都能满足设定值,就可以跳出程序,结束本次计算;如果不满足,则要再次进行隐含层的误差计算,求误差梯度,进行权值学习,再次进行计算。进行训练成功以后,再将测试样本数据带入网络进行测试,得到实验结果,根据实验结果判断故障类型。RBF神经网络的学习算法:而对于RBF神经网络主要训练的参数主要

5、是基函数的中心、宽度以及隐含层和输出层的连接权值。选择梯度下降法作为简述过程。首先定义目标函数: M表示训练样本的个数;代表样本m的误差,计算公式为。梯度下降法得到的更新值为: ,为学习系数,也称为学习率。 对于正交最小二乘法是常用的RBF网络学习方法,其基本思想是将径向基函数的中心选作训练样本的子集,用误差下降率答方法衡量每个样本对输出的贡献,调整网络的结构和中心,知道满足设定的静止条件。MATLAB的神经网络工具箱中构建RBF神经网络的newrb函数就是使用正交最小二乘法实现的,其基本原理是从0个神经网络开始训练,通过检查输出误差,使网络自动增加神经元,每次循环使用,是网络产生的最大误差所

6、对应得输入向量作为中心,产生一个新的隐含层神经元,然后检查新网络的误差,重复此过程直至达到误差要求或最大隐含层神经元数为止。使用该函数构造RBF神经网络,需要设定参数spread(扩展系数),对应式高斯函数的宽度j,因此设计RBF神经网络时需要反复尝试不同的spread值,以取得较好的结果。实例研究故障模式表格及其征兆变化,如下表一所示:表一:序号故障模式征兆变化(1,2,3,9)A排油管道逆止阀卡涩稍小不变稍小不变稍小稍小不变不变稍小B排气管道排气不畅稍小不变不变不变稍小稍小变大不变不变C排气管道排气量过大稍大不变稍大不变稍小稍小变大不变不变D加热管束污染、结垢稍小不变不变不变变小变小变大不

7、变稍大E加热器内部水侧短路稍小不变不变不变变小变小变大不变不变F加热器内部管系泄漏变大不变稍大不变变小变小变大变大稍小G疏水不畅稍小不变不变不变稍小稍小变大稍大不变H加热器旁路阀故障稍大不变不变不变不变不变不变变小变大J疏水器故障稍小不变不变不变不变变小不变不变不变I加热器满水稍小不变不变不变稍小变小变大变大不变K除氧器排气带水不变不变不变不变不变不变不变变大不变L除氧器自身沸腾稍小稍大变大不变变大不变不变变大不变M运行正常不变不变不变不变不变不变不变不变不变首先给出训练参数,如下表二所示:表二:对应故障加热器特征参数值123456789A0.250.400.250.50.50.50.250.

8、50.25B0.250.400.500.500.500.500.750.500.50C0.750.600.750.500.500.500.500.500.50D0.250.400.500.500.250.250.500.500.75E0.250.400.500.500.000.001.000.500.50F0.750.600.750.500.250.250.751.000.25G0.250.400.500.500.500.500.750.750.50H0.750.600.500.500.750.750.250.001.00I0.250.400.500.500.750.250.250.500.5

9、0J0.250.400.500.500.250.250.751.000.50K0.500.500.500.500.750.750.251.000.50L0.2500.750.750.501.001.000.251.000.50M0.500.500.500.500.750.750.250.500.50由上述数据训练一个RBF神经网络然后给出两组测试数据,如表三、表四所示:表三:诊断输入0.5890.4950.6580.50360.81750.750.250.9310.5类型各故障隶度ABCDEFGHIJKLMRBF-0.15550.01970.1308-0.0907-0.0459-0.0103-

10、0.0082-0.04320.05530.25010.90820.08280.1069BP0.00050.00000.00510.00000.00000.01410.00390.00000.00000.00020.90300.07550.0403诊断结果除氧器排气带水表四:诊断输入0.79340.46840.77900.52800.28850.28310.69790.81980.2247诊断输出类型各种故障隶属度ABCDEFGHIJKLMRBF0.0591-0.07670.2833-0.01840.06820.91220.1501-0.03230.0070-0.1371-0.0183-0.00

11、79-0.0892BP0.00220.0000.07750.00000.00160.90710.00620.00020.00010.00050.00230.00130.0001诊断结果加热管内部管系泄露RBF实验程序:P=0.25,0.40,0.25,0.50,0.50,0.50,0.25,0.50,0.25; 0.25,0.40,0.50,0.50,0.50,0.50,0.75,0.50,0.50; 0.75,0.60,0.75,0.50,0.50,0.50,0.50,0.50,0.50; 0.25,0.40,0.50,0.50,0.25,0.25,0.50,0.50,0.75; 0.25,

12、0.40,0.50,0.50,0.00,0.00,1.00,0.50,0.50; 0.75,0.60,0.75,0.50,0.25,0.25,0.75,1.00,0.25; 0.25,0.40,0.50,0.50,0.50,0.50,0.75,0.75,0.50; 0.75,0.60,0.50,0.50,0.75,0.75,0.25,0.00,1.00; 0.25,0.40,0.50,0.50,0.75,0.25,0.25,0.50,0.50; 0.25,0.40,0.50,0.50,0.25,0.25,0.75,1.00,0.50; 0.50,0.50,0.50,0.50,0.75,0.75

13、,0.25,1.00,0.50; 0.25,0.75,0.75,0.50,1.00,1.00,0.25,1.00,0.50; 0.50,0.50,0.50,0.50,0.75,0.75,0.25,0.50,0.50;T=1,0,0,0,0,0,0,0,0,0,0,0,0; 0,1,0,0,0,0,0,0,0,0,0,0,0; 0,0,1,0,0,0,0,0,0,0,0,0,0; 0,0,0,1,0,0,0,0,0,0,0,0,0; 0,0,0,0,1,0,0,0,0,0,0,0,0; 0,0,0,0,0,1,0,0,0,0,0,0,0; 0,0,0,0,0,0,1,0,0,0,0,0,0; 0

14、,0,0,0,0,0,0,1,0,0,0,0,0; 0,0,0,0,0,0,0,0,1,0,0,0,0; 0,0,0,0,0,0,0,0,0,1,0,0,0; 0,0,0,0,0,0,0,0,0,0,1,0,0; 0,0,0,0,0,0,0,0,0,0,0,1,0; 0,0,0,0,0,0,0,0,0,0,0,0,1;P=P;T=T;spread=0.82;net=newrbe(P,T,spread);%对test1进行故障诊断p1=0.589,0.495,0.658,0.5036,0.8175,0.75,0.25,0.931,0.5;%对网络进行仿真y1=sim(net,p1);type1=

15、y1%对test2进行故障诊断p2=0.7934,0.4684,0.7790,0.5280,0.2885,0.2831,0.6979,0.8198,0.2247;y2=sim(net,p2);type2=y2RBF实验程序测试实验结果如下图所示:spread=0.5时的诊断结果 spread=0.7时的诊断结果spread=0.8时的诊断结果由实验数据显示,当spread扩展系数的减小,对应故障输出的概率就越接近1,也就是说,故障诊断的准确性就越高,精度越高。由此可看,相比与BP神经网络,RBF网络有更好的诊断效果。附录资料:不需要的可以自行删除c语言典型问题处理方法小结循环问题(1)、数论问

16、题1、求素数 for(i=2;i1,如果它仅有平凡约数1和a,则我们称a为素数(或质数)。整数 1 被称为基数,它既不是质数也不是合数。整数 0 和所有负整数既不是素数,也不是合数。 2、求最大公约数和最小公倍数a、 if(ab) t=a; a=b; b=t; for(i=a;i=1;i-) if(a%i=0&b%i=0) break; printf(largest common divisor:%dn,i); printf(least common multiple:%dn,(a*b)/is);b、辗转相除法求解 a1=a; b1=b; while(a%b!=0) t=a%b; a=b; b

17、=t; printf(largest common divisor:%dnleast common multiple:%d,b,a1*b1/b);3、求完数 一个数如果恰好等于它的因子之和,这个数就称为“完数”。 例如:6的因子为1、2、3,而6123,因此6是“完数”。for(a=1;a=1000;a+) s=0; for(i=1;i=a) break; if(s=a) printf(%dt,a);注意S=0所放的位置 4、分解质因数 将一个整数写成几个质因数的连乘积,如: 输入36,则程序输出36=2*2*3*3 。解一、看似简单,但要自己完整地写出来还真不容易!竟然还动用了goto语句,

18、正好可以熟悉一下goto语句的用法!main() int a,z,i; clrscr(); scanf(%d,&a);判断下一个数开始有要重新从2开始了。所以用loop语句回到for语句,这是for语句仍从2初始化。从2开始的原则不变,变的是a的值。 loop: for(z=2;z=a;z+)判断是否为质数for(i=2;i=z;i+) if(z%i=0) break;判断是否为a的质因数 if(z=i) if(a%z=0) k+; if(k=1) printf(%d=%d,a1,z);用计数器来解决每行输入不同的问题。 else printf(*%d,z); a/=z; goto loop;

19、 解二:main() int n, k=2, isfirst=1; printf(Input n=); scanf(%d,&n); while(k=n) if(n%k=0) if(isfirst) printf(%d=%d, n, k); isfirst=0; else printf(*%d,k); n/=k; else k+; printf(n);5、从键盘输入两个整数,输出这两个整数的商的小数点后所有1000位整数 for(i=1;i=2;i-) if(fm%i=0&fz%i=0) fz/=i; fm/=i; z=fz/fm; fzx=fz%fm; if(fzx=0) printf(%d%

20、d/%d-%d%d/%d=%dn,z1,fz1,fm1,z2,fz2,fm2,z); else if(z=0) printf(%d%d/%d-%d%d/%d=%d/%dn,z1,fz1,fm1,z2,fz2,fm2,fzx,fm); else printf(%d%d/%d-%d%d/%d=%d%d/%dn,z1,fz1,fm1,z2,fz2,fm2,z,fzx,fm);(2)近似问题1、书P122习题4-6注意千万不要忘记添加#include “math.h”#include math.hmain() float x,j=1,k,s,so; int n; scanf(%f,&x); s=x;

21、so=x+1; for(n=1;fabs(s-so)1e-6;n+) for(k=1;k1e-6) x=(x1+x2)/2; f=x*x*x+4*x*x-10;可以用/*if(f*f10) x2=x; else x1=x; printf(%fn,x);(3)枚举法(4)数列问题二、数组问题(1)排序问题1、从小到大排序main() int a10,i,j,t; for(i=0;i10;i+) scanf(%d,&ai); for(i=1;i10;i+) for(j=0;jaj+1) t=aj+1;aj+1=aj;aj=t; for(i=0;i10;i+) printf(%d ,ai); pri

22、ntf(n);注意排序问题:1、须迅速,熟练,无差错经常插入在程序中间2、现使用最大数下沉冒泡法还可以使用最小数上浮冒泡法3、j控制前面一个数和后面一个数一一比较。由于是最大数下沉,i+1后j仍要从0开始。4、i控制这样的操作一共要做多少次5、注意i j的控制次数2、从大到小排序main()现使用最大数上浮冒泡法还可使用最小数下沉冒泡法 int a10,i,j,t; for(i=0;i10;i+) scanf(%d,&ai); for(i=1;i=i;j-) if(ajaj-1) t=aj-1; aj-1=aj; aj=t; for(i=0;i10;i+) printf(%d ,ai);(2)

23、二维数组三、字符或字符串输入输出问题(1)字符打印1、打印*此类题的溯源为书P122 4.11(1),其他题都是它的拓展 for (i=1;i=n;i+) 一共要输出的行数 for(j=1;j=i;j+) 每行要打印的*数 printf(*); printf(n); a、*解题要点:此类题关键在于找到每行要打印的个数和行数的关系。此题j=i j=n-i+1b、* for(i=1;i=n;i+) 一共要输出的行数 for(j=1;j=n-i;j+) 控制空格数 printf( ); for(k=1;k=i;k+) 每行要打印的*数 printf(*); printf(n); c、 * * *解题

24、要点:在出现空格的时候,在找到每行要打印的*个数和行数的关系后,还应找到空格和行数的关系,分不同的参数进行循环。此题k=i j=n-i j=i-1k=n-i+1d、* * for(i=1;i=n;i+) for(j=1;j=n-i;j+) printf( ); for(k=1;k=2*i-1;k+) printf(*); printf(n); * *e、 * * * for(i=1;i=n-1;i+) for(j=1;j=i;j+) printf( ); for(k=1;k=2*(n-1-i)+1;k+) printf(*); printf(n); for(i=1;i=n;i+) for(j=

25、1;j=n-i;j+) printf( ); for(k=1;k=2*i-1;k+) printf(*); printf(n); * * * * * *2、打印9*9乘法表解题要点:注意寻找行与列的规律。i*ji代表列j代表行for(i=1;i=9;i+) for(j=1;j=9;j+) printf(%-3d ,i*j); 注意输出格式的控制 printf(n); 3、九九乘法表1 2 3 4 5 6 7 8 92 4 6 8 10 12 14 16 183 6 9 12 15 18 21 24 27 9 18 27 36 45 54 63 72 814、杨晖三角形11 11 2 11 3

26、3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1(2)字符串打印问题for(i=1;i=7;i+) ai1=1; aii=1; for(i=3;i=7;i+) for(j=2;j=i-1;j+) aij=ai-1j-1+ai-1j; gets(a); puts(a); for(i=1;i0;j-) aj=aj-1; a0=t; for(k=0;k=a&ai=z) ai-=32; puts (a);3、逆序输出gets (a); c=strlen(a); for(i=0;i=0;i-) 蓝色部分可以简写为绿色部分coutai-1;4、如输入:ab1 3,;z 输

27、出:ab1注意点:1、= =2、while语句的使用处体会3、全面考虑问题 3,;zgets(a); while(a0= ) for(i=0;ai!=0;i+) ai=ai+1; for(i=0;ai!=0;i+)if(ai= &ai+1!= ) printf(n); else if(ai= &ai+1= ) for(k=i;ak!=0;k+) ak+1=ak+2; i-; elseprintf(%c,ai);5、输入3个字符串,按从小到大排序输出这3个字符串。 使用一个两维数组贮存多个字符串char a8181;注意:如何使用一个两维数组贮存多个字符串 int i,j; for(i=0;i3

28、;i+) gets(ai); for(i=0;i3;i+) puts(ai);注意:1、scanf(%d%s,&n,str) 其中%s为字符串格式2、逐个给字符串赋值的方法见书140页。 不可for(i=0;ai!=0;i+)3、stri=stri-A+10;4、pow函数5、任何进制转为十进制的方法6、输入一个整数n和一个字符串str,计算并输出n进制数str的值。 如输入:7 16则输出:13(16)7=(13)10如输入:16 3A则输出:58(3A)16=(58)10#include stdio.h#include math.hmain() char str81; int n,i,s=

29、0,t; clrscr(); scanf(%d%s,&n,str); for(i=0;stri!=0;i+) if(stri=A) stri=stri-A+10; else stri=stri-0; t=strlen(str); for(i=0;stri!=0;i+) s+=strt-i-1*pow(n,i); printf(%d,s);编写程序,将一个十进制正整数转换成十六进制数。 注意类比#include main()char a20;int x,i=0,j;clrscr();scanf(%d,&x);while(x) if(x%16=10&x%16=0;j-)printf(%c,aj);

30、printf(n);7、输入一个字符串,将其中的缩写形式展开,并输出展开后的该字符串。所谓展开缩写形式就是将其中由大小写字母或数字构成的形如a-f、U-Z、3-8 的形式展开成为 abcdef 、UVWXYZ 、345678,若出现f-a、A-7、9-5等形式则不予理睬。例如: 输入:qwe246e-hA-d$-%4-7A-Dz-xp-R4-0输出:qwr246efghA-d$-%4567ABCDz-xp-R4-0main() char a81; int i,c,s,k,t; gets(a); for(i=0;ai!=0;i+) if(ai=-) if(ai-1=A&ai+1=a&ai+1=0

31、&ai+1i;k-)ak+c-2=ak;as-1+c-2+1=0; for(;i=t;i+) ai=ai-1+1; puts(a);补充:循环:求:a+aa+aaa+.的值#includevoid main()int a,n,i=1,sn=0,tn=0;coutinput a and nan;while(i=n)tn=tn+a;sn+=tn;a*=10;i+;coutthe answer is snendl;两个乒乓球队进行比赛,各出3人。甲队为A,B,C;已对是X,Y,Z;已经抽签决定比赛名单。有人向队员大厅比赛的名单。A说他不和X比,C说他不和X,Z比。请编程序找出3对赛手的名单。#inc

32、ludevoid main()char i,j,k;for(i=X;i=Z;i+)for(j=X;j=Z;j+)if(i!=j)for (k=X;k=Z;k+)if(i!=k&j!=k)if(i!=X&k!=X&k!=Z)coutA-i B-j C-kendl;枚举口袋中有红,黄,蓝,白,黑5种颜色的球若干。每次从口袋中任意取出3歌,问得到3种不同颜色球的可能取法,输出每种排列的情况。#include#include /在C语言中不用加这句void main()enum colorred ,yellow ,blue,white, black;color pri;int i,j,k,n=0,lo

33、op;for(i=red;i=black;i+)for(j=red;j=black;j+)if(i!=j)for (k=red;k=black;k+)if(k!=i)&(k!=j)n+;coutsetw(3)n; /setw是输出格式的限定for(loop=1;loop=3;loop+)switch(loop)case 1:pri=color(i);break;case 2:pri=color(j);break;case 3:pri=color(k);break;default:break;switch(pri)case red:coutsetw(8)red;break;case yellow

34、:coutsetw(8)yellow;break;case blue:coutsetw(8)blue;break;case white:coutsetw(8)white;break;case black:coutsetw(8)black;break;default:break;coutendl;couttotal:nendl;数组:不用strcat函数,编写程序,将两个字符串串接起来。#includeusing namespace std;void main()int i=0;char a20,b10;gets(a);gets(b);for(i=0;i10;i+)if(ai=0)break;for(int j=0;j10;j+)ai=bj;i+;if(bj=0)break;coutaendl;输入一行字符,统计其中有多少个单词,单词之间用空格分开。#includeusing namespace st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论