matlab教案4文档格式.docx
- 文档编号:22482146
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:23
- 大小:82.90KB
matlab教案4文档格式.docx
《matlab教案4文档格式.docx》由会员分享,可在线阅读,更多相关《matlab教案4文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
得a=1
注意,前面的单个等号表示赋值,后面的双等号则表示关系运算。
式中2+2==4是关系运算,它的优先级高,要先算,算出的结果给a赋值,为了改善可读性,最好加上括号,写成a=(2+2==4),表明是把括号内的关系式的结果给a赋值。
MATLAB中的关系运算都适用于矩阵,它是对矩阵的各个元素进行元素群运算,因此两个相比较的矩阵必须有相同的阶数,输出的结果也是同阶矩阵。
例如
键入A=magic(6)
得A=3516261924
3327212325
3192222720
82833171015
30534121416
43629131811
要找到此矩阵中所有被3整除的元素,并在其位置上标以1。
可以用表2-7中的rem函数,rem(A,3)表示把A除以3的余数,余数为零就是整除。
键入p=(rem(A,3)==0)
得p=001001
100100
010010
001001
第4-1页
[j,k]=find(p)给出p矩阵中不为零的元素的两个下标,左端没有或只有一个变量,即find(p)或lp=find(p)给出p矩阵中不为零的元素的序号。
矩阵元素是按列排序号的,先第1列,再接第2列……依次排完后,再确定它们的顺序号。
一个66阶的矩阵的36个元素的序号排列如表2-10所示。
因此,一个nm阵中下标为(j,k)的元素,其序号为I=(k-1)*n+j。
键入lp=find(p)
得lp=259121316202327303134
表2-10矩阵元素的序号排法
1
7
13
19
25
31
2
8
14
20
26
32
3
9
15
21
27
33
4
10
16
22
28
34
5
11
17
23
29
35
6
12
18
24
30
36
可以看出这些序号确实对应于p中的1元素。
矩阵的序号(index)与下标(subscript)是一一对应的,其变换关系可由表2-1中的ind2sub(读作indextosubscript)和sub2ind函数求得。
2.4.2逻辑运算
逻辑量只能取0(假)和1(真)两个值。
逻辑量的基本运算为与(&
)、或(|)和非(~)三种。
有时也包括异式(xor),不过异或可以用三种基本运算组合而成。
两个逻辑量经此逻辑运算后的输出仍然是逻辑量,表示逻辑量的输入输出关系的表称为真值表,见表2-11。
表2-11基本逻辑运算的真值表
运算
A=0
A=1
B=0
B=1
A&
B
A|B
~A
xor(A,B)
第4-2页
所有的算法语言中都有逻辑运算。
MATLAB的特点是将逻辑运算用于元素群,得出同阶的0-1矩阵。
为了按列、按行判断一群元素的逻辑值,它又增加了两种对元素群的逻辑运算函数,即all(全为真)和any(不全为假)。
现在看来逻辑式u=p|~p,这是把p和“非”p求“或”。
~p就是把p中的0元素换成1,1元素换成0。
在每个元素位置上,必有一个是1,把p和~p“或”起来,一定是全1矩阵。
得u=111111
111111
all和any后的输入变量应为矩阵,它是按列运算的。
从它们的定义可知
all(p)=000000(列中有一个元素为0即得0)
all(u)=011111(列中元素为全1才得1)
any(p)=111111(列中有一个元素为1即得1)
2.4.3流程控制语句
计算机程序通常都是从前到后逐条执行的。
但有时也会根据实际情况,中途改变执行的次序,称为流程控制。
MATLAB4.x设有3种流程控制的语言结构。
即If语句、While语句和For语句。
在MATLAB5.x中是4种,增加了Switch-case语句。
1、If语句
根据复杂程度,If语句有3种形式:
●if(表达式)语句组A,end
其流程见图2-1(a)。
执行此语句时,计算机先检验if后的逻辑表达式,如为1,它就执行语句组A;
如为0,就跳过语句组A,直接执行end后的后续语句。
注意,这个end是决不可少的,没有它,在表达式为0时,就找不到继续执行的程序入口。
●if(表达式1)语句组A,else语句组B,end
第4-3页
(a)(b)(c)
图2-1if语句的3种程序结构形式
其流程见图2-1(b)。
执行到此语句时,计算机先检验if后的(逻辑)表达式,如为1,它就执行语句组A;
如为0,就执行语句组B。
else用来标志语句组B的执行条件,同时也标志语句组A的结束(免去了end)。
同样,最后的end是不可少的;
没有它,执行完语句组A后,会找不到进入后续程序的入口。
●if(表达式1)语句组A,elseif(表达式2)语句组B,else语句组C,end
其流程见图2-1(c)。
前两种形式的if语句都是两分支的程序结构,要实现两个以上分去的结构就得采用含elseif的结构。
这里表示的是3分支的情况。
在中间可加入多个elseif以形成多个分支。
只是程序结构会显得冗长,MATLAB5.X中的Switch语句可以用较简洁对称的形式实现多分支结构。
例2-1输入数n,判断其奇偶性。
程序如下
n=input('
n='
),ifrem(n,2)==0A='
even'
elseA='
odd'
end
运行此程序时,程序要求用户输入一个数,然后它判断该数是奇数还是偶数。
所以它共有两个出口。
实际上这个程序并不全面,如果用户根本未键入任何数就回车,程序会判断为odd。
请读者考虑其原因。
为了使程序在用户无输入时自动中止,可以把程序改为:
ifesempty(n)==1A='
empty'
elseifrem(n,2)==0A='
第4-4页
2、While语句
while语句的结构形式为:
while(表达式)语句组A,end
其流程见图2-2。
执行到此语句时,计算机先检验while后的逻辑表达式,如为1,它就执行语句组A;
到end处到,它跳回到while的入口,再检验表达式;
如还是1,再执行语句组A;
周而复始,直到表达式不成立(结果为零)为止。
此时就跳过语句组A,直接执行end后的后续语句。
与if语句的不同之处是它们在循环地执行某个语句组,故称为循环语句。
例2-2求MATLAB中的最大实数
【解答】设定一个数x,让它不断增大,直到MATLAB无法表示它的值,只能表为inf为止。
于是,可列出下列程序
x=1;
whilex~=inf,x1=x;
x=2*x;
end,x1
其中,先设x=1,进入while循环,只要x不等于inf,就把x加倍,直到x=inf。
如果把此时的x显示出来,它是无穷大,不是题中要找的数。
要找的是变为无穷大之前的最大数。
因此,在对x加倍之前,把它存在x1中,显示的x1就是要求的最大数。
运行这行程序得
x1=8.9885e+307
系统的最大浮点实数(2-ε)*21023(见表2-1),其十进制形式为
realmax=1.7977e+308
两者数量级接近,但还是相差近一倍,这是因为每次都把x翻一番,故求得的数可能比最大数小不到一半。
如果把程序中的x=2*x改为x=1.1*x,结果就会准确一些,得到
x1=1.783718732622142e+308
例2-3求MATLAB相对精度。
【解答】解的思路是让y不断减小,直至MATLAB分不出1+y与1的差别为止。
其程序为
y=1;
while1+y>
1,y1=y;
y=y/2;
end,y1
结果为
y1=2.220446049250313e-016
与MATLAB内部给出的浮点相对精度2-52(见表2-1)的十进制数相同。
第4-5页
3、For语句
for语句的结构形式为:
fork=初值:
增量:
终值语句组A,end
即它把语句组A反复执行N次。
在每次执行时程序中的k值不同。
N=1+(终值-初值)/增量
例2-4用for语句求三角函数表。
程序如下:
forx=0:
0.1:
pi/4disp([x,sin(x),cos(x),tan(x)]),end
所得的结果将和前面的答案相同。
这也可以看出,MATLAB的元素群运算功能与一个for循环相当。
由于它不需每次检验表达式,运算速度比for语句快得多。
但是不能认为它可全部取代for语句,由下例可以看出。
例2-5列出构成Hibert矩阵的程序。
完成这个程序需要两重循环。
),formatrat
fori=1:
n,forj=1:
n,h(i,j)=1/(i+j-1);
end,end,h
执行时,先按提示输入n,比如输入5。
h=11/21/31/41/5
1/21/31/41/51/6
1/31/41/51/61/7
1/41/51/61/71/8
1/51/61/71/81/9
为了改善可读性,对于流程控制语句,最好用缩进的方法写程序。
本例中应写成:
formatrat,n=input('
)
n
forj=1:
h(i,j)=1/(i+j-1);
end
h
由于现在是在MATLAB命令窗中直接输入程序,因此,不得不把它写在一行中。
此时要注意,在if、for、while与表达式之间应留空格,在表达式与语句组之间必须用空格或逗号分隔,而在语句组的后面,必须要用逗号或分号来与end或else相分隔。
否则,MATLAB会显示出错信息并中止运行。
break是中止循环的命令,在循环语句中,可用它在一定条件下跳出循环,它是常常用到的。
在多重循环中break只能使程序跳出包含它的最内部的那个循环。
第4-6页
4、Switch语句
Switch-case-otherwise语句是MATLAB5.x中新扩展的。
它是一种均衡实现的多分支语句,其基本语言结构可表为:
switch表达式(标量或字符串)
语句组A
case值2
语句组B
………
otherwise
语句组N
当表达式的值(或字符串)与某case语句中的值(或字符串)相同时,它就执行该case语句后的语句组,然后直接跳到终点的end。
case语句可以有N-1个,如果没有任何一个case值能与表达式值相符,则将执行otherwise后面的语句组N。
例如,判断输入数n的奇、偶、空的程序可用Switch语句写成如下:
switchmod(n,2),case1,A='
奇'
case0,A='
偶'
otherwise,A='
空'
注意,把它写成单行命令时的标点格式,其中有些逗号可以用分号代替,但不得省略。
另外,为了包含负数中的奇数,将前面例中的rem改为mod,读者可从rem(-3,2)和mod(-3,2)的差别得知这样做的原因。
在正式写程序时,case语句必须写在行首,以增强程序的可读性。
2.5基本绘图方法
MATLAB可以根据给出的数据,用绘图命令在屏幕上画出其图形,通过图形对科学计算进行描述。
这是MATLAB独有的优于其他语言的特色。
它可选择多种类型的绘图坐标,可以对图形加标号、加标题、或画上网状标线。
这些命令属于graph2d函数库,另外,还有一些命令可用于屏幕控制,坐标比例选取以及在打印机上进行硬拷贝等等。
这些命令放在graphics函数库中。
三维及颜色绘图命令放在graph3d函数库中。
还有一些特殊绘图命令放在specgraph函数库中。
本书不可能介绍所有的命令,但主要命令会在本书涉及,下面分别进行讨论。
第4-7页
2.5.1直角坐标中的两维曲线
plot命令用来绘制X-Y坐标中的曲线。
它是一个功能很强的命令。
输入变量不同可以产生很多不同的结果。
1、plot(y)——输入一个数组的情况
如果y是一个数组,函数plot(y)给出线性直角坐标的二维图,以y中元素的下标作为X坐标,y中元素的值作为Y坐标,一一对应画在X-Y坐标平面图上,而且将各点以直线相联。
例如,要画出10个随机数的曲线。
可列出:
y=5*(rand(1,10)-.5)
y=2.2506-1.34430.5342-0.07011.95651.3105-0.2177-2.40751.6070-0.2765
由Rand函数产生的随机数的最大值为1,最小数为0,平均值为0.5。
所以y的最大值为2.5,最小值为-2.5,平均值为0。
键入plot(y),MATLAB会产生一个图形窗,自动规定最合适的坐标比例绘图。
X方向是横坐标,从1到10,Y方向范围则是-4到4,并自动标出刻度。
可以用title命令给图加上标题,用xlabel、ylabel命令给坐标轴加上说明,用text或gtext命令可以图上任何位置加标注,也可用grid命令在图上打上坐标网格线。
键入title('
myfirstplot'
xlabel('
X'
),ylabel('
Y'
grid
这时形成如图2-3所示的图。
2、plot(x,y)——输入两个数组的情况
如果数组x和y具有相同长度,命令plot(x,y)将绘出以x元素为横坐标,y元素为纵坐标的曲线。
例如,设t为时间数组t=0:
0.5:
4*pi,y是一个随t作衰减振荡的变量,y=exp(-0.1*t).*sin(t),则plot(t,y)就以t为横坐标,y为纵坐标画曲线。
如图2-4中的实线曲线。
若设y1=exp(-0.1*t).*sin(t+1),则由plot(t,y1,`:
`)画出的曲线,其正弦波的相位超前了1弧度。
因此,其波形如图2-4中的虚线曲线所示。
实际上,在绘制第二条曲线时,如不加别的命令,第一条曲线就自动消失了。
不会有两根曲线同在一张图中出现。
为了在一张图中绘制多条曲线,要用后面所说的办法。
第4-8页
2.5.2线型、点型和颜色
MATLAB会自动设定所画曲线的颜色和线型。
如果用户对线型的默认值不满意,可以用命令控制线型。
也可以根据需要选取不同的数据点的标记。
为了设定线型,在输入变量组的后面,加一个引号,在引号内部放入线型和颜色的标识符,如:
plot(x,y,'
*b'
这样绘出的图线,其数据处均用*作蓝色标记,而各点之间不再连以直线。
plot(x1,y1,'
:
y'
),plot(x2,y2,'
+r'
绘出的第一条曲线是黄色的点线,第二条曲线的数据点标记为红色的“+”号。
其他线型、点型和颜色见表2-12。
表2-12线型、点型和颜色
标识符
颜色
线型和点型
Y
黄
.
点
M
品红
o
圆圈
c
青
x
x号
r
红
+
+号
g
绿
-
实线
b
蓝
*
星号
w
白
虚线
k
黑
-.
点划线
--
长划线
2.5.3多条曲线的绘制
在一张图上画多根曲线有4种方法,其中第4种方法是MATLAB5.x中新增加的。
1、plot(t,[y1,y2,…])命令
该语句中t是向量,y=[y1,y2,…]是矩阵,若t是列(行)向量,则y的列(行)长与t长度相同。
y的行(列)数就是曲线的根数。
例如:
键入plot(t,[y;
y1])
就得出图2-4中的曲线。
它会自动给曲线以不同的颜色。
这种方法要求所有的输出量有同样的长度和同样的自变量向量。
另外,它不便于用户自行设定线型和颜色。
第4-9页
2、hold命令
在画完前一张图后用hold命令保持住,再画下一条曲线。
如:
键入plot(t,y),hold,plot(t,y1,'
g'
执行此命令时,图形窗产生第一幅图形,同时,命令屏幕显示Currentplotheld,图形处于保持状态。
再执行plot(t,y1,`g`),就把第二幅图以绿色的曲线叠合在同一张图上。
用这种方法时两张图的变量长度可以各不相同。
只要每张图自己的自变量和因变量同长即可。
例如,再给一组数据[t2,y2],其点数比[t,y]多,但占的时间却短。
键入
t2=0:
0.2:
2*pi;
y2=exp(-0.5*t2).*sin(5*t2+1);
plot(t2,y2)
得出的图形为图2-5中较短的那条曲线(但线型不同)。
用这种方法时,需注意两点:
(1)注意第一张图的坐标要适当,以保证能看清第二张图。
因为用第一种方法时,坐标系是系统自动按多根曲线的数据综合选取的,不会有选择不当的问题。
(2)注意及时解除保持状态,即键入holdoff;
否则,以后的图都会叠加在此图上,造成混乱。
3、在plot后使用多输入变量
在plot后使用多输入变量所用的语句为:
plot(x1,y1,x2,y2,…,xn,yn)
其中,x1,y1,x2,y2等分别为数组对。
每一对X-Y数组可以绘出一条图线,这样就可以在一张图上画出多条图线,每一组数组对的长度可以不同,在其后面都可加线型标志符。
plot(t,y,'
+g'
t2,y2,'
r'
title('
线型点型和颜色'
时间'
执行这些语句就得到图2-5。
一根图线在数据点处用绿色的虚线做标记,另一根图线用红色的+号做标记。
注意,这里用的是汉字标注,MATLAB也照样把汉字标在图上。
因为在引号中的内容,MATLAB只作为一种代码来传递。
第4-10页
4、plotyy命令
plotyy是MATLAB5.x中新增的函数,它设有两个纵坐标,以便绘制两个y尺度不同的变量,但x仍只用同一个比例尺,例如:
键入y3=5*y2;
plotyy(t,y'
t2,y3)
就得到图2-6。
其中,左纵坐标是对y的,而右纵坐标是对y3的,纵坐标和曲线的标注可用gtext命令:
grid,gtext('
t,t2'
gtext('
),gtext('
y3'
gtext命令用鼠标拖动来确定标注文字的位置,用起来比较方便。
2.5.4屏幕控制和其他二维绘图
1、图形屏幕控制命令(参看表2-13)
图形屏幕可以开或关,可以开几处图形窗,也可以在一个图形窗内画出几幅分图,几幅分图也可用不同的坐标。
以下几种命令可以实现图形窗口间的转换和清除。
·
figure:
打开图形窗口。
MATLAB中的第1幅图随plot命令自动打开,以后的plot命令都画在同一张图上。
如要画在另一张新图上,就要用figure命令打开新的图形窗口。
有了顺序为1,2,3,…的几个图形窗后,再用plot语句,就要指明画在哪张图上,即键入figure;
表示打开第i幅图。
否则,所有的图都会画在最后显示的那幅图上。
clf:
清除当前图形窗的内容(也可用clg,但以后将被淘汰)
hold:
保持当前图形窗的内容,再键入hold,就解除保持状态。
这种拉线开关式的控制有时会造成混乱,可以用holdon和holdoff命令以得到确定的状态。
close:
关闭当前图形窗。
closeall:
关闭所有图形窗。
subplot(n,m,p)命令:
将图形窗口分为n×
m个子图,在第p个子图处绘制图形。
2、其他二维绘图命令(参看表2-14)
在线性直角坐标系中绘出形式图的命令有stem(绘脉冲图)、strairs(绘阶梯图)、bar(绘条形图)、errorbar(绘误差条形图)、hist(绘直方图)等。
这些函数用法与plot相仿,但没有多输入变量形式。
Fill(t,y,`颜色标注符`)在曲线和坐标轴之间的封闭区填以指定的颜色。
第4-11页
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 教案