各种BP学习算法MATLAB仿真

各种BP学习算法MATLAB仿真
各种BP学习算法MATLAB仿真

3.3.2 各种BP学习算法MATLAB仿真

根据上面一节对BP神经网络的MATLAB设计,可以得出下面的通用的MATLAB程序段,由于各种BP学习算法采用了不同的学习函数,所以只需要更改学习函数即可。

MATLAB程序段如下:

x=-4:0.01:4;

y1=sin((1/2)*pi*x)+sin(pi*x);

%trainlm函数可以选择替换

net=newff(minmax(x),[1,15,1],{'tansig','tansig','purelin'},'trainlm');

net.trainparam.epochs=2000;

net.trainparam.goal=0.00001;

net=train(net,x,y1);

y2=sim(net,x);

err=y2-y1;

res=norm(err);

%暂停,按任意键继续

Pause

%绘图,原图(蓝色光滑线)和仿真效果图(红色+号点线)

plot(x,y1);

hold on

plot(x,y2,'r+');

注意:由于各种不确定因素,可能对网络训练有不同程度的影响,产生不同的效果。如图3-8。

标准BP算法(traingd)

图3-8 标准BP算法的训练过程以及结果(原图蓝色线,仿真图+号线)增加动量法(traingdm) 如图3-9。

图3-9 增加动量法的训练过程以及结果(原图蓝色线,仿真图+号线)弹性BP算法(trainrp)如图3-10

图3-10 弹性BP算法的训练过程以及结果(原图蓝色线,仿真图+号线)

动量及自适应学习速率法(traingdx)如图3-11。

图3-11 动量及自适应学习速率法的训练过程以及结果(原图蓝色线,仿真图+号线)共轭梯度法(traincgf)如图3-12。

图3-12 共轭梯度法的训练过程以及结果(原图蓝色线,仿真图+号线)Levenberg-Marquardt算法(trainlm)如图3-13。

图3-13 Levenberg-Marquardt算法的训练过程以及结果(原图蓝色线,仿真图+号线)

3.3.3 各种算法仿真结果比较与分析

由上面的仿真结果可以得到下表的比较和下面的结论与分析:表3-2

表3-2各种BP学习算法MATLAB仿真结果比较

结论与分析:

从仿真结果可以看出,标准BP算法、增加动量发、弹性BP算法、动量及自适应学习速率法的收敛速度都不如共轭梯度法和Levenberg-Marquardt法(L-M 算法)收敛速度明显的快。从仿真结果和均方误差综合来看,只有L-M算法达到了目标误差,可见对高要求的误差来说,L-M算法的优势要明显的多,其余均未达到目标误差;从均方误差的效果来看,所仿真的BP算法的优劣(从优到劣)顺序依次为L-M算法、共轭梯度法、弹性BP算法、动量及自适应学习速率法、增加动量法、标准BP算法。

从仿真效果图可以看出,L-M算法的效果最好,其次是共轭梯度法,其余均有不同范围内的失真。从误差曲线来看,L-M算法达到了目标误差(较高的误差),标准BP算法的误差曲线较粗,是因为较小范围振荡产生锯齿,在图形中由于间距加大,图形不断重叠而成,收敛速度很慢;增加动量法、弹性BP算法、动量及自适应学习速率法的误差曲线较为平滑,在刚开始收敛较快,在训练步数增加的时候,曲线趋于水平,收敛速度比较慢;共轭梯度法和L-M算法的误差曲线变化较大且产生局部锯齿状,说明不是最优,仍需要进行优化,其中L-M算法达到了目标误差。共轭梯度法在相邻迭代的正交方向搜索,综合误差曲线可知当接近极值时会产生锯齿形振荡。

再根据前面对各种BP改进算法的描述可知,弹性BP算法不需要进行搜索,需要内存比较小,因此在一些大型网络中比较适用,但是需要很长的训练时间。对收敛速度要求不高时也可使用动量及自适应学习速率法。在小型网络中,共轭梯度法仅次于L-M算法,但是L-M算法需要更大的内存做临时存储,对于较大复杂的网络和内存受限的设备来说不是很好的选择,但是对于小型网络来说却是首要选择。对训练时间允许的条件下,共轭梯度法和弹性BP算法是对复杂大型网络较好的选择。

其中共轭梯度法在训练的时候,训练次数为769次,均方误差为0.00499915,均未达到所设定的要求,产生了“Minimum step size reached, performance goal was not met”的结果。可能意味着子区间的长度与计算机舍入误差相当,无法继续计算了,原因可能是有奇点(无限小且不实际存在),另外也存在是初值问题,理论上得知:共轭梯度法最大局限是依赖于初值,在有限的迭代次数内可能既不能搜索到全局极值也不能搜索到局部极值。因此该算法适用于精度要求比较低的高维网络之中。

3.3.4 调整初始权值和阈值的仿真

在分析了初始权值设置影响因素对BP神经网络的影响,下面首先通过MATLAB程序段一,通过随机设置权值初始化网络方式获取训练好的阈值和权值,作为MATLAB程序段二的初始化值。由此进行仿真分析。如图3-14。

①MATLAB程序段一:

x=-4:0.01:4;

y1=sin((1/2)*pi*x)+sin(pi*x);

net=newff(minmax(x),[1,15,1],{'tansig','tansig','purelin'},'trainlm');

net.trainparam.epochs=2000;

net.trainparam.goal=0.00001;

%初始化网络,用newff创建网络,其权值和阈值初始化函数的默认值是initnw。

%initnw据Nguyen-Widrow规则初始化算法对网络层的权值和阈值进行初始%化,该算法的初始化值,可以使网络层中每个神经元的作用范围近似地在%网络层的输入空间均匀分布。与纯随机初始化权值和阈值的方法比较,%初始化算法有以下优点:神经元的浪费少(因为所有神经元都分布在输%入空间内);网络的训练速度快(因为输入空间的每一个区域都有神经%元);这里是用rands重新设置权值和阈值。

https://www.360docs.net/doc/103531424.html,yers{1}.initFcn='initnw';

https://www.360docs.net/doc/103531424.html,yers{2}.initFcn='initnw';

net.inputWeights{1,1}.initFcn='rands';

net.inputWeights{2,1}.initFcn='rands';

net.biases{1,1}.initFcn='rands';

net.biases{2,1}.initFcn='rands';

net=init(net);

%查看初始化后的权值和阈值

net.iw{1,1}

net.b{1}

net.lw{2,1}

net.b{2}

net=train(net,x,y1);

