第2章 MATLAB的基本功能.docx
《第2章 MATLAB的基本功能.docx》由会员分享,可在线阅读,更多相关《第2章 MATLAB的基本功能.docx(38页珍藏版)》请在冰豆网上搜索。
第2章MATLAB的基本功能
第2章MATLAB的基本功能
2.1变量和数据操作
2.1.1变量与赋值
1.变量命名
在MATLAB6.5中,变量名是以字母开头,后接字母、数字或下划线的字符序列,最多63个字符。
在MATLAB中,变量名区分字母的大小写。
2.赋值语句
(1)变量=表达式
(2)表达式
其中表达式是用运算符将有关运算量连接起来的式子,其结果是一个矩阵。
例2-1计算表达式的值,并显示计算结果。
在MATLAB命令窗口输入命令:
x=1+2i;
y=3-sqrt(17);
z=(cos(abs(x+y))-sin(78*pi/180))/(x+abs(y))
其中pi和i都是MATLAB预先定义的变量,分别代表代表圆周率π和虚数单位。
输出结果是:
z=
-0.3488+0.3286i
2.1.2预定义变量
在MATLAB工作空间中,还驻留几个由系统本身定义的变量。
例如,用pi表示圆周率π的近似值,用i,j表示虚数单位。
预定义变量有特定的含义,在使用时,应尽量避免对这些变量重新赋值。
2.1.3内存变量的管理
1.内存变量的删除与修改
MATLAB工作空间窗口专门用于内存变量的管理。
在工作空间窗口中可以显示所有内存变量的属性。
当选中某些变量后,再单击Delete按钮,就能删除这些变量。
当选中某些变量后,再单击Open按钮,将进入变量编辑器。
通过变量编辑器可以直接观察变量中的具体元素,也可修改变量中的具体元素。
clear命令用于删除MATLAB工作空间中的变量。
who和whos这两个命令用于显示在MATLAB工作空间中已经驻留的变量名清单。
who命令只显示出驻留变量的名称,whos在给出变量名的同时,还给出它们的大小、所占字节数及数据类型等信息。
2.内存变量文件
利用MAT文件可以把当前MATLAB工作空间中的一些有用变量长久地保留下来,扩展名是.mat。
MAT文件的生成和装入由save和load命令来完成。
常用格式为:
save文件名[变量名表][-append][-ascii]
load文件名[变量名表][-ascii]
其中,文件名可以带路径,但不需带扩展名.mat,命令隐含一定对.mat文件进行操作。
变量名表中的变量个数不限,只要内存或文件中存在即可,变量名之间以空格分隔。
当变量名表省略时,保存或装入全部变量。
-ascii选项使文件以ASCII格式处理,省略该选项时文件将以二进制格式处理。
save命令中的-append选项控制将变量追加到MAT文件中。
2.2数值计算功能
MATLAB以矩阵为基本的运算单元,向量和标量作为特殊的矩阵处理:
向量看作只有一行或一列的矩阵;标量看作只有一个元素的矩阵。
2.2.1创建数值矩阵
1.直接输入法
直接输入需遵循以下基本规则:
◆整个矩阵应以“[]”为首尾,即整个输入矩阵必须包含在方括号中;
◆矩阵中,行与行之间必须用分号“;”或Enter键(按Enter键)符分隔;
◆每行中的元素用逗号“,”或空格分隔;
◆矩阵中的元素可以是数字或表达式,但表达式中不可包含未知的变量,MATLAB用表达式的值为该位置的矩阵元素赋值。
当矩阵中没有任何元素时,该矩阵被称作“空阵”(EmptyMatrix)。
>>A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16]
A=
1234
5678
9101112
13141516
>>B=[1,sqrt(25),9,13
2,6,10,7*2
3+sin(pi),7,11,15
4,abs(-8),12,16]
B=
15913
261014
371115
481216
2.用函数创建
在MATLAB中还提供一些函数用来构造特殊矩阵,这些函数如下表所示。
%ones生成全部元素为1的矩阵
>>ones(3,4)
ans=
1111
1111
1111
>>F=5*ones(3)
F=
555
555
555
%zeros生成全部元素为0的矩阵
>>Z=zeros(2,4)
Z=
0000
0000
%rand生成均匀分布的随机矩阵
>>R=rand(4)
R=
0.95010.89130.82140.9218
0.23110.76210.44470.7382
0.60680.45650.61540.1763
0.48600.01850.79190.4057
3.利用M文件建立矩阵
对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。
下面通过一个简单例子来说明如何利用M文件创建矩阵。
A=[1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16,17,18,19,20
21,22,23,24,25]
(1)启动有关编辑程序或MATLAB文本编辑器,并输入待建矩阵:
(2)把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。
(3)在MATLAB命令窗口中输入mymatrix,即运行该M文件,就会自动建立一个名为MYMAT的矩阵,可供以后使用。
4.向量的构造方法
向量是组成矩阵的基本元素之一。
向量元素需要用方括号括起来。
元素之间用空格和逗号分隔生成行向量,用分号隔开生成列向量。
可以把行向量看成1n阶矩阵,把列向量看成n1阶矩阵。
(1)直接输入法
向量元素用“[]”括起来,元素之间用空格、逗号或者分号相隔。
需要注意的是,用它们相隔生成的向量形式是不相同的:
用空格或逗号生成行向量;用分号生成列向量。
>>a2=[15,21,27,93,101]
>>a1=[15;21;27;93;101]
(2)利用冒号(:
)生成行向量
当向量的元素过多,同时向量各元素有等差的规律,此时采用直接输入法将过于繁琐。
针对该种情况,可以使用冒号(:
)来生成等差元素向量。
即:
e1:
e2:
e3,其中e1,e3为上下界,e2为步长,e2省略是默认为1
>>x=0:
0.5:
2
x=
00.50001.00001.50002.0000
>>y=2:
6
y=
23456
(3)利用linspace/logspace生成向量
其调用格式为:
linspace(a,b,n)其中a和b是生成向量的第一个和最后一个元素,n是元素总数。
logspace(a,b,n)生成有n个元素的行向量,其元素起点x
(1)=10a,终点x(n)=10b。
>>a=linspace(-6,6,4)
a=
-6-226
>>b=logspace(0,2,4)
b=
1.00004.641621.5443100.0000
2.2.2矩阵下标引用
本小节将介绍通过矩阵下标来存取元素值的方法,包括访问单个元素、线性引用元素和访问多个元素等。
1.访问单个元素
•2.线性引用元素
Ø对于矩阵A,线性引用元素的格式为A(k)。
通常这样的引用用于行向量或列向量,但也可用于二维矩阵。
ØMATLAB按列优先排列的一个长列向量格式(线性引用元素)来存储矩阵元素。
k为矩阵元素的序号
•显然,序号(Index)与下标(Subscript)是一一对应的,以m×n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。
其相互转换关系也可利用sub2ind和ind2sub函数求得
3.访问多个元素
操作符“:
”可以用来表示矩阵的多个元素。
若A是二维矩阵,其主要用法如下:
ØA(:
:
)返回矩阵A的所有元素。
ØA(i,:
)返回矩阵A第i行的所有元素。
ØA(i,k1:
k2)返回矩阵A第i行的自k1到k2列的所有元素。
ØA(:
j)返回矩阵A第j列的所有元素。
ØA(k1:
k2,j)返回矩阵A第j列的自k1到k2行的所有元素。
若A是多维矩阵,也可以通过类似的方法实现对其访问。
4利用空矩阵删除矩阵的元素
要删除矩阵的某一行或者是某一列,只需将该行或者该列赋予一个空矩阵[]即可。
•2.2.3矩阵运算
1.矩阵的基本运算
矩阵的基本算术运算有:
+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)等,算数运算符的用法和功能如下表所示
(1)矩阵加减运算
假定有两个矩阵A和B,则可以由A+B和A-B实现矩阵的加减运算。
运算规则是:
若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减。
如果A与B的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。
(2)矩阵乘法
ØA*B:
相乘
假定有两个矩阵A和B,若A为m×n矩阵,B为n×p矩阵,则C=A*B为m×p矩阵。
Øa*A:
数乘
标量a和矩阵A中的各元素一一相乘
>>A=[3,8,9;0,3,3;4,8,9]
A=
389
033
489
>>2*A
ans=
61618
066
81618
ØA.*B:
点乘
元素相乘,A.*B相当于A和B对应的元素相乘,A和B必须是具有相同长度的矩阵。
>>A.*B
ans=
242481
0243
12729
>>A*B
ans=
6715444
15516
7515753
(3)乘方
ØA.^B:
元素的乘方
元素的乘方,A和B必须是具有相同长度的矩阵,除非他们之一为标量。
一个标量可以与任何一个矩阵乘方,如A^2,2^A等。
ØA^B:
矩阵的乘方
当A和B都为矩阵时,此运算无定义;
Ø当A和B都是标量时,表示标量A的B次幂;
Ø当A是标量且B为矩阵时,表示标量A的中各元素次幂;
Ø当A为方阵且B为正整数时,表示矩阵A的B次乘积;
(4)矩阵除法
在MATLAB中,有两种矩阵除法运算:
\和/,分别表示左除和右除。
如果A矩阵是非奇异方阵,则A\B和B/A运算可以实现。
A\B等效于A矩阵的逆左乘B矩阵,也就是inv(A)*B,而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)。
对于含有标量的运算,两种除法运算的结果相同,如3/4和4\3有相同的值,都等于0.75。
又如,设a=[10.5,25],则a/5=5\a=[2.10005.0000]。
对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。
对于矩阵运算,一般A\B≠B/A。
2矩阵的基本函数
MATLAB提供的部分矩阵分析函数如下表所示。
(1)向量和矩阵的范数norm()
(2)矩阵的秩rank()
(3)矩阵的迹trace()
(4)矩阵的行列式det()
(5)矩阵的特征值与特征向量eig()
(1)向量和矩阵的范数
矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。
范数有多种方法定义,其定义不同,范数值也就不同。
向量的3种常用范数及其计算函数
在MATLAB中,求向量范数的函数为:
Ønorm(V)或norm(V,2):
计算向量V的2—范数。
Ønorm(V,1):
计算向量V的1—范数。
Ønorm(V,inf):
计算向量V的∞—范数。
矩阵的范数及其计算函数与求向量的范数的函数完全相同
(2)矩阵的秩
矩阵线性无关的行数与列数称为矩阵的秩。
在MATLAB中,求矩阵秩的函数是rank(A)。
(3)矩阵的迹
矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。
在MATLAB中,求矩阵的迹的函数是trace(A)。
(4)方阵的行列式
把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为矩阵所对应的行列式的值。
在MATLAB中,求方阵A所对应的行列式的值的函数是det(A)。
(5)矩阵的特征值与特征向量
在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种:
ØE=eig(A):
求矩阵A的全部特征值,构成向量E。
Ø[V,D]=eig(A):
求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
Ø[V,D]=eig(A,‘nobalance’):
与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。
2.3符号计算
自然科学理论分析中的公式、关系式及其推导是符号计算要解决的问题。
MATLAB数值计算的对象是数值,而符号计算的对象则是非数值的符号字符串。
2.3.1符号对象
1.创建符号对象和表达式
2.符号表达式的运算
MATLAB提供了函数sym()和命令syms创建符号常量、变量、函数以及表达式,函数class()检验符号对象类型。
(symbol(符号)缩写)
1.创建符号对象和表达式
(1)建立符号变量和符号常量
MATLAB提供了两个建立符号对象的函数:
sym和syms,两个函数的用法不同。
Øsym函数
sym函数用来建立单个符号量,一般调用格式为:
符号量名=sym('符号字符串')
该函数可以建立一个符号量,符号字符串可以是常量、变量、函数或表达式。
Øsyms函数
函数sym一次只能定义一个符号变量,使用不方便。
MATLAB提供了另一个函数syms,一次可以定义多个符号变量。
syms函数的一般调用格式为:
syms符号变量名1符号变量名2…符号变量名n
用这种格式定义符号变量时不要在变量名上加字符串分界符(‘),变量间用空格而不要用逗号分隔。
(2)建立符号表达式
含有符号对象的表达式称为符号表达式。
建立符号表达式有以下3种方法:
Ø利用单引号来生成符号表达式。
Ø用sym函数建立符号表达式。
Ø使用已经定义的符号变量组成符号表达式。
例2.3.1:
用上面的三种方法创建符号函数:
f=sinx+cos(2x)
3)创建符号矩阵
Ø直接输入:
直接输入符号矩阵时,符号矩阵的每一行都要用方括号括起来,而且要保证同一列的各行元素字符串的长度相等,因此,较短的字符要插入空格来补齐长度,否则程序会报错。
例2.3.2:
A=[‘[cos(x),sin(x),x]';'[-x+1,x^2+x+1,tanx]']
A=
[cos(x),sin(x),x]
[-x+1,x^2+x+1,tanx]
Ø符号矩阵还可以通过函数sym来生成,符号矩阵中的元素是任何不带等号的符号表达式,各符号表达式的长度可以不同。
例2.3.3:
symsx;
A=sym('[cos(x),sin(x),x;-x+1,x^2+x+1,tanx]')
A=
[cos(x),sin(x),x]
[-x+1,x^2+x+1,tanx]
2.符号表达式的运算
(1)符号表达式的四则运算
符号表达式的加、减、乘、除运算与矩阵的数值运算一样,用“+”、“-”、“*”,“/”符号来实现,幂运算可以由幂运算符“^”来实现。
例2.3.4:
f=sym('4*x+5');
g=sym('2*x^2+5*x+6');
a=f+g
a=9*x+11+2*x^2
f^2
ans=(4*x+5)^2
2)符号表达式的提取分子和分母运算
如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分母。
其一般调用格式为:
[n,d]=numden(s)
该函数提取符号表达式s的分子和分母,分别将它们存放在n与d中。
例2.3.5:
f=sym('a*x^2/(b-x)');
[n,d]=numden(f)
n=a*x^2
d=b-x
(3)符号表达式的化简
MATLAB提供了符号表达式的因式分解与展开的函数,实现对符号计算的结果的化简和替换,函数的调用格式为:
factor(s):
对符号表达式s分解因式。
expand(s):
对符号表达式s进行展开。
collect(s):
对符号表达式s合并同类项。
collect(s,v):
对符号表达式s按变量v合并同类项。
horner(s):
将符号表达式转换成嵌套形式。
simplify(s):
应用函数规则对s进行化简。
simple(s):
用几种不同的算术简化规则对符号表达式进行简化,并显示中间过程。
例2.3.6:
符号表达式分解因子
symsx
f=x^12-1;
factor(f)
•例2.3.7合并符号表达式的同类项
•symsxy
•collect(x^2*y+y*x-x^2-2*x)
•ans=
•(y-1)*x^2+(y-2)*x
例2.3.8符号表达式的展开
symsx
f=(x-1)*(x-2)*(x-3)
expand(f)
ans=
x^3-6*x^2+11*x–6
例2.3.9转换符号表达式为嵌套形式
symsxy
f=x^3-6*x^2+11*x-6
horner(f)
ans=
x*(x*(x-6)+11)-6
(4)符号表达式与数值表达式之间的转换
sym:
可以将数值表达式变换成它的符号表达式。
eval:
可以将符号表达式变换成数值表达式。
例2.3.10:
p='1+sqrt
(2)/2';
eval(p)
ans=1.7071
例2.3.11:
p=1.7071;
n=sym(p)
n=17071/10000
(5)符号表达式中变量的确定
在数学表达式中,一般习惯于用排在字母表前面的字母作为变量系数,而排在字母表后面的字母表示变量。
MATLAB中可以用findsym函数帮助用户查找一个符号表达式中系统默认的符号变量。
该函数的调用格式为:
findsym(s,n)
其中s为用户已经定义符号表达式中,n为正整数,表示查询的符号变量的个数,若没有指定n,则返回s中的全部符号变量。
symsatb
g=sin(a*t)+b;
findsym(g,1)
ans
=t
(6)符号表达式的替换.
(1)函数subexpr()将符号表达式中重复出现的字符串用符号变量代替,其具体使用方法如下:
Ø[Y,SIGMA]=subexpr(S,SIGMA):
指定用符号变量SIGMA来代替符号表达式中重复出现的字符串;
Ø[Y,SIGMA]=subexpr(S,‘SIGMA’):
这种形式和上一种形式的不同在于第2个输入参数是字符或字符串
(2)函数subs()用指定符号替换符号表达式中的某一特定符号,其具体使用方法如下:
R=subs(S,Old,New):
用新符号变量New替代原来符号表达式S中的变量Old。
例2.3.11:
g=sym('2*x^2+5*x+6');
r=subs(g,x,x+1)
r=
2*(1+x)^2+11+5*x
1.符号表达式的极限
A.符号极限
limit函数的调用格式为:
(1)limit(f,x,a):
求符号函数f(x)的极限值。
即计算当变量x趋近于常数a时,f(x)函数的极限值。
(2)limit(f,a):
求符号函数f(x)的极限值。
由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,即变量x趋近于a。
(3)limit(f):
求符号函数f(x)的极限值。
符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。
(4)limit(f,x,a,'right')或limit(f,x,a,'left'):
分别求取符号表达式F的右极限和左极限。
例2.3.12求下列极限。
极限1:
symsamx;%定义符号变量
f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/(x+a);%定义符号函数
limit(f,x,a)%求极限
ans=
(1/2*a*exp(sin(a))+1/2*a-exp(tan(a))+1)/a
极限2:
symsxt;
limit((1+2*t/x)^(3*x),x,inf)%Inf在Matlab里表示无穷大
ans=
exp(6*t)
极限3:
symsx;
f=x*(sqrt(x^2+1)-x);
limit(f,x,inf,'left')
ans=
1/2
极限4:
symsx;
f=(sqrt(x)-sqrt
(2)-sqrt(x-2))/sqrt(x*x-4);
limit(f,x,2,'right')
ans=
-1/2
2.符号表达式的微分
diff(differential)函数用于对符号表达式求导数。
该函数的一般调用格式为:
(1)diff(s):
没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶导数。
(2)diff(s,'v'):
以v为自变量,对符号表达式s求一阶导数。
(3)diff(s,n):
按findsym函数指示的默认变量对符号表达式s求n阶导数,n为正整数。
(4)diff(s,'v',n):
以v为自变量,对符号表达式s求n阶导数。
例2.3.13求函数放f=sin(ax)的导数。
具体代码如下:
symsax%定义符号变量
f=sin(a*x);%定义符号表达式
df=diff(f);%对默认变量x求一阶导数
df2=diff(f,2);%对默认变量x求二阶导数
运行结果为:
df=
cos(a*x)*a
df2=
-sin(a*x)*a^2
3.符号表达式的积分
符号积分由函数int来实现。
该函数的一般调用格式为:
(1)int(s):
没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分。
(2)int(s,v):
以v为自变量,对被积函数或符号表达式s求不定积分。
(3)int(s,v,a,b):
求定积分运算。
a,b分别表示定积分的下限和上限。
该函数求被积函数在区间[a,b]上的定积分。
a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。
当函数f关于变量x在闭区间[a,b]上可积时,函数返回一个定积分结果。
当a,b中有一个是inf时,函数返回一个广义积分。
当a,b中有一个符号表达式时,函数返回一个符号函数。
例2.3.14计算函数的积分:
symsx
r1=int(-2*x/(1+x^2)^2)%对符号表达式进行不定积分
r2=int(-2*x/(1+x^2)^2,1,2)%对符号表达式进行定积分
运行结果
r1=
1/(x^2+1)
r2