第一章 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小时内删除。