程序注释及运行结果.docx

上传人:b****5 文档编号:28540954 上传时间:2023-07-18 格式:DOCX 页数:53 大小:211.13KB
下载 相关 举报
程序注释及运行结果.docx_第1页
第1页 / 共53页
程序注释及运行结果.docx_第2页
第2页 / 共53页
程序注释及运行结果.docx_第3页
第3页 / 共53页
程序注释及运行结果.docx_第4页
第4页 / 共53页
程序注释及运行结果.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

程序注释及运行结果.docx

《程序注释及运行结果.docx》由会员分享,可在线阅读,更多相关《程序注释及运行结果.docx(53页珍藏版)》请在冰豆网上搜索。

程序注释及运行结果.docx

程序注释及运行结果

第二部分程序注释及运行结果

读者须知:

为了便于读者理解,现将光盘上第一部分可直接在MATLAB6.I下运行的MATLAB程序的编号和书本上的内容对应如下,每个程序题目括号内的file.m是对应书本上的内容在光盘上第一部分的程序编号。

第二章的随机序列产生程序

例2.1用乘同余法产生随机数(见光盘FLch2sjxleg1.m)

①编程如下:

A=6;N=100;%初始化;

x0=1;M=255;

fork=1:

N%乘同余法递推100次;

x2=A*x0;%x2和x0分别表示xi和xi-1;

x1=mod(x2,M);%将x2存储器的数除以M,取余数放x1(xi)中;

v1=x1/256;%将x1存储器的数除以256得到小于1的随机数放v1中;

v(:

k)=v1;%将v1中的数(

)存放在矩阵存储器v的第k列中,v(:

k)

%表示行不变、列随递推循环次数变化;

x0=x1;%xi-1=xi;

v0=v1;

end%递推100次结束;

v2=v%该语句末无‘;’,实现矩阵存储器v中随机数放在v2中,%且可直接显示在MATLAB的window中;

k1=k;

%grapher%以下是绘图程序;

k=1:

k1;

plot(k,v,k,v,'r');

xlabel('k'),ylabel('v');tktle('(0-1)均匀分布的随机序列')

②程序运行结果如图2.5所示。

图2.5采用MATLAB产生的(0,1)均匀分布的随机序列图

③产生的(0-1)均匀分布的随机序列

在程序运行结束后,产生的(0,1)均匀分布的随机序列,直接从MATLAB的window界面中copy出来如下(v2中每行存6个随机数):

v2=

0.02340.14060.84380.08200.49220.9609

0.78520.72660.37500.25780.55080.3164

0.90230.43360.60940.66800.02340.1406

0.84380.08200.49220.96090.78520.7266

0.37500.25780.55080.31640.90230.4336

0.60940.66800.02340.14060.84380.0820

0.49220.96090.78520.72660.37500.2578

0.55080.31640.90230.43360.60940.6680

0.02340.14060.84380.08200.49220.9609

0.78520.72660.37500.25780.55080.3164

0.90230.43360.60940.66800.02340.1406

0.84380.08200.49220.96090.78520.7266

0.37500.25780.55080.31640.90230.4336

0.60940.66800.02340.14060.84380.0820

0.49220.96090.78520.72660.37500.2578

0.55080.31640.90230.43360.60940.6680

0.02340.14060.84380.0820

第二章的白噪声产生程序

例2.2用乘同余法产生(见光盘FLch2bzsheg2.m)

1编程如下:

A=6;x0=1;M=255;f=2;N=100;%初始化;

x0=1;M=255;

fork=1:

N%乘同余法递推100次;

x2=A*x0;%分别用x2和x0表示xi+1和xi-1;

x1=mod(x2,M);%取x2存储器的数除以M的余数放x1(xi)中;

v1=x1/256;%将x1存储器中的数除以256得到小于1的随机数放v1中;

v(:

k)=(v1-0.5)*f;%将v1中的数(

)减去0.5再乘以存储器f中的系数,存放在矩阵存储器v的第k列中,v(:

k)表示行不变、列随递推循环次数变化;

x0=x1;%xi-1=xi;

v0=v1;

end%递推100次结束;

v2=v%该语句后无‘;’,实现矩阵存储器v中随机数放在v2中,且可直接显示在MATLAB的window中;

k1=k;

%grapher%以下是绘图程序;

k=1:

k1;

plot(k,v,k,v,'r');

xlabel('k'),ylabel('v');tktle('(-1,+1)均匀分布的白噪声')

②程序运行结果如图2.6所示。

图2.6采用MATLAB产生的(-1,+1)均匀分布的白噪声序列

③产生的(-1,1)均匀分布的白噪声序列

在程序运行结束后,产生的(-1,1)均匀分布的白噪声序列,直接从MATLAB的window界面中copy出来如下(v2中每行存6个随机数):

v2=

