课程设计任务书
学生姓名:尹龙剑 专业班级: 电信1005班
指导教师:祝立华 阙大顺 工作单位: 信息工程学院
课程设计名称:Matlab应用课程设计
课程设计题目:Matlab运算与应用设计三
初始条件:
1. Matlab6.5以上版本软件;
2. 课程设计辅导资料:“Matlab语言基础及使用入门”、“Matlab及在电子信息课程中的应用”等;
3. 先修课程:信号与系统、数字信号处理、Matlab应用实践及信号处理类课程等。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1. 课程设计时间:1周;
2. 课程设计内容:根据指导老师给定的7套题目,按规定选择其中1套完成;
3. 本课程设计统一技术要求:研读辅导资料对应章节,对选定的设计题目进行理论分析,针对具体设计部分的原理分析、建模、必要的推导和可行性分析,画出程序设计框图,编写程序代码(含注释),上机调试运行程序,记录实验结果(含计算结果和图表),并对实验结果进行分析和总结。具体设计要求包括:
① 初步了解Matlab、熟悉Matlab界面、进行简单操作;
② MATLAB的数值计算:创建矩阵、矩阵运算、多项式运算、线性方程组、数值统计;
③ 基本绘图函数:plot, plot3, mesh, surf等,要求掌握以上绘图函数的用法、简单图形标注、简单颜色设定等;
④ 使用文本编辑器编辑m文件,函数调用;
⑤ 能进行简单的信号处理Matlab编程;
⑥ 按要求参加课程设计实验演示和答辩等。
4. 课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写,具体包括:
① 目录;
② 与设计题目相关的理论分析、归纳和总结;
③ 与设计内容相关的原理分析、建模、推导、可行性分析;
④ 程序设计框图、程序代码(含注释)、程序运行结果和图表、实验结果分析和总结;
⑤ 课程设计的心得体会(至少500字);
⑥ 参考文献(不少于5篇);
⑦ 其它必要内容等。
指导教师签名: 年 月 日
系主任(或责任教师)签名: 年 月 日
目录
1 Matlab概述.................................................................................3
1.1 MATLAB简介 ..................................................................................3
1.2 MATLAB的功能 ..............................................................................3
1.3MATLAB 的典型应用包括 ...................................................................3
2设计题目:Matlab运算与应用设计 套题三 .................................4
3设计内容 ...............................................................................................4
3.1 题一 ..................................................................................................................... 4
3.2 题二 .....................................................................................................................4
3.3 题三 .....................................................................................................................5
3.4 题四 .....................................................................................................................6
3.5 题五 ....................................................................................................................11
3.6 题六 ....................................................................................................................11
3.7题七 .....................................................................................................................................12
3.8 题八 .....................................................................................................................................12
3.9 题九 .....................................................................................................................................13
3.10题十 .....................................................................................................................14
4 课程设计心得 ....................................................................................15
5 参考文献 ............................................................................................17
1.MATLAB概述
11MATLAB简介
MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
1.2.MATLAB 的功能1-2-1 MATLAB具有很强的数值计算功能
● MATLAB以矩阵作为数据操作的基本单位,但无需预先指定矩阵维数
● 按照IEEE的数值计算标准进行计算
● 提供十分丰富的数值计算函数,方便计算,提高效率
● MATLAB命令与数学中的符号,公式非常接近,可读性强,容易掌握
1-2-2 MATLAB的符号计算功能
● MATLAB和著名的符号计算语言Maple相结合
1-2-3 MATLAB的绘图功能
●MATLAB提供丰富的绘图命令,很方便实现数据的可视化
1-2-4 MATLAB的编程功能
●MATLAB具有程序结构控制,函数调用,数据结构,输入输出,面向对象等程序语言特征,而且简单易学,编程效率高
3、MATLAB应用
MATLAB 产品族可以用来进行以下各种工作:
● 数值分析
●工程与科学绘图
● 控制系统的设计与仿真
● 数字图像处理 技术
● 数字信号处理 技术
● 财务与金融工程
MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。
2.设计题目:Matlab运算与应用设计套题三
3.题目内容
3-1.计算和
理论分析:利用MATLAB的基本函数cos()和sqrt()就可以处理这两个算式。
程序代码如下:
>> 20*cos(0.5*pi)/(2+sqrt(3))
ans =
3.2814e-016
>> 5*cos(0.4*pi)/(4+sqrt(3))
ans =
0.2696
小结:要注意乘法要用‘*’而不能用‘· ’或者不写。分母要用括号括起来,而‘π’直接写'pi'就可以了。这与平时的一些书写习惯有所差别。通过计算这两个算式可以看见matlab计算功能的强大。带着这份激动,让我继续去揭开matlab的神秘面纱吧。
3-2. 绘制函数在时的曲线。
理论分析:利用matlab的绘图功能绘制曲线图,我用的是最基本的plot()函数.
程序代码:
>> x=0:0.05:1;
y=x.*exp(-x);
plot(x,y)
图形如图一所示:
图一
小结:在二维绘图函数中,最重要、最基本的函数就是plot函数。其可以在二维坐标系中绘制线性图形。其调用格式为
Plot(y)
Plot(x1,y1,......)
Plot(x1,y1,Linespace,......)
Plot(....,'PropertyName','PropertyValue',....)
H=plot(....)
3-3.用图形表示离散函数。
理论分析:在这道题目中,运用到绝对值函数abs(),描粗方格函数grid on 以及上题所用到的绘图函数plot()
程序代码:
>> n=(0:12);
y=1./abs(n-6);
plot(n,y,'r*','MarkerSize',20)
Gridon
图形如图二所示:
图二
3-4.分析下面每条指令的功能并运行,观察执行结果。
3-4-1. 题目 X=0:0.25:3;
Y=X.*exp(-X);
plot(X,Y),xlabel(‘x’), ylabel(‘y’),title(‘y=x*exp(-x)’);
理论分析:x=0:0.25:3;表示自变量x的变化范围是0到3,每次自增0.25;y=x.*exp(-x)表示应变量与自变量之间的函数关系;plot(x,y)表示用plot函数在二维坐标系里绘制线性函数;xlabel(‘x’), ylabel(‘y’)表示在当前坐标轴上加注x轴,y轴的表示一次为x,y。而title(‘y=x*exp(-x)’)表示将"y=x.*exp(-x)"标注为图形的标题。
或者注释如下:
X=0:0.25:3; %长度为13的x轴采样点
Y=X.*exp(-X); %函数表达式
plot(X,Y); %绘制一条曲线,如下所示
xlabel(‘x’); %将水平轴标注为x轴
ylabel(‘y’); %将竖直轴标注为y轴
title(‘y=x*exp(-x)’); %将函数图形取名为 y=x.*exp(-x)
程序代码:
>> X=0:0.25:3;
Y=X.*exp(-X);
plot(X,Y);
xlabel('x');
ylabel('y');
title('y=x*exp(-x)');
图形如图三所示:
图三
3-4-2 题目: A=zeros(3,5)
A(:)=-4:5
L=abs(A)>4
islogical(L)
X=A(L)
理论分析:(声明:A数组取值有误,应将3改为2)指令功能如下
A=zeros(2,5) %取0数组A,2行5列
A(:)=-4:5 %将-4至5的10个数值按列依次给A数组赋值
L=abs(A)>4 %判断A中元素的绝对值与4的大小,将结果赋值给L
islogical(L) %将L变为L的逻辑数组
X=A(L) %将逻辑值为1 的元素列写出来
程序代码:
>> a=zeros(2,5)
a(:)=-4:5
l=abs(a)>4
islogical(l)
x=a(l)
a =
0 0 0 0 0
0 0 0 0 0
a =
-4 -2 0 2 4
-3 -1 1 3 5
l =
0 0 0 0 0
0 0 0 0 1
ans =
1
x =
5
3-4-3. 题目: A=[1:5;6:10]
pow2(A)
理论分析: A=[1:5;6:10] %输入数组A
pow2(A) %依次计算数组A中元素以2为底的幂
程序代码:
A=[1:5;6:10]
pow2(A)
A =
1 2 3 4 5
6 7 8 9 10
ans =
2 4 8 16 32
64 128 256 512 1024
3-4-4 题目:A=zeros(3,2)
A(:)=1:6
A=A*(1+i)
A1=A.’
B1=A’
理论分析: A=zeros(3,2) %取0数组A,3行2列
A(:)=1:6 %将1至6的6个数值按列依次给A数组赋值
A=A*(1+i) %将矩阵A转化为复数矩阵
A1=A.’ %将矩阵A转置
B1=A’ %将矩阵A共轭转置
程序代码:
A=zeros(3,2)
A(:)=1:6
A=A*(1+i)
A1=A.'
B1=A'
A =
0 0
0 0
0 0
A =
1 4
2 5
3 6
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 =
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 =
1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i
4.0000 - 4.0000i 5.0000 - 5.0000i 6.0000 - 6.0000i
3-4-5 A=ones(2,3)
B=ones(2)
C=eye(4)
D=diag(C)
E=repmat(C,1,3)
理论分析:指令说明如下
A=ones(2,3) %2行3列全1矩阵A
B=ones(2) %2阶全1方阵B
C=eye(4) %4阶单位矩阵,对角线上元素全为1,其余元素均为0
D=diag(C) %提取对角矩阵C
E=repmat(C,1,3) %生成一个包含3个C的复制的大矩阵E
程序代码:
A=ones(2,3)
B=ones(2)
C=eye(4)
D=diag(C)
E=repmat(C,1,3)
A =
1 1 1
1 1 1
B =
1 1
1 1
C =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
D =
1
1
1
1
E =
Columns 1 through 10
1 0 0 0 1 0 0 0 1 0
0 1 0 0 0 1 0 0 0 1
0 0 1 0 0 0 1 0 0 0
0 0 0 1 0 0 0 1 0 0
Columns 11 through 12
0 0
0 0
1 0
0 1
3-5计算在x=0.1与10处的值。
理论分析1:可以直接输入方程式,然后就可以计算出结果,如下所示。
输入x=0.1
x=10
y=2*x^5+0.1*x^3-10
输出
x =
0.1000
y =
-9.9999
x =
10
y =
200090
理论分析2:对于多项式的计算,matlab提供了专用的函数polyval(),通过polyval()函数可以很快的计算出在相应值的下的多项式结果。
程序代码:
>> p=[2 0 0.1 0 -10];
>> polyval(p,0.1)
ans =
-9.9988
>> polyval(p,10)
ans =
20000
3-6求函数, n=100的值。
理论分析1:在这道题目中我用了两种方法,这是第一种即编写程序算出结果。
代码如下:
>> y=0;
n=100;
for k=1:n
y=y+1/(k^3);
end
>> y
y =1.2020
理论分析2:在matlab中有专门的 计算级数和的函数即symsum()函数。其格式为:symsum(x,y,a,b)计算级数x的和,其中y为自变量,x为符号表达式,[a,b]为参数y的取值范围。
代码如下:
>> syms n;
>> s=1/n^3;
>> symsum(s,n,1,100)
ans =
81473483330743503583074181861672511931518122336172216406894149391331289704097519580221863303145356050828007873151451209887/67781182783092495848656345091844021571734190630914590229332161379950257170828098031102950264769178652556660142954086400000
而
>> 81473483330743503583074181861672511931518122336172216406894149391331289704097519580221863303145356050828007873151451209887/67781182783092495848656345091844021571734190630914590229332161379950257170828098031102950264769178652556660142954086400000
ans =
1.2020
小结:对于级数求和函数symsum()要注意先定义变量,而计算结果一开始是一大串数数字,我以为错了,最后才发现中间还有一个'/'号。我把结果运算一下,和上面所得结果一样。
3-7求1500个元素的随机数向量A中大于0.5的元素个数。
理论分析:对于列写随机数需要用到函数rand().得到矩阵后需要用程序控制,有循环语句,选择语句和嵌套循环语句。
程序代码:
A=rand(50,30);
n=0;
for i=1:50;
for j=1:30;
if A(i,j)>0.5,n=n+1;
end,end,end
>>
>> n
n =
760
小结:在写代码的过程中需要注意‘,’与‘;’之间的区别,而最后三个end与for,for,if三者依次对应,缺一不可,否则得不到最终结果。
3-8.用图形表示连续调制波形,运行下面的程序,观察结果,并简单说明。
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)')
解答: 指令分析
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), %将窗口分为4个,当前为第一个
plot(t1,y1,'r.'), %将点描绘在坐标轴上
axis([0,pi,-1,1]), %控制x,y轴的数值范围
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)')
结果如图四所示:
图四
3-9.计算下列矩阵A正交阵 。
理论分析:
运用orth()函数处理即可
程序代码:
A=[1 1 4;2 2 5;3 3 6]
orth(A)
A =
1 1 4
2 2 5
3 3 6
ans =
-0.4080 0.8166
-0.5633 0.1268
-0.7185 -0.5631
3-10.用FFT直接计算x=3sin(2*pi*50*t)+2cos(2*pi*120*t)+w(t)的功率谱。
理论分析:调用方法X=FFT(x);X=FFT(x,N);x=IFFT(x);x=IFFT(x,N)做分析时,幅值的大小与FFT的选择点数有关,但不影响分析结果。在做IFFT时已经做了处理,要得到真实的幅值大小,只要将得到的变换后结果乘以2除以N即可。
程序如下:
clf
fs=100;N=128;
n=0:N-1;t=n/fs;
w=rands(1,N);
x=sin(2*pi*40*t)+2*cos(2*pi*120*t)+w;
y=fft(x,N);
mag=abs(y);
f=n*fs/N;
subplot(2,2,2),plot(f(1:N/2),mag(1:N/2));
xlabel('频率/Hz');
ylabel('振幅');
title('功率谱');
结果如图五所示:
图五
小结:一般而言利用FFT只是对于已有的数据经行傅里叶变换,而在具体画图时还需要进行一定的处理。如对于已知数据x进行FFT傅里叶变换只需要运行:y=fft(x);做FFT分析时,幅值大小与FFT选择的点数有关,但不影响结果。
4.课程设计心得
这次课设很匆忙,本来就是期末复习阶段了,所以压力更大了。但是我还是花了很多时间去准备,从接到任务后就开始去图书馆借书,上网搜相关资料。从来没有接触过matlab,很早就听说过matlab了,久仰其功能强大,但由于各种原因一直没有安上matlab这个软件所以就一直没有见到其庐山真面目。得益于这次课设我领略到了matlab的风采,其功能的强大超乎了我的想象,想想以后的学习过程中有了matlab可以处理很多复杂的数学计算。
从图书馆借了书之后我就马不停蹄的看了整本书,虽然有很多地方看不懂,但我还是坚持了下来。有时候我看一道题目,然后就在matlab中试验一下,这样不但可以加强直观的感受,也让学习变得更加的有趣。而且这个过程让我愈加想去深究matlab的奥妙。
下面谈谈我对matlab的一些小认识吧,毕竟学习的时间有限。
第一,matlab将矩阵运算、数值分析、图形处理以及编程技术等功能有机的结合在一起,为用户提供了一个强有力的工程问题分析、计算及程序设计工具。Matlab广泛的应用于工程设计的各个领域,如电子、通信等领域,它已经成为国际上最流行的计算机仿真设计工具。现在的matlab不仅仅是一个矩阵实验室,而是一种实用的、功能强大的、不断更新的高级计算机编程语言。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
第二, matlab的相关特点如下.MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。 Matlab是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。MATLAB是一个包含大量计算算法的集合。其拥有600多个工程中要用到的数学 运算函数,可以方便的实现用户所需的各种计算功能。MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。
第三,在这次设计当中我用到了很多函数,我想这些函数在以后的学习当中会很大的帮助;也了解到很多的运算法则。在矩阵运算中,我用到了基本的矩阵,比如:zeros,ones,rand,randn,eye,linspace等;一些特殊变量和函数,比如:ans,eps,realmax,pi,length,size等;矩阵机构提取和变换,比如:fliplr,flipud,repmat,reshape,tril,triu等;特殊矩阵,比如:hankel,hilb,magic,pascal等。对于矩阵的基本运算,我了解到一下规则:矩阵的算术运算与普通的算术相同,包括加、减、乘、除,也可以用括号来规定运算的优先次序。乘法ide定义与普通数不同,相应的除法也不同,有左除(\)和右除(/)两种符号。检查矩阵阶数的matlab语句是size。数组运算必须要有相同的阶数,除非其中一个是标量。数组的乘法运算符号是“.*”表示数组中对应元素之间相乘。数组的除法运算符号位“ ./”或“ .\”,两者的结果相同。矩阵与数组的关系运算是指两个元素之间的数值比较。Matlab提供了6种关系运算,其结果返回“1”或“0”,“1”表示“真”即正确;“0”表示“假”,即不成立。关系运算符通常用于流程控制中,常与if、while、for、swith等控制命令联合使用。除了基本的这些应用外,matlab还提供了强大的仿真功能,这就是Simulink,,它是matlab的一个分支,主要用来实现对动态系统的模型化和仿真。它充分体现了模块化设计和系统级仿真思想,使建模如同搭积木一样简单,目前广泛的用于控制系统、电子系统、生物医学、航空航天以及金融等领域。
我想通过这次课设,让我了解到了matlab对于学习上的帮助,也为以后的学习打下了一定的基础。
5.参考文献
【1】聂春燕,张猛 《MATLAB和LabVIEW》仿真技术及应用实例
【2】胡守信等 《基于MATLAB的数学实验》
【3】曾建军 《MATLAB语言与数学建模》
【4】龚纯等 《MATLAB语言常用算法程序集》
【5】龚纯等 《精通matlab 最优化计算》
【6】徐瑞,黄兆东等 《MATLAB科学计算与工程分析》
【7】薛定宇 《高等应用数学问题的MATLAB求解》
本科生课程设计成绩评定表
指导教师签字:
年 月 日