资源描述:
《matlab30个案例分析案例4代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、%%清空环境变量clccleartic%%训练数据预测数据提取及归一化%下载输入输出数据loaddatainputoutput%从1到2000间随机排序k=rand(1,4000);[m,n]=sort(k);%找出训练数据和预测数据input_train=input(n(1:3900),:)';output_train=output(n(1:3900),:)';input_test=input(n(3901:4000),:)';output_test=output(n(3901:4000),:)';%选连样本输入输出数据归一
2、化[inputn,inputps]=mapminmax(input_train);[outputn,outputps]=mapminmax(output_train);%%BP网络训练%%初始化网络结构net=newff(inputn,outputn,5);net.trainParam.epochs=100;net.trainParam.lr=0.1;net.trainParam.goal=0.0000004;%网络训练net=train(net,inputn,outputn);%%BP网络预测%预测数据归一化inputn_t
3、est=mapminmax('apply',input_test,inputps);%网络预测输出an=sim(net,inputn_test);%网络输出反归一化BPoutput=mapminmax('reverse',an,outputps);%%结果分析figure(1)plot(BPoutput,':og')holdonplot(output_test,'-*');legend('预测输出','期望输出','fontsize',12)title('BP网络预测输出','fontsize',12)xlabel('样本',
4、'fontsize',12)ylabel('输出','fontsize',12)print-dtiff-r6004-3%预测误差error=BPoutput-output_test;figure(2)plot(error,'-*')title('神经网络预测误差')figure(3)plot((output_test-BPoutput)./BPoutput,'-*');title('神经网络预测误差百分比')errorsum=sum(abs(error))tocsavedatanetinputpsoutputpsfunctio
5、nret=Code(lenchrom,bound)%本函数将变量编码成染色体,用于随机初始化一个种群%lenchrominput:染色体长度%boundinput:变量的取值范围%retoutput:染色体的编码值flag=0;whileflag==0pick=rand(1,length(lenchrom));ret=bound(:,1)'+(bound(:,2)-bound(:,1))'.*pick;%线性插值,编码结果以实数向量存入ret中flag=test(lenchrom,bound,ret);%检验染色体的可行性en
6、dfunctionret=Cross(pcross,lenchrom,chrom,sizepop,bound)%本函数完成交叉操作%pcorssinput:交叉概率%lenchrominput:染色体的长度%chrominput:染色体群%sizepopinput:种群规模%retoutput:交叉后的染色体fori=1:sizepop%每一轮for循环中,可能会进行一次交叉操作,染色体是随机选择的,交叉位置也是随机选择的,%但该轮for循环中是否进行交叉操作则由交叉概率决定(continue控制)%随机选择两个染色体进行交叉
7、pick=rand(1,2);whileprod(pick)==0pick=rand(1,2);endindex=ceil(pick.*sizepop);%交叉概率决定是否进行交叉pick=rand;whilepick==0pick=rand;endifpick>pcrosscontinue;endflag=0;whileflag==0%随机选择交叉位pick=rand;whilepick==0pick=rand;endpos=ceil(pick.*sum(lenchrom));%随机选择进行交叉的位置,即选择第几个变量进行交
8、叉,注意:两个染色体交叉的位置相同pick=rand;%交叉开始v1=chrom(index(1),pos);v2=chrom(index(2),pos);chrom(index(1),pos)=pick*v2+(1-pick)*v1;chrom(index(2),pos)=