MATLAB及其在电气工程中的运用报告袁波.docx
- 文档编号:20646567
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:32
- 大小:82.01KB
MATLAB及其在电气工程中的运用报告袁波.docx
《MATLAB及其在电气工程中的运用报告袁波.docx》由会员分享,可在线阅读,更多相关《MATLAB及其在电气工程中的运用报告袁波.docx(32页珍藏版)》请在冰豆网上搜索。
MATLAB及其在电气工程中的运用报告袁波
Matlab及其在电气工程中的应用
报告
姓名:
袁波
学号:
3109312024
院系:
电气学院电机教研室
日期:
2010.1.20
第一部分MATLAB语言及Simulink仿真的基本介绍
1.MATLAB
MATLAB是当今最优秀的科技应用软件之一,它简单易用,具有强大的科学计算能力、可视化功能、开放式可扩展环境,所附带的工具箱支持30多个领域,因此,在许多科学领域中MATLAB成为计算机辅助设计和分析、算法研究和应用开发的基本工具和首选平台。
同时,MATLAB具有其他高级语言难以比拟的一些优点:
编写简单,效率高,易懂易学,因此,MATLAB语言也被通俗的称为演算纸式的科学算法语言。
MATLAB在信号处理、通信、自动控制及科学计算等领域中被广泛应用,被认为是最能够提高工作效率,改善设计手段的工具软件。
MATLAB在学术界和工程界广受欢迎,其主要优势和特点有如下几个方面。
◆友好的工作平台和编程环境
MATLAB由一系列工具组成,其中许多工具采用的是图形用户界面,包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。
这些图形化工具方便用户使用MATLAB的函数和文件。
随着MATLAB的商业化以及软件本身的不断升级,MATLAB用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。
同时,MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。
MATLAB简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时的报告出现的错误并进行出错原因分析。
◆简单易用的编程语言
MATLAB语言是一种高级矩阵语言,它包括控制语句、函数、数据结构、输入和输出和面向对象编程的特点。
用户可以在命令窗口中将输入语句与执行命令同步,也可以编写好一个较大的复杂的应用程序(M文件)后再一起运行。
MATLAB语言是基于流行的C++语言基础上的,因此语法结构与C++极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。
使之更利于非计算机专业的科技人员使用。
而且这种语言可移植性好、可拓展性强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。
◆强大的科学计算及数据处理能力
MATLAB是一个包含大量计算算法的集合,其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。
这些函数集包括从最简单最基本的函数到诸如矩阵、特征向量、快速傅立叶变换的复杂函数。
函数所能解决的问题大致包括矩阵运算和线性方程组的求解/微分方程及偏微分方程等等。
函数中使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错优化。
在计算要求相同的情况下,使用MATLAB的编程工作量大大减少。
◆出色的图形处理功能
MATLAB具有方便的数据可视化功能,能够将向量和矩阵用图形的形式表现出来,并且可以对图形进行标注和打印。
MATLAB对整个图像处理功能进行了很大的改进和完善,是它不仅在一般数据可视化软件都具有的功能方面更加完善,而且对于一些其他软件所没有的功能,MATLAB同样表现了出色的处理能力。
同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。
◆应用广泛的模块集合工具箱
MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。
一般来说,它们都是由特定领域的专家开发的,用户直接可以使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。
◆实用的程序接口和发布平台
MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。
允许用户编写可以和MATLAB进行交互的C和C++语言程序。
MATLAB的一个重要特色就是它具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。
工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而制定的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。
2.Simulink
Simulink是MATLAB众多工具包中的一员,它是一种图形化的仿真工具包,能够进行动态系统建模、仿真和综合分析,可以处理线性和非线性系统,离散、连续和混合系统,以及单任务和多任务系统,并在同一系统中支持不同的变化率。
对于建模,Simulink提供了一个图形化的用户界面,可以用鼠标点击和拖拉模块图标建模。
通过图形界面,可以像用铅笔在纸上画图一样画模型图。
Simulink包括一个复杂的由接收器、信号源、线性和非线性组件以及连接组件组成的模块库,也可以制定和创建用户自己的模块。
所有模型都是分级的,因此可以通过自上而下或者自下而上的方法建立模型。
这一方法提供了一个了解模型是如何组成以及它的各个部分是如何相互联系的方法。
定义为一个模型后,就可以通过Simulink的菜单或者在MATLAB的命令窗口输入命令对它进行仿真。
菜单对于交互式工作非常方便。
仿真的结果可以放在MATLAB的工作空间中以待进一步的处理。
Simulink具有非常高的开放性,提倡将模型通过框图形式表示出来,或者将已有的模型添加组合到一起,或者将自己创建的模块添加到模型中。
Simulink具有较高的交互性,允许随意修改模块参数,并且可以直接无缝地使用MATLAB的所有分析工具。
对最后得到的结果进行分析,并能够将结果可视化显示出来。
Simulink应用领域广泛,包括电气、电子、航空航天、物理学、数学、通信、影视等。
二.Adalin的LMS算法
1.实验目的
1.通过自己动手熟悉MATLAB编程与仿真环境
2.通过MATLAB编程实验了解Adaline工作原理。
3.通过编写程序实现LMS算法即最小均方学习算法,实现采用线性函数时单个神经元的分类功能。
2.实验内容及步骤
1.阅读Adaline的原理,理解三种LMS算法的思想。
选择随机逼近算法,编写程序进行实验;
2.分别在规定的两个圆内均匀的采100个随机点。
如图所示:
图1.圆一中采的点图2.圆二中采的点
程序如下:
clearall;
clc;
closeall;
n=100;
x100=unifrnd(-0.7,2.7,100,1);%生成100个均匀随机数作为横坐标
X100=x100';
a1=sqrt(1.7^2-abs(x100-1).^2);%计算每个x对应的y范围
y100=unifrnd(-a1+1,a1+1,100,1);%对每个横坐标生成均匀随机数作为纵坐标
Y100=y100';
u1=[x100,y100];%形成输入向量1
x200=unifrnd(-2.7,0.7,100,1);%生成100个均匀随机数作为横坐标
X200=x200';
a2=sqrt(1.7^2-abs(x200+1).^2);%计算每个x对应的y范围
y200=unifrnd(-a2-1,a2-1,100,1);%对每个横坐标生成均匀随机数作为纵坐标
Y200=y200';
u2=[x200,y200];%形成输入向量2
scatter(X100,Y100)%绘图
scatter(X200,Y200)
3.计算自相关向量R和互相关向量P,计算最佳全向量Wji,E[min]。
结果如下:
R=
2.01361.0231
1.02311.7346
P=
0.20750.1834
Wji=
0.07040.0642
Emin=
1.9736
程序如下:
clearall;
closeall;
n=100;
x100=unifrnd(-0.7,2.7,100,1);%生成100个均匀随机数作为横坐标
X100=x100';
a1=sqrt(1.7^2-abs(x100-1).^2);%计算每个x对应的y范围
y100=unifrnd(-a1+1,a1+1,100,1);%对每个横坐标生成均匀随机数作为纵坐标
Y100=y100';
u1=[x100,y100];%形成输入向量1
x200=unifrnd(-2.7,0.7,100,1);%生成100个均匀随机数作为横坐标
X200=x200';
a2=sqrt(1.7^2-abs(x200+1).^2);%计算每个x对应的y范围
y200=unifrnd(-a2-1,a2-1,100,1);%对每个横坐标生成均匀随机数作为纵坐标
Y200=y200';
u2=[x200,y200];%形成输入向量2
d1=1;d2=-1;
d=[d1,d2];
R=zeros(2,2);
P=zeros(1,2);
fori=1:
n
X=[X100(i),Y100(i)];
m100=X'*X;
X=[X200(i),Y200(i)];
m200=X'*X;
R=R+m100+m200;
end
R=R/(2*n)
fori=1:
n
X=[X100(i),Y100(i)];
m300=[d1,d2]*X';
X=[X200(i),Y200(i)];
m400=[d1,d2]*X';
p=[m300,m400];
P=P+p;
end
P=P/n
Wji=P/R
Emin=d*d'-P*Wji'
4.选择合适的步幅系数和最小误差,实现随机逼近算法并记录均方误差曲线,如图所示:
结果:
E=
0.0038
k=
32
程序如下:
clearall;
closeall;
n=100
x100=unifrnd(-0.7,2.7,100,1);%生成100个均匀随机数作为横坐标
X100=x100';
a1=sqrt(1.7^2-abs(x100-1).^2);%计算每个x对应的y范围
y100=unifrnd(-a1+1,a1+1,100,1);%对每个横坐标生成均匀随机数作为纵坐标
Y100=y100';
u1=[x100,y100];%形成输入向量1
x200=unifrnd(-2.7,0.7,100,1);%生成100个均匀随机数作为横坐标
X200=x200';
a2=sqrt(1.7^2-abs(x200+1).^2);%计算每个x对应的y范围
y200=unifrnd(-a2-1,a2-1,100,1);%对每个横坐标生成均匀随机数作为纵坐标
Y200=y200';
u2=[x200,y200];%形成输入向量2
d1=1;d2=-1;
w=randn(1,2);%设置初值
E=1;%均方差初值
m=1;%记录循环次数
k=1;%设置最小误差
e=zeros(1,n);
while(E>0.005&k<100)
ifm==0
X=[X100(k),Y100(k)];
d=1;
m=1;
else
X=[X200(k),Y200(k)];
d=-1;
m=0;
end
alfa=1/k;
y=X*w';
w=w+alfa*(d-y)*X;
k=k+1;
E=((1-[X100(k),Y100(k)]*w')^2+(-1-[X200(k),Y200(k)]*w')^2)/2
e(k)=E;
end
k
x=1:
1:
k;
y=e(x);
plot(x,y)
5.固定最小误差,选择3个不同的步幅系数(0.01,0.04,0.07),记录最后的均方误差e1,e2,e3,重复上一步骤。
结果如下:
e1=
2.7469
e2=
1.9536
e3=
2.1998
程序如下:
clearall;
clc;
closeall;
n=100;
x100=unifrnd(-0.7,2.7,100,1);%生成100个均匀随机数作为横坐标
X100=x100';
a1=sqrt(1.7^2-abs(x100-1).^2);%计算每个x对应的y范围
y100=unifrnd(-a1+1,a1+1,100,1);%对每个横坐标生成均匀随机数作为纵坐标
Y100=y100';
u1=[x100,y100];%形成输入向量1
x200=unifrnd(-2.7,0.7,100,1);%生成100个均匀随机数作为横坐标
X200=x200';
a2=sqrt(1.7^2-abs(x200+1).^2);%计算每个x对应的y范围
y200=unifrnd(-a2-1,a2-1,100,1);%对每个横坐标生成均匀随机数作为纵坐标
Y200=y200';
u2=[x200,y200];%形成输入向量2
scatter(X100,Y100);
scatter(X200,Y200);
X=randn(1,2)
w=randn(1,2);%设置初值
w1=w;w2=w;w3=w;
alfa1=0.01;%步幅设置
alfa2=0.04;
alfa3=0.07;
m=1;
k=100;%设置循环次数
E1=randn(1,k);
E2=randn(1,k);
E3=randn(1,k);
l=1;%学习过程
forl=1:
k
ifm==0
X=[X100(l),Y100(l)];
d=0;
m=1;
else
X=[X200(l),Y200(l)];
d=1;
m=0;
end
whileE1(l)<0.05|E2(l)<0.05|E3(l)<0.05
y1=X*w1';
y2=X*w2';
y3=X*w3';
w1=w1+2*alfa1*(d-y1)*X;
w2=w2+2*alfa2*(d-y2)*X;
w3=w3+2*alfa3*(d-y3)*X;
E1(l)=((1-[X100(l),Y100(l)]*w1')^2+(-1-[X200(l),Y200(l)]*w1')^2)/2
E2(l)=((1-[X100(l),Y100(l)]*w2')^2+(-1-[X200(l),Y200(l)]*w2')^2)/2
E3(l)=((1-[X100(l),Y100(l)]*w3')^2+(-1-[X200(l),Y200(l)]*w3')^2)/2
end
end
e1=E1(l)
e2=E2(l)
e3=E3(l)
title('步幅不同时均方误差E随学习步数的变化曲线')
subplot(2,2,1)
plot(E1)%步幅为alfa1时均方误差E1随学习步数的变化曲线
legend('步幅为0.01')
subplot(2,2,2)
plot(E2)%步幅为alfa2时均方误差E2随学习步数的变化曲线
legend('步幅为0.04')
subplot(2,2,3)
plot(E3)%步幅为alfa3时均方误差E2随学习步数的变化曲线
legend('步幅为0.07')
问题:
步幅系数对收敛速度有何影响?
答:
步幅系数较大时,容易产生过收敛。
但如果步幅系数太小,学习的速度会变得很慢。
当步幅系数足够小时,总能找到一个最佳的权向量,使得神经元能准确无误地完成任务。
6.根据相关向量R的最大特征值选取合适的步幅系数,实现Windrow的严格递推算法,记录得到的权向量和均方误差曲线。
曲线如图:
结果如下:
k=
7
R=
1.87750.8799
0.87991.4412
P=
0.17100.0606
Wji=
0.1000-0.0190
w=
0.26700.6814
E=
0.0044
>>程序如下:
clearall;
closeall;
n=100;
x100=unifrnd(-0.7,2.7,100,1);%生成100个均匀随机数作为横坐标
X100=x100';
a1=sqrt(1.7^2-abs(x100-1).^2);%计算每个x对应的y范围
y100=unifrnd(-a1+1,a1+1,100,1);%对每个横坐标生成均匀随机数作为纵坐标
Y100=y100';
u1=[x100,y100];%形成输入向量1
x200=unifrnd(-2.7,0.7,100,1);%生成100个均匀随机数作为横坐标
X200=x200';
a2=sqrt(1.7^2-abs(x200+1).^2);%计算每个x对应的y范围
y200=unifrnd(-a2-1,a2-1,100,1);%对每个横坐标生成均匀随机数作为纵坐标
Y200=y200';
u2=[x200,y200];%形成输入向量2
scatter(X100,Y100);
scatter(X200,Y200);
d1=1;d2=-1;
d=[d1,d2];
R=zeros(2,2);
P=zeros(1,2);
fori=1:
n
X=[X100(i),Y100(i)];
m100=X'*X;
X=[X200(i),Y200(i)];
m200=X'*X;
R=R+m100+m200;
end
R=R/(2*n)
fori=1:
n
X=[X100(i),Y100(i)];
m300=[d1,d2]*X';
X=[X200(i),Y200(i)];
m400=[d1,d2]*X';
p=[m300,m400]
P=P+p;
end
P=P/n
Wji=P/R
Emin=d*d'-P*Wji'
[V,D]=eig(R);
ifD(1,1)>=D(2,2)
max=D(1,1);
else
max=D(2,2);
end
w=zeros(1,2)%设置初值
alfa=1/max%步幅设置
E=1;%均方差初值
m=1;%记录循环次数
k=1;%设置最小误差
e=zeros(1,n);
whileE>0.005
ifm==0
X=[X100(k),Y100(k)];
d=1;
m=1;
else
X=[X200(k),Y200(k)];
d=-1;
m=0;
end
y=X*w';
Q=zeros(1,2);
fori=1;100;
ifd==1
q=(d-y)*[X100(i),Y100(i)];
Q=Q+q;
else
q=(d-y)*[X200(i),Y200(i)];
Q=Q+q;
end
end
Q=Q/100;
w=w+2*alfa*Q;
k=k+1
ifk>100
k=k-100;
end
E=((1-[X100(k),Y100(k)]*w')^2+(-1-[X200(k),Y200(k)]*w')^2)/2
e(k)=E;
end
k
R
P
Wji
w
E
x=1:
1:
k;
y=e(x);
plot(x,y)
7.根据R的最大特征值max选择三个不同的步幅系数重复上一以步骤,记录权值和均方误差最后值(e1,e2,e3),观察均方误差的收敛性与和步幅系数之间的关系。
结果如下:
如图所示:
w1=
0.29470.1250
w2=
0.34230.1041
w3=
1.0e+166*
-8.3353-4.3270
e1=
1.0196
e2=
0.0034
e3=
Inf
均方误差的收敛性与和步幅系数之间的关系?
答:
当选择不同的步幅系数时,对应的均方误差不可能同时收敛,其收敛速度相差很大,当一种均方误差收敛时,另一个因为步幅系数过大均方值甚至为无穷大。
因为步幅系数决定了是否收敛和收敛速度。
程序如下:
clearall;
closeall;
n=100;
x100=unifrnd(-0.7,2.7,100,1);%生成100个均匀随机数作为横坐标
X100=x100';
a1=sqrt(1.7^2-abs(x100-1).^2);%计算每个x对应的y范围
y100=unifrnd(-a1+1,a1+1,100,1);%对每个横坐标生成均匀随机数作为纵坐标
Y100=y100';
u1=[x100,y100];%形成输入向量1
x200=unifrnd(-2.7,0.7,100,1);%生成100个均匀随机数作为横坐标
X200=x200';
a2=sqrt(1.7^2-abs(x200+1).^2);%计算每个x对应的y范围
y200=unifrnd(-a2-1,a2-1,100,1);%对每个横坐标生成均匀随机数作为纵坐标
Y200=y200';
u2=[x200,y200];%形成输入向量2
scatter(X100,Y100);
scatter(X200,Y200);
d1=1;d2=-1;
R=zeros(2,2);
P=zeros(1,2);
fori=1:
n
X=[X100(i),Y100(i)];
m100=X'*X;
X=[X200(i),Y200(i)];
m200=X'*X;
R=R+m100+m200;
end
R
R=R/(2*n);
fori=1:
n
X=[X100(i),Y100(i)];
m300=[d1,d2]*X';
X=[X200(i),Y200(i)];
m400=[d1,d2]*X';
p=[m300,m400];
P=P+p;
end
P=P/n;
Wji=P/R
[V,D]=eig(R);
ifD(1,1)>=D(2,2)
max=D(1,1);
else
max=D(2,2);
end
w=zeros(1,2);%设置初值
e=zeros(1,2);
w1=w;w2=w;w3=w;
alfa1=0.05*max;%步幅设置
alfa2=1/max;
alfa3=5*1/max;
m=1;
k=100;%记录循环次数
E1=randn(1,k);
E2=randn(1,k);
E3=randn(1,k);
l=1;%学习过程
forl=1:
k
ifm==0
X=[X100(k),Y100(k)];
d=1;
m=1;
else
X=[X200(k),Y200(k)]
d=-1;
m=0;
end
y1=X*w1';
y2=X*w2';
y3=X*w3';
w1=w1+2*alfa1*(d-y1)*X;
w2=w2+2*alfa2*(d-y2)*X;
w3=w3+2*alfa3*(d-y3)*X;
E2(l)=((1-[X100(l),Y100(l)]*w1')^2+(-1-[X200(l),Y200(l)]*w1')^2)/2;
E2(l)=((1-[X100(l),Y100(l)]*w2')^2+(-1-[X20
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 及其 电气工程 中的 运用 报告