资源简介

matlab写的BP算法用于相机标定(非工具箱) 具体的操作参见说明

资源截图

代码片段和文件信息

clear all
clc
close all
%% 函数为  f1=x+y*z/w  f2=(x-y)*z  f3=x/y+z;
tic;
NNN=30;
load Two_camera8;                %
if NNN>length(weizhi)
   NNN=length(weizhi);
end
%%
weizhi_all=weizhi(1:NNN:);
m=max(max(weizhi_all));
n=min(min(weizhi_all));
a=0.9;
weizhi_all=(weizhi_all-n)/(m-n)*a+(1-a)/2;
D=weizhi_all;   
    wo=D‘;
    wo_1=wo;wo_2=wo;wo_3=wo;
%%  构建BP网络  4输入  3输出  中间层为4个  预设总共的训练次数XunLian=1000000,000次
jishu=0;  % the count of iteration
%  load([‘Two_camera‘ num2str(8)  ‘.mat‘]);   %循环读入文件
x=[u_f1(1:NNN:)v_f2(1:NNN:)];
m=max(max(x));
n=min(min(x));
X=(x-n)/(m-n)*a+(1-a)/2;

S=1;


    wi=X;
    wi_1=wi;wi_2=wi;wi_3=wi;



if S==2
   wi=[-0.2846 0.2193 -0.5097 -1.0668;
       -0.7484 -0.1210 -0.4708 0.0988; 
       -0.7176  0.8297 -1.6000 0.2049; 
       -0.0858  0.1925 -0.6346 0.0347;
        0.4358 0.2369 -0.4564 -0.1324];
   wi_1=wi;wi_2=wi;wi_3=wi;
   wo=[1.0438 0.5478 0.8682 0.1446 0.1537;
       0.1716 0.5811 1.1214 0.5067 0.7370; 
       1.0063 0.7428 1.0534 0.7824 0.6494];
   wo_1=wo;wo_2=wo;wo_3=wo;
end
xite=0.25;
alfa=0.05;
S=1;
IN=4;H=5;Out=3;
x=[000];
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;
y_1=0;y_2=0;y_3=0;
 
Oh=zeros(H1);
I=Oh;
error_2=0;
error_1=0;
ts=0.001;
for k=1:1:6000
   time(k)=k*ts;
   if S==1
      rin(k)=1.0;
   elseif S==2
          rin(k)=sin(1*2*pi*k*ts);
   end
   a(k)=1.2*(1-0.8*exp(-0.1*k));
   yout(k)=a(k)*y_1/(1+y_1^2)+u_1;
   error(k)=rin(k)-yout(k);
   xi=[rin(k)yout(k)error(k)1];
   x(1)=error(k)-error_1;
   x(2)=error(k);
   x(3)=error(k)-2*error_1+error_2;
   epid=[x(1);x(2);x(3)];
   I=xi*wi‘;
   for j=1:1:H
       Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));
   end
   K=wo*Oh;
   for l=1:1:Out
       K(l)=exp(K(l))/(exp(K(l))+exp(-K(l)));
   end
   kp(k)=K(1);ti(k)=K(2);td(k)=K(3);
   Kpid=[kp(k)ti(k)td(k)];
   du(k)=Kpid*epid;
   u(k)=u_1+du(k);
   if u(k)>=10
      u(k)=10;
   end
   if u(k)<=-10
      u(k)=-10;
   end
   dyu(k)=sign((yout(k)-y_1)/(u(k)-u_1+0.0000001));
   for j=1:1:Out
       dK(j)=2/(exp(K(j))+exp(-K(j)))^2;
   end
   for l=1:1:Out
       delta3(l)=error(k)*dyu(k)*epid(l)*dK(l);
   end
   for l=1:1:Out
       for i=1:1:H
           d_wo=xite*delta3(l)*Oh(i)+alfa*(wo_1-wo_2);
       end
   end
   wo=wo_1+d_wo+alfa*(wo_1-wo_2);
   for i=1:1:H
       dO(i)=4/(exp(I(i))+exp(-I(i)))^2;
   end
   segma=delta3*wo;
   for i=1:1:H
       delta2(i)=dO(i)*segma(i);
   end
   d_wi=xite*delta2‘*xi;
   wi=wi_1+d_wi+alfa*(wi_1-wi_2);
   u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
   y_2=y_1;y_1=yout(k);
   wo_3=wo_2;
   wo_2=wo_1;
   wo_1=wo;
   wi_3=wi_2;
   wi_2=wi_1;
   wi_1=wi;
   error_2=error_1;
   error_1=error(k);
   end
figure(1);
plot(timerin‘r‘timeyout-0.01‘b‘);
figure(2);
plot(timeerror‘r‘);
figure(3)
subplot(311);
plot(timekp‘r‘);
subplot(312);
plot(timeti‘g‘);
subplot(313);
plot(timetd‘b‘);


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-04-05 10:10  BP算法\
     目录           0  2013-04-08 17:00  BP算法\传统BP和传统改进BP\
     文件        2996  2013-04-08 17:00  BP算法\传统BP和传统改进BP\Baidu_try.m
     文件        4193  2013-04-06 12:50  BP算法\传统BP和传统改进BP\Copy_of_Stardard_BP_4_2.m
     文件        4773  2013-04-08 20:18  BP算法\传统BP和传统改进BP\Modified_BP_1.m
     文件        5074  2013-04-02 23:18  BP算法\传统BP和传统改进BP\Modified_BP_2.m
     文件        4894  2013-04-02 23:17  BP算法\传统BP和传统改进BP\Modified_BP_3.m
     文件        4382  2013-04-08 20:04  BP算法\传统BP和传统改进BP\Stardard_BP_4_2.m
     文件        2013  2013-03-28 10:04  BP算法\传统BP和传统改进BP\Two_camera8.mat
     目录           0  2013-04-08 17:31  BP算法\革命性的BP算法\
     文件        4830  2013-04-08 15:46  BP算法\革命性的BP算法\BP.m
     文件         472  2013-04-05 21:53  BP算法\革命性的BP算法\Net_func.m
     文件         508  2013-04-05 21:54  BP算法\革命性的BP算法\Net_func_diff.m
     文件        4363  2013-04-08 15:58  BP算法\革命性的BP算法\Revolutionised_BP.m
     文件        1999  2013-04-05 23:14  BP算法\革命性的BP算法\Standard_BP_test.m
     文件        2013  2013-03-28 10:04  BP算法\革命性的BP算法\Two_camera8.mat

评论

共有 条评论