Matlab编程与仿真
更新时间:2024-05-30 09:23:01 阅读量: 综合文库 文档下载
Matlab编程与仿真
讲义
目录
1. 2.
2.1
引言 ....................................................................................................... 4 MATLAB 初步 .................................................................................... 11
命令的执行与显示 .............................................................................................................. 11
2.2 矩阵、矢量与标量 .............................................................................................................. 14 2.2.1 矩阵 .............................................................................................................................. 14 2.2.2 矢量 .............................................................................................................................. 15 2.2.3 标量 .............................................................................................................................. 15 2.2.4 数据类型 ...................................................................................................................... 15 2.2.5 冒号“:” ....................................................................................................................... 16 2.2.6 空矢量 .......................................................................................................................... 17 2.2.7 矢量的引用 .................................................................................................................. 17 2.3 基本运算 .............................................................................................................................. 18 2.3.1 矢量与标量的加减乘除 .............................................................................................. 18 2.3.2 矢量与矢量之间的加减 .............................................................................................. 19 2.3.3 矢量与矢量之间的点乘“.*”与点除“./” ............................................................... 19 2.3.4 幂“^”与点幂“.^” ................................................................................................... 19 2.3.5 inf与eps .................................................................................................................. 20 2.4 函数 ...................................................................................................................................... 21 2.4.1 三角函数 ...................................................................................................................... 22 2.4.2 指数类函数 .................................................................................................................. 22 2.4.3 复数类函数 .................................................................................................................. 23 2.4.4 取整函数 ...................................................................................................................... 23 2.4.5 矩阵产生函数 .............................................................................................................. 24 2.4.6 数据分析函数 .............................................................................................................. 26 2.5 MATLAB编程.................................................................................................................... 28 2.5.1 M文件 ......................................................................................................................... 28 2.5.2 自定义函数 .................................................................................................................. 30 2.6 循环与分支 .......................................................................................................................... 32 2.6.1 FOR循环 ..................................................................................................................... 32 2.6.2 IF语句 ......................................................................................................................... 35 2.6.3 WHILE语句 ................................................................................................................ 37 2.7 二维曲线的绘制 .................................................................................................................. 37 2.7.1 函数plot .................................................................................................................... 38 2.7.2 命令hold与clf ........................................................................................................ 39 2.7.3 命令grid与命令axis ............................................................................................. 40 2.7.4 函数semilogy() ...................................................................................................... 41
2 讲义
2.7.5 2.7.6
标签 .............................................................................................................................. 41 figure与close ........................................................................................................ 42
2.8 其它命令 .............................................................................................................................. 42 2.8.1 who、whos及clear.............................................................................................. 42 2.8.2 cd、path及which ................................................................................................. 43
3. 计算机仿真的一般方法 ........................................................................ 45
3.1 信号及系统在计算机中的表示 .......................................................................................... 45 3.1.1 时域取样及频域取样取样 .......................................................................................... 45 3.1.2 频域分析 ...................................................................................................................... 47 3.2 随机信号的产生 .................................................................................................................. 48 3.2.1 高斯噪声的产生 .......................................................................................................... 48 3.2.2 随机码序列的产生 ...................................................................................................... 49 3.2.3 产生数字基带信号的一般方法 .................................................................................. 49 3.2.4 NRZ及RZ信号的产生 .............................................................................................. 51 3.3
眼图 ...................................................................................................................................... 51
3.4 误码率 .................................................................................................................................. 52 3.4.1 取样判决 ...................................................................................................................... 52 3.4.2 误码率测量 .................................................................................................................. 52 3.5
范例 ...................................................................................................................................... 53
4.
上机实验要求 ....................................................................................... 55
3 讲义
1. 引言
通信原理课的主要内容就是怎样可靠而有效地实现信息的传输。为此目的,该课从理论上提出了许多可供选择的传输方法。要使这些传输方法成为现实,就需要制作出相应的发送设备及接收设备。然后在发送端,我们把欲传送的信息变换成某种适宜的信号并将之馈入传输媒体(电缆、光缆、无线电波等)。在接收端,信号又从媒体馈入接收设备,我们再以同发端相反的过程恢复出原来所发送的信息。根据通信原理课所学的知识,我们知道在什么样的情况下应该选择什么样的传输方式,并能判断出噪声、信道、传输方式等因素将会怎样影响对我们来说非常重要的一些通信指标,如信噪比、误码率、发送频谱等等。
4 讲义
要想充分地了解某种传输方式的特性,最理想的办法莫过于先把它做出来,再对其进行实际测量。不过实际制作一套通信系统所需的周期长、代价高。有时要改变系统的某一两个参数就可能意味着整个系统需要重做。故此对于研究设计人员来说,通过把所有的设计方案、研究问题等都做成硬件,再对硬件进行测量从而获得系统性能的研究方法应属于不得已而为之。较好的研究方法应该是在硬件制作以前就先设法对系统特性作尽可能充分的了解,然后再去做硬件。
5
讲义
某种传输方法,当我们把它做成实际系统后,它理应符合通信原理的理论对它的描述。如果我们用通信仪表对实际系统进行实际测量的话,实测结果应该同理论分析给出一致的结果。如果这两个结果不一致,一般只可能是这样两种情况:一是理论中所假设的某些模型并能不完全正确地反映实际情况,比如通信原理课中经常假设信道是一个理想滤波器,而实际信道则有可能是一个多径信道;二是硬件制作可能存在实现上的误差,也就是说我们制作的某一个或某几个部件的实际性能与我们对它期望的性能之间有一些差距。换句话来说,如果我们在理论阶段所依赖的模型是充分可信的,如果我们将要制作的硬件确实能够按我们的要求去工作,那么我们就可以在制作硬件之前,先对将要制作的实际传输系统作充分的研究,并据此对系统设计是否合理作出评判,如果设计是合理的我们就可以放心地去实现系统,不然就需要修改现有设计再作分析。
6 讲义
然而在通信系统中,除非个别极简单的情况,一般我们很难用推公式这种解析的办法得到系统的各项性能指标。比如无码
?Eb?1间干扰时,双极性最佳基带系统的误码率公式是Pe?erfc??,
2n?0?但如果信道中确实存在码间干扰,那么对应的误码率公式基本
上是不可能的得到的。不过这并不意味着我们就没有别的办法,在计算机技术十分发达的今天,通信中的许多问题都可以通过计算机仿真的办法来进行研究。
7 讲义
计算机仿真实质上就是把硬件实验搬进了计算机,我们可以把它看成是一种软件实验。在硬件实验系统中,我们用各种电子元器件制作出通信原理中的理论模型所规定的各个模块,再把它们通过导线或电缆等接在一起,然后再用示波器、频谱仪、误码仪等通信仪表做各种测量,然后分析测量结果。在软件实验中我们也是这样做,只不过所有通信模块及通信仪表的功能都是用程序来实现的,通信系统的全过程在计算机机中仿真运行。
8 讲义
虽然软件实验的不象硬件实验那样让人感到“真实”。但对于许多通信问题的研究来说的确非常有效。与硬件实验相比,软件实验具如下一些优点:
(1) 软件实验具有广泛的适应性和极好的灵活性。在硬件实验中改变系统参数也许意味着要重做硬件,而在软件实验中则只是改一两个数据,甚至只是在屏幕上按几下鼠标。 (2) 软件实验更有助于我们较为全面地研究通信系统。有许多问题,通过硬件试验来研究可能非常困难,但在软件试验中却易于解决。 (3) 硬件实验的精确度取决于元器件及工艺水平,软件实现的精度取决于CPU的运算速度或者说是程序的运算量; (4) 软件实验建设开发周期短,成本低。
9 讲义
在本实验中我们使用的软件工具是MATLAB,我们期望本实验能带给你如下收获:
(1) 学会MATLAB软件的最基本运用。
MATLAB是一种很实用的数学软件,它易学易用。MATLAB对于许多的通信仿真类问题来说是很合适的。
(2) 了解计算机仿真的基本原理及方法,知道怎样通过仿真的方法去研究通信问题。 (3) 加深对通信原理课有关内容的理解。
通信原理是通信工程专业的一门重要专业基础课。从教学实践中我们注意到,此课的某些内容对初学者来说往往不大好把握。如果你能自己动手,通过仿真的办法对这些问题进行一些研究和观察,自然会有助于解除你的困惑。
10
讲义
2. MATLAB 初步
2.1 命令的执行与显示
在Windows中,用鼠标双击MATLAB图标即可启动MATLAB for Windows。MATLAB的命令提示符为“>>”。MATLAB的命令也称语句或函数,在本文中名词“命令”“语句”及“函数”在许多情况下并没有多大差别。
在命令行中,键入命令并按回车(Enter)就可以执行命令。执行结果或其它与命令执行相关的信息将随后显示在屏幕上。例如 >>why
Stupid question.
这里,“>>”是命令行提示符,“why”是命令,“Stupid question.”是执行结果。在MATLAB中,命令why的功能是向屏幕输出一个随机字符串。 又比如
11 讲义
>>y=log(0)
Warning: Log of zero y =
-Inf
语句y=log(0)的意思是对0求自然对数,函数log的返回值被赋给变量y。MATLAB在运行时除给出了运算结果为负无穷大(-Inf)外,还显示出了对零求对数的告警。
在命令的末尾加上分号“;”,表示不显示函数的返回值或语句的运算结果。例如 >>y=log(0);
Warning: Log of zero
只显示告警信息而不显示运行结果。此时y仍然被赋值为-Inf。
一行中可以有多条命令,命令与命令之间应用逗号“,”或分号“;”隔开。以逗号结尾的命令显示结果,以分号结尾的命令不显示结果。例如
12 讲义
>>y=log(0);b=1/0,a=atan(b)*180/pi;a Warning: Log of zero Warning: Divide by zero b = Inf a = 90
这里,“y=log(0);”只显示告警信息而不显示运行结果。“b=1/0,”既显示告警信息(被零除:Divide by zero),也显示运行结果(无穷大:Inf)。语句“a=atan(b)*180/pi;”被运行但结果未显示。在MATLAB中atan是反正切函数,pi是圆周率。语句“a”的作用是显示a的值:a?9。 0?如果语句有运算结果但此结果未被赋值,那么MATLAB自动将此结果赋值给变量“ans”,它是英语单词answer的前三个字母。例如: >>0.5*erfc(sqrt(4.77)) ans =
0.0010
erfc?此处,MATLAB把12?的运算结果赋值给
ans。erfc是互补误差函数,sqrt是求平方根。
47.7
13 讲义
有些命令除了在命令行状态下有显示外,还会激活其它图形窗口。如命令intro 、demo等。intro是MATLAB简介,demo是MATLAB的演示程序。这两个命令都是用MATLAB编写而成的。
在MATLAB中标识符的大小写是有区别的。
2.2 矩阵、矢量与标量 2.2.1 矩阵
MATLAB的基本运算对象是矩阵。方括弧“[]”用来定义矩阵。逗号“,”或空格用来分隔一行中的不同元素,分号“;”用来分隔不同的行。例如
>>a=[1,2,3;4,5,6;7,8,9] a =
1 2 3 4 5 6 7 8 9 是一个3乘3的矩阵。
14 讲义
2.2.2 矢量
只有一行或一列的矩阵就是矢量,我们分别称其为行矢量及列矢量。例如 >>b=[1,4,8,2]
b =1 4 8 2 是一个行矢量。而 >>c=[1;4;8;2] c = 1 4 8 2
是一个列矢量。
考虑到本课的具体需要,今后我们主要只考虑行矢量。 2.2.3 标量
只有一个元素的矢量或矩阵就是标量。例如d=[1]或d=1把d定义为一个值为1标量。 2.2.4 数据类型 实数
15
讲义
MATLAB不需要对实数作类型说明,所有的数都按双精度浮点方式保存。对很大及很小的数可采用科学记数法:例如1.3e-18表示
。 字符串
MATLAB也支持字符串变量。字符串由一对单引号界定。字符串在MATLAB中被看作是一个矢量,每个字符构成矢量的元素。例如str='hello'等价于str=['h','e','l','l','o']。 复数
在MATLAB中如果标识符i或j没有被定义过,那么一个复数可以简单地用两个实数a, b组成:d=a+j*b或d=a+i*b表示复数。许多人编程时习惯用i、j作循环变量,如果你的程序涉及复数运算的话,最好避免使用它们。 2.2.5 冒号“:”
设a1, a2, step是三个实数标量。则a1:step:a2表示一组实数,其中第一个是a1,
16 讲义
第二个是a1+step,依此类推,最后一个数小于等于a2。step=1时可省略成a1:a2。例如矢量[1:3]就是矢量[1,2,3],而矢量[3.3:-1.25:0]等于矢量[3.3,2.05,0.8]。 2.2.6 空矢量
没有元素的矢量称空矢量。用[]来表示。例如
>>a=[3:-2:5] a = []
的结果是一个空矢量。 2.2.7 矢量的引用
若A是一个矢量,A(k)是A的第k个元素,其中k的最小值为1,最大值为length(A)。函数length(X)的返回值是矢量X的长度。 若A是一个行矢量,B=A(2:7)是由A的第2至第7个元素组成的行矢量。C=[A,B]也是一个矢量,C的前length(A)元素正好是矢量A,后length(B)个元素正好是矢量B。
17 讲义
若A是一个矢量,B=A(1:2:length(A))是所有A的奇序数元素。例如,A=[1:100],则矢量A(1:2:100)的元素是1到100之间的所有奇数。矢量A(30:30:100)等价于[30,60,90]。矢量A([1,9,67])等价于[A(1),A(9),A(67)]。 2.3 基本运算
2.3.1 矢量与标量的加减乘除
矢量加以(+)、减以(-)、乘以(*)或除以(/)一个标量时,其结果是该矢量的每一个元素加、减、乘、除以同一标量。例如A=[1:5]+1的结果是[2,3,4,5,6],c=[3,1,1)]*3+j的结果是复数矢量[9+j,3+j,3+j,3+j]。 标量加以(+)、减以(-)或乘以(*)矢量的结果与矢量加以(+)、减以(-)或乘以(*)标量的结果相同,即矢量与标量的加、减、乘(+、-、*)运算满足交换律。但请注意:标量除以(/)矢量(a/A)是非法的。
18 讲义
2.3.2 矢量与矢量之间的加减
两个相同长度的矢量相加或相减是其对应的元素相加或相减。例如: >>a=[1:3]*5-[6:6:20]/3 a = 3 6 9
2.3.3 矢量与矢量之间的点乘“.*”与点除“./” 若A与B是两个长度相同的矢量,则A.*B是A与B的对应元素相乘,A./B是A与B的对应元素相除。例如C=[1:3].*[2,5,5]的结果是[2,10,15]。D=[4,10,2]./[2,2,1]的结果是[2,5,2]。
2.3.4 幂“^”与点幂“.^”
对于标量a、b,a^b是以a为底,b为指数的幂运算。例如2^3=8;
对于标量x及矢量A,A.^x是对矢量A的每一个元素求以x为指数的幂运算。例如: [-1,4,9].^0.5的结果是[j,2,3];
对于标量x及矢量A,x.^A是一个矢量,它的每一个元素是以x为底,以A的对应元
19 讲义
素为指数的幂。例如10.^[-2:2]的结果是[0.01,0.1,1,10,100]。
对于两个相同长度的矢量A、B,A.^B的结果是一个与A同长度的矢量。其元素是以A的对应元素为底,以B的对应元素为指数的幂。
2.3.5 inf与eps
一个标量除以零得inf。inf自身是一个标量,它加减乘除以任何实标量仍为inf。但inf/inf, inf-inf及inf*0的结果是NaN(Not a Number),它表示结果不确定。
标量eps相当于无穷小,它反映了运算的精度。对于MATLAB for Windows,eps的初始值为2.2204e-16。eps的值可任意设置,例如可设eps=1e-20或其它值。有时为了避免程序运行中除以零引起麻烦,我们可给除数加上eps,例如
20
讲义
>>x=[-2:2]*pi;y=sin(x)./x Warning: Divide by zero y =
1.0e-016 *
-0.3898 0.3898 NaN 0.3898 -0.3898
此处的显示表示y的值是1.0e-16*[-0.3898,0.3898,NaN,0.3898,-0.3898]。由于x(3)是零,所以sin(x(3))/x(3)发出告警,并给出结果为NaN。将x加上eps,前面的例子便成为
>>x=[-2:2]*pi+eps;y=sin(x)./x y =
0.0000 0.0000 1.0000 0.0000 0.0000 2.4 函数
MATLAB中所有的函数或命令都可借助help菜单或在命令行中键入 >>help 或
>>help 主题名
21 讲义
得到帮助。结合本课的需要,我们在这里介绍一些常用函数。 2.4.1 三角函数
三角函数包括正弦sin、余弦cos、正切tan、反正切atan等。例如: >>X=[0:pi/6:pi];Y=sin(X) Y =
0 0.5000 0.8660 1.0000 0.8660 0.5000 0.0000
?5??????2本例中X。cos(X)是对X的每一?0,,,,,,????63236?个元素求余弦。 2.4.2 指数类函数
指数类函数包括e的指数exp、自然对数log、常用对数log10、平方根sqrt等。在MATLAB中可对负数求对数或求平方根。例如
>> log([-1:+2])
Warning: Log of zero ans =
0 + 3.1416i -Inf 0 0.6931
22 讲义
这里ln。MATLAB在运行至求(?1)?j?,ln0???log(0)时给出了警告但并不中断运行。 2.4.3 复数类函数
复数类函数包括求模abs、求角度angle、求共轭conj、求实部real、求虚部imag等。 2.4.4 取整函数
取整函数包括零方向取整fix、负无穷方向取整floor、正无穷方向取整ceil、四舍五入round、取符号sign等,例如
23 讲义
>>x=[-1:0.5:1]*pi;...
[x;fix(x);floor(x);ceil(x);round(x);sign(x)]
ans =
-3.1416 -1.5708 0 1.5708 3.1416
-3.0000 -1.0000 0 1.0000 3.0000
-4.0000 -2.0000 0 1.0000 3.0000
-3.0000 -1.0000 0 2.0000 4.0000
-3.0000 -2.0000 0 2.0000 3.0000
-1.0000 -1.0000 0 1.0000 1.0000
在MATLAB中,键入省略号(三个或三个以上的小数点)表示下一行是本行的继续。 2.4.5 矩阵产生函数
全零矩阵zeros及全1矩阵ones zeros(n,m)产生一个尺寸为n?m,元素全为零的矩阵。ones(n,m)产生一个尺寸为n?m,元素全为1的矩阵。若n或m不是整数,则按
24 讲义
取整后的结果算。若n或m中(取整后)有一个为0或负值则返回一个空矩阵。 zeros(N)产生一个N维全零方阵。ones(N)产生一个N维全1方阵。
zeros(size(A))产生一个尺寸与A相同的全零矩阵。ones(size(A))产生一个尺寸与A相同的全1矩阵。这里函数size(a)返回一个行矢量[n, m],其中n是a的行数,m是a的列数。
均匀随机数rand及正态随机数randn rand(n,m)产生一个尺寸为n?m的矩阵,其元素按均匀分布随机取值于区间[0,1]。randn(n,m)产生一个尺寸为n?m的矩阵,其元素服从标准正态分布(均值为零,方差为1)。 randn(size(a))产生一个尺寸与a相同的正态分布随机矩阵。rand(size(a))产生一个尺寸与a相同的均匀分布随机矩阵。例如: >>a=sign(randn(1,8000)); >>b=(a+1)/2;
>>c=b+0.1*randn(size(b));
25
讲义
b包含8000个取值1、0等概的随机二进制数。c是b加上了方差为0.1的高斯干扰。 不带参数地引用rand或randn返回一个标量的随机数。 (3) linspace
函数linspace(a,b,N)产生一个N维矢量,N个元素均匀分隔区间[a,b],第一个元素是a,最后一个元素是b。 2.4.6 数据分析函数
数据分析函数包括:最大值max、最小值min、均值mean、标准差std、升序排序sort、 求和sum等。例如:
>>a=randn(1,8000); >>L=length(a) L =
8000
>>y=[max(a),min(a),mean(a),std(a),sum(a)/L] y =
4.0633 -3.6618 -0.0017 1.0037 -0.0017 >>b=a(1:20) b =
Columns 1 through 7
1.0682 -0.1050 -1.7675 -1.0252 0.8211 1.7200 -0.6543
Columns 8 through 9 1.0178 -1.4090
26 讲义
当MATLAB不能把一个行矢量在屏幕的一行上显示时,它把这个矢量折成若干行显示。并在每行前说明对应的列序号。
如果max(a)函数中a不是矢量而是矩阵,则max(a)对a的各列求最大值。例如
>>B=rand(5),max(B) B =
0.1665 0.9047 0.4865 0.5045 0.8977 0.5163 0.9092 0.3190 0.0606 0.9866 ans =
0.9092 0.9866
0.4940 0.2661 0.0907 0.9478 0.0737
0.5007 0.3841 0.2771 0.9138 0.5297
0.4644 0.9410 0.0501 0.7615 0.7702
0.9478 0.9138 0.9410
其它函数如min、mean、std、sort、 sum也是如此,例如:
>>B=rand(5),sort(B),sum(B) B =
0.8278 0.6295 0.2332 0.1254 0.7362 0.3063 0.0159 0.7254 0.3510 0.6885 0.9995 0.5133 0.8682 0.8886 0.5911 ans =
0.0159 0.6295 0.2332 0.1254 0.7254 0.3063 0.6885 0.7362 0.3510 0.8278 0.8886 0.5133 0.8682 0.9995 0.5911 ans =
2.5258 3.9792 1.9949
0.8460 0.4121 0.8415 0.2693 0.4154 0.2693 0.4121 0.4154 0.8415 0.8460
0.5373 0.4679 0.2872 0.1783 0.1537 0.1537 0.1783 0.2872 0.4679 0.5373
2.7843 1.6245
这里,sort(B)对B的各列排序,sum(B)对B的各列求和。
27 讲义
2.5 MATLAB编程 2.5.1 M文件
用文本编辑器如notepad.exe把MATLAB的命令及语句编辑成一个文本文件,并把文件的扩展名定为.m,这样的文件叫M文件。在MATLAB命令行中键入M文件的文件名(不包括小数点及扩展名“.m”),即可一次性地执行该文件中的所有命令或语句。这一点很像DOS中的批处理文件(.BAT),只是MATLAB在执行M文件之前要先进行一些编译处理。下面是M文件的一个例子: % M文件示例
% 百分号之后是注释
a=randn(1,8000); %分号结尾时不显示结果
L=length(a),b=sin(a);c=L+1 %同一行中可写多条语句
%语句间应用逗号或分号隔开 d=a+j*pi; %d是一个复矢量 j=2 %重新定义j d2=a+j*pi; ò是实矢量
28 讲义
d1=a+pi*i; ?是复矢量
u1=sin(d1);u1(1:3) %复数的正弦是复数
u2=sin(d2);u2(1:3), %实数的正弦是实数
[max(u2),min(u2)]
把这段程序存为文件test.m,在MATLAB命令行状态下,执行test: >>test L =
8000 c =
8001 j =
2 ans =
7.6385 + 8.6868i 5.8773 + 9.9543i -1.9730 +11.3802i ans =
0.6590 0.5070 -0.1702 ans =
1.0000 -1.0000
29 讲义
M文件中可以包括所有合法的MATLAB命令或语句,也可以包括你已经编好的其它M文件名。 2.5.2 自定义函数
你也可以编制自己的函数。一个函数对应一个M文件,函数名就是M文件的文件名,自定义函数的M文件第一行必须是如下格式: function [返回值表]=函数名(输入变量表)
例如:
function [A,ph]=myfun(x)
%函数示例, 函数名为myfun,文件全名必须是myfun.m
%本函数求复矢量x的模与相角 % [A,ph]=myfun(x)
% x为输入的复矢量; A,ph是函数myfun的返回值
%执行help myfun可看到以上注释, 但不包括本行及
30
讲义
%以后的注释
A=abs(x); ph=angle(x)
end %定义函数的M文件应以语句end结尾
引用函数myfun的例子是: clear i;
c=randn(1,300)+i*randn(size(a)); Am=myfun(c); %只引用第一个返回值时可照此做
[Amp,Sita]=myfun(c); %要引用两个返回值时须照此做
函数可以无输入或输出参量,例如 function a=newfun
%函数示例, 文件全名是newfun.m % a=newfun
% 本例无输入值,但有输出
str=['真棒 '; '真倒霉'];
31 讲义
i=round(rand)+1; %产生一个取值1,2的随机数
a=str(i,:); %取矩阵str第i行上的所有元素
end %函数结束
在函数内部定义的变量都是本地变量。本地变量同外部变量(调用函数的外部过程所使用的变量)使用不同的内存区,因此即使它们的标识符相同,也不会发生冲突。MATLAB的函数中也可以定义全局变量,格式是 global a b c
此句声明 a、b、c是全局变量。global声明必须在引用之前。 2.6 循环与分支 2.6.1 FOR循环
MATLAB中,FOR循环的格式是: for 循环变量 = 循环值表, 循环体, end 例如:
>>clear j
32 讲义
>>a=[1:4];
>>for i=1:3, a(i)=i+j;end, >>a a =
1.000 + 1.000i 2.000 + 1.000i 3.000 + 1.000i 4.000
本例中,clear j是MATLAB命令,其功能是清除对变量j以前的定义以使之只表示虚数运算符j??1。i是循环变量。循环值表是1:3也即1,2,3。循环体只有一句a(i)=i+j;,最后的a是为了显示结果。上面的循环等价于a(1:3)=[1:3]+j。
循环体可以是多条语句,例如 for i=1:-0.1:0 d1(i)=sin(I); d2(i)=cos(i); d3(i)=tan(i); end
此例也可这样实现 i=[1:-0.1:0];
d1=sin(i);d2=cos(i);d3=tan(i);
33 讲义
由于MATLAB的矩阵运算特性,许多循环功能都可以用矢量运算代替,这样可提高编程效率,一般也能提高运行速度。
循环值表也可以是矢量或矩阵。例如: i=0;
for x=[1,4,16,20,-3] i=i+1; y(i)=x^2; end 此例等价于
x=[1,4,16,20,-3];
y=x.^2; %对矢量的元素平方
结果是y =[1 16 256 400 9]。如果循环值表是矩阵,则循环变量是一个列矢量,循环次数等于循环值表的列数: i=0;
B=randn(5); %5乘5的正态随机数矩阵
for A=B %循环变量A是B的列 i=i+1;
34 讲义
B_max(i)=max(A); %求矢量A的最大值
B_min(i)=min(A); %求矢量A的最小值
end %循环结束 这段程序等价于 B=randn(5); B_max=max(B); B_min=min(B); 2.6.2 IF语句
IF语句是条件执行语句,其格式为: if 条件变量, 条件执行体, end
如果条件变量的实部的所有元素都不为零,则条件执行体被执行,否则跳过此句。也就是说,条件变量可以是数、矢量或矩阵,也允许是复数类型。例如: i=round(rand); a='i=0';
if i, a='i=1';end
35
讲义
%若i不为零则a是字符串’i=0’,否则a的内容是字符串’i=1’
条件变量通常是一个逻辑关系表达式: 表达式 逻辑关系 表达式
逻辑关系包括:等于“==”、小于“<”、大于“>”、小于等于“<=”、大于等于“>=”及不等于“~=”。例如: i=round(rand); a='0';
if i==1, a='1';end
IF语句还可以和elseif及else一起用: i=sign(randn); if i==-1
%如果i=-1,则逻辑关系表达式“i==-1”的值为“真”(即1) %否则为“假”(即0) a='-1'; elseif i==+1 a='+1'; else
a='奇怪'; end
36 讲义
a
2.6.3 WHILE语句
WHILE语句是条件循环语句,其格式为: while 条件变量, 条件执行体, end 如果条件变量的实部的所有元素都不为零,则条件执行体被执行,否则跳过此句。条件变量可以是数、矢量或矩阵,也可以是复数类型的。例如 j=0;
while i~=888
i=round(rand*1000) j=j+1 end
2.7 二维曲线的绘制
MATLAB提供了丰富的绘图功能。结合本课的需要,我们在此简要介绍一下二维曲线的绘制方法。如想进一步了解MATLAB绘图方面的功能,请执行help graphics、help plotxy、help plotxyz、help color或者执行MATLAB的演示程序demo。
37 讲义
2.7.1 函数plot
若X、Y是两个相同长度的矢量,函数plot(X,Y)将激活一个图形窗口,并画出一条以X为横坐标,以Y为纵坐标的曲线。例如: t=[0:0.01:2*pi]; plot(t,sin(t))
绘出函数sin(t)在区间[0,2?]上的曲线。
使用plot(X,Y)函数时若省略参量X,MATLAB将把Y中元素的顺序号作为横坐标的坐标值,也就是说此时横坐标矢量是X=[1:length(Y)]。使用plot时也可加入另一个参量S:plot(X,Y,S),S用来规定绘图时使用的颜色及绘制方式。可以选择不同的线型如实线、虚线、点划线、波折线,也可以不划线而用不同的标记标出点的位置。MATLAB规定S是长为1到3个字符的字符串,构成S的字符有两部分,第一部分是颜色(一个字符),第二部分是绘制方式(一到两个字符),它们的定义如下:
y yellow . 点标记
m magenta o 圆圈标记 c cyan x 叉号标记
38 讲义
r red + 加号标记 g green * 星号标记 b blue - 实线 w white : 虚线
k black -. 点划线 -- 波折线
MATLAB for Windows所绘的图可通过剪贴板直接复制到Microsoft Word或其它应用程序中。
2.7.2 命令hold与clf
在缺省状态下,执行plot时MATLAB先清除图形窗口再行绘图。执行hold on后再执行plot时,MATLAB
图 2-1plot函数示例
将不清除图形窗口。这样我
们就可以在同一图形窗口内画多条曲线。例如:
t=[0:0.01:4*pi]; hold on
plot(t,sin(t+pi/3),'r-') plot(t,cos(t-pi/3),'g:') plot(t,sin(2*t),'y--')
10.80.60.40.20-0.2-0.4-0.6-0.8-102468101214
39 讲义
这一段程序在同一图形窗口中绘出了三条曲线,第一条红色实线是sin(t??3),第二条绿色虚线是c,第三条黄色波折线是sin2t。 os(t??3)执行hold off将使图形窗口变回原来的状态。单独执行hold而不带参数on或off,将反转图形窗口的hold状态。
命令clf则是清除当前的图形窗口,它不改变hold的状态。
2.7.3 命令grid与命令axis
命令grid on给图形窗口打上格线,而grid off则是取消图形窗口中的格线。单独执行grid将反转格线的状态(有或无)。 函数axis(a)设定X轴与Y轴的坐标范围。通常a是一个包含四个元素的行矢量,例如: a=[Xmin,Xmax,Ymin,Y图 2-2 绘图示例 max],其元素分别代表X
轴及Y轴的最大值与最小值。例: t=[0:0.01:4*pi];
10.80.60.40.20-0.2-0.4-0.6-0.8-100.511.522.533.54
40
正在阅读:
Matlab编程与仿真05-30
全国09年7月组织行为学试卷及答案05-05
操作系统应用题及答案01-05
班主任工作案例02-17
这个故事让我懂得细心等待07-15
公司瑕疵设立救济机制选择的法经济分析05-02
狼和小羊的作文02-06
学会把握 - 初中议论文范文600字12-02
基础会计学练习题01-18
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 仿真
- 编程
- Matlab
- 全球化的定义
- 奥菲外墙装饰板结构计算书(1) (1) (1)
- 2016-2022年中国网络游戏市场竞争格局报告 - 图文
- 案防知识竞赛题目参考
- 中医药高等专科学校建设项目商业计划书word - 图文
- 信访维稳检讨书
- 樱桃种植项目可行性研究报告
- 2013年中考复习我们周围的空气
- 上海电力大学-2018年-攻读硕士学位研究生初试-840《数据结构》考
- 2016专业技术人员突发事件应急处理 试题及答案
- 60课时学完高中物理讲义18-30
- 最新2017人教版全册看拼音写词语默词卷
- 2016年江苏省传染性疾病控制副高真题(回忆)
- 关于做好党员组织关系转入工作的通知
- 微机原理及汇编语言复习题
- 梅雨季节金贵黄枫养护提示
- 中职学校班主任如何培养学生的团队精神
- 第七册练习册答案
- 参考格式-全国二等奖论文A题
- 口腔颌面外科学麻醉重点