MATLAB应用 MATLAB数据及运算.docx
《MATLAB应用 MATLAB数据及运算.docx》由会员分享,可在线阅读,更多相关《MATLAB应用 MATLAB数据及运算.docx(45页珍藏版)》请在冰点文库上搜索。
MATLAB应用MATLAB数据及运算
第2章MATLAB数据及运算
2.1变量及其操作
一、变量命名规则
1.变量名、函数名对字母大小写是敏感的
myfile与MyFile表示不同的变量
sin是MATLAB定义的正弦函数名,但SIN、Sin都不是
2.变量名的第一个字符必须是英文字母
3.变量名最多可包含63个字符(英文、数字和下划线)
4.变量名中不能包含空格、标点
my_exemple12是合法的变量名,12exemple、_exemple12、myexemple12、my.exemple12是非法变量名
二、MATLAB默认的预定义变量
每当MATLAB启动时,不经定义和赋值就会产生一些变量,称为MATLAB默认的预定义变量
这些变量都可以重新赋值。
但最好不要对这些变量名重新赋值
预定义变量
含义
预定义变量
含义
ans
计算结果的缺省变量名
nargin
函数输入参数个数
eps
机器零阈值(机器的浮点运算误差限)
narout
函数输出参数个数
Inf或inf
无穷大,如1/0
realmax
最大正浮点数
i或j
虚数单位
realmin
最小正浮点数
pi
圆周率π
lasterr
存放最新的错误信息
NaN或nan
不是一个数(NotaNumber),如0/0,∞/∞
lastwarn
存放最新的警告信息
例1用键盘在MATLAB指令窗中输入以下内容
eps
eps——机器的浮点运算误差限。
PC机上eps的默认值为2.2204×10-16,若某个量的绝对值小于eps,则可以认为这个量为0。
例2用键盘在MATLAB指令窗中输入以下内容
1/0,1.e1000,log(0)
Inf——无穷大量+∞的MATLAB表示,也可以写成inf。
同样地,-∞可以表示为-Inf。
在MATLAB程序执行时,即使遇到了以0为除数的运算,也不会终止程序的运行,而只给出一个“除0”警告,并将结果赋成Inf,这样的定义方式符合IEEE的标准。
从数值运算编程角度看,这样的实现形式明显优于C语言。
例3用键盘在MATLAB指令窗中输入以下内容
0/0,inf/inf,inf*0
注意
在MATLAB中,即使遇到以0为除数的运算,程序也不会终止运行。
这时只给出一个警告,并将结果赋给inf或NaN
NaN——不定式(notanumber),通常由0/0运算、Inf/Inf及其他可能的运算得出。
NaN是一个很奇特的量,如NaN与Inf的乘积仍为NaN。
例4用键盘在MATLAB指令窗中输入以下内容
n=realmax,n=1.7977e+309
例5用键盘在MATLAB指令窗中输入以下内容
m=realmin,m=2.2251e-309
i和j——若i或j量不被改写,则它们表示纯虚数量j。
但在MATLAB程序编写过程中经常事先改写这两个变量的值,比如在循环过程中常用这两个变量来表示循环变量。
如果想恢复该变量,则可以用语句i=sqrt(-1)设置,即对-1求平方根。
三、MATLAB运算符和表达式
运算符
操作
数学表达式
MATLAB运算符
MATLAB表达式
加
a+b
+
a+b
减
a-b
-
a-b
乘
ab
*
a*b
除
ab
/或\
a/b或b\a
幂
ab
^
a^b
注意
所有运算都定义在复数域上
例1用键盘在MATLAB指令窗中输入以下内容
u=sqrt(-4)
注意
对于方根,运算只给出处于第1象限的解
例2用左除(\)和右除(/)计算表达式
的值
用键盘在MATLAB指令窗中输入以下内容
(5+cos(47*pi/180))/(1+sqrt(7)-2*i)、(1+sqrt(7)-2*i)\(5+cos(180\47*pi))
注意
对于标量,左除(\)或右除(/)所得到的结果是一样的
对于矩阵,左除(\)和右除(/)所得到的结果是不一样的
AX=B→A-1AX=A-1B→X=A-1B=A\B,
XA=B→XAA-1=BA-1→X=BA-1=B/A
表达式
表达式由变量名、运算符、函数名组成
表达式按优先级和自左向右的顺序运算
优先级从高向低的排序是:
指数运算、乘除运算、加减运算
括号可以改变运算的顺序
赋值符“=”和运算符的两侧允许有空格
复数和复数矩阵
MATLAB把复数看成一个整体来处理(不像其它程序,把实部和虚部分开处理)
虚数单位用预定义变量i或j表示
复数z=a+bi=reiθ直角坐标表示与极坐标表示之间的转换
real(z):
给出复数z的实部a=rcosθ
imag(z):
给出复数z的虚部b=rsinθ
abs(z):
给出复数z的模r=sqrt(a2+b2)
angle(z):
以弧度为单位给出复数z的相角θ=arctg(b/a)
例1写出复数
表达式,计算
用键盘在MATLAB指令窗中输入以下内容
z1=3+4i%书写格式1
z2=1+2*i%书写格式2
z3=2*exp(i*pi/6)%书写格式2
z=z1*z2/z3
注意
%是注释号,在它后面及回车之前的输入部分是非执行的注释
在格式1中,4i表示一个完整的虚数,4和i之间不能有空格
在格式2中,i被看作一个预定义变量参与运算
格式1的运算速度要比格式2快,宜于在循环中采用
例2复数矩阵的生成及运算
用键盘在MATLAB指令窗中输入以下内容
A=[1,3;2,4]-[5,8;6,9]i
A=[1,3;2,4]-[5,8;6,9]*i
B=[1+5i,2+6i;3+8*i,4+9*i]
C=A*B
注意
格式1仅用于复数标量的表达,不能表达复数矩阵
例3求上例复数矩阵C的实部、虚部、模和相角
用键盘在MATLAB指令窗中输入以下内容
C_real=real(C)
C_imag=imag(C)
C_magnitude=abs(C)
C_phase=angle(C)*180/pi%以度为单位计算相角
四、MATLAB的数据结构
数据型、符号型、字符串型、多维数组、单元数组、类
数据型:
可以单独输入,也可以赋值给数值变量
符号型:
可用于公式推导,得到数学问题解析解
字符串型:
C语言中字符串是用双引号括起来的,而MATLAB字符串是用单引号括起来的
1.数据型:
双精度浮点数,占8字节(64位),指数11位,尾数53位,符号1位。
在一般情况下,数据的存储和计算都是以双精度进行的。
但是,可以用format命令改变数据在屏幕上的显示格式
指令
含义
format
formatshort
通常保证小数点后4位有效数字;对于大于1000的实数,用5位有效数字的科学记数形式显示
formatlong
15位数字表示
formatshorte
5位科学记数表示
formatlonge
15位科学记数表示
formatshortg
从formatshort和formatshorte中自动选择最佳记数方式(缺省设置)
formatlongg
从formatlong和formatlonge中自动选择最佳记数方式
formatrat
近似有理数表示
formathex
16进制表示
formatbank
(金融)元、角、分表示
format+
正数、负数和零分别用+、-和空格表示
例1:
用format和formatshort格式显示π的数值
输入:
format(或formatshort)回车
输入:
pi回车
例2:
用format和formatshort格式显示1000π的数值
输入:
format(或formatshort)回车
输入:
1000*pi回车
例3:
分别用formatlong、formatshorte、formatlonge、formatshortg、formatlongg、formatrat和formatbank格式显示π的数值
例4:
用format+格式分别显示π、π-2π和π-π的数值
五、MATLAB常用函数
三角函数
函数名称
数学表达
MATLAB表达
正弦
sin
sin
反正弦
arcsin
asin
余弦
cos
cos
反余弦
arccos
acos
正切
tg
tan
反正切
arctg
atan
余切
ctg
cot
反余切
arcctg
acot
正割
sec
sec
反正割
arcsec
asec
余割
csc
csc
反余割
arccsc
acsc
双曲函数
函数名称
数学表达
MATLAB表达
双曲正弦
sh
sinh
反双曲正弦
Arsh
asinh
双曲余弦
ch
cosh
反双曲余弦
Arch
acosh
双曲正切
th
tan
反双曲正切
Arth
atan
双曲余切
cth
coth
反双曲余切
Arcth
acoth
双曲正割
sech
sech
反双曲正割
Arsech
asech
双曲余割
csch
csch
反双曲余割
Arcsch
acsch
指数函数
函数名称
数学表达
MATLAB表达
自然指数函数
ex
exp(x)
自然对数函数
ln
log
常用对数函数
log10
log10
以2为底的对数函数
log2
log2
2的幂函数
2x
pow2(x)
平方根函数
x1/2
sqrt(x)
复数函数
MATLAB表达
含义
MATLAB表达
含义
MATLAB表达
含义
abs
模,或绝对值
conj
复数共轭
real
复数实部
angle
相角(弧度)
imag
复数虚部
例:
求-π的绝对值
输入:
abs(-pi)
圆整函数和求余函数
函数名称
MATLAB表达
含义
例
向+∞圆整函数(天花板函数)
ceil
不小于自变量的最小整数
ceil(π)=?
ceil(-π)=?
向0圆整函数
fix
向0方向取整数
fix(π)=?
fix(-π)=?
向-∞圆整函数(地板函数)
floor
不大于自变量的最大整数
floor(π)=?
floor(-π)=?
模除求余函数
mod(x,y)
y不等于0时,mod(x,y)=x-y*floor(x/y);
y=0时,mod(x,y)=x
求余数函数
rem(x,y)
y不等于0时,rem(x,y)=x-y*fix(x/y);
y=0时,rem(x,y)=NaN
向最近整数圆整函数
round
四舍五入到最邻近的整数
round(π)=?
round(-π)=?
round(6.5)=?
符号函数
sign
x<0,sign(x)=-1;x=0,sign(x)=0;x>0,sign(x)=1
注意
1.若a为正整数,ceil,fix,floor,round函数之间的区别如图
2.对于模除求余函数mod(x,y)和求余数函数rem(x,y),
y=rem(13,3)=1
y=mod(13,3)=1
y=rem(-13,-3)=-1
y=mod(-13,-3)=-1
y=rem(-13,3)=-1
y=mod(-13,3)=2
y=rem(13,-3)=1
y=mod(13,-3)=-2
rem(x,y)的符号与x相同,mod(x,y)的符号与y相同
当x、y的符号相同时,rem(x,y)=mod(x,y)
例1:
当x=5,y=3,求rem(x,y)和mod(x,y)
1.先输入:
x-y*fix(x/y),再输入rem(x,y),比较结果
2.先输入:
x-y*floor(x/y),再输入mod(x,y),比较结果
例2:
当x=-5,y=3,求rem(x,y)和mod(x,y)
rem
PurposeRemainderafterdivision
SyntaxR=rem(X,Y)
如果Y~=0,R=rem(X,Y)给出X-n.*Y,这里n=fix(X./Y).
如果Y不是一个整数,而且商X./Y是在一个整数的四舍五入的误差内,那么n就是那个整数。
根据惯例,rem(X,0)是NaN。
输入XandY必须是相同维数的实矩阵,或实标量。
只要X和Y同号,rem(X,Y)给出和mod(X,Y)一样的结果。
但是,对于正的X和Y,rem(-X,Y)=mod(-X,Y)-Y
Rem函数给出一个在0和sign(X)*abs(Y)之间的结果。
如果Y为0,rem给出NaN。
mod
PurposeModulusafterdivision
SyntaxM=mod(X,Y)
Definitionmod(x,y)isxmody.
如果Y~=0,M=mod(X,Y)给出X-n.*Y,这里n=floor(X./Y).
如果Y不是一个整数,而且商X./Y是在一个整数的四舍五入的误差内,那么n就是那个整数。
根据惯例,mod(X,0)是X.。
输入XandY必须是相同维数的实矩阵,或实标量。
只要X和Y同号,,函数mod(X,Y)给出和rem(X,Y)一样的结果。
但是,对于正的X和Y,mod(-X,Y)=rem(-X,Y)+Y
mod函数对于同余关系是有用的:
当且仅当mod(x,m)==mod(y,m),X和y是同余的(congruent被一个模数所分成的差额)(modm).
例3:
当x1=-pi,x2=0,x3=pi时,求sign(x1),sign(x2),sign(x3)
2.2数值数组及其运算
由MATLAB软件构成的“矩阵”在外观形状和数据结构上与数学意义上的矩阵是及其相似的
但MATLAB中的矩阵在操作上具有二重性
既可以按数学中的矩阵运算规则操作
又可以按照MATLAB软件自己定义的规则操作
具有这样特性的“矩阵”—数组
按MATLAB软件自己定义的规则进行的运算—数组运算
数组可分为1维、2维、3维,甚至更多维数
一、一维数组(矩阵)的创建
1.逐个元素输入法
例:
输入
x=[2pi/2sqrt(3)3+5i]
2.冒号生成法
通过设定步长生成一维数组
x=a:
inc:
b
a是数组的第1个元素。
inc是采样点之间的间隔,即步长。
如果(b-a)是步长inc的整数倍,则生成的数组的最后一个元素是b
如果(b-a)不是步长inc的整数倍,则生成的数组的最后一个元素小于b
a、inc、b之间必须用冒号“:
”分隔
例1:
取步长为0.2,在[0,π]区间生成一个1维数组
输入:
x1=0:
0.2:
pi%注意最后一个生成元素是不是π
输入:
x1(5)%显示数组x1的第5个元素
inc可以省略。
省略时,inc默认为1
例2:
取步长为1,在[0,π]区间生成一个1维数组
输入:
x2=0:
pi
步长inc可以是正数,也可以是负数
当步长inc取正数时,要保证a
当步长inc取负数时,要保证a>b
例3:
取步长为1,在[0,π]区间逆向生成一个1维数组
输入:
x3=pi:
-1:
0%注意比较本例与例1中数组的第1个元素
输入:
x3=0:
-1:
pi%注意结果
例4:
取步长为0.1,在[0,2π]区间画出正弦曲线
输入:
x4=0:
0.1:
2*pi;%在[0,2π]区间生成一个1维数组
输入:
y=sin(x4);%建立正弦函数
输入:
plot(x4,y)%画出y-x曲线
3.定数线性采样法
在给定的总点数下,均匀采样生成一维数组
x=linspace(a,b,n)
a和b分别是数组的第1个和最后一个元素,n是采样总点数(包括a和b)
步长=(b-a)/(n-1)
相当于x=a:
(b-a)/(n-1):
b
例3:
在[0,π]区间生成具有16个均匀采样点的一维数组
输入:
x4=linspace(0,pi,16)%注意最后一个元素是不是π
4.定数对数采样法
在给定的总点数下,通过常用对数采样生成一维数组
x=logspace(a,b,n)
数组的第1个元素是10a,最后一个元素是10b。
n是采样总点数(包括a和b)。
步长=10(b-a)/(n-1)
例:
输入:
logspace(1,6,6)
二、二维数组(矩阵)
特点:
具有行和列
例:
A=[1:
3;4:
6;7:
9]%3×3数组(矩阵)
二维数组(矩阵)元素的标识
“全下标”标识
“单下标”标识
例:
产生一个5阶的魔方数组,并显示全下标第2行第4列的元素和单下标第14个元素
输入:
D=magic(5)%magic为MATLAB提供的魔方数组(矩阵)函数
输入:
D(2,4),D(14)
三、数组运算和矩阵运算
加减运算
设两个行数和列数相同矩阵A=(aij)mn和B=(bij)mn。
它们相加和相减,分别得到新的矩阵A+B和A-B。
它们的行数和列数与原来的矩阵相同,
新的矩阵的元素等于原来矩阵的元素的相加或相减
A+B=(aijn+bij)mn,A-B=(aij-bij)mn。
MATLAB软件构成的数组(“矩阵”)可以实现矩阵的加减运算
例设
,
,求
,
输入:
A=[1,-2;0,1;-1,3],B=[0,2;-1,1;2,5]
输入:
C=A+B,D=A-B
注意:
对于数学意义上的矩阵来说,只有两个矩阵的行数和列数相同时,才能进行加减运算
对于非一行一列的矩阵,不能与标量相加减
但是,对于MATLAB软件来说,允许数组(“矩阵”)与标量相加减,这时就是数组加减运算。
数组与标量相加或相减,相当于数组中的每个元素与标量相加或相减
设s为一个标量,A=(aij)mn为一个非一行一列的矩阵,那么
s+A生成与A同行同列的数组
而且新数组的每一元素等于原来元素与标量之和
s+A=(s+aij)mn
s-A或A-s也生成与A同行同列的数组
s-A=(s-aij)mn,A-s=(aij-s)mn
例s=3,求E=s+A,F=s-A,G=A-s
乘法运算
在数学上,两个矩阵相乘,第一个矩阵的列数必须等于第二个矩阵的行数,
设A=(aij)mt,B=(bij)tn,它们相乘生成新矩阵C=AB
新矩阵的行数等于第一个矩阵的行数,新矩阵的列数等于第二个矩阵的列行数,C=(cij)mn。
新矩阵的元素按下面规则构成:
在MATLAB中,可以实现这种运算,C=A*B。
例设
,
,求
输入:
A1=[3,-2;1,0;-1,-3],B1=[1,2,0,4;5,-2,-1,0]
输入:
C1=A1*B1
此外,在MATLAB中,还可以实现下面的乘积运算,这在数学上没有定义
设A=(aij)mn,B=(bij)mn,它们的行数和列数相同,
那么A.*B生成一个新的数组,其行数和列数与原来数组相同,新数组的元素等于原来数组相应元素的乘积,称为数组乘积运算。
A.*B=(aijbij)mn
例设
,
,求
,
输入:
A=[1,-2;0,1;-1,3],B=[0,2;-1,1;2,5]
输入:
C=A.*B
在数学上,一个标量与矩阵的乘积对于矩阵的每个元素与这个标量的乘积
sA=(saij)mn
在MATLAB中,可以实现这种运算,C=s*A。
此外,s.*A也给出同样的结果
例求C=s*A,D=s.*A
除法运算
对于矩阵,分左除(\)和右除(/)两种,而且所得到的结果是不一样的
AX=B→A-1AX=A-1B→X=A-1B=A\B,
XA=B→XAA-1=BA-1→X=BA-1=B/A
此外,在MATLAB中,还可以实现一种数组除法运算
设A=(aij)mn,B=(bij)mn,它们的行数和列数相同
B./A或A.\B给出与原数组行和列相同的数组
而且它们的结果都是一样的,等于两个数组相应元素的分别相除
B./A(A.\B)=(bij/aij)mn
例设
,
,求
,
,
在MATLAB中,还可以实现一种标量除以数组的运算
s./A(A.\s)=(s/aij)mn
转置
设A=(aij)mn
在数学上,
表示矩阵的共轭转置
在MATLAB中,矩阵的共轭转置仍然用A’表示
此外,在MATLAB中,还可以实现下面的数组转置
A.’=(aji)nm,为非共轭转置
它与矩阵的共轭转置的关系为:
A.’=conj(A’)
例设z=[1+2i3+4i],求z’及z.’
四、数组的关系和逻辑运算
关系(比较)运算
关系运算符
指令
含义
<
小于
<=
小于等于
>
大于
>=
大于等于
==
等于
~=
不等于
注意
1.等式成立时,表示逻辑真,输出为1
等式不成立时,表示逻辑假,输出为0
2.当两个非标量数组进行比较时
两个数组的维数必须相同
比较是在两个数组的对应元素之间进行
比较的结果是与原来维数相同的数组
3.标量可以与非标量数组进行比较
比较是在标量和数组的每一个元素之间进行
比较的结果是与非标量数组维数相同的数组
例设A=1:
9,B=10-A,求r0=(A<4),r1=(A==B),r2=(A~=B)
逻辑运算
指令
函数
含义
A&B
and(A,B)
与
A|B
or(A,B)
或
~A
not(A)
非
注意
1.等式成立时,表示逻辑真,输出为1
等式不成立时,表示逻辑假,输出为0
2.当两个非标量数组进行逻辑运算时
两个数组的维数必须相同
逻辑运算是在两个数组的对应元素之间进行
逻辑运算的结果是与原来维数相同的数组
3.标量可以与非标量数组进行比较
逻辑运算是在标量和数组的每一个元素之间进行
逻辑运算的结果是与非标量数组维数相同的数组
例1设A=[0,1,1,0,1],B=[1,1,0,0,1],求A&B,A|B,~A
注意
对数组或标量进行逻辑运算时,非零数当做逻辑1处理
例2将上例的A分别改为A=[0,3.5,1,0,1]、A=[0,0.5,1,0,1],求A&B,A|B,~A
注意
逻辑运算的优先级从高到低排序是:
~、&、|
例3设A=[0,1,1,0,1],B=[1,1,0,0,1],C=[0,1,0,1,0],求~A|B,A|~B和A&B|C,A|B&C
注意
在关系运算和逻辑运算同时存在时,逻辑非优先,关系运算次之,其次是逻辑与,逻辑或排在最后
例3设A=-3:
3,求L1=~(A>0),L2=~A>0,L3=~A,L4=A>-2&A<1