%得出训练好的权值和阈值供MATLAB程序段二使用

net.iw{1,1}

net.b{1}

net.lw{2,1}

net.b{2}

y2=sim(net,x);

err=y2-y1;

res=norm(err);

pause

plot(x,y1);

hold on

plot(x,y2,'r+');

②MATLAB程序段二:

x=-4:0.01:4;

y1=sin((1/2)*pi*x)+sin(pi*x);

net=newff(minmax(x),[1,15,1],{'tansig','tansig','purelin'},'trainlm');

net.trainparam.epochs=2000;

net.trainparam.goal=0.00001;

%从程序段一得出的数据

net.iw{1,1}=-0.3740;

net.b{1}=-0.1930;

net.lw{2,1}=[-20.7192;19.6478;10.9678;-9.4500;21.3555;6.7648;-20.7057;-6.10 23;-9.4889;-12.7880;-15.5183;-13.9643;-21.2201;29.9987;-15.3738];

net.b{2}=[21.2768;-16.9303;-7.9953;4.8688;-6.6081;-1.3465;-0.8528;-1.2791;-4 .7658;-15.4970;-9.2069;-10.5259;-20.1442;3.5287;-13.6953];

net=train(net,x,y1);

y2=sim(net,x);

err=y2-y1;

res=norm(err);

pause

plot(x,y1);

hold on

plot(x,y2,'r+');

(a) 随机设置权值误差曲线图(b)获取训练好的阈值和权值误差曲线图

图3-14 两程序段运行后误差曲线图

从上面的仿真结果看,第一个程序用随机的初始权值和阈值达到目标误差完成训练需要264个回合,而选用已训练好的权值和阈值仅用167个回合就完成了训练,因此选择合适的初始化权值和阈值将加速网络的训练,大大提高了学习的收敛速度。因此关于设置网络初始权值和阈值的优化方法是一个值得研究的问题。

3.3.5 其他影响因素仿真

在算法选择上,在下面的仿真中将使用L-M算法测试其他影响因素,比如通过选择不同的激活函数、修改学习步长和目标误差等观察对仿真曲线的影响程度。

如果将输入层激活函数设置为purelin,x=-4:0.1:4,epochs=1000,goal=0.001,其余不变则会产生如下结果:经过多次反复实验,有时不能达到目标误差,有时又很快达到目标误差,且仿真效果会产生不同程度的失真或有时效果很好。如果将输入层激活函数设为tansig,则学习很快收敛且达到目标误差,仿真效果很好,且多次仿真结果比较稳定,明显要比输入层激活函数设为purelin要好。如果将这三层神经元的激活函数都设置为tansig的话,在多次试验中,训练回合数为1000,均未达到目标误差0.001的要求。

3.4 BP神经网络在样本分类中的应用

3.4.1问题的提出

这是一个用BP神经网络来将不同的混合在一起的数据或者样本进行分类的例子。利用上述研究的结果,采用15个隐层节点。我们先自己随机的输入两个样本:

%产生训练样本与测试样本,每一列为一个样本

P1 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];

T1 = [repmat([1;0;0],1,5),repmat([0;1;0],1,5),repmat([0;0;1],1,5)];

P2 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];

T2 = [repmat([1;0;0],1,5),repmat([0;1;0],1,5),repmat([0;0;1],1,5)];

%然后再将样本归一化处理,这样有利于我们简便、准确、定量结果。

[PN1,minp,maxp] = premnmx(P1);

PN2 = tramnmx(P2,minp,maxp);

%第三部则是设置网络参数

NodeNum = 15; % 隐层节点数

TypeNum = 3; % 输出维数

TF1 = 'tansig';TF2 = 'purelin'; % 判别函数(缺省值)

%TF1 = 'tansig';TF2 = 'logsig';

%TF1 = 'logsig';TF2 = 'purelin';

%TF1 = 'tansig';TF2 = 'tansig';

%TF1 = 'logsig';TF2 = 'logsig';

%TF1 = 'purelin';TF2 = 'purelin';

3.4.2 基于BP神经网络的样本分类

%一切工作准备就绪后我们就可以开始训练网络了:

net = newff(minmax(PN1),[NodeNum TypeNum],{TF1 TF2});

指定训练参数,我们可以选择不同的算法来进行测试做比较:

% net.trainFcn = 'traingd'; % 梯度下降算法

% net.trainFcn = 'traingdm'; % 动量梯度下降算法

% net.trainFcn = 'traingda'; % 变学习率梯度下降算法

% net.trainFcn = 'traingdx'; % 变学习率动量梯度下降算法

% (大型网络的首选算法- 模式识别)

% net.trainFcn = 'trainrp'; % RPROP(弹性BP)算法,内存需求最小

% 共轭梯度算法

% net.trainFcn = 'traincgf'; % Fletcher-Reeves修正算法

% net.trainFcn = 'traincgp'; % Polak-Ribiere修正算法,内存需求比Fletcher-Reeves 修正算法略大

% net.trainFcn = 'traincgb'; % Powell-Beal复位算法,内存需求比Polak-Ribiere修正算法略大

% (大型网络的首选算法- 函数拟合,模式识别)

% net.trainFcn = 'trainscg'; % Scaled Conjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多

% net.trainFcn = 'trainbfg'; % Quasi-Newton Algorithms - BFGS Algorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快

% net.trainFcn = 'trainoss'; % One Step Secant Algorithm,计算量和内存需求均比BFGS算法小,比共轭梯度算法略大

% (中小型网络的首选算法- 函数拟合,模式识别)

net.trainFcn = 'trainlm'; % Levenberg-Marquardt算法,内存需求最大,收敛速度最快% net.trainFcn = 'trainbr'; % 贝叶斯正则化算法

% 有代表性的五种算法为:'traingdx','trainrp','trainscg','trainoss', 'trainlm'

net.trainParam.show = 1; % 训练显示间隔

net.trainParam.lr = 0.3; % 学习步长- traingd,traingdm

net.trainParam.mc = 0.95; % 动量项系数- traingdm,traingdx

net.trainParam.mem_reduc = 10; % 分块计算Hessian矩阵(仅对

Levenberg-Marquardt算法有效)

net.trainParam.epochs = 1000; % 最大训练次数

net.trainParam.goal = 1e-8; % 最小均方误差

net.trainParam.min_grad = 1e-20; % 最小梯度

net.trainParam.time = inf; % 最大训练时间

%训练与测试

net = train(net,PN1,T1); % 训练

% 测试

Y1 = sim(net,PN1); % 训练样本实际输出