-0.9531-0.71880.6875-0.8359-0.01560.9219

0.57030.4531-0.2500-0.48440.1016-0.3672

0.8047-0.13280.21880.3359-0.9531-0.7188

0.6875-0.8359-0.01560.92190.57030.4531

-0.2500-0.48440.1016-0.36720.8047-0.1328

0.21880.3359-0.9531-0.71880.6875-0.8359

-0.01560.92190.57030.4531-0.2500-0.4844

0.1016-0.36720.8047-0.13280.21880.3359

-0.9531-0.71880.6875-0.8359-0.01560.9219

0.57030.4531-0.2500-0.48440.1016-0.3672

0.8047-0.13280.21880.3359-0.9531-0.7188

0.6875-0.8359-0.01560.92190.57030.4531

-0.2500-0.48440.1016-0.36720.8047-0.1328

0.21880.3359-0.9531-0.71880.6875-0.8359

-0.01560.92190.57030.4531-0.2500-0.4844

0.1016-0.36720.8047-0.13280.21880.3359

-0.9531-0.71880.6875-0.8359

*另外,书中图2.3白噪声的产生如下:

显然,只要在例2.2程序的初始化部分中给N=300,f=6,运行程序就可以得到如图2.3所示的(-3,3)的白噪声过程.

①编程如下:

A=6;x0=1;M=255;f=6;N=300;%初始化;

x0=1;M=255;

fork=1:

N%乘同余法递推100次;

x2=A*x0;%分别用x2和x0表示xi+1和xi-1;

x1=mod(x2,M);%取x2存储器的数除以M的余数放x1(xi)中;

v1=x1/256;%将x1存储器中的数除以256得到小于1的随机数放v1中;

v(:

k)=(v1-0.5)*f;%将v1中的数(

)减去0.5再乘以存储器f中的系数,存放在矩阵存储器v的第k列中,v(:

k)表示行不变、列随递推循环次数变化;

x0=x1;%xi-1=xi;

v0=v1;

end%递推100次结束;

v2=v%该语句后无‘;’,实现矩阵存储器v中随机数放在v2中,且可直接显示在MATLAB的window中;

k1=k;

%grapher%以下是绘图程序;

k=1:

k1;

plot(k,v,k,v,'r');

xlabel('k'),ylabel('v');tktle('(-1,+1)均匀分布的白噪声')

②程序运行结果如图2.3所示。

图2.3白噪声过程

第二章的M序列产生程序

例2.3用移位寄存器产生M序列的MATLAB软件实现(见光盘FLch2bzsheg3.m)

①编程如下:

X1=1;X2=0;X3=1;X4=0;%移位寄存器输入Xi初T态(0101),Yi为移位寄存器各级输出

m=60;%置M序列总长度

fori=1:

m%1#

Y4=X4;Y3=X3;Y2=X2;Y1=X1;

X4=Y3;X3=Y2;X2=Y1;

X1=xor(Y3,Y4);%异或运算

ifY4==0

U(i)=-1;

else

U(i)=Y4;

end

end

M=U

%绘图

i1=i

k=1:

1:

i1;

plot(k,U,k,U,'rx')

xlabel('k')

ylabel('M序列')

title('移位寄存器产生的M序列')

②程序运行结果如图2.8所示。

图2.8软件实现的移位寄存器产生的M序列图

.

③'四级移位寄存器产生的M序列

M=

Columns1through10

-11-11111-1-1-1

Columns11through20

1-1-111-11-111

Columns21through30

11-1-1-11-1-111

Columns31through40

-11-11111-1-1-1

Columns41through50

1-1-111-11-111

Columns51through60

11-1-1-11-1-111

 

i1=

60

第五章的递推的极大似然法辨识程序

例5.2系统模型如图5.5所示。

试用递推的极大似然法对系统辨识的参数集

u

v(k)随机信号,输入信号为幅值为

的M序列或随机信号,要求画出程序流程图,打印出程序(程序中带有注释)和辨识中的参数、误差曲线。

解:

首先解释编程所用的部分字母:

由于在MATLAB语言中无法用希腊字母描述、无法用上标及下标,故

用‘o’和‘o1’表示;令

;产生M序列时,a(i),b(i),c(i),d(i)表示四级移位寄存器的第1,2,3,4级寄存器的输出;

①编程如下(光盘上该程序:

FLch5RMLeg2.m,可在MATLAB6.I下直接运行):

编程如下:

clear%清零

a

(1)=1;b

(1)=0;c

(1)=1;d

(1)=0;u

(1)=d

(1);z

(1)=0;z

(2)=0;%初始化

fori=2:

1200%产生m序列u(i)

a(i)=xor(c(i-1),d(i-1));

b(i)=a(i-1);

c(i)=b(i-1);

d(i)=c(i-1);

u(i)=d(i);

