資源簡介
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
- 上一篇:SVM數據歸一化matlab程序
- 下一篇:最小二乘法的matlab實現
評論
共有 條評論