matlab-线性代数
- 格式:docx
- 大小:27.76 KB
- 文档页数:15
一、矩阵的生成1.简单的矩阵的生成(1)直接输入矩阵元素对直接从键盘输入一系列元素生成矩阵,只要遵循下面几个基本原则:1、矩阵每一行的元素必须用空格或逗号分开;2、在矩阵中,采用分号或回车表明每一行的结束;3、整个输入矩阵必须包含在方括号“[]”中。
注意:创建矩阵在方括号的末尾,可以用回车或分号结束。
用回车结束,显示所输入的矩阵;用分号结束,所输入的矩阵不显示。
输入:A=[4,5,7,8;6,1,2,5;3,5,4,6;4,2,4,8]显示:A = 4 5 7 86 12 53 54 64 24 8(2)生成大矩阵在MATLAB中,可以将小矩阵连接起来生成一个较大的矩阵。
事实上,前面直接输入法生成矩阵就是将单个元素连接起来生成矩阵。
方括号“[]”就是连接算子。
输入:B=[A,A+1;A+2,A+3]显示:B =4 5 7 8 5 68 96 1 2 57 23 63 54 6 4 65 74 2 4 85 35 96 7 9 10 7 810 118 3 4 7 9 45 85 76 8 6 87 96 4 6 107 57 112.常用矩阵的生成下面介绍一些常用矩阵的生成命令:zeros,ones,eye,rand和randn。
(1)zeros生成全0阵调用格式为:B=zeros(n):生成n n的全0矩阵;如果n不是标量将给出出错信息。
B=zeros(m,n):生成m⨯n的全0矩阵。
B=zeros(size(A)):生成与矩阵A大小相同的全0阵。
注意:在MATLAB中不需要预先定义矩阵的维数,MATLAB自动为矩阵分配存储空间。
尽管如此,如果采用全零阵为矩阵生成的全部元素或某一行、某一列的元素保留存储空间,则大多数MATLAB程序将运行得更快。
(2)ones生成全1阵调用格式为:Y=ones(n):生成n⨯n的全1矩阵;如果n不是标量将给出出错信息。
Y=ones(m,n):生成m⨯n的全1阵。
Y=ones(size(A)):生成与矩阵A大小相同的全1阵。
(3)eye生成单位阵调用格式为:Y=eye(n):生成n⨯n的单位阵。
Y=eye(m,n):生成m⨯n的矩阵,其对角线元素为1,其它元素为0。
Y=eye(size(A)):生成一个与矩阵A大小相同的单位阵。
注意:在MATLAB中,单位阵的定义比线性代数中的定义更广泛。
例如:输入:eye(3,2)显示:ans =1 00 10 0(4)rand生成均匀分布的随机阵调用格式为:Y=rand(n):生成一个n⨯n的随机阵:如果n不是标量将给出出错信息。
Y=rand(m,n):生成一个m⨯n随机阵。
Y=rand(size(A)):生成一个与矩阵A大小相同的随机阵。
说明:rand函数产生0,1之间均匀分布的随机数。
(5)randn正态分布随机阵命令的形式为:Y=randn(n):生成一个n⨯n的随机阵:如果n不是标量将给出出错信息。
Y=randn(m,n):生成一个m⨯n随机阵。
Y=rand(size(A)):生成一个与矩阵A大小相同的随机阵。
二、矩阵运算在MATLAB语言中,矩阵的运算既可以使用运算符,也可以使用等效的运算函数。
(1)加法和减法运算对于矩阵运算可以由下面的命令执行加减法:C=A+B或C=plus(A,B)C=A-B或C=minus(A,B)这里要求A和B的大小必须相同,因为加减运算是把A和B的对应元素相加减。
如果A和B的大小不同,MATLAB将自动给出错误信息。
特殊情况是A和B中有一个是标量,MATLAB允许标量和任意大小的矩阵相加减,结果是把矩阵中的每个元素和这个标量相加减。
在MATLAB中,算术运算符“+”和“-”可以作为一元运算符使用。
+A就是取A,而-A则是对A中的每个元素取负。
输入:A=[1 2 3;4 5 6];B=[7 8 9;4 6 8];C=A+B显示:C =8 10 128 11 14输入:C=C-2显示:C =6 8 106 9 12输入:C=-C显示:C =-6 -8 -10-6 -9 -12(2)乘法运算矩阵乘的运算命令为:A*B或mtimes(A,B)矩阵乘A*B是矩阵A和B的线性代数乘。
就是说,对于非标量A和B,矩阵A的列数必须等于矩阵B的行数。
标量可以和任意大小的矩阵相乘,就是线性代数中的数与矩阵的乘法。
输入:A=[1 2 3;4 5 6];B=ones(3)显示:B =1 1 11 1 11 1 1输入:C=A*B显示:C =6 6 615 15 15(3)矩阵求逆行数和列数相等的矩阵称为方阵,只有方阵有逆矩阵。
方阵的求逆函数为:B=inv(A)该函数返回方阵A的逆阵。
如果A不是方阵或接近奇异的,则会给出警告信息。
在实际应用中,很少显式的使用矩阵的逆。
在MATLAB中不是使用逆阵x=inv(A)*B来求线性方程组Ax=B的解,而是使用矩阵除法运算x=A\B来求解。
因为MATLAB设计求逆函数inv时,采用的是高斯消去法,而设计除法解线性方程组时,并不求逆,而是直接采用高斯消去法求解,有效的减小了残差,并提高了求解的速度。
因此,MATLAB推荐尽量使用除法运算,少用求逆运算。
(4)除法运算在线性代数中,只有矩阵的逆的定义,而没有矩阵除法的运算。
而在MATLAB 中,定义了矩阵的除法运算。
矩阵除法的运算在MATLAB中是一个十分有用的运算。
根据实际问题的需要,定义了两种除法命令:左除和右除。
矩阵左除:C=A\B或C=mldivide(A,B)矩阵右除;C=A/B或C=mrdivide(A,B)通常矩阵左除不等于右除,如果A是方阵,A\B等效于A的逆阵左乘矩阵B。
也就是inv(A)*B。
如果A是一个n⨯n矩阵,B是一个n维列向量,或是有若干这样的列的矩阵,则A\B就是采用高斯消去法求得的方程AX=B的解。
如果A接近奇异的,MATLAB将会给出警告信息。
如果A是一个m⨯n矩阵,其中m不等于n,B是一个m维列向量,或是由若干这样的列的矩阵,则X=A\B是不定或超定方程组AX=B的最小二乘解。
通过QR 分解确定矩阵A的秩k,方程组的解X每一列最多只有k个非零元素。
如果k<n,方程的解是不唯一的,用矩阵除法求得的最小二乘解是这种类型解中范数最小的。
B/A大体等效于B*inv(A) (B右乘A的逆阵),但在计算方法上存在差异,更精确的,B/A=(A T\B T)T。
输入:A=[1 2 3;4 5 7;4 7 9];B=[1 3 7;3 5 7;8 5 1];矩阵左除。
输入:A\B显示:ans =-0.7500 -0.5000 -2.00005.7500 -3.5000 -18.0000-3.2500 3.5000 15.0000矩阵右除。
输入:A/B显示:ans =-0.0217 0.4565 -0.04350.6522 0.3043 0.3043-0.5652 1.8696 -0.1304(5)乘方运算矩阵乘方命令为:C=A^B或C=mpower(A,p)矩阵的乘方运算要求A是一个方阵,且p是一个标量,A^p的意思是矩阵A 的p次方。
如果p是个整数,则A^p是矩阵A自乘p次;如果p是一个负整数,则首先对A求逆,然后将它自乘p次。
输入:A=[1 2 3;4 5 7;4 7 9];A^2显示:ans =21 33 4452 82 11068 106 142输入:A^-2显示:ans =-1.0000 -1.3750 1.37506.0000 -0.6250 -1.3750-4.0000 1.1250 0.3750(6)方阵的行列式方阵的行列式运算函数是:a=det(A)如果矩阵A不是方阵,会给出警告信息。
输入:A=[4 1 2 4;1 2 0 2;10 5 2 0;0 1 1 7];det(A)显示:ans = 0(7)矩阵的秩矩阵的求秩函数是:a=rank(A)输入:A=[3 1 0 2;1 -1 2 -1;1 3 -4 4];rank(A)显示:ans = 2三、矩阵变换(1)矩阵旋转矩阵旋转函数的用法如下:1B=fliplr(A):矩阵A关于垂直轴沿左右方向进行列维翻转。
2B=flipud(A):矩阵A关于水平轴沿上下方向进行行维翻转。
3B=rot90(A):矩阵A逆时针方向旋转90︒4B=rot(A,k):矩阵A逆时针旋转k*90︒,其中k为整数输入:A=[1 2 3;4 5 6]显示:A =1 2 34 5 6输入:B=fliplr(A)显示:B =3 2 16 5 4输入:C=flipud(A)显示:C =4 5 61 2 3输入:D =rot90(A)显示:D=3 62 51 4(2)矩阵的产生函数diagdiag函数用于产生或提取对角线元素。
它的用法有如下几种:1X=diag(v,k):当v是有n个元素的向量,返回方阵X,它的大小为n+|k|,向量v的元素位于X的第k条对角向上。
k=0表示主对角线,k>0为主对角线以上,k<0为主对角线以下。
2X=diag(v):将向量v的元素放在矩阵X的主对角线上,等同于上面k=0的情况。
3v=diag(X,k):对于矩阵X,返回列向量v,它的元素由X的第k条对角线的元素构成。
4v=diag(X):返回X的主对角线元素,等同于上面k=0的情况。
输入:v=[1 2 3];diag(v,0)显示:ans =1 0 00 2 00 0 3输入:diag(v,-1)显示:ans =0 0 0 01 0 0 00 2 0 00 0 3 0 输入:X=[1 2 3;4 5 6;7 8 9]显示:X =1 2 34 5 67 8 9输入:diag(X)显示:ans =159输入:diag(X,1)显示:ans =26(3)矩阵的提取函数tril和triu函数tril用于提取下三角矩阵,用法如下:1L=tril(X):返回X的下三角部分,其余部分用“0”补齐。
2L=tril(X,k):返回X的第k条对角线以下的元素,其余部分用“0”补齐。
k=0是主对角线,k>0位于主对角线以上,k<0位于主对角线以下。
函数triu用于产生或提取上三角矩阵,用法如下:1U=triu(X):返回X的上三角部分元素,其余部分用“0”补齐。
2U=triu(X,k):返回X的第k条对角线以上的元素,其余部分用“0”补齐。
k=0是主对角线,k>0位于主对角线以上,k<0位于主对角线以下。
输入:A=[1,2,3;4,5,6]显示:A =1 2 34 5 6输入:tril(A)显示:ans =1 0 04 5 0输入:tril(A,1)显示:ans =1 2 04 5 6输入:triu(A)显示:ans =1 2 30 5 6输入:triu(A,-1)显示:ans =1 2 34 5 6输入:triu(A,1)显示:ans =0 2 30 0 6四、矩阵的分解把一个给定的矩阵分解成几个“较简单的”矩阵连乘积形式,在线性方程组的求解中,是十分有用的。