end

u;%若取去‘;’可以在程序运行中观测到m序列

v=randn(1200,1);%产生正态分布随机数

V=0;%计算噪声方差

fori=1:

1200

V=V+v(i)*v(i);

end

V1=V/1200;

fork=3:

1200%根据v和u计算z

z(k)=1.2*z(k-1)-0.6*z(k-2)+u(k-1)+0.5*u(k-2)+v(k)-v(k-1)+0.2*v(k-2);

end

o1=0.001*ones(6,1);p0=eye(6,6);%赋初值

zf

(1)=0.1;zf

(2)=0.1;vf

(2)=0.1;vf

(1)=0.1;uf

(2)=0.1;uf

(1)=0.1;

%迭代计算参数值和误差值

fork=3:

1200

h=[-z(k-1);-z(k-2);u(k-1);u(k-2);v(k-1);v(k-2)];

hf=h;

K=p0*hf*inv(hf'*p0*hf+1);

p=[eye(6,6)-K*hf']*p0;

v(k)=z(k)-h'*o1;

o=o1+K*v(k);

p0=p;

o1=o;

a1(k)=o

(1);

a2(k)=o

(2);

b1(k)=o(3);

b2(k)=o(4);

d1(k)=o(5);

d2(k)=o(6);

e1(k)=abs(a1(k)+1.2);

e2(k)=abs(a2(k)-0.6);

e3(k)=abs(b1(k)-1.0);

e4(k)=abs(b2(k)-0.5);

e5(k)=abs(d1(k)+1.0);

e6(k)=abs(d2(k)-0.2);

zf(k)=z(k)-d1(k)*zf(k-1)-d2(k)*zf(k-2);

uf(k)=u(k)-d1(k)*uf(k-1)-d2(k)*uf(k-2);

vf(k)=v(k)-d1(k)*vf(k-1)-d2(k)*vf(k-2);

hf=[-zf(k-1);-zf(k-2);uf(k-1);uf(k-2);vf(k-1);vf(k-2)];

end

o1%若取去‘;’可以在程序运行中观测到参数

V1

%绘图

subplot(4,1,1)

k=1:

1200;

plot(k,a1,'k:

',k,a2,'b',k,b1,'r',k,b2,'m:

',k,d1,'g',k,d2,'k');

xlabel('k')

ylabel('parameter')

legend('a1=-1.2,','a2=0.6','b1=1.0','b2=0.5','d1=-1.0','d2=0.2');%图标炷

title('TheparameteridendificationoftheRML');

end

subplot(4,1,2)

k=1:

1200;

plot(k,e1,'k',k,e2,'b',k,e3,'r',k,e4,'m',k,e5,'g',k,e6,'k');

xlabel('k')

ylabel('error')

%title('误差曲线')

end

subplot(4,1,3)

k=1:

1200;

plot(k,u);

xlabel('k')

ylabel('input')

%title('系统输入信号')

end

subplot(4,1,4)

k=1:

1200;

plot(k,v);

xlabel('k')

ylabel('randomnoise')

%title('系统所加的随机噪声')

end

2程序运行结果如图5.7所示

图5.7RML辨识参数曲线

 

第七章的用改进的神经网络MBP算法辨识

例7.1对具有随机噪声的二阶系统的模型辨识(光盘上编号:

FLch7NNeg1)

对具有随机噪声的二阶系统的模型辨识,进行标幺化以后系统的参考模型差分方程为

(7.90)

式中,

为随机噪声。

由于神经网络的输出最大为1,所以,被辨识的系统应先标幺化,这里标幺化系数为5。

利用图7.5正向建模(并联辨识)结构,神经网络选用3-9-9-1型,即输入层i,隐层j包括2级,输出层k的节点个数分别为3、9、9、1个;

由于神经网络的最大输出为1,因此在辨识前应对原系统参考模型标么化处理,辨识结束后再乘以标么化系数才是被辨识系统的辨识结果。

1)编程如下:

%w10ij表示第一隐层权值

,w11ij表示

;w120ij表示第二隐层权值%

,w121ij表示

;w20j表示输出层权值

,w21j表示%

;q表示隐层阈值;p表示输出层阈值;置标幺化系数f1=5等

w10ij=[.01.01.02;.1.11.02;.010.1;.11.01.02;.1.1.02;.11.1.1;.1.1.1;0.1.1;.10.1];

w11ij=[.1.2.11;.02.13.04;.09.08.08;.09.1.06;.1.11.02;.060.1;.1.1.1;0.10;.1.1.1];

w20j=[.01;.02;.1;.2;.1;.1;.1;.1;.1];

w21j=[0;0.1;.1;.02;0;.1;.1;.1;.1];

q0j=[.9.8.7.6.1.2.1.1.1];

q120j=q0j;

q11j=[.5.2.3.4.1.2.1.1.1];

q12j=q11j;

w121ij=w20j*q0j;

w120ij=w20j*q11j;

f1=5;

q2j=0;%thresholdvalue

p0=.2;

k1=1;

p1=.3;

w=0;

xj=[111];%inputs

error=0.0001;

a1=[1111];

n=1;

e1=0;

e0=0;

e2=0;

e3=0;

e4=0;

yo=0;

ya=0;

yb=0;

y0=0;

y1=0;

y2=0;

y3=0;

u=0;

u1=0;

u2=0.68;

u3=.780;

u4=u3-u2;

k1=1;

kn=28;

e3=.055;z1=0;

z12=0;q123j=0;t2j=0;o12j=0;r=0;r1=0;s=0.1;d2j=0;

%+++++++++++++++++++++++++++++++++%calculatingoutputofthehiddenlayer

v1=randn(40,1);

form=1:

40

s1=0.1*v1(m)

yn=.3366*y2+.6634*u1+s*s1;

y1=y2;

y2=yn;

yp=yn;

u0=u1;

u1=u2;

ya(m)=yn;

fork=1:

100

%calculatingoutputofthehiddenlayer

(1)

fori=1:

9

x1=[w11ij(i,1)*xj(:

1)]+[w11ij(i,2)*xj(:

2)]+[w11ij(i,3)*xj(:

3)];

x=x1+q11j(:

i);

o=1/[1+exp(-x)];

o11j(i)=o;

end

%calculatingoutputofthehiddenlayer

(2)

fori=1:

9

forj=1:

9

z1=z1+w121ij(i,j)*o11j(:

j);

end

z=z1+q12j(:

i);

o=1/[1+exp(-x)];

o12j(i)=o;

end

%calculatingoutputoftheoutputlayer

fori=1:

9

yb=yb+w21j(i,:

)*o12j(:

i);

end

yi=yb+p1;

y=1/[1+exp(-yi)];

%calculatingerrorvaluebetweenaimandpracticevalue

e0=e1;

e1=e2;

e2=[(yp-y).^2]/2;

e(k)=e2;

xj1=e2;

xj2=e1;

xj3=e0;

xj=[xj1xj2xj3];

%revisingrightvalue

(1)

fori=1:

9

d1=o11j(:

i)*[1-o11j(:

i)]*d2j*w21j(i,:

);%计算第1隐层误差反传信号

do=o11j(:

i)*d1;

qw=q11j(:

i)-q0j(:

i);

q2j=q11j(:

i)+.8*do+.4*qw;

q3j(:

i)=q2j;

forj=1:

3

dw=w11ij(i,j)-w10ij(i,j);

w12ij=w11ij(i,j)+.8*do*xj(j)+.6*dw;

w13ij(i,j)=w12ij;

end

end

w10ij=w11ij;

w11ij=w13ij;

q0j=q11j;

q11j=q3j;

%revisingrightvalue

(2)

fori=1:

9

d1=o12j(:

i)*[1-o12j(:

i)]*d2j*w21j(i,:

);%计算第2隐层误差反传信号

do=o12j(:

i)*d1;

qw=q12j(:

i)-q120j(:

i);

t2j=q12j(:

i)+.8*do+.4*qw;

q123j(:

i)=t2j;

forj=1:

9

dw=w121ij(i,j)-w120ij(i,j);

w122ij=w121ij(i,j)+.8*do*o11j(j)+.6*dw;

w123ij(i,j)=w122ij;

end

end

w120ij=w121ij;

w121ij=w123ij;

q120j=q12j;

q12j=q123j;

%revisingrightvalue(3)

ifm<4,r=0.2;r1=0.0001;

else

r=0.14;r1=0.005;

end

fori=1:

9

d2j=y*(1-y)*(yp-y);%计算输出误差反传信号

dw=w21j(i,:

)-w20j(i,:

);

w22j=w21j(i,:

)+r*d2j*o12j(i)+.4*dw+r1*e2;

w23j(i,:

)=w22j;

end

w20j=w21j;

w21j=w23j;

ph=p1-p0;

p2=p1+.96*(yp-y)+.58*ph+r1*e2;

p0=p1;

p1=p2;

u=y;

%k=k+1;

ife2<=.005break;

else

end

end

ya(m)=yp*f1;

e3(m)=e2;

ym(m)=y*f1;

v(m)=s1;

%m=m+1

m6=m

end

w11ij=w13ij

w121ij=w123ij

w21j=w23j

m1=m;

%grapher

subplot(3,1,1)

m=1:

m6;

plot(m,ya,m,ym,'rx'),title('IdentifiedmodelbyMBPalgorithm'),xlabel('k'),ylabel('yaandym')

legend('yaissystem','ymisidentifiedmodel');%图标炷

end

subplot(3,1,2)

m=1:

m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1