第二章 MATLAB 的基本数学功能.docx
《第二章 MATLAB 的基本数学功能.docx》由会员分享,可在线阅读,更多相关《第二章 MATLAB 的基本数学功能.docx(25页珍藏版)》请在冰豆网上搜索。
第二章MATLAB的基本数学功能
第二章MATLAB的基本数学功能
Chaptertwo:
fundamentalMathfunctionofMATLAB
.
一.算术运算(ArithmeticComputation)
MATLAB提供的两种运算方式:
(1)普通的数组运算方式:
(Arraycomputation)在数组中对应元素之间进行运算;
(2)矩阵运算方式:
(matrixcomputations)将标量当作1×1阶矩阵,一维数组当作一行或一列的矢量(即1×n阶或n×1阶的矩阵),二维数组当作m×n阶矩阵,然后按照矩阵的运算规则进行运算。
*二者输入形式和书写方法相同,差别仅在于使用不同的运算符号,执行不同的计算过程,数组的运算是对应元素之间的运算,而矩阵运算是根据矩阵的运算规则进行。
1.加、减运算(additionandsubtraction)
矩阵与数组的加减运算没有区别,运算符均为“+”、“-”,运算方法相同,但两个运算对象必须是同阶矩阵,否则将给出错误信息。
如下例:
a=[123;456;789];
b=[135];
a+b
运行结果给出错误信息:
?
?
?
Errorusing==>±
Matrixdimensionsmustagree.
但标量,即1×1阶矩阵可以和其他不同维数的矩阵进行加减运算,如:
a+5
ans=
678
91011
121214
2.乘除运算(Multiplicationanddivision)
矩阵在进行乘除运算时与通常的运算符号相同(*,/,\),而数组在进行乘除运算时要在通常的符号前加“.”,如:
“.*”和“./”(或“.\”)
(1)矩阵乘法:
(Matrixmultiplication)
条件:
两矩阵中前一矩阵的列数与后一矩阵的行数相同,如
x=[12;34];
y=[56;78];
x*y
ans=
1922
4350
也可以实现两个相同维数矢量的内积(点乘,dotproduct),如:
a=[-102]‘%(输入行矢量转置为列矢量,等同于a=[-1;0;2])
b=[-2-11]‘
a‘*b
b‘*a
a=-1
0
2
b=
-2
-1
1
ans=4
ans=4
MATLAB计算点乘(dotproduct)和叉乘(crossproduct)有专门的命令,用dot(a,b)计算矢量a和b的点乘,用cross(a,b)计算叉乘。
矩阵可以和标量相乘,标量可以是乘数也可以是被乘数,都是将矩阵中的每一个元素与标量相乘。
如:
x=[-102];
pi*x
ans=
-3.141606.2832
(2)数组的乘法(Arraymultiplication)
条件:
a,b两数组必须有相同的维数,则a.*b表示a和b中对应元素之间相乘,即z(i,j)=x(i,j)*y(i,j).如:
x=[123];
y=[456];
z=x.*y
z=
41018
(3)矩阵除法(Matrixdivision)
条件:
a矩阵是非奇异方阵,则a\b(左除)和b/a(右除)都可以实现。
a\b等效于a矩阵的逆左乘b矩阵,即a\b=inv(a)*b,b/a等效于a矩阵的逆右乘b矩阵,即b/a=b*inv(a).
通常x=a\b是a*x=b的解,x=b/a是x*a=b的解。
一般a\b≠b/a,
右除与左除的关系为:
(b/a)’=(a’\b’),如;
a=rand(3)
b=rand(3)
c=a\b
d=b/a
w=(b/a)'
t=a'\b'
a=
0.60380.01530.9318
0.27220.74680.4660
0.19880.44510.4186
b=
0.84620.67210.6813
0.52520.83810.3795
0.20260.01960.8318
c=
4.342010.5808-9.1715
0.31281.1052-0.3169
-1.9105-6.15296.6792
d=
1.48645.5604-7.8702
0.71624.5085-5.7059
-0.0482-3.62736.1317
w=
1.48640.7162-0.0482
5.56044.5085-3.6273
-7.8702-5.70596.1317
t=
1.48640.7162-0.0482
5.56044.5085-3.6273
-7.8702-5.70596.1317
(4)数组的除法(Arraydivision)
条件:
a与b必须具有相同的维数。
符号“.\”或“./”,运算结果相同,a.\b表示b中的元素分别除以a中的对应元素,即z(i,j)=x(i,j)\y(i,j)=y(i,j)/x(i,j)。
如:
x=[123];
y=[456];
z=x.\y
z=
4.00002.50002.0000
3.乘方(Power)
(1)矩阵的乘方(Matrixpower)
条件:
在a^p中a,p不可都是矩阵,必须一个是标量,一个是方阵。
a^p意思是a的p次方。
a,p的类别不同,乘方的算法也有差别,有三种情况:
1、a是一个方阵,p是一个标量,且p是大于1的整数,则a的p次幂即为a自乘p次。
2、如p是不为整数的标量时,a^p=V*D.^p/V其中D为矩阵a的特征值矩阵,V为对应的特征矢量阵,可用eig函数求出D和V,[V,D]=eig(a).
3、当p是方阵而a是标量时,a^p=V*a.^D/V,其中[V,D]=eig(p).
(2)数组的乘方(Arraypower)符号“.^”
条件:
在底与指数均为数组的情况下,要求他们的维数必须相同。
*当底和指数为同样大小的数组时,x.^y为对应的元素做乘方运算。
如:
x=[123];
y=[456];
z=x.^y
z=
132729
这时执行的实际运算为:
z=x.^y=[123].^[456]=[1^42^53^6]=[132729]
*若指数是标量,执行的运算是底的每一个元素执相同幂次的运算。
既z(i,j)=x(i,j)^2
如:
x=[123];
z=x.^2
得到结果为:
z=
149
这时执行的运算为:
z=[123].^2=[1^22^23^2]=[149]
*若底是一个标量,指数是一个数组,执行的运算是用指数数组的每个元素对底进行乘方运算,即:
z(i,j)=2^x(i,j),形成新的数组。
如:
x=[123];
z=2.^x
z=
248
这时执行的运算为:
z=2.^x=2.^[123]=[2^12^22^3]
4.转置:
(Transpose)行列转置,符号“‘”
如;计算矩阵a的转置:
a=[123;456;789];
b=a’
b=
147
258
369
也可直接对矢量或矩阵进行转置运算;
[-102]’
ans=
-1
0
2
如z是复数矩阵,则z’是它的复数共轭.转置(Complexconjugatetranspose),若要进行非共轭转置运算,可使用z.’或conj(z’)求得。
例;
z=[1+2i3+4i];
z’
ans=
1.0000-2.0000i
3.0000-4.0000i
z.’
ans=
1.0000+2.0000i
3.0000+4.0000i
conj(z’)
ans=
1.0000+2.0000i
3.0000+4.0000i
CONJComplexconjugate.
CONJ(X)isthecomplexconjugateofX.
ForacomplexX,CONJ(X)=REAL(X)-i*IMAG(X).
二.数学函数和矩阵函数(Mathematicfunctionandmatrixfunction)
MATLAB提供的数学函数主要有基本函数和特殊函数两部分。
1.数学函数(Mathfunction)
(a).基本函数:
(Elementaryfunction)三角函数(TrigonometricFunction)、指数函数(Exponentfunction)、复数函数(ComplexFunction)、取整和求余函数(roundandremainfunction)。
(常用基本函数见表2-1,要求课后阅读、记忆)
例:
a=[123;456]
b=fix(pi*a)%朝零方向取整
c=cos(pi*b)
pi*b
a=
123
456
b=
369
121518
c=
-11-1
1-11
说明:
(1)三角函数按弧度计算
(2)除后取模mod(x,y)与y符号相同,除后取余数rem(x,y)与x符号相同,当x与y符号相同时,mod(x,y)等于rem(x,y).
例:
x=[112531];
y=[456];
M=mod(x,y)
R=rem(x,y)
M=
301
R=
301
x=[-1125-31];
y=[456];
M=mod(x,y)
R=rem(x,y)
M=
105
R=
-30-1
MODModulusafterdivision.
MOD(x,y)isx-n.*ywheren=floor(x./y)ify~=0.Ifyisnotan
integerandthequotientx./yiswithinroundofferrorofaninteger,thennisthatinteger.Byconvention,MOD(x,0)isx.Theinputxandymustberealarraysofthesamesize,orrealscalars.
Thestatement"xandyarecongruentmodm"meansmod(x,m)==mod(y,m).
REMRemainderafterdivision.
REM(x,y)isx-n.*ywheren=fix(x./y)ify~=0.Ifyisnotanintegerandthequotientx./yiswithinroundofferrorofaninteger,thennisthatinteger.Byconvention,REM(x,0)isNaN.Theinputxandymustberealarraysofthesamesize,orrealscalars.
REM(x,y)hasthesamesignasxwhileMOD(x,y)hasthesamesignasy.
REM(x,y)andMOD(x,y)areequalifxandyhavethesamesign,but
differbyyifxandyhavedifferentsigns.
(b)特殊函数:
(Specialfunction)特殊数学函数(specialmathematicsfunction)、数理函数(Mathematicanalysisfunction)、坐标变换(Coordinatestransformationfunction)(表2-2)
2.矩阵函数:
(Matrixfunction)矩阵分析(MatrixAnalysis)、线性方程组(linearsystemofequations)、特征值和特征矢量(Eigenvaluesandeigenvectors.)、矩阵函数(Matrixfunction)、因式分解(Factoranalysis)等矩阵函数(表2-3)。
有些矩阵函数与数学函数名称相似,区别在于矩阵函数名称后有m字符。
例:
a=[14;916];
r1=sqrt(a)
r2=sqrtm(a)
r1=
12
34
r2=
0.4662+0.9359i0.8860-0.2189i
1.9935-0.4924i3.7888+0.1152i
SQRTSquareroot.
SQRT(X)isthesquarerootoftheelementsofX.Complex
resultsareproducedifXisnotpositive.
SQRTMMatrixsquareroot.
X=SQRTM(A)istheprincipalsquarerootofthematrixA,i.e.X*X=A.
Xistheuniquesquarerootforwhicheveryeigenvaluehasnonnegativerealpart.IfAhasanyeigenvalueswithnegativerealpartsthenacomplexresultisproduced.IfAissingularthenAmaynothaveasquareroot.Awarningisprintedifexactsingularityisdetected.
三.关系运算与逻辑运算(RelationalcalculusandLogicaloperation)
1.关系运算:
(Relationalcalculus)
条件:
对于两个矩阵的关系运算,两边的矩阵必须具有同样尺寸。
关系运算符:
(Relationaloperator)
﹤小于(lessthan)、﹤=小于等于(lessthanorequalto)、﹥大于(greaterthan)、﹥=大于等于(greaterthanorequalto)、==等于(equalto)、~=不等于(notequalto,NE)。
例:
标量
2+2~=4
ans=0
矩阵:
a=[0-12];
b=[-312];
a
ans=
010
a<=b
ans=
011
a>b
ans=
100
a>=b
ans=
101
a==b
ans=
001
a~=b
ans=
110
在程序的流程控制中,关系运算符通常if,while,for,switch等控制命令使用。
2.逻辑运算(Logicaloperation)
逻辑运算符:
(Logicaloperator)
&与(AND),|或(OR),~非(NOT)
条件:
对于两个矩阵的逻辑运算,两边的矩阵必须具有同样尺寸。
“~”是一元算符,当a为零时,返回信息为1,为非零时,返回信息为0。
#p|(~p)返回值为1,#p&(~p)返回值为0
例:
a=[123;456];
b=[-100;00.50];
a&b
ans=
100
010
a|b
ans=
111
111
~b
ans=
011
101
3.关系函数和逻辑函数(RelationalfunctionandLogicalfunction)(表2—6)
例:
a=magic(6)%建立6阶魔术矩阵,元素由1~n2组成
p=(rem(a,3)==0)%对a求余,有余数置0,无余数置1
format+;p%以format+格式给出p的压缩格式
format%将显示格式转换为缺省的短格式
y=a;
i=find(y>10);%找出y矩阵中大于10的元素的位置i
y(i)=10*ones
(1)%用10代替y中所有大于10的元素
a=
3516261924
3327212325
3192222720
82833171015
30534121416
43629131811
p=
001001
100100
010010
001001
100100
010010
p=
++
++
++
++
++
++
y=
1016101010
3107101010
1092101010
81010101010
10510101010
41010101010
四.基本字符处理功能(ElementarySymbolictreatmentfunction)
1.字符数组的建立(SettingofSymbolicarray)
(1)字符串(stringofcharacter)就是ASCII值得数值数组(Characterarry),MATLAB中每个字符都有相应的ASCII码数值进行存储,输入时所有字符串都用单引号界定后输入或赋值,yesinput除外。
例如:
s1=’Hello’
s1=
Hello
字符串中空格也是字符,上例为1×5阶矩阵:
size(s1)
ans=
15(一行五列)
(2)利用class函数和ischar函数可以判别变量是否为字符串,如:
class(s1)
ans=
char
ischar(s1)
ans=
1
(3)可以用方括号(squarebracket)将字符串合并成更大的串,例如:
s=[s1,’World’]
得结果:
s=
HelloWorld
(4)可以从一个字符串中提取子串(substring),例如:
ss=s(7:
11)
ss=
World
(5)可以将字符串中的字符倒序排列。
例如:
a=’abcd’
a=
abcd
b=a(end:
-1:
1)
b=
dcba
(6)建立二维数组(twodimensionalarray)一样可以直接输入,只须加方括号,并用分号分行,每行字数必须一致,不足处可用空格补充。
例如:
str=[‘name’;’type’;’size’]
str=
name
type
size
还可用str2mat函数把字符串转化为字符数组,这种方法允许用不同长度的字符串。
例如:
s2=str2mat(‘abc’,’abcde’)
s2=
abc
abcde
>>
2.字符数组的运算(Operationofsymbolicarray)
(1)字符以ASCⅡ码存储,用double命令可以查出字符的ASCⅡ码值。
如运行double(s1)得s1码值为:
ans=
72101108108111
(2)用char命令可以实现ASCⅡ码向字符的转换.如:
执行char([65666768]得:
ans=
ABCD
(3)ischar函数用来检测变量是否为字符变量,返回1为肯定,返回0为否定。
(4).strcmp函数具有比较字符串的功能,如执行strcmp(str1,str2),返回1表示str1=str2,返回0表示str1≠str2.
(5).用eval函数将字符串转换为宏功能。
eval(t)就是运行包含在t中的内容。
例如:
用eval函数产生5阶的Hilbert矩阵。
n=5;
t=’1/(i+j-1)’;%字符串t
a=zeros(n);
fori=1:
n
forj=1:
n
a(i,j)=eval(t);%将字符串转变为宏功能,运行包含在t
%中的内容
end
end
a
a=
1.00000.50000.33330.25000.2000
0.50000.33330.25000.20000.1667
0.33330.25000.20000.16670.1429
0.25000.20000.16670.14290.1250
0.20000.16670.14290.12500.1111
常用字符串函数(表2—7)
五.建立特殊数组(矩阵)(settingaspecialarray,matrix)
1.标准数组(或矩阵)函数:
(Standardarrayfunction)
MATLAB提供了一些可以用于辅助编程或运算的一些基本数组或矩阵,主要有:
全0数组:
zeros,全1数组:
ones,单位矩阵:
eye,均匀分布的随机数组:
rand,正态分布的随机数组:
randn,对角矩阵:
diag,魔术矩阵magic,pascal矩阵:
pascal.
2.由小数组建立大数组:
(generatingabigarraybyusingsmallarray)
大数组可由方括号中的小数组建立,如有矩阵
a=[123;456;789]%可利用它建立一个大矩阵:
c=[aeye(size(a));ones(size(a))a^2]
a=
123
456
789
c=
123100
456010
789001
111303642
111668196
111102126150
也可以写成:
d=[azeros(3,2);ones(2,3)eye(2,2)]
d=
12300
45600
78900
11110
11101
注意:
在同一行的各个小数组要有相同的行数,在同一列上的小数组要有相同的列数。
3.冒号“:
”的使用(Theusingofcolon)
(1)产生一维数组(Initializeaonedimensionalarray),