Y2 = sim(net,PN2); %一切工作准备就绪后我们就可以开始训练网络了:

net = newff(minmax(PN1),[NodeNum TypeNum],{TF1 TF2});

指定训练参数,我们可以选择不同的算法来进行测试做比较:

% net.trainFcn = 'traingd'; % 梯度下降算法

% net.trainFcn = 'traingdm'; % 动量梯度下降算法

% net.trainFcn = 'traingda'; % 变学习率梯度下降算法

% net.trainFcn = 'traingdx'; % 变学习率动量梯度下降算法

% (大型网络的首选算法- 模式识别)

% net.trainFcn = 'trainrp'; % RPROP(弹性BP)算法,内存需求最小

% 共轭梯度算法

% net.trainFcn = 'traincgf'; % Fletcher-Reeves修正算法

% net.trainFcn = 'traincgp'; % Polak-Ribiere修正算法,内存需求比Fletcher-Reeves 修正算法略大

% net.trainFcn = 'traincgb'; % Powell-Beal复位算法,内存需求比Polak-Ribiere修正

算法略大

% (大型网络的首选算法- 函数拟合,模式识别)

% net.trainFcn = 'trainscg'; % Scaled Conjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多

% net.trainFcn = 'trainbfg'; % Quasi-Newton Algorithms - BFGS Algorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快

% net.trainFcn = 'trainoss'; % One Step Secant Algorithm,计算量和内存需求均比BFGS算法小,比共轭梯度算法略大

% (中小型网络的首选算法- 函数拟合,模式识别)

net.trainFcn = 'trainlm'; % Levenberg-Marquardt算法,内存需求最大,收敛速度最快% net.trainFcn = 'trainbr'; % 贝叶斯正则化算法

% 有代表性的五种算法为:'traingdx','trainrp','trainscg','trainoss', 'trainlm'

net.trainParam.show = 1; % 训练显示间隔

net.trainParam.lr = 0.3; % 学习步长- traingd,traingdm

net.trainParam.mc = 0.95; % 动量项系数- traingdm,traingdx

net.trainParam.mem_reduc = 10; % 分块计算Hessian矩阵(仅对

Levenberg-Marquardt算法有效)

net.trainParam.epochs = 1000; % 最大训练次数

net.trainParam.goal = 1e-8; % 最小均方误差

net.trainParam.min_grad = 1e-20; % 最小梯度

net.trainParam.time = inf; % 最大训练时间

%训练与测试

net = train(net,PN1,T1); % 训练

% 测试

Y1 = sim(net,PN1); % 训练样本实际输出

Y2 = sim(net,PN2); % 测试样本实际输出

Y1 = full(compet(Y1)); Y2 = full(compet(Y2)); % 竞争输出

测试结果(Levenberg-Marquardt算法):

训练输出结果如图3-15,测试输出结果如图3-16。

图3-15 训练样本竞争输出结果 图3-16 测试样本竞争输出结果

步骤5: 结果统计

Result = ~sum(abs(T1-Y1)) % 正确分类显示为1

Percent1 = sum(Result)/length(Result) % 训练样本正确分类率

Result = ~sum(abs(T2-Y2)) % 正确分类显示为1

Percent2 = sum(Result)/length(Result) % 测试样本正确分类率

参考文献

[1] 王强.利用人工神经网络实现函数逼[J].计算机仿真,2002,(05):22—60.

[2] 王美玲.利用于非线性函数逼近的小波神经网络算法仿真[J] .北京理工大学学报,2002,

(03):10—27.

[3]郝昕玉,姬长英.非线性系统的神经-模糊建模方法的研究[J].江西农业学报,2008,(9):

12—29.

[4]孙帆,施学勤.基于MA TLAB的BP神经网络设计[J].计算机与数学工程,2007,35(8):

55—70.

[5]张葛祥,李娜.MATLAB仿真技术与应用[M].北京:清华大学出版社,2003:1-9.

[6]余华,吴文全,曹亮.BP神经网络的改进算法及其应用[J].电脑知识与技术,2009,5(19):

5256-5258.

[7]苏高利,邓芳萍.论基于MA TLAB语言的BP神经网络的改进算法[J].科技通报,2003,19

(2):130-135.

[8]冯蓉,杨建华.基于BP神经网络的函数逼近的MATLAB实现[J].榆林学院学报,2007,

(3):20-22.

[9]韩力群.人工神经网络理论设计及应用[M].北京:化工工业社,2002:5-15.

[10]蒋良孝,李超群.基于BP神经网络的函数逼近及其Matlab实现[J].微型机与应用,2004,1:

52-53.

[11]郑君里,杨行峻.人工神经网络[M]. 北京: 高等教育出版社,1992,5:15-30.

[12] 郝中华.B P神经网络的非线性思想[J].洛阳师范学院报,2008,3(4):23-57.

[13]巨军让,卓戎.B P神经网络在Matlab中的方便实现[J].新疆石油学院学

报,2008,2(1):113-221.

[14]蒋宗礼.人工神经网络导论[M]. 高等教育出版社,2001:15-90.

[15]闻新,周露,王丹力,熊晓英.MATLAB神经网络应用设计[M].科学出版社,

2001,5:10-50.

[16]葛哲学,孙志强编著.神经网络与matlab2007实现[M].北京:电子工业出版社,

2007,9:1-5.

[17]董长虹,编著 .Matlab神经网络与应用[M].北京:国防工业出版社,2007,9:1-13.

[18]胡守仁,等.神经网络导论[M].长沙:国防科技大学出版社,1993:23-45.

[19]张玲,张钹.人工神经网络理及应用[M].浙江:浙江科技大学出版社,1997,5:20-62.

[20]Luis F. Chaparro. Signals and systems using MATLAB, Burlington, MA : Academic Press,

c2010.:46-51

[21]Karl F. Warnick. Numerical methods for engineering : an introduction using MA TLAB

andcomputational electromagnetics examples,Raleigh, NC : SciTech Pub.,2011

[22]Martin R,Heinrich B.A Direct Adaptive Method for Faster Backpropagetion Learning:The

RPROP Algorithm [A].Ruspini H. Proceedings of the IEEE International conference on Neural Network(ICNN)[C].IEEE. Press;New York,1993.

[23] HAGAN M T,DEMUTH H B. Neural network design[M] .PWS Publishing Company,A

division of Thomson Learning,United States of America, 1996.

[24]Neural Network Tolbox User’s, The MathWorks. Inc,2003:16-27.

[25]Matlab user’s Guide. The MathWorks.Inc,2003:23-27.

