第一章 MATLAB简介
MATLAB的原意为MATrix LABoratory,即矩阵实验室,是由在数值线性代数领域颇有影响的Cleve Moler博士首创的。后来由Moler博士等一批数学家和软件专家组建了MathWorks软件公司,专门从事MATLAB的扩展与改进。
MATLAB不仅具有强大的数值计算能力,而且具有数据图示功能和符号运算功能。特别是大量的工具箱,扩展了应用领域,是高校学生、教师、科研人员和工程计算人员的最好选择,是数学建模必不可少的工具。
1.1 MATLAB的主要特点
1. 功能强大
MATLAB以复数矩阵作为基本编程单元,可以方便地处理诸如矩阵变换及运算、多项式运算、微积分运算、线性与非线性方程求解、常微分方程求解、偏微分方程求解、插值与拟合、特征值问题、统计及优化问题。
2. 语言简单
MATLAB语句书写简单,表达式的书写如同在稿纸中演算一样,允许用户以数学形式的语言编写程序,控制语句同C语言相近,并提供了强大的帮助功能。
3. 扩充能力强
MATLAB本身就像一个解释系统,用户可以方便地看到函数的源程序,也可以方便地开发自己的程序。另外,MATLAB可以方便地和FORTRAN、C等语言进行接口,还和Maple有很好的接口。
4. 编程易
从形式上看,MATLAB程序文件是一个纯文本文件,扩展名为M,调试方便。
1.2 MATLAB的窗口
1. 启动MATLAB
2. 工具栏
3. 命令窗口
MATLAB的输入命令和输出结果的窗口,在这里输入的命令会立即执行并输出结果。可用UP键盘将以
前执行的命令调出。
1.3 MATLAB的通用命令
1. 管理命令和函数:
help
在线帮助
lookfor
通过关键字查帮助
ver
版本号
path
控制MATLAB的搜索路径
addpath
将目录添加到搜索路径
rmpath
从搜索路径中删除目录
whatsnew
显示README文件
what
M文件、MAT文件和MEX文件的目录列表
which
函数和文件定位
type
列出文件
doc
装入超文本说明
lasterr
上一个出错信息
error
显示出错信息
profile
测量并显示出M文件执行的效率
2. 管理变量和工作空间
who,whos
列出内存中的变量目录
Length
求向量长度
disp
显示文本和阵列
Size
求阵列的维大小
clear
从内存中清除项目
Save
将工作空间变量保存到磁盘
mlock
防止文件被删除
Load
从磁盘中恢复变量
munlock
允许删除M文件
pack
释放工作空间内存
3. 控制命令窗口
echo
执行过程中回显M文件
more
控制命令窗口的分页显示
format
控制输出显示格式
4. 使用文件和工作环境
diary 在磁盘文件中保存任务
inmem
内存中的函数
dir
目录列表
matlabroot
MATLAB安装根目录 cd
改变工作目录 fullfile
从部分中构造文件全名
mkdir
建立目录
fileparts
文件名部分
copyfile
复制文件
te
mpdir
返回系统临时工作目录名
delete
删除文
件和图形对象
tempname
临时文件的唯一文件名
edit
编辑M文件
!
调用DOS命令
5. 启动和退出MATLAB
matlabrc
启动MATLAB的M文件
quit
终止MATLAB
startup
启动MATLAB的M文件
第二章 数值计算
2.1 数字及运算
1. 数值
MATLAB中采用十进制数,并可用科学表示法,虚数用i或j 表示。
5 -39 0.0025 1.52e-20 6.9e13 3.0i -3+4i
浮点数的范围大致为10-308~10308。
2. 变量的定义及代换
MATLAB中的变量不需要事先定义,在遇到新的变量名时,MATLAB会自动建立该变量并分配存储空间。对变量赋值可采用赋值语句。
变量名=表达式[;]
3. 固定变量
MATLAB中提供了一些用户不能清除的固定变量。
(1) ans:在没有定义变量时系统默认变量名
(2) eps:在决定诸如奇异性和秩时,可作为一个容许误差,eps=2.22*10-16,用户也可将此变量置为其它任何值。
(3) pi:即л
(4) Inf:表示正无穷大,当输入1/0时会产生Inf
(5) NaN:表示不定值,它由Inf/Inf或0/0运算产生。
4. 算术运算:+ 加 - 减 * 乘 / 除 \ 左除 ^ 乘方
5. 数字的输出格式
MATLAB的输出格式可由format命令控制,但要注意的是format命令只是影响在屏幕上的显示,而MATLAB的数据存储和运算总是以双精度进行的。
Format short :5位定点格式,如 1.4142
Format long :15位定点格式,如 1.41421356237310
Format short e :5位浮点,如1.4142e+000
Format long e :15位浮点,如1.414213562373095e+000
Format short g :5位定点或浮点取优,如1.4142
Format long g:15位定点或浮点取优,如1.4142135623731
Format hex :十六进制数,如3ff6a09e667f3bcd
Format bank :货币格式,如1.41
Format rat :分数之比,如1393/985
Format +:若为正数则显示+,若为负数则显示-,若为0则显示空
2.2 向量及运算
1. 向量的生成
(1) 直接输入
在命令窗口中直接输入,向量元素用"[]"括起来,元素之间用空格、逗号或分号分隔。用空格和逗号分隔生成行向量,用分号分隔生成列向量。
(2) 利用冒号表达式生成
冒号表达式的基本形式为:x=x0:step:xn
如:a=1:2:12
a =
1 3 5 7 9 11
(3) 线性等分向量的生成
linspace(x1,x2) 生成(1*100)维的行向量。
linspace(x1,x2,n) 生成(1*n)维的行向量。
(4) 对数等分向量的生成
logspace(x1,x2) 生成(1*50)维对数等分向量。
Logspace(x1,x2,n) 生成(1*n)维对数等分向量。
2. 向量的基本运算
(1) 加减与数加减
向量的加减法要求运算的向量有相同的维数,而向量的数加减法运算则是先数字扩展成与向量同维的且每个元素都等于该数字的向量,再进行加减运算。
如:x1=li
nspace(1,100,6)
x1 =
1.0000 20.8000 40.6000 60.4000 80.2000 100.0000
x1-1
ans =
0 19.8000 39.6000 59.4000 79.2000 99.0000
(2) 数乘
向量的数乘运算是将每个元素都乘以该数字。
如:x1*2
ans =
2.0000 41.6000 81.2000 120.8000 160.4000 200.0000
(3) 点积、叉积及混合积
向量的点积:由函数dot来实现。
dot(A,B) 返回向量A和B的数量点积。A和B必须同维。当A和B都为列向量时,它等同于A'*B
dot(A,B,DIM) 返回A和B在维数为DIM的点积。
还可以用sum(a .*b)求向量的点积。
向量和叉积:由函数cross实现。
Cross(A,B) 返回向量A和B的叉积向量。A和B必须为3 个元素的向量。
Corss(A,B,DIM) 当A和B为N-维数组时,则返回A和B在DIM维的向量的叉积。A和B必须有相同的大小,且size(A,DIM)和size(B,DIM)必须为3
向量混合积:由以上2 个函数实现。
Dot(a,cross(b,c))
2.3 矩阵及运算
1. 矩阵的生成
(1) 直接输入小矩阵
输入矩阵时要用"[]"括起来,同行元素之间由空格或","分隔,行与行之间用";"或回车符分隔,矩阵元素可以是表达式。
如:a=[1 2 3;4,5,6;7,8 9]
a =
1 2 3
4 5 6
7 8 9
b=[sin(pi/3),cos(pi/4);log(9),tanh(6)];
(2) 创建M文件输入大矩阵
M文件是一种可以在MATLAB环境下运行的文本文件。它可分为命令式文件和函数式文件2种。
当矩阵的规模比较大时,可以利用M文件的特点将所要输入的矩阵按格式写入一文本文件中,并将此文件以.m 为其扩展名,即为M文件。
如:建立名为example.m的M文件如下:
exm=[456 356 43 44 534 454
44 454 454 454 33 455
45 67 67 55 67 4]
在MATLAB命令窗口中输入:example即可。
(3) 特殊矩阵的生成
空阵:在MATLAB中定义"[]"为空阵。
全零阵:由函数zeros生成,
zeros(N) 生成N*N的全零阵
zeros(M,N) 或zeros([M,N]) 生成M*N的全零阵。
单位阵:由函数eye生成,
eye(N) 生成N*N的单位阵
eye(M,N) 生成M*N的单位阵。
全一阵:由函数ones生成,
ones(N) 生成N*N的全一阵
ones(M,N) 生成M*N的全一阵。
随机阵:由函数rand生成
rand(N) 产生一N*N均匀分布的随机矩阵,元素的值在(0.0,1.0)区间内。
Rand 产生一随机数量。
Randn(N) 生成一N*N的正态分布N(0,1)的随机阵
其他特殊矩阵:
compan magic gallery pascal hadamard rosser hankel toeplitz hilb vander invhilb wilkinson
2. 矩阵的基本数学运算
(1) 矩阵的加减乘除: + - *
矩阵的除法有2种形式:左除"\"和右除"/"
右除:A/B基本上相当于A*INV(B),精确地说,A/B = (B'\A')'。
左除:A\B基本上相当于INV(A)*B ,若A为N*N矩阵,B为N个元素的列向量,则X =
A\B是线性方程A*X = B的解(利用高斯消元法),若A为M*N矩阵,B为M个元素的列向量,则X=A\B是在最小二乘 意义下方程A*X=B的解, A\EYE(SIZE(A))是A的逆矩阵。
(2) 矩阵与常数的运算
常数与矩阵运算即是同此矩阵各元素之间进行运算,数加是指矩阵每个元素都加上此常数,数乘是指矩阵每个元素都与此常数相乘。当进行数除时,常数只能作除数。
(3) 矩阵的转置 A' 求矩阵A的转置。
(4) 矩阵的逆运算
inv(A) 求方阵A的逆矩阵。
pinv(A) 求矩阵A的伪逆,对求解系数矩阵严重"病态"的问题时,可避免"伪解"的产生。
(5) 矩阵的行列式运算
det(A) 求方阵A 的行列式的值。
(6) 矩阵的幂运算
运算符为"^",A为方阵,x为数字,则A^x,当x为大于1的整数表示x个方阵相乘,当x为其它值时,幂函数的计算要涉及到特征值和特征向量。x^A的计算也要用特征值和特征向量。当指数和底数均为矩阵时,无法求解。
(7) 矩阵的指数运算,即eA
矩阵的指数运算的最常用的命令为expm,同类的命令还有expm1,expm2,expm3。其中expm1是由Pade 近似来计算矩阵指数的,expm2是由Taylor级数来计算矩阵指数,expm3是由特征值法来计算指数。
如:计算3阶魔方矩阵的指数,并比较不同函数的结果。
b=magic(3);
expm(b);expm1(b);expm2(b);expm3(b);
这几个函数的结果是有差别的。
(8) 矩阵的对数运算
logm(A) 求方阵A的对数。
(9) 矩阵的开方运算,即
sqrtm(A) 求矩阵A的算术平方根。
3. 矩阵的基本函数运算
(1) 特征值函数
矩阵的特征值可由函数eig和eigs计算得出,其中函数eig可以给出矩阵的特征值和特征向量,而函数eigs则是使用迭代法求解特征值和特征向量的。
E=eig(A) 返回矩阵A的特征值。
[V,D]=eig(A) V为特征向量,使得A*V=V*D,D为特征值矩阵。
如:求的特征值和特征向量。
(2) 奇异值函数
矩阵的奇异值函数也有2种形式svd 和svds,它们所使用的方法相同,只是计算精度略有差别。
[U,S,V] = SVD(X) 产生了一个对角矩阵S,U和V使得X = U*S*V'.
(3) 条件数函数
条件数的值是矩阵"病态"程度的度量。
cond(A) 计算矩阵A条件数的值。
condest(A) 计算矩阵A范数条件数的估计值。
rcond(A) 计算矩阵A条件数的倒数值。
例如:计算9阶Hilbert矩阵和条件数的值。
h=hilb(9); cond(h); rcond(h); condest(h);
虽然各条件数的计算数值并不相同,但结论是一致的,即此矩阵是严重病态的。
(4) 特征值的条件数
在求解矩阵的特征值时也会遇到"病态"问题,此时就需要引入特征值的条件数。
condeig(A) 返回对于A的特征值的条件数的向量。
[V,D,S]=condeig(A) 相当于[V,D]=eig(A)和s=condeig(A)
(5) 范数
函数
矩阵的范数是矩阵的一种量度,它可分为1范数、2范数、无穷范数和F范数。其中最常用的是2范数,范数的计算由函数norm和normest实现。
norm(A,p) 其中p可以为1、2、inf或'fro'。而normest只能计算矩阵2范数的估计值。
(6) 秩函数
矩阵的秩的求解可由函数rank实现。
(7) 迹函数
矩阵所有对角线上元素的和称为矩阵的迹,在MATLAB中可由trace函数计算得出。
(8) 零空间函数
求零空间矩阵的函数为null
(9) 正交空间函数
函数orth用来求矩阵的一组正交基。
(10) LU分解
[L,U]=lu(A)
(11) 通用函数形式
以上所介绍的针对矩阵的函数形式在实际运算中是远远不够的,对常用的其他运算,如三角函数运算
、双曲函数等的运算,需要一种能够使用这些通用函数的形式。在MATLAB中使用通用函数的格式为funm(A,'funname'),其中A为输入矩阵变量,funname为调用的函数名。如funm(b,'log')其作用同于logm(b)而funm(b,'sqrt')同于sqrtm(b)。
表2-1基本函数表
函数名
功能
函数名
功能
sin
正弦函数
acoth
反双曲余切函数
sinh
比曲正弦函数
exp
指数函数
asin
反正弦函数
log
自然对数函数
asinh
反双曲正弦函数
log10
常用对数函数
cos
余弦函数
log2
以2为底的对数函数
cosh
双曲余弦函数
pow2
以2为底的幂函数
acos
反余弦函数
sqrt
平方根函数
acosh
反双曲余弦函数
nextpow2
求不小于变量的最小2指数
tan
正切函数
abs
模函数
tanh
双曲正切函数
angle
相角函数
atan
反正切函数
conj
复共轭函数
atan2
四象限反正切函数
imag
复矩阵虚部函数
atanh
反双曲正切函数
real
复矩阵实部函数
sec
正割函数
unwrap
打开相角函数
sech
双曲正割函数
isreal
实阵判断函数
asec
反正割函数
cplxpair
调整数为共轭对
asech
反双曲正割函数
fix
朝零方向舍入函数
csc
余割函数
floor
朝负方向舍入函数
csch
双曲余割函数
ceil
朝正方向舍入函数
acsc
反余割函数
round
四舍五入函数
acsch
反双曲余割函数
mod
(带符号)求余函数
cot
余切函数
rem
无符号求余函数
coth
双曲余切函数
sign
符号函数
acot
反余切函数
表2-2 特殊函数表
函数名
功能
函数名
功能
airy
Airy函数
erf
误差函数
besselj
第一类Bessel函数
erfc
补充的误差函数
be
ssely
第二类Bessel函数
erfcx
比例补充的误差函数
besselh
第三类Bessel函数
erfinv
反误差函数
besseli
改进的第一类Bessel函数
expint
幂积分函数
besselk
改进的第二类Bessel函数
gamma
Gamm函数
beta
Beta函数
gammainc
不完全Gamma函数
brtainc
不完全的Beta函数
gammaln
Gamma函数的对数
betaln
Beta函数的对数
legendre
联合Legendre函数
ellipj
Jacobi椭圆函数
cross
向量叉积函数
ellipke
完全椭圆积分
4. 矩阵的一些特殊操作
(1) 变维
实现矩阵的变维有二
种方法:即用":"和函数reshape。前者主要是针对2个矩阵之间的运算以实现变维;而后者则是对于于个矩阵的操作。
reshape(X,M,N) 将矩阵X变成M*N维矩阵。
使用":"符号表达式进行变维操作,则2个矩阵必须预先定义维数。
如:a=[1:12]
b=reshape(a,2,6);
c=zeros(3,4);
c(:)=a(:)
(2) 矩阵的变向
rot90(A) 将A逆时针方向旋转900
rot90(A,K) 将A逆时针方向旋转(90*K)0,K值可为正值或负值。
fliplr(A) 将A左右翻转。
flipud(A) 将A上下翻转。
flipdim(A) 将A按第DIM维翻转。
(3) 矩阵的抽取
diag(X,k) 抽取矩阵X的第k条对角线的元素向量,k为0时即为抽取主对角线,k为正值时为上方第k条对角线,k为负值时为下方第k条对角线。
diag(v,k) 使得向量v为所得矩阵的第k条对角线。
tril(A) 提取矩阵A的主下三角部分。
triu(A) 提取矩阵A的主上三角部分。
(4) 矩阵的扩展
对矩阵的扩展有2种方法:
* 利用对矩阵标识块的赋值命令。
A(m1:m2,n1:n2)=a,生成大矩阵。其中(m2-m1+1)必须等于a的行维数,(n2-n1+1)必须等于a的列维数。生成的(m2*n2)维的矩阵A,除赋值子阵和已存在的元素外,其余元素都默认为0。
如:a=[1 2 3;4 5 6;7 8 9]
a(3:5,4:6)=eye(3)linspace函数调用的格式为
* 利用小矩阵的组合来生成大矩阵
如:v=[1 2 6 20]
a2=[-v(2:4);eye(2),zeros(2,1)]
注意矩阵大小的匹配。
2.4 数组及运算
同维矩阵对应元素之间的运算称为数组运算。在MATLAB中,数组作为独立的计算单元实体是不存在的,它的建立、存储方法完全同于矩阵,只是在计算时在符号上作了不同的约定,才使计算大相径庭。因此MABLAB中的数组更倾向一种运算形式,而且是针对矩阵的运算形式。
1. 基本数组运算
* 四则运算:数组的四则运算是指两数组间对应元素之间的四则运算。因此,数组的加减和矩阵的加减是相同的,运算符为+,-。乘除的运算符为.*,./或.\。
* 数组与常数的运算:数组与常数之间的"数加"和"数减"运算,在算符上可以加"."也可以不用".",但若加"."时一定要把常数写在前面。"数乘"运算即为数组元素都与常数进行相乘,在算符上可以加点也可以不加点。"数除"运算,常数可以做被除数也可做除数,但若算符省略"."时,常数只能做除数。
* 数组的幂运算:数组的幂运算符为".^",它表示每个数组元素的幂运算。
如:a=[1 2 3 ;4 5 6;7 8 9]
a.^3
ans =
1 8 27
64 125 216
343 512 729
3.^a
ans =
3 9 27
81 243 729
2187 6561 19683
* 数组的指数运算、对数运算和开方运算:
exp(A) 指数运算 log(A) 对数运算 sqrt(A) 开方运算
2.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论