目录
1.MATLAB的简介·· 2
2.具体题目分析·· 3
2.1· 3
2.2· 3
2.3· 5
2.4· 6
2.5· 10
2.6· 10
2.7· 11
2.8· 12
2.9 · 13
2.10· 14
3.课程设计心得·· 16
4.参考文献·· 17
本科生课程设计成绩评定表·· 18
课程设计任务书
学生姓名: 杨坚 专业班级: 电信1006班
指导教师: 阙大顺,李景松 工作单位: 信息工程学院
课程设计名称:Matlab应用课程设计
课程设计题目:Matlab运算与应用设计3
初始条件:
1. Matlab6.5以上版本软件;
2. 课程设计辅导资料:“Matlab语言基础及使用入门”、“Matlab及在电子信息课程中的应用”、线性代数及相关书籍等;
3. 先修课程:高等数学、线性代数、电路、Matlab应用实践及信号处理类相关课程等。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1. 课程设计内容:根据指导老师给定的7套题目,按规定选择其中1套完成;
2. 本课程设计统一技术要求:研读辅导资料对应章节,对选定的设计题目进行理论分析,针对具体设计部分的原理分析、建模、必要的推导和可行性分析,画出程序设计框图,编写程序代码(含注释),上机调试运行程序,记录实验结果(含计算结果和图表),并对实验结果进行分析和总结。具体设计要求包括:
① 初步了解Matlab、熟悉Matlab界面、进行简单操作;
② MATLAB的数值计算:创建矩阵、矩阵运算、多项式运算、线性方程组、数值统计;
③ 基本绘图函数:plot, plot3, mesh, surf等,要求掌握以上绘图函数的用法、简单图形标注、简单颜色设定等;
④ 使用文本编辑器编辑m文件,函数调用;
⑤ 能进行简单的信号处理Matlab编程;
⑥ 按要求参加课程设计实验演示和答辩等。
3. 课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写,具体包括:
① 目录;
② 与设计题目相关的理论分析、归纳和总结;
③ 与设计内容相关的原理分析、建模、推导、可行性分析;
④ 程序设计框图、程序代码(含注释)、程序运行结果和图表、实验结果分析和总结;
⑤ 课程设计的心得体会(至少500字);
⑥ 参考文献(不少于5篇);
⑦ 其它必要内容等。
时间安排:1.5周(分散进行)
参考文献:
[1] (美)穆尔,高会生,刘童娜,李聪聪.MATLAB实用教程(第二版) . 电子工业出版社,2010.
[2] 王正林,刘明.精通MATLAB(升级版) .电子工业出版社,2011.
[3] 陈杰 . MATLAB宝典(第3版) . 电子工业出版社,2011.
[4] 刘保柱,苏彦华,张宏林 . MATLAB 7.0从入门到精通(修订版) . 人民邮电出版社,2010.
指导教师签名: 年 月 日
系主任(或责任教师)签名: 年 月 日
1.MATLAB的简介
MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
MATLAB应用
MATLAB 产品族可以用来进行以下各种工作:
● 数值分析
● 数值和符号计算
● 工程与科学绘图
● 控制系统的设计与仿真
● 数字图像处理
● 数字信号处理
● 通讯系统设计与仿真
● 财务与金融工程
MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。
2.具体题目分析
2.1算y1=和y2=
2.1.1 理论分析
这是利用matlab处理数值运算的题目。这其中要用到cos()、sqrt()等函数。
2.1.2程序代码
>> y1=20*cos(0.5*pi)/(2+sqrt(3)) %计算y1的表达式
y1 =
3.2814e-016 %y1的计算结果
>> y2=5*cos(0.4*pi)/(4+sqrt(3)) %计算y2的表达式
y2 =
0.2696 %y2的计算结果
2.1.3总结
我们注意到matlab中的pi与真正的有差距,而且数字与因式相乘要使用乘法符号'*'.通过这个计算,我了解到matlab有处理数据计算的功能。
2.2绘制函数在时的曲线。
2.2.1理论分析
利用MATLAB软件绘制曲线图。在这里用到的是plot命令。熟悉使用plot及一些画图修饰命令:xlabel,ylabel,title,legend,axis,grid on。
2.2.2程序代码
>> x=0:0.02:1; %生成数组
>> y=x.*exp(-x);
>> plot(x,y); %用plot命令画图
>> xlabel('x');ylabel('y'); %标注x,y轴
>> title('图形曲线'); %标注标题
>> legend('y=x*exp(-x)') %标注函数
>> axis([0,1,0,0.5]) %限定x,y范围
>> grid on %显示网格
2.2图
2.2.3总结
plot命令是很好的画二维函数图像的命令,但取变量数组时因注意数组的步长。结合其他的一些函数它可以很方便的画出所需区域的函数图像。可以很轻松的描绘处函数运算之后以及符合函数的图像。还有就是写命令时注意运算符前加“.”与不加的区别。
2.3用图形表示离散函数。
2.3.1理论分析
这道题目中要用到scatter()函数来画离散图。其中还用到绝对值的函数abs(),还有就是前一题用到的一些修饰命令。
2.3.2程序代码
>> n=-44:56; %生成数组
>> y=abs(n-6).^-1;
>> scatter(n,y,3); %用函数scatter画离散图,3是设定离散点的形状函数还可设定离散点的颜色。
>> xlabel('n');
>> ylabel('y');
>> title('y=abs(n-6).^-1的散点图形');
得到的图像为:
2.3图
2.3.3 总结
做这一题时应注意“y=abs(n-6).^-1;”不要写成“y=1/abs(n-6)”不然会出现警告,因为abs(n-6)不能为0。
2.4分析下面每条指令的功能并运行,观察执行结果。
2.4.1分析指令
X=0:0.25:3;
功能:生成一向量X,第一个元素为0,最后一个元素的限定值为3,变化步长为0.25。
运行:因有冒号运行后结果不会显示。
Y=X.*exp(-X);
功能:由向量X运算得向量Y,指令中exp(-X)是自然数e得-X次方。
运行:因有冒号运行后结果不会显示。
plot(X,Y),xlabel(‘x’), ylabel(‘y’),title(‘y=x*exp(-x)’);
功能 :绘制以X和Y为横,纵坐标得二维曲线,并且在x轴和y轴标注x,y,还有图形加标题:y=x*exp(-x)
2.4图
2.4.2指令分析
A=zeros(3,5)
功能:生成3*5阶的全0矩阵
A(:)=-4:5
功能:将数组赋给矩阵
运行结果:出错因数组的元素个数与矩阵元素个数不等 。我将其改成A(:)=-4:10
L=abs(A)>4
功能:取A的绝对值判断是否大于4生成逻辑值L
islogical(L)
功能:若L为逻辑值则为真
X=A(L)
运行结果:
>> A=zeros(3,5)
A =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
>> A(:)=-4:10
A =
-4 -1 2 5 8
-3 0 3 6 9
-2 1 4 7 10
>> L=abs(A)>4
L =
0 0 0 1 1
0 0 0 1 1
0 0 0 1 1
>> islogical(L)
ans =
1
>> X=A(L)
X =
5
6
7
8
9
10
2.4.3指令分析
A=[1:5;6:10]
功能:生成一二维数组
运行结果:A =
1 2 3 4 5
6 7 8 9 10
pow2(A)
功能:求2的A次方
运行结果:ans =
2 4 8 16 32
64 128 256 512 1024
2.4.4指令分析
A=zeros(3,2)
功能:生成3*2阶的全0矩阵
运行结果:A =
0 0
0 0
0 0
A(:)=1:6
功能:将数组赋给矩阵
运行结果:A =
1 4
2 5
3 6
A=A*(1+i)
功能:用A成以复数(1+i)转换成复数在赋还给A
运行结果:A =
1.0000 + 1.0000i 4.0000 + 4.0000i
2.0000 + 2.0000i 5.0000 + 5.0000i
3.0000 + 3.0000i 6.0000 + 6.0000i
A1=A.’;
功能:生成A的转置矩阵并赋给A1
结果:A1 =
1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i
4.0000 + 4.0000i 5.0000 + 5.0000i 6.0000 + 6.0000i
B1=A’;
功能:生成A的转置共轭矩阵并赋给B1
运行结果:B1 =
1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i
4.0 - 4.0000i 5.0000 - 5.0000i 6.0000 - 6.0000i
2.4.5指令分析
A=ones(2,3)
功能:生成2*3阶的全1矩阵并赋给A
运行结果:A =
1 1 1
1 1 1
B=ones(2)
功能:生成2*2阶的全1矩阵并赋给B
运行结果:B =
1 1
1 1
C=eye(4)
功能:生成4*4阶的单位矩阵并赋给C
运行结果:C =
1 0 0 0
0 1 0 0
0 0 1 0
D=diag(C)
功能:抽取C的对角向量并赋给D
运行结果:D =
1
1
1
1
E=repmat(C,1,3)
功能:将三个矩阵C连接在一起生成一新矩阵并赋给E
运行结果:E =
Columns 1 through 11
1 0 0 0 1 0 0 0 1 0 0
0 1 0 0 0 1 0 0 0 1 0
0 0 1 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 1 0 0 0
Column 12
0
0
0
1
2.5计算在x=0.1与10处的值。
2.5.1 理论分析
这道题目是运用MATLAB计算多项式。这里运用到的是polyval()命令。通过polyval()命令可以很快的计算出在相应值下的多项式的值。
2.5.2 程序代码
>> p=[2 0 0.1 0 -10];
>> polyval(p,0.1)
ans =
-9.9988
>> polyval(p,10)
ans =
20000
2.6求函数, n=100的值
2.6.1 理论分析
在MATLAB中没发现可以计算级数的命令,所以在这我是自己建了一个函数可以求(n可以自己定义),保存成M文件
2.6.2 程序代码
文件内容:%计算函数y=1+1/2.^3+1/3.^3+......1/m.^3
function y=shulie1_n(m)
y=0;
i=1;
while i<=m
x=1/i.^3;
y=y+x;
i=i+1;
end
命令:y=shulie1_n(100)
结果:y =
1.2020
2.6.3 总结
要注意“;”和“end”的使用,函数中不要求输出结果的指令后一定要加“;” 。‘end’的使用要注意需要使用的位置。
2.7求1500个元素的随机数向量A中大于0.5的元素个数。
2.7.1 理论分析
这道题中要用到随机函数rand()。还有统计函数sum()。
2.7.2程序代码
命令:A=rand(1,1500);
sum(A>0.5)
结果:ans =
754
2.8用图形表示连续调制波形,运行下面的程序,观察结果,并简单说明。
图形:t=0:0.001:2*pi;
y=sin(t).*sin(9*t);
plot(t,y)
t1=(0:11)/11*pi; y1=sin(t1).*sin(9*t1);
t2=(0:100)/100*pi; y2=sin(t2).*sin(9*t2);
subplot(2,2,1),plot(t1,y1,'r.'),axis([0,pi,-1,1]),title('子图 (1)') %生成子图
subplot(2,2,2),plot(t2,y2,'r.'),axis([0,pi,-1,1]),title('子图 (2)')
subplot(2,2,3),plot(t1,y1,t1,y1,'r.')
axis([0,pi,-1,1]),title('子图 (3)')
subplot(2,2,4),plot(t2,y2)
axis([0,pi,-1,1]),title('子图 (4)')
运行结果:
2.8图
2.9 计算下列矩阵A正交阵 。
2.9.1 理论分析
这里是运用matlab中的函数来处理矩阵,从而生成所需要的矩阵。这里所用到的函数为orth()
2.9.2 程序代码
命令: A=[1 1 4;2 2 5; 3 3 6];
orth(A)
结果: ans =
-570/1397 993/1216
-1291/2292 730/5759
-656/913 -1004/1783
执行命令前,我用format指令将输出改为了分数形式。
2.9.3总结
在MATLAB中有很多很方便的函数帮助我们处理数据。我们要时常注意相关的函数,在以后的数据处理中就显得很轻松了。
2.10 用FFT计算x=3sin(2*pi*50*t)+2cos(2*pi*120*t)+w(t)的功率谱。
2.10.1 理论分析
用FFT直接法计算功率谱。.调用方法X=FFT(x);X=FFT(x,N);x=IFFT(X);x=IFFT(X,N)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。
2.10.2 程序设计
>> fs=100;N=128;
>> n=0:N-1;t=n/fs;
>> w=rands(1,N); %加入噪音信号
>> x=3*sin(2*pi*50*t)+2*cos(2*pi*120*t)+w;
>> y=fft(x,N); %对信号做傅里叶变换
>> mag=abs(y); %求得傅里叶变换后的振幅
>> f=n*fs/N;
>> plot(f(1:N/2),mag(1:N/2)); %用plot画功率谱
>> xlabel('频率/Hz');ylabel('振幅');title('功率谱'); %标记X,Y轴和标题
2.10.3 运行结果
2.10.4 实验总结
一般说来利用fft只是对已有数据进行傅里叶变换,而具体应用到画图还要经过处理,如对已知数据x进行fft傅里叶变换只需运行:y=fft(x);特别要注意的是加入噪音信号,刚看题目的时候都不知道w(t)代表什么,以为是一个函数。
3.课程设计心得
在此次的课程设计中我强烈的感受到了matlab是一个非常强大的数据处理软件,用它我们可以很方便快捷的进行计算,绘制出我们所需要的图形。而且matlab本身就带有很多的内部函数以及内部固定常量,这些都可以简化我们的程序,使操作者更加容易掌握。另一方面,简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析,运行效率非常高。
对于MATLAB在课程设计之前有所耳闻但不是很了解,课程设计期间也没有老师讲解,完全要靠自学来完成。所以说我最大的体会就是提升自学能力很重要。自学能力强的同学可以自己在网上找资料或从图书馆借书看自己一个人完成任务。自学能力差的同学则要到处问同学且速度要慢。经过这两周的学习还有的体会就是做事要细心,就说编写指令如果不细心很容易出错。再者,我发现虽然我们完成了老师布置的任务,但对于MATLAB我们还有很多要学的。课程设计中用到的知识只是一个大概,MATLAB更深层次的应用还有待学习。
总的来说,通过为期两周的MATLAB课程设计,我对MATLAB这个仿真软件有了更进一步的认识和了解。在这两周时间里,我通过自己摸索,向同学请教,查阅资料,完成了老师教给我们的任务。这次课程设计,提高自己的基础理论知识、基本动手能力,提高人才培养的基本素质,并帮助我们掌握基本的文献检索和文献阅读的方法,同时提高我们正确地撰写论文的基本能力。
4.参考文献
[1] (美)穆尔,高会生,刘童娜,李聪聪 . MATLAB实用教程(第二版) . 北京:电子工业出版社,2010.
[2] 王正林,刘明 . 精通MATLAB(升级版) . 北京:电子工业出版社,2011.
[3] 陈杰 . MATLAB宝典(第3版) . 北京:电子工业出版社,2011.
[4] 刘保柱,苏彦华,张宏林 . MATLAB 7.0从入门到精通(修订版) . 人民邮电出版社,2010.
[5] 张德丰 . MATLAB在电子信息工程中的应用.北京:电子工业出版社,2009.
[6] 周开立 . MATLAB基础及其应用教程.北京:北京大学出版社,2007.
[7] 张智星 . MAYLAB程序设计及应用.北京:清华大学出版社,2002.
[8] 陈怀琛,吴大正,高西全 .MATLAB及在电子信息课程中的应用 . 北京:电子工业出版社,2006.
[9] 张琨 . MATLAB 2010从入门到精通 .北京:电子工业出版社,2011.
本科生课程设计成绩评定表
指导教师签字:
2011 年1月13日