[26]Neural Network Toolbox. Mathworks,2007:1-13.

[27]Philip D. Wasserman,Neural Computing: Theory and Practice,Van Nostrand

Reinhold,1989:1-56.

PID算法Matlab仿真程序和C程序

增量式PID控制算法Matlab仿真程序设一被控对象G(s)=50/(0.125s^2+7s),用增量式PID控制算法编写仿真程序(输入分别为单位阶跃、正弦信号,采样时间为1ms,控制器输出限幅:[-5,5],仿真曲线包括系统输出及误差曲线,并加上注释、图例)。程序如下clear all; close all; ts=0.001; sys=tf(50,[0.125,7, 0]); dsys=c2d(sys,ts,'z'); [num,den]=tfdata(dsys,'v'); u_1=0.0;u_2=0.0; y_1=0.0;y_2=0.0; x=[0,0,0]'; error_1=0; error_2=0; for k=1:1:1000 time(k)=k*ts; S=2; if S==1 kp=10;ki=0.1;kd=15; rin(k)=1; % Step Signal elseif S==2 kp=10;ki=0.1;kd=15; %Sin e Signal rin(k)=0.5*sin(2*pi*k*ts); end du(k)=kp*x(1)+kd*x(2)+ki*x(3); % PID Controller u(k)=u_1+du(k); %Restricting the output of controller if u(k)>=5 u(k)=5; end if u(k)<=-5 u(k)=-5; end %Linear model yout(k)=-den(2)*y_1-den(3)*y_2+nu m(2)*u_1+num(3)*u_2; error(k)=rin(k)-yout(k); %Return of parameters u_2=u_1;u_1=u(k); y_2=y_1;y_1=yout(k); x(1)=error(k)-error_1; %C alculating P x(2)=error(k)-2*error_1+error_2; %Calculating D x(3)=error(k); %Calculating I error_2=error_1; error_1=error(k); end figure(1); plot(time,rin,'b',time,yout,'r'); xlabel('time(s)'),ylabel('rin,yout'); figure(2); plot(time,error,'r') xlabel('time(s)');ylabel('error'); 微分先行PID算法Matlab仿真程序%PID Controler with differential in advance clear all; close all; ts=20; sys=tf([1],[60,1],'inputdelay',80); dsys=c2d(sys,ts,'zoh'); [num,den]=tfdata(dsys,'v'); u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;

神经网络学习算法matlab仿真(借鉴参照)

东南大学自动化学院 智能控制概论 神经网络学习算法研究 学院: 姓名: 学号: 日期:

目录 1 任务要求叙述 ..................................................... 错误!未定义书签。 2 系统分析及设计原理 ......................................... 错误!未定义书签。 3 设计实现.............................................................. 错误!未定义书签。4仿真验证.. (6) 5 讨论与分析.......................................................... 错误!未定义书签。

一.任务要求叙述 (1)任务 (a) 运行算法,观察和分析现有学习算法的性能; clear all;close all; nu=20;pi=3.1415926; for i=1:nu p(i)=2*pi*i/nu; t(i)=0.5*(1+cos(p(i))); end minmax=[min(p(:)) max(p(:))] net = newff([ 0 7],[6 1],{'logsig' 'purelin'},'traingd');% traingd traingdm trainlm net.trainParam.epochs = 10000; net.trainParam.goal = 0.0001; net.trainParam.show=200; net.trainParam.lr=0.1; net.trainParam.mc=0.6; %0.9 default value; available for momentum net = train(net,p,t); y1 = sim(net,p); figure(2); plot(p,t,'*-',p,y1,'r--') %************** test data ****************** nu2=nu*3/2; for i=1:(nu2) p2(i)=2*pi*i/(nu2); t2(i)=0.5*(1+cos(p2(i))); end y2 = sim(net,p2); figure(3); plot(t2,'*-');hold on; plot(y2,'r'); xlabel('times');ylabel('outputs'); figure(4); plot(t2-y2); xlabel('times');ylabel('error'); (b) 为了进一步提高学习逼近效果,可以采取那些措施,调节规律如何?根据所提的每种措施,修改算法程序,给出仿真效果验证、过程以及相应的曲线图,给出适当的评述;(c) 联系、结合前向神经网络的算法样本学习、测试等过程,谈谈本人对神经网络系统的一些认识和看法。

最短路径算法_matlab程序[1]

算法描述: 输入图G,源点v0,输出源点到各点的最短距离D 中间变量v0保存当前已经处理到的顶点集合,v1保存剩余的集合 1.初始化v1,D 2.计算v0到v1各点的最短距离,保存到D for each i in v0;D(j)=min[D(j),G(v0(1),i)+G(i,j)] ,where j in v1 3.将D中最小的那一项加入到v0,并且从v1删除这一项。 4.转到2,直到v0包含所有顶点。 %dijsk最短路径算法 clear,clc G=[ inf inf 10 inf 30 100; inf inf 5 inf inf inf; inf 5 inf 50 inf inf; inf inf inf inf inf 10; inf inf inf 20 inf 60; inf inf inf inf inf inf; ]; %邻接矩阵 N=size(G,1); %顶点数 v0=1; %源点 v1=ones(1,N); %除去原点后的集合 v1(v0)=0; %计算和源点最近的点 D=G(v0,:); while 1 D2=D; for i=1:N if v1(i)==0 D2(i)=inf; end end D2 [Dmin id]=min(D2); if isinf(Dmin),error,end v0=[v0 id] %将最近的点加入v0集合,并从v1集合中删除 v1(id)=0; if size(v0,2)==N,break;end %计算v0(1)到v1各点的最近距离 fprintf('计算v0(1)到v1各点的最近距离\n');v0,v1 id=0; for j=1:N %计算到j的最近距离 if v1(j)

电力电子技术MatLab仿真

