MATLAB讲课第二章.docx
《MATLAB讲课第二章.docx》由会员分享,可在线阅读,更多相关《MATLAB讲课第二章.docx(19页珍藏版)》请在冰豆网上搜索。
MATLAB讲课第二章
第二章MATLAB程序设计语言
§2.1MATLAB6.1的启动
一、MATLAB启动
MATLAB启动有两种方法:
(1)MATLAB6.1的图标快捷启动方式
(2)菜单启动方式
§2.2MATLAB环境
一、MATLAB的命令窗口
1、命令窗口的命令菜单
2、命令窗口的工具栏
3、命令窗口的命令编辑区
↑:
光标移到上一行
↓:
光标移到下一行
←:
光标回移一个字符
→:
光标向右移一个字符
Ctrl→:
向右移一个单词
Ctrl←:
向左移一个单词
Backspace:
删除光标前字符
Delete:
删除光标后字符
End:
光标移到行尾
Home:
光标移到行首
Esc:
删除一行
注:
1)在MATLAB的命令窗口里,在语句行尾加上3个英文句号表示续行;
2)运算符“=”、“+”、“-”前后的空格不影响计算结果;
3)在输入命令后以分号结束,则不会显示命令执行结果,但可以使程序运行的速度大大提高,这对输出数据的程序特别有用。
二、MATLAB的工作空间
三、MATLAB的程序编辑器
四、MATLAB的work子目录
五、MATLAB运行外部程序
§2.3MATLAB数值运算基础
MATLAB是一个高级的数学分析与运算软件,正如其名(矩阵实验室),它非常适用于矩阵的分析与运算。
MATLAB数值运算的表达式变量中不允许有未定义的自由变量,MATLAB的数值运算主要是指数组的运算与矩阵的运算。
不需要事先定义,MATLAB系统定义的数值元素是复数,这是MATLAB区别其他高级语言的最大特点之一,它给诸多领域的数值计算带来极大的方便。
一、常量与变量
1、常量
MATLAB中使用的数据有常量和变量。
常量有实数常量与复数常量两类。
复数由实部与虚部组成。
常量可以使用传统的十进制计数法表示,也可以使用科学技术法来表示。
在MATLAB中,虚数单位i=sqrt(-1),在工作空间内显示的值为
i=
ans=
0+1.000i
复数常量的生成可以利用如下语句:
Z=a+bi或
Z=r+exp(θ*i),其中r是复数的模,θ是复数幅角的弧度数
2、变量
MATLAB里的变量无需事先定义。
一个程序中的变量,以其名称在语句命令中的第一次合法出现而定义。
注:
MATLAB变量名称的命名不是任意的,其命名规则如下:
(1)变量名可以由英文字母、数字和下划线组成;
(2)变量名应以英文字母开头;
(3)组成变量名的字符长度不大于31个;
(4)MATLAB区分大小写英语字母。
(命令、函数)
下表为MATLAB中设置了一些特殊的变量与常量。
MATLAB的特殊变量与常量
变量名
功能说明
ANS(ans)
缺省变量名,以应答最近一次操作运算结果
i或j
虚数单位,定义为√-1
Pi
圆周率
realmax
最大的正实数
realmin
最小的正实数
INF(inf)
代表无穷大
NaN(nan)
代表不定值(0/0)
nargin
函数实际输入参数个数
nargout
函数实际输出参数个数
二、MATLAB运算符
1、MATLAB算术运算符
操作符
功能说明
操作符
功能说明
+
加
\
矩阵左除
-
减
.\
数组左除
*
矩阵乘
/
矩阵右除
.*
数组乘
./
数组右除
^
矩阵乘方
´
矩阵转置
.^
数组乘方
.´
数组转置
2、MATLAB关系运算符
操作符
功能说明
==
等于
~=
不等于
>
大于
<
小于
>=
大于等于
<=
小于等于
3、MATLAB逻辑关系运算符
逻辑运算符
逻辑运算
说明
&
And
逻辑和
∣
or
或
~
Not
Xor
非
异或
4、MATLAB特殊运算符
需要特别指出,下表中的特殊运算符是指在英语输入状态下输入的字符,若在汉字输入状态下输入则无效。
MATLAB特殊运算
符号
功能说明
:
冒号,在MATLAB中非常重要
;
分号,用于分隔行
,
逗号,用于分隔列
()
圆括号,指出在算术表达式中先后次序
[]
方括号,用于构成向量和矩阵
{}
大括号,用于构成单元数组
.
小数点或域访问符
..
父目录
…
用于语句行尾端表示该行未完
%
用于注释
!
用于调用操作系统命令
=
用于赋值
经常使用的MATLAB特殊运算符,功能说明如下:
(1)冒号(:
)
①使用冒号可以输入行向量,其格式为:
x=a:
inc:
b。
a是数组的第一个元素,inc是步长(两个元素的间隔),步长可正可负;a、inc、b三者之间用冒号分隔;当inc=1时可以省略。
【例2-1】在MATLAB命令窗口输入指令并回车(以下举例同此)。
(1)a=10:
5:
30
(2)a=10:
-1:
0(3)a=10:
15
②使用冒号能够从向量、矩阵和数组中选出指定元素、行和列。
【例2-2】使用冒号选出指定元素。
123
A=456
789
A=[123;456;789];
A(1:
2,3)
③使用冒号能够从一个大矩阵中选取小矩阵。
【例2-3】使用冒号选取小矩阵示例。
123
A=456
789
A=[123;456;789];
B=A(2:
3,:
)
(2)方括号([])
方括号可以输入矩阵,也可用方括号删除矩阵的行和列,此时方括号[]代表空阵。
【例2-4】用方括号删除矩阵的行和列。
A=magic(4);A
A(:
3)=[];
A
三、矩阵、数组及其算术运算
MatrixLaboratory
矩阵:
有m×n个数aij(i=1,2,…m;j=1,2,…n)的数组将其排成如下格式(用方括号括起来)的“表”:
a11a12…a1n
A=a21a22…a2n
…………
am1am2…amn
注:
数组用方括号括起来后已作为一个抽象的特殊量——矩阵
数组(array)
数组是由一组复数排成的长方形阵列(而实数可视为复数的虚部为0的特例)
注:
数组的所有运算都是对被运算数组中的每个元素平等的执行同样操作。
矩阵运算是从把矩阵整体当作一个特殊的量这个基点出发,依照线性代数的规则来进行运算。
1、数组或矩阵元素的标识
(1)一维数组的元素的标识,访问和赋值
一维数组标识:
使用方括号以及在括号内列出以空格或逗号分隔其元素的表。
一维数组的元素是以数组名后圆括号内的元素在数组中位置的顺序号来标识的,数组元素的访问与赋值就是根据数组元素的标识进行的。
【例2-5】一维数组元素的标识
x=[1*pi2*pi3*pi4*pi5*pi];x
x(2:
4)x(4:
end)x(3:
-1:
1)x(find(x<10))x
(1)=1
(2)多维数组或矩阵元素的标识,访问与赋值
A(m,n)
其中:
m为行号,n为列号。
说明:
1)A:
数组名;()数组名后用圆括号;
2)m,n:
前面为行号,后面为列号,顺序不能颠倒;
3)行、列之间用逗号分开,此处逗号不能换成空格。
子数组访问与赋值常用的相关指令格式
指令格式
指令功能
A(r,c)
由数组A中指定行r,指定列c元素组成的子数组
A(r,:
)
由数组A中指定行r对应的所有列元素组成的子数组
A(:
c)
由数组A中指定列c对应的所有行元素组成的子数组
A(:
)
由数组A的各个列按从左到右的次序首末相接的“一维长列”子数组
A(i)
“一维长列”子数组的第i个元素
【例2-6】数组(矩阵)元素的标识
A=[123;456;789];A
A(2,3)A(3,:
)A(:
2)(A(:
))'A(6)
2、数组与矩阵的输入
(1)一维行或列向量的输入
A.显示元素的列表输入(在MATLAB命令窗口输入指令并回车)
【例2-7】向量元素的列表输入
A=[12*pisqrt(3)4+5i];A
B.冒号生成法
一般格式为:
x=a:
inc:
b
【例2-8】t=0:
0.1:
0.6t=[0:
0.1:
0.6]
(2)二维数组(或矩阵)的输入
A.显示元素列表输入
在MATLAB中输入数组需要遵循以下基本规则:
1)把数组元素列入括号[]中;
2)每行内的元素间(列)用逗号或空格分开;
3)行与行之间用分号(或回车键enter)隔开。
【例2-9】元素列表输入数组(矩阵)
123
A=456
789
A=[123;456;789]
B.利用M文件生成数组或矩阵[M210]
【例2-10】
C.小矩阵联接生成大矩阵
在MATLAB中利用联接算子----方括号[]可将小矩阵联接为一个大矩阵
【例2-11】利用方括号[]将小矩阵联接成大矩阵
A=[12;34];A
A1=A+5A2=A+10A3=A1+10G=[AA1;A2A3]
3、数组、矩阵的算术运算
(1)数组、矩阵的加减运算
在MATLAB里,维数为1×1的数组叫做标量。
而MATLAB里的数值元素是复数,所以一个标量就是一个复数。
注:
标量与数组间可以进行加减运算。
其规则是标量与数组的每一个元素进行加减操作。
矩阵与标量间不存在这种运算。
【例2-12】数组与标量之间实施加减运算
S=5;
A=[123;456;789];
A+SA-SS-A
(2)数组、矩阵的乘法运算
数组乘法运算:
“.*”
数组的乘法运算必须在具有相同维数的数组间进行,其结果是数组对应元素间相乘的结果组成的新数组。
而两矩阵相乘必需服从数学中矩阵叉乘的条件与规则。
A、数组、矩阵与标量的乘法运算
【例2-13】标量与数组(矩阵)之间的乘法运算
S=5;
A=[123;456;789];
S.*AA.*SS*AA*S
B、数组、矩阵间的乘法运算
数组的乘法运算必须在具有相同维数的数组间进行,两矩阵相乘的条件是左矩阵的列数必须等于右矩阵的行数,矩阵乘法不满足交换律。
【例2-14】数组乘法运算
a=[123;456;789];
b=[222;222;222];
a.*bb.*a
【例2-15】矩阵乘法运算
123222
a=456b=222
789222
a=[123;456;789];
b=[222;222;222];
a*bb*a
由此可见,在MATLAB中数组的乘法与矩阵的乘法遵循的运算规则是不同的,其结果也不同。
数组乘法:
a.*b=b.*a
矩阵乘法:
a*b≠b*a
(3)数组、矩阵的除法运算
A.数组与标量间的除法运算
标量与数组间可以进行除法运算,其规则是标量与数组的每一个元素进行除法操作。
注:
矩阵与标量间则无这种运算
【例2-16】数组与标量间的除法运算
S=5;
A=[123;456;789];
S./AA.\SS.\AA./S
B.数组、矩阵的除法运算
数组:
维数相同两数组的除法也是对应元素间的相除,数组间的相除,数组的除法没有左除和右除之分,即符号“.\”“./”的运算结果是一致的。
注意被除数与除数在两种除法运算符中的左右位置是不同的。
矩阵:
矩阵除法运算有左除与右除之分,即运算符号“\”“/”
指代的运算。
运算规则:
a\b=inv(a)*ba/b=a*inv(b)
注:
inv→逻辑特征命令,指“矩阵求逆”
【例2-17】数组的除法
a=[123;456;789];
b=[222;222;222];
a./bb.\a
运算结果说明:
数组除法中,a./b=b.\a
./.\两种符号运算结果是一致的。
【例2-18】矩阵的除法
c=[123;456;789];
d=[100;020;003];
c\dinv(c)*dc/dc*inv(d)
运算结果说明:
1、矩阵左除、右除是不一样的:
c\d≠c/d;
2、矩阵除法运算规则是
c/d=c*inv(d)
c\d=inv(c)*d
(4)数组、矩阵的乘方运算
“.^”
A.数组与标量的乘方运算
①以数组为底而以标量为指数的乘方运算
【例2-19】以数组为底而以标量为指数的乘方运算
a=[456];
a.^4
b=[12;34];
b.^3
②以标量为底而以数组为指数的乘方运算
a=[456];b=[12;34];
d=2;
e=d.^a
f=d.^b
B.数组与数组的乘方运算
【例2-20】a=[456];
b=[123];
c=[23;56];
d=[12;34];
e=a.^bf=d.^c
显然,数组间的乘方运算只在维数相同的数组间进行。
C.矩阵的乘方运算
【例2-21】矩阵的乘方运算示例
a=[12;34];b=2;c=-0.2;
a^b
所以:
a为矩阵,b为整数,矩阵的乘方a^b是矩阵a自乘b次,若b=2,a^b=a*a
a^c
所以,a为矩阵,c为标量,矩阵的乘方a^c是矩阵a的c次方
四、数组函数
MATLAB的基本数组函数
函数名
功能
函数名
功能
exp
指数
angle
复数的相角
log
自然指数
conj
复数的共轭
log10
常用对数
imag
复数的虚部
sqrt
平方根
real
复数的实部
abs
绝对值(复数的模)
sign
符号函数
【例2-22】求复数的实部与虚部
a=real(8-5i)
b=imag(2-7i)
【例2-22】取对数运算
a=[12864+16i];
b=log(a)c=log2(a)d=log10(a)
【例2-23】求复数矩阵的模、共轭复数矩阵、以e为底的指数函数
a=[1+2i3+4i;5-6i7+8i];
b=abs(a)c=conj(a)e=exp(a)f=exp(c)
五、矩阵函数
1、矩阵生成函数
(1)zeros()函数
zeros()函数能够生成元素全为0的矩阵
【例2-24】zeros()应用示例函数
C=zeros(3,2)
(2)ones()函数
ones()函数能够生成元素全为1的矩阵
【例2-25】ones()函数应用示例函数
D=ones(2,3)
(3)magic()函数
在MATLAB中,magic()函数是一个特殊的函数,该函数能够自动生成一种特别的N阶方阵(其中,N=1,3,4,5…)叫做魔方阵,这些N阶方阵具有一个共同的奇妙特性,即每一行,每一列或对角线上的元素之和都相等。
【例2-26】magic()函数应用示例
X=magic(6)
(4)diag()函数
diag()函数可以生成对角矩阵
【例2-27】diag()函数应用示例
Y=magic(4);Y
diag(Y)
(5)triu()函数
triu()函数可以生成上三角矩形
【例2-28】triu()函数应用示例
X=magic(6);X
triu(X)
(6)tril()函数
tril()函数可以生成下三角矩形
【例2-29】tril()函数应用示例
tril(X)
(7)size()函数
size()函数用来返回指定矩阵的行数和列数
【例2-30】size()函数应用示例
a=[123;456;789];
b=size(a)
(8)eye()函数
eye()函数可以生成指定行数和列数的单位矩阵。
eye()函数和size()函数常常一起使用,用以生成与指定矩阵同维的单位矩阵。
【例2-31】eye()函数应用示例
a=[123;456;789];
b=size(a);
eye(b)
六、多项式及其运算
多项式p(x)=a0xn+a1xn-1…+an-1x+an的系数行向量为:
p=[a0a1a2…an-1an]
1、多项式运算函数
MATLAB提供了用于多项式运算的函数
函数
功能
函数
功能
roots
多项式求根
poly
由根求多项式
conv
多项式乘法(卷积)
deconv
多项式除法(解卷)
residue
多项式部分分式展开(留数)
(1)多项式求根
【例2-32】求多项式p(x)=x4+2x3+3x2+4x+5
p=[12345];roots(p)
(2)由根求多项式
【例2-33】已知多项式的根为1,5,8,试求此根对应的多项式
p1=poly([158])
即所求多项式为:
p(x)=x3–14x2+53x-40
所求多项式是否正确,可以用roots()函数来验证.
p=[1,-14,53,-40];roots(p)
由此可见,多项式的poly()和roots()函数互为逆运算
(3)conv,deconv:
多项式乘法(卷积)与多项式除法(解卷)
conv
函数为标准的MATLAB函数,用来求取两个向量的卷积。
多项式的conv()与deconv()函数互为逆运算。
多项式乘法也可以用conv这个函数来计算。
conv函数允许任意多层嵌套,从而表示复杂的计算。
注:
括号的匹配。
(4)多项式部分分式展开
M(S)b0Sm+b1Sm-1+……+bm
G(S)=-----------=-------------------------------------
N(S)a0Sn+a1Sn-1+……+an
r1r2rn
=-----------+-----------+……+------------+k
S-P1S-P2S-Pn
residuce(a,b):
[rpk]=residuce(num,den)
r,p:
分别表示为各个子传递函数的增益和极点位置,
k:
为部分分式展开后的余项。
num=[b0,b1,……,bm]
den=[a0,a1,……,an]
M(S)r1r2rn
------------=-----------+-----------+……+------------+k
N(S)S-P1S-P2S-Pn
S+2
【例2-34】已知一传函G(S)=-----------------,将其分解为部分分式。
S2+4S+3
解:
num=[12];den=[143];
[rpk]=residue(num,den)
0.50.5
G(S)=---------------+-----------
S+3S+1
S3+7S2+24S+24
【例2-35】已知一传函G(S)=------------------------------,将其分解为部分分式。
S4+10S3+35S2+50S+24
解:
num=[172424];den=[110355024];
[rpk]=residue(num,den)
4(-6)21
G(S)=-----------+-------------+-------------+------------
S+4S+3S+2S+1