bsm公式的matlab代码_matlab的bp算法源代码(仅供参考)

clear

%数据输入

huanghe_p=[370 503 434 575 490 420 560 640 558 343 326 405 446 423 422 697 598 377 435 472 451 667 601 689 541 485 425 389 382 707 422];

huanghe_t=[515 713 586 753 720 567 717 987 810 489 453 589 639 568 595 982 849 519 615 652 599 941 893 999 758 701 630 561 520 1040 535];

%归一化处理

p=(huanghe_p-min(huanghe_p))/(max(huanghe_p)-min(huanghe_p));

t=(huanghe_t-min(huanghe_t))/(max(huanghe_t)-min(huanghe_t));

%数据输入2:网络有关参数

EPOCHS=10000;

GOAL=0.000005;

%建立bp神经网络,并训练,仿真。其中输入为p,输出为t

%-------------------------隐层神经元确定-----------------------------

s=3:15;%s 为常向量,表示神经元的个数

res=zeros(size(s));%res将要存储误差向量,这里先置零

pn=[p(1:5);p(6:10);p(11:15);p(16:20)];

tn=[t(1:5);t(6:10);t(11:15);t(16:20)];

for i=1:length(s)

net=newff(minmax(pn),[s(i),4],{'tansig','purelin'},'trainlm');

net.iw{1,1}=zeros(size(net.iw{1,1}))+0.5;

net.lw{2,1}=zeros(size(net.lw{2,1}))+0.75;

net.b{1,1}=zeros(size(net.b{1,1}))+0.5;

net.b{2,1}=zeros(size(net.b{2,1}));

net.trainParam.epochs=EPOCHS;

net.trainParam.goal =GOAL;

net=train(net,pn,tn);

y=sim(net,pn);

e=tn-y;

error=mse(e,net);

res(i)=norm(error);

end

%选取最优神经元数,number为使得误差最小的隐层神经元个数

number=find(res==min(res));

if(length(number)&gt1) no=number(1)

else no=number

end

clear error,res

%选定隐层神经元数目后,建立网络,训练仿真。

net=newff(minmax(pn),[no,4],{'tansig','purelin'},'trainlm');

net.iw{1,1}=zeros(size(net.iw{1,1}))+0.5;

net.lw{2,1}=zeros(size(net.lw{2,1}))+0.75;

net.b{1,1}=zeros(size(net.b{1,1}))+0.5;

net.b{2,1}=zeros(size(net.b{2,1}));

net.trainParam.epochs=EPOCHS;

net.trainParam.goal =GOAL;

net=train(net,pn,tn);

y=sim(net,pn);

e=tn-y;

error=mse(e,net)%error为网络的误差向量

r=norm(error);%r为网络的整体误差

save net %保存最好的网络

%预测

input=[p(11:15);p(16:20);p(21:25);p(26:30)];

yuce=sim(net,input);

%结果反归一化

y1=[y(1,:) y(2,:) y(3,:) y(4,:)];

yuce1=[yuce(1,:) yuce(2,:) yuce(3,:) yuce(4,:)];

t1=y1*(max(huanghe_t(1:20))-min(huanghe_t(1:20)))+min(huanghe_t(1:20));

yuce2=yuce1*(max(huanghe_t(1:20))-min(huanghe_t(1:20)))+min(huanghe_t(1:20));

%计算误差

wucha=abs(t1-huanghe_t(1:20))./huanghe_t(1:20)

b=minmax(wucha);

average_wucha=mean(wucha);

%作图

figure(1)

plot(1:20,huanghe_t(1:20),'*-',1:20,t1,'o:')

figure(2)

plot(1:20,huanghe_t(11:30),'*-',1:20,yuce2,'o:')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值