本文前言 MA TLAB的简介 MATLAB是一种适用于工程应用的各领域分析设计与复杂计算的科学计算软件,由美国Mathworks公司于1984年正式推出,1988年退出3.X(DOS)版本,19992年推出4.X(Windows)版本;19997年腿5.1(Windows)版本,2000年下半年,Mathworks公司推出了他们的最新产品MATLAB6.0(R12)试用版,并于2001年初推出了正式版。随着版本的升级,内容不断扩充,功能更加强大。近几年来,Mathworks公司将推出MATLAB语言运用于系统仿真和实时运行等方面,取得了很多成绩,更扩大了它的应用前景。MATLAB已成为美国和其他发达国家大学教学和科学研究中最常见而且必不可少的工具。 MATLAB是“矩阵实验室”(Matrix Laboratory)的缩写,它是一种以矩阵运算为基础的交互式程序语言,着重针对科学计算、工程计算和绘图的需要。在MATLAB中,每个变量代表一个矩阵,可以有n*m个元素,每个元素都被看做复数摸索有的运算都对矩阵和复数有效,输入算式立即可得结果,无需编译。MATLAB强大而简易的做图功能,能根据输入数据自动确定坐标绘图,能自定义多种坐标系(极坐标系、对数坐标系等),讷讷感绘制三维坐标中的曲线和曲面,可设置不同的颜色、线形、视角等。如果数据齐全,MATLAB通常只需要一条命令即可做图,功能丰富,可扩展性强。MATLAB软件包括基本部分和专业扩展部分,基本部分包括矩阵的运算和各种变换、代数和超越方程的求解、数据处理和傅立叶变换及数值积分风,可以满足大学理工科学生的计算需要,扩展部分称为工具箱,它实际上使用MATLAB的基本语句编成的各种子程序集,用于解决某一方面的问题,或实现某一类的新算法。现在已经有控制系统、信号处理、图象处理、系统辨识、模糊集合、神经元网络及小波分析等多种工具箱,并且向公式推倒、系统仿真和实时运行等领域发展。MATLAB语言的难点是函数较多,仅基本部分就有七百多个,其中常用的有二三百个。 MATLAB在国内外的大学中,特别是数值计算应用最广的电气信息类学科中,已成为每个学生都应该掌握的工具。MATLAB大大提高了课程教学、解题作业、分析研究的效率。

人工鱼群算法的仿真程序-matlab

tic figure(1);hold on ezplot('x*sin(10*pi*x)+2',[-1,2]); %% 参数设置 fishnum=50; %生成50只人工鱼 MAXGEN=50; %最多迭代次数 try_number=100;%最多试探次数 visual=1; %感知距离 delta=0.618; %拥挤度因子 step=0.1; %步长 %% 初始化鱼群 lb_ub=[-1,2,1]; X=AF_init(fishnum,lb_ub); LBUB=[]; fori=1:size(lb_ub,1) LBUB=[LBUB;repmat(lb_ub(i,1:2),lb_ub(i,3),1)]; end gen=1; BestY=-1*ones(1,MAXGEN); %每步中最优的函数值 BestX=-1*ones(1,MAXGEN); %每步中最优的自变量 besty=-100; %最优函数值 Y=AF_foodconsistence(X); while gen<=MAXGEN fprintf(1,'%d\n',gen) fori=1:fishnum %% 聚群行为 [Xi1,Yi1]=AF_swarm(X,i,visual,step,delta,try_number,LBUB,Y); %% 追尾行为 [Xi2,Yi2]=AF_follow(X,i,visual,step,delta,try_number,LBUB,Y); if Yi1>Yi2 X(:,i)=Xi1; Y(1,i)=Yi1; else X(:,i)=Xi2; Y(1,i)=Yi2; end end [Ymax,index]=max(Y); figure(1); plot(X(1,index),Ymax,'.','color',[gen/MAXGEN,0,0]) ifYmax>besty besty=Ymax; bestx=X(:,index); BestY(gen)=Ymax;

最优化算法-Matlab程序

CG程序代码 function [x,y] = cg(A,b,x0) %%%%%%%%%%%%%%%%%CG算法%%%%%%%%%%%% r0 = A*x0-b; p0 = -r0; k = 0; r = r0; p = p0; x = x0; while r~=0 alpha = -r'*p/(p'*A*p); x = x+alpha*p; rold = r; r = rold+alpha*A*p; beta = r'*r/(rold'*rold); p = -r+beta*p; plot(k,norm(p),'.--'); hold on k = k+1; end y.funcount = k; y.fval = x'*A*x/2-b'*x;

function [x,y] = cg_FR(fun,dfun,x0) %%%%%%%%%%%%%%%CG_FR算法%%%%%%%%%%%%%%% error = 10^-5; f0 = feval(fun,x0); df0 = feval(dfun,x0); p0 = -df0; f = f0; df = df0; p = p0; x = x0; k = 0; while ((norm(df)>error)&&(k<1000)) f = feval(fun,x); [alpha,funcNk,exitflag] = lines(fun,0.01,0.15,0.85,6,f,df'*p,x,p);%%用线搜索找下降距离%% if exitflag == -1 disp('Break!!!'); break; end x = x+alpha*p; dfold = df; df = feval(dfun,x); beta = df'*df/(dfold'*dfold); p = -df+beta*p; plot(k,norm(df),'.--'); hold on k = k+1; end y.funcount = k; y.fval = feval(fun,x); y.error = norm(df);

各种BP学习算法MATLAB仿真

3.3.2 各种BP学习算法MATLAB仿真 根据上面一节对BP神经网络的MATLAB设计,可以得出下面的通用的MATLAB程序段,由于各种BP学习算法采用了不同的学习函数,所以只需要更改学习函数即可。 MATLAB程序段如下: x=-4:0.01:4; y1=sin((1/2)*pi*x)+sin(pi*x); %trainlm函数可以选择替换 net=newff(minmax(x),[1,15,1],{'tansig','tansig','purelin'},'trainlm'); net.trainparam.epochs=2000; net.trainparam.goal=0.00001; net=train(net,x,y1); y2=sim(net,x); err=y2-y1; res=norm(err); %暂停,按任意键继续 Pause %绘图,原图(蓝色光滑线)和仿真效果图(红色+号点线) plot(x,y1); hold on plot(x,y2,'r+'); 注意:由于各种不确定因素,可能对网络训练有不同程度的影响,产生不同的效果。如图3-8。 标准BP算法(traingd)

图3-8 标准BP算法的训练过程以及结果(原图蓝色线,仿真图+号线)增加动量法(traingdm) 如图3-9。 图3-9 增加动量法的训练过程以及结果(原图蓝色线,仿真图+号线)弹性BP算法(trainrp)如图3-10 图3-10 弹性BP算法的训练过程以及结果(原图蓝色线,仿真图+号线)

动量及自适应学习速率法(traingdx)如图3-11。 图3-11 动量及自适应学习速率法的训练过程以及结果(原图蓝色线,仿真图+号线)共轭梯度法(traincgf)如图3-12。

MVDR算法matlab程序

clc clear all close all %% 常量定义 Freqs=1.6e9; %工作频率 c=3e8; %光速 lamda=c/Freqs; %波长 d=0.5*lamda; %单元间距 M=16; %天线阵元数 fs=2e6; %采样频率 pd=10; %快拍数 %% 模型建立 %--------------第一个干扰模型-------------------- thetaJ1=20*pi/180; %干扰方向 FreqJ1=5e5; %第一个干扰的频率 J1NR=sqrt(10^(60/10)); J1one=J1NR*exp(j*(2*pi*FreqJ1*(1:1:pd)/fs)); %1*pd %--------------第二个干扰模型-------------------- ThetaJ2=60*pi/180; %干扰方向 FreqJ2=6e5; %第二个干扰的频率 J2NR=sqrt(10^(60/10)); J2one=J2NR*exp(j*(2*pi*FreqJ2*(1:1:pd)/fs)); %1*pd %--------------信号模型-------------------- ThetaS=30*pi/180; FreqS=7e5; SNR=sqrt(10^(40/10)); Sone=SNR*exp(j*(2*pi*FreqS*(1:1:pd)/fs)); %1*pd %--------------空域处理------------------------- I1=zeros(M,1); I2=zeros(M,1); IS=zeros(M,1); for n=1:M I1(n)=exp(j*2*pi*(n-1)*d*sin(thetaJ1)/lamda); I2(n)=exp(j*2*pi*(n-1)*d*sin(ThetaJ2)/lamda); IS(n)=exp(j*2*pi*(n-1)*d*sin(ThetaS)/lamda); end J1=I1*J1one; J1=J1.'; J2=I2*J2one; J2=J2.'; %------------产生噪声------------------------- noise=sqrt(1/2)*randn(pd,M)+j*sqrt(1/2)*randn(pd,M);

图论算法及matlab程序的三个案例

图论实验三个案例 单源最短路径问题 Dijkstra 算法 Dijkstra 算法是解单源最短路径问题的一个贪心算法。其基本思想是,设置一个顶点集合S 并不断地作贪心选择来扩充这个集合。一个顶点属于集合S 当且仅当从源到该顶点的最短路径长度已知。设v 是图中的一个顶点,记()l v 为顶点 v 到源点v 1的最短距离, ,i j v v V ?∈,若 (,)i j v v E ?,记i v 到j v 的权ij w =∞。 Dijkstra 算法: ① 1{}S v =,1()0l v =;1{}v V v ??-,()l v =∞,1i =,1{}S V v =-; ② S φ=,停止,否则转③; ③ ()min{(),(,)} j l v l v d v v =, j v S ∈,v S ?∈; ④ 存在 1 i v +,使 1()min{()} i l v l v +=,v S ∈; ⑤ 1{} i S S v +=, 1{} i S S v +=-,1i i =+,转②; 实际上,Dijkstra 算法也是最优化原理的应用:如果12 1n n v v v v -是从1v 到 n v 的最短路径,则 12 1 n v v v -也必然是从1v 到 1 n v -的最优路径。 在下面的MATLAB 实现代码中,我们用到了距离矩阵,矩阵第i 行第j 行元 素表示顶点i v 到j v 的权ij w ,若i v 到j v 无边,则realmax ij w =,其中realmax 是 MATLAB 常量,表示最大的实数+308)。 function re=Dijkstra(ma)

自适应滤波器MATLAB仿真

自适应滤波器 MATLAB仿真 摘要 : 本文介绍了自适应滤波器的工作原理,以及推导了著名的LMS( Least mean squares )算法。以一个例子演示了自适应滤波器的滤波效果。实验结果表明,该滤波器滤波效果较好。 关键词:自适应滤波器 MATLAB7.0 LMS 算法 Simulate of adaptive filter based on MATLAB7.0 Abstract: This article described the working principle of adaptive filter and deduced the well-known LMS algorithm. Take an example to demonstrate the adaptive filters filtering effects. The results show that the filter has an effective way to filter single. Key words: LMS algorithm Adaptive Filter Matlab7.0 1引言 由 Widrow B 等提出的自适应滤波理论,是在维纳滤波、卡尔曼滤波等线性滤波基础上发展起来的一种最佳滤波方法。由于它具有更强的适应性和更优的滤波性能,从而广泛应用于通信、系统辨识、回波消除、自适应谱线增强、自适应信道均衡、语音线性预测和自适应天线阵等诸多领域[1]。自适应滤波器最大的优点在于不需要知道信号和噪声的统计特性的先验知识就可以实现信号的最佳滤波处理。本文通过一个具体例子和结果论证了自适应滤波器的滤波效果。 2自适应滤波原理及 LMS算法 2.1 自适应滤波原理 图 1 自适应滤波原理图 在自适应滤波器中,参数可调的数字滤波器一般为 FIR 数字滤波器, IIR 数字滤波器或格型数字滤波器。自适应滤波分 2 个过程。第一,输入信号想 x(n) 通过参数可调的数字滤波器后得输出信号 y(n) ,y(n) 与参考信号 d(n) 进行比较得误差信号 e(n) ;第二,通过一种自适应算法和 x(n) 和 e(n) 的值来调节参数可调的数字滤波器的参数,即加权系

三个遗传算法matlab程序实例

遗传算法程序(一): 说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作! function [BestPop,Trace]=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables. % fmaxga solves problems of the form: % max F(X) subject to: LB <= X <= UB % BestPop - 最优的群体即为最优的染色体群 % Trace - 最佳染色体所对应的目标函数值 % FUN - 目标函数 % LB - 自变量下限 % UB - 自变量上限 % eranum - 种群的代数,取100--1000(默认200) % popsize - 每一代种群的规模;此可取50--200(默认100) % pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8) % pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1) % pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2) % options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编 %码,option(2)设定求解精度(默认1e-4) % % ------------------------------------------------------------------------ T1=clock; if nargin<3, error('FMAXGA requires at least three input arguments'); end if nargin==3, eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==4, popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0) error('数据输入错误,请重新输入(LB

matlab用于计算方法的源程序

1、Newdon迭代法求解非线性方程 function [x k t]=NewdonToEquation(f,df,x0,eps) %牛顿迭代法解线性方程 %[x k t]=NewdonToEquation(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:原函数,定义为内联函数 ?:函数的倒数,定义为内联函数 %x0:初始值 %eps:误差限 % %应用举例: %f=inline('x^3+4*x^2-10'); ?=inline('3*x^2+8*x'); %x=NewdonToEquation(f,df,1,0.5e-6) %[x k]=NewdonToEquation(f,df,1,0.5e-6) %[x k t]=NewdonToEquation(f,df,1,0.5e-6) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquation(f,df,1) if nargin==3 eps="0".5e-6; end tic; k=0; while 1 x="x0-f"(x0)./df(x0); k="k"+1; if abs(x-x0) < eps || k >30 break; end x0=x; end t=toc; if k >= 30 disp('迭代次数太多。'); x="0"; t="0"; end

2、Newdon迭代法求解非线性方程组 function y="NewdonF"(x) %牛顿迭代法解非线性方程组的测试函数 %定义是必须定义为列向量 y(1,1)=x(1).^2-10*x(1)+x(2).^2+8; y(2,1)=x(1).*x(2).^2+x(1)-10*x(2)+8; return; function y="NewdonDF"(x) %牛顿迭代法解非线性方程组的测试函数的导数 y(1,1)=2*x(1)-10; y(1,2)=2*x(2); y(2,1)=x(2).^+1; y(2,2)=2*x(1).*x(2)-10; return; 以上两个函数仅供下面程序的测试 function [x k t]=NewdonToEquations(f,df,x0,eps) %牛顿迭代法解非线性方程组 %[x k t]=NewdonToEquations(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组(事先定义) ?:方程组的导数(事先定义) %x0:初始值 %eps:误差限 % %说明:由于虚参f和df的类型都是函数,使用前需要事先在当前目录下采用函数M文件定义% 另外在使用此函数求解非线性方程组时,需要在函数名前加符号“@”,如下所示 % %应用举例: %x0=[0,0];eps=0.5e-6; %x=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)

SSDA 算法的matlab程序

%SSDAò?×?′óμ???êy?a×??ò,?ù?è±èò?×?D?e?a×??ò?y£?μ?μ±?£°?óD??éùê±£?è??üμ?μ??yè·?¥??μ? %[FileName2,PathName2] = uigetfile('*.jpg'); %pic= imread(FileName2); %[FileName,PathName] = uigetfile('*.jpg'); %moban=imread(FileName); %pic = imread('D:\matching algorithm\matching\2.jpg');%%%%%%%%%%o?ê±12??pic =imread('D:\matching algorithm\matching\lena.jpg') %%%%%%%%%%o?ê±15?? pic=pic(:,:,1); rect_pic = [256 178 145 167] moban = imcrop(pic,rect_pic); moban=imnoise(moban,'gaussian',0.005); pic=im2double(pic); moban=im2double(moban); subplot(2,2,1); imshow(pic);%2 subplot(2,2,2); imshow(moban);%3 pic1=pic; [M,N]=size(pic); [m,n]=size(moban); d=zeros(M-m,N-n); times=zeros(M-m,N-n); Tnum=0; tic; for x=1:M-m for y=1:N-n Temp=0; num=0; for i=0:m-1 for j=0:n-1 Temp = Temp+abs(pic(i+x,j+y)-moban(i+1,j+1)); num=num+1; end if Temp>m Tnum=num; break end end d(x,y)=Temp/(m*n); times(x,y)=Tnum; end end %[min_d, icmin] = min(d(:)); [max_t, itmax] = max(times(:)); %[p,q] = ind2sub(size(d),icmin(1)); [p,q] = ind2sub(size(times),itmax(1)); toc; pic1(:,:)=255; %pic1(p:p+m,q:q+n)=pic(p:p+m,q:q+n); pic1(p:p+m-1,q:q+n-1)=moban(1:m,1:n); msgbox(num2str([p,q]), 'location'); subplot(2,2,3); imshow(pic1);%4

PID控制算法的matlab仿真

PID 控制算法的matlab 仿真 PID 控制算法是实际工业控制中应用最为广泛的控制算法, 它具有控制器设计简单,控制效果好等优点。PID 控制器参数的设置是否合适对其控制效果具有很大的影响,在本课程设计中一具有较大惯性时间常数和纯滞后的一阶惯性环节作为被控对象的模型对PID 控制算法进行研究。被控对象的传递函数如下: ()1d s f Ke G s T s τ-= + 其中各参数分别为30,630,60f d K T τ===。MATLAB 仿真框图如图1所示。 1Out1 Zero-Order Hold Transport Delay 30630s+1Transfer Fcn Step -K-Kp -K-Ki -K-Kd z (z-1) (z-1)z Add 图1 2 具体内容及实现功能 2.1 PID 参数整定 PID 控制器的控制参数对其控制效果起着决定性的作用,合理设置控制参数是取得较好的控制效果的先决条件。常用的PID 参数整定方法有理论整定法和实验整定法两类,其中常用的实验整定法由扩充临界比例度法、试凑法等。在此处选用扩充临界比例度法对PID 进行整定,其过程如下: 1) 选择采样周期 由于被控对象中含有纯滞后,且其滞后时间常数为 60d τ=,故可选择采样周期1s T =。 2) 令积分时间常数i T =∞,微分时间常数0d T =,从小到大调节比例系数K , 使得系统发生等幅震荡,记下此时的比例系数k K 和振荡周期k T 。 3) 选择控制度为 1.05Q =,按下面公式计算各参数:

0.630.490.140.014p k i k d k s k K K T T T T T T ==== 通过仿真可得在1s T =时,0.567,233k k K T ==,故可得: 0.357,114.17,32.62, 3.262p i d s K T T T ==== 0.0053.57 p s i i p d d s K T K T K T K T === = 按此组控制参数得到的系统阶跃响应曲线如图2所示。 01002003004005006007008009001000 0.20.40.60.811.21.41.6 1.8 图2 由响应曲线可知,此时系统虽然稳定,但是暂态性能较差,超调量过大,且响应曲线不平滑。根据以下原则对控制器参数进行调整以改善系统的暂态过程: 1) 通过减小采样周期,使响应曲线平滑。 2) 减小采样周期后,通过增大积分时间常数来保证系统稳定。 3) 减小比例系数和微分时间常数,以减小系统的超调。 改变控制器参数后得到系统的阶跃响应曲线如图3所示,系统的暂态性能得到明显改善.

matlab图论程序算法大全

精心整理 图论算法matlab实现 求最小费用最大流算法的 MATLAB 程序代码如下: n=5;C=[0 15 16 0 0 0 0 0 13 14 for while for for(i=1:n)for(j=1:n)if(C(i,j)>0&f(i,j)==0)a(i,j)=b(i,j); elseif(C(i,j)>0&f(i,j)==C(i,j))a(j,i)=-b(i,j); elseif(C(i,j)>0)a(i,j)=b(i,j);a(j,i)=-b(i,j);end;end;end for(i=2:n)p(i)=Inf;s(i)=i;end %用Ford 算法求最短路, 赋初值 for(k=1:n)pd=1; %求有向赋权图中vs 到vt 的最短路

for(i=2:n)for(j=1:n)if(p(i)>p(j)+a(j,i))p(i)=p(j)+a(j,i);s(i)=j;pd=0;end ;end;end if(pd)break;end;end %求最短路的Ford 算法结束 if(p(n)==Inf)break;end %不存在vs 到vt 的最短路, 算法终止. 注意在求最小费用最大流时构造有 while if elseif if if pd=0; 值 t=n; if elseif if(s(t)==1)break;end %当t 的标号为vs 时, 终止调整过程 t=s(t);end if(pd)break;end%如果最大流量达到预定的流量值 wf=0; for(j=1:n)wf=wf+f(1,j);end;end %计算最大流量 zwf=0;for(i=1:n)for(j=1:n)zwf=zwf+b(i,j)*f(i,j);end;end%计算最小费用

电力电子技术matlab仿真.doc

本文前言 MATLAB的简介 MATLAB是一种适用于工程应用的各领域分析设计与复杂计算的科学计算软件,由美国Mathworks公司于1984年正式推出,1988年退出3.X(DOS)版本,19992年推出4.X(Windows)版本;19997年腿5.1(Windows)版本,2000年下半年,Mathworks公司推出了他们的最新产品MATLAB6.0(R12)试用版,并于2001年初推出了正式版。随着版本的升级,内容不断扩充,功能更加强大。近几年来,Mathworks公司将推出MATLAB语言运用于系统仿真和实时运行等方面,取得了很多成绩,更扩大了它的应用前景。MATLAB已成为美国和其他发达国家大学教学和科学研究中最常见而且必不可少的工具。 MATLAB是“矩阵实验室”(Matrix Laboratory)的缩写,它是一种以矩阵运算为基础的交互式程序语言,着重针对科学计算、工程计算和绘图的需要。在MATLAB中,每个变量代表一个矩阵,可以有n*m个元素,每个元素都被看做复数摸索有的运算都对矩阵和复数有效,输入算式立即可得结果,无需编译。MATLAB强大而简易的做图功能,能根据输入数据自动确定坐标绘图,能自定义多种坐标系(极坐标系、对数坐标系等),讷讷感绘制三维坐标中的曲线和曲面,可设置不同的颜色、线形、视角等。如果数据齐全,MATLAB通常只需要一条命令即可做图,功能丰富,可扩展性强。MATLAB软件包括基本部分和专业扩展部分,基本部分包括矩阵的运算和各种变换、代数和超越方程的求解、数据处理和傅立叶变换及数值积分风,可以满足大学理工科学生的计算需要,扩展部分称为工具箱,它实际上使用MATLAB的基本语句编成的各种子程序集,用于解决某一方面的问题,或实现某一类的新算法。现在已经有控制系统、信号处理、图象处理、系统辨识、模糊集合、神经元网络及小波分析等多种工具箱,并且向公式推倒、系统仿真和实时运行等领域发展。MATLAB语言的难点是函数较多,仅基本部分就有七百多个,其中常用的有二三百个。 MATLAB在国内外的大学中,特别是数值计算应用最广的电气信息类学科中,已成为每个学生都应该掌握的工具。MATLAB大大提高了课程教学、解题作业、分析研究的效率。

MUSIC算法matlab程序

clear all close all derad = pi/180; % deg -> rad radeg = 180/pi; twpi = 2*pi; kelm = 8; % 阵列数量 dd = ; % space d=0:dd:(kelm-1)*dd; % iwave = 4; % number of DOA theta = [-60 -30 30 60]; % 角度 snr = 10; % input SNR (dB) n = 500; % A=exp(-j*twpi*d.'*sin(theta*derad));%%%% direction matrix S=randn(iwave,n); X=A*S; X1=awgn(X,snr,'measured');%在信号X中加入高斯白噪声,信噪比SNR,'measured'函数在加入噪声前测定信号强度 Rxx=X1*X1'/n; InvS=inv(Rxx); %%%% [EV,D]=eig(Rxx);%%%% [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。 EVA=diag(D)';%返回矩阵D的主对角线上的元素 [EVA,I]=sort(EVA);%其中I是一个大小等于size(EVA)的数组,其每一列是EVAA中列向量的元素相对应的置换位置记号。 EVA=fliplr(EVA);%将矩阵A的列绕垂直轴进行左右翻转,如果A是一个行向量,fliplr(A)将A中元素的顺序进行翻转。如果A是一个列向量,fliplr(A)还等于A。 EV=fliplr(EV(:,I)); % MUSIC for iang = 1:361 angle(iang)=(iang-181)/2; phim=derad*angle(iang); a=exp(-j*twpi*d*sin(phim)).'; L=iwave; En=EV(:,L+1:kelm); SP(iang)=(a'*a)/(a'*En*En'*a); end %画图 SP=abs(SP); SPmax=max(SP); SP=10*log10(SP/SPmax); h=plot(angle,SP); set(h,'Linewidth',2)

matlab仿真要求

1,matlab仿真要求: 说明: 1)用matlab仿真无线传感器网络环境,验证给定算法的性能表现。(算法另外给出)。 算法一: 注: 1)应用的对象为cluster ,全网中有若干cluster,它们之间交互通讯,达到全网各cluster 在周期内有计划的休息和活动(sleep schedule)。 这里的收发信号均为全局信号。 3)每个cluster在自己的时间段内(time slot)活动(data trans 传输数据)。各cluster 的slot 的长短约等,由下层网络算法支 持。 4)data trans 部分嵌入算法二; 要求: 1)实现在一个周期内各cluster的sleep/active schedule; 2)需要竞争“空闲slot 时间”时,按等待时间长短和紧急程度排优先级; 3)1),2)可周期循环进行; 算法二:

说明: 1)应用对象为单个节点,每个节点需要具备以下数据值: Structure node: { Degree: D;//在短程广播范围内的邻居节点数,固定不变 d; // 当前度数,每次启动算法二,d=D Data: self data;//自己感知到的数据 Received data;// 从接受到的消息(Msg.)中 // 得到的数据 Overdraft signal;// 是否透支 State: active/deaf (sleep);//节点状态 Timeout value;// 监听系统中无任何消息时,确定没有d=1 // 的节点,需要透支d=2 的节点 } 2)所有节点用广播形式发送自己的消息(Msg.),用短程广播半径; 3)广播前监听信道CSMA/CD(Carrier Sense Multiple Access/Collision Detect)

相关文档
最新文档