第三章矩阵与线性代数计算
MATLAB,即“矩阵实验室”,它是以矩阵为基本运算单元。因此,本章从最基本的运算单元出发,介绍MATLAB的命令及其用法。
3.1矩阵的定义
由m×n个元素aij(i=1,2,…m;j=1,2,…n)排列成的矩形阵称为一个m行n列的矩阵,或m×n阶矩阵,可以简记为A=(aij) m×n,其中的aij叫做矩阵的第i行第j列元素。
a11Aa21am1a12a22am2a1na2n amn当m=n时,称A为n阶方阵,也叫n阶矩阵;
当m=1,n≥2时,即A中只有一行时,称A为行矩阵,或行向量(1维数组); 当m≥2,n=1时,即A中只有一列时,称A为列矩阵,或列向量; 当m=1,n=1时,即A中只有一个元素时,称A为标量或数量(0维数组)。
3.2矩阵的生成
1.实数值矩阵输入
MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。
不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。如: 【例3-1】矩阵的生成例。
a=[1 2 3;4 5 6;7 8 9]
b=[1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9; 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9; 3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9] Null_M = [ ] %生成一个空矩阵
a =
1 2 3 4 5 6 7 8 9 b =
1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 2.0000 2.1000 2.2000 2.3000 2.4000 2.5000 2.6000 3.0000 3.1000 3.2000 3.3000 3.4000 3.5000 3.6000 1.7000 1.8000 1.9000 2.7000 2.8000 2.9000 3.7000 3.8000 3.9000 Null_M =[] 2.复数矩阵输入
复数矩阵有两种生成方式: 【例3-2】
a=2.7;b=13/25;
C=[1,2*a+i*b,b*sqrt(a); sin(pi/4),a+5*b,3.5+1]
C=
1.0000 5.4000 + 0.5200i 0.8544 0.7071 5.3000 4.5000 【例3-3】矩阵的生成例。
R=[1 2 3;4 5 6], M=[11 12 13;14 15 16] CN=R+i*M R =
1 2 3 4 5 6
M =
11 12 13 14 15 16
CN =
1.0000 +11.0000i 2.0000 +12.0000i 3.0000 +13.0000i 4.0000 +14.0000i 5.0000 +15.0000i 6.0000 +16.0000i 3 大矩阵的生成
对于大型矩阵,一般创建M文件,以便于修改:
2
【例3-4】用M文件创建大矩阵,文件名为c3e4.m
exm=[ 456 468 873 2 579 55
21 687 54 488 8 13 65 4567 88 98 21 5 456 68 4589 654 5 987 5488 10 9 6 33 77 在MATLAB命令窗口输入: c3e4;
size(exm) %显示exm的大小 ans=
5 6 %表示exm有5行6列。 4 特殊矩阵的生成
命令 全零阵 函数 zeros
格式 B = zeros(n) %生成n×n全零阵 B = zeros(m,n) %生成m×n全零阵 B = zeros([m n]) %生成m×n全零阵
B = zeros(size(A)) %生成与矩阵A相同大小的全零阵 命令 单位阵 函数 eye
格式 Y = eye(n) %生成n×n单位阵 Y = eye(m,n) %生成m×n单位阵
Y = eye(size(A)) %生成与矩阵A相同大小的单位阵 命令 全1阵 函数 ones
格式 Y = ones(n) %生成n×n全1阵 Y = ones(m,n) %生成m×n全1阵 Y = ones([m n]) %生成m×n全1阵
Y = ones(size(A)) %生成与矩阵A相同大小的全1阵 命令 均匀分布随机矩阵 函数 rand
格式 Y = rand(n) %生成n×n随机矩阵,其元素在(0,1)内 Y = rand(m,n) %生成m×n随机矩阵
3
Y = rand([m n]) %生成m×n随机矩阵
Y = rand(size(A)) %生成与矩阵A相同大小的随机矩阵 【例3-5】 产生一个3×4随机矩阵
R=rand(3,4) R =
0.9501 0.4860 0.4565 0.4447
0.2311 0.8913 0.0185 0.6154 0.6068 0.7621 0.8214 0.7919
【例3-6】 产生一个在区间[10, 20]内均匀分布的4阶随机矩阵
a=10;b=20; x=a+(b-a)*rand(4) x =
19.2181 19.3547 10.5789 11.3889
17.3821 19.1690 13.5287 12.0277 11.7627 14.1027 18.1317 11.9872 14.0571 18.9365 10.0986 16.0379 命令 正态分布随机矩阵 函数 randn
格式 Y = randn(n) %生成n×n正态分布随机矩阵 Y = randn(m,n) Y = randn(size(A)) mu=0.6; sigma=0.1; x=mu+sqrt(sigma)*randn(4) x =
0.8311 0.7799 0.1335 1.0565 0.7827 0.5192 0.5260 0.4890 0.6127 0.4806 0.6375 0.7971 0.8141 0.5064 0.6996 0.8527
命令 产生随机排列 函数 randperm
4
%生成m×n正态分布随机矩阵
%生成与矩阵A相同大小的正态分布随机矩阵
Y = randn([m n]) %生成m×n正态分布随机矩阵 【例3-7】 产生均值为0.6,方差为0.1的4阶矩阵
格式 p = randperm(n) %产生1~n之间整数的随机排列 【例3-8】整数的随机排列。
randperm(6) ans =
3 2 1 5 4 6
命令 产生线性等分向量
函数 linspace
格式 y = linspace(a,b) %在(a, b)上产生100个线性等分点 y = linspace(a,b,n) %在(a, b)上产生n个线性等分点 命令 产生对数等分向量 函数 logspace
b格式 y = logspace(a,b) %在( 10 a , 10 )之间产生50个对数等分向量
y = logspace(a,b,n)
命令 计算矩阵中元素个数
n = numel(a) %返回矩阵A的元素的个数 命令 产生以输入元素为对角线元素的矩阵 函数 blkdiag
格式 out = blkdiag(a,b,c,d,…) %产生以a,b,c,d,…为对角线元素的矩阵 【例3-9】产生以输入元素为对角线元素的矩阵 out = blkdiag(1,2,3,4) out =
1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 命令 Magic(魔方)矩阵
函数 magic
格式 M = magic(n) %产生n 阶魔方矩阵 【例3-10】产生3 阶魔方矩阵
M=magic(3) M =
8 1 6 3 5 7
4 9 2
5
3.3矩阵的加减乘除运算
1 加、减运算
设u为一数量,A=(aij) m×n和B=(bij) r×s为两矩阵,则加减运算的规定为:对应元素相加、减,即按线性代数中矩阵的“十”,“一”运算进行。
u±A=(u±aij) m×n
A±B=( aij± bij) m×n u*A=(u*aij) m×n
【例3-11】矩阵的加减运算。
输入:
u=9
a=[1 2 3;4 5 6;7 8 0] b=[3 4 5;6 7 8;9 10 2] c=u+a d=a-b
e=u*a % 和数组运算相同 结果:
c = 10 11 12 13 14 15 16 17 9 d = -2 -2 -2 -2 -2 -2 -2 -2 -2 e = 9 18 27 36 45 54 63 72 0 2 矩阵的乘及乘方运算
设u为一数量,A=(aij) m×l和B=(bij) l×n为两矩阵, A的列数l和B的行数l相等,可进行A与B 的乘法运算。
a11Aa21am1a12a22am2a1lb11ba2lB21amlbl1c12c22cm2b12b22bl2b1nb2n blnc11CABc21cm1
6
c1nc2n cmn这里cij=ai1b1j+ai2b2j+…ailblj=
at1litbtj
它表示C的第i行第j列的元素是A第i行的各元分别与B第j列的各对应元的乘积的和。
【例3-12】矩阵的乘及乘方运算。
a=[1 2 3;4 5 6;7 8 0] f=[1 2 3] g=f*a h=f.*a
a = 1 2 3 4 5 6 7 8 0 g = 30 36 15 ??? Error using ==> .* 3.方阵的求逆
单位矩阵:主对角线上的元素都是1,其他各元素都是0的n阶矩阵与任意n阶矩阵A左乘或右乘的乘积仍然是A自身,即EA=AE=A,因此我们叫E为n阶单位矩阵。
1 E1对满秩方阵A,存在A-1,使A* A-1= A-1*A=E;我们称A-1是A的逆矩阵。
命令 逆 函数 inv
格式 Y=inv(X) %求方阵X的逆矩阵。
123【例3-13】求A221的逆矩阵
343A=[1 2 3; 2 2 1; 3 4 3]; Y=inv(A)或Y=A^(-1) 则结果显示为
Y =
1.0000 3.0000 -2.0000 -1.5000 -3.0000 2.5000 1.0000 1.0000 -1.0000
7
【例3-14】求逆运算。 A=[2 1 -1;2 1 2;1 -1 1]; format rat %用有理格式输出 D=inv(A)
D =
1/3 0 1/3 0 1/3 -2/3 -1/3 1/3 0 4.除法运算
右除:矩阵a右除以矩阵b定义为: a/b=a*b^(-1)=a*inv(b)
左除:矩阵b左除以矩阵a定义为: a\\b=a^(-1)*b=inv(a)*b
Matlab提供了两种除法运算:左除(\\)和右除(/)。一般情况下,x=a\\b是方程a*x =b的解,而x=b/a是方程x*a=b的解。即:
ax=b
a(-1)*a*x=a(-1)*b X=inv(a)*b=a\\b xa=b
X*a*a(-1)=b*a(-1)
X=b*a(-1)=b*inv(a)=b/a 【例3-15】除法运算
a=[1 2 3; 4 2 6; 7 4 9] b=[4; 1; 2]; x=a\\b 则显示:x=
-1.5000
2.0000
0.5000
在数组除法中,A./B表示A中元素与B中元素对应相除。 5.向量点积
向量的点乘(内积):维数相同的两个向量的点乘。 函数 dot
格式 C = dot(A,B) %若A、B为向量,则返回向量A与B的点积,A与B长度相同;若为矩阵,则A与B有相同的维数。
8
C = dot(A,B,dim) %在dim维数中给出A与B的点积 【例3-16】向量点积
X=[-1 0 2]; Y=[-2 -1 1]; Z=dot(X, Y) 则显示:
Z = 4 6.向量叉乘
在数学上,两向量的叉乘是一个过两相交向量的交点且垂直于两向量所在平面的向量。在Matlab中,用函数cross实现。
函数 cross
格式 C = cross(A,B) %若A、B为向量,则返回A与B的叉乘,即C=A×B,A、B必须是3个元素的向量;若A、B为矩阵,则返回一个3×n矩阵,其中的列是A与B对应列的叉积,A、B都是3×n矩阵。
C = cross(A,B,dim) %在dim维数中给出向量A与B的叉积。A和B必须具有相同的维数,size(A,dim)和size(B,dim)必须是3。 【例3-17】计算垂直于向量(1, 2, 3)和(4, 5, 6)的向量。 a=[1 2 3]; b=[4 5 6]; c=cross(a,b) 结果显示: c=
-3 6 -3
可得垂直于向量(1, 2, 3)和(4, 5, 6)的向量为±(-3, 6, -3) 7.混合积
混合积由以上两函数实现:
【例3-18】 计算向量a=(1, 2, 3)、b=(4, 5, 6)和c=(-3, 6, -3) 的混合积a(bc)
a=[1 2 3]; b=[4 5 6]; c=[-3 6 -3]; x=dot(a, cross(b, c))
结果显示:x = 54
注意:先叉乘后点乘,顺序不可颠倒。 8.张量积
函数 kron
9
格式 C=kron (A,B) %A为m×n矩阵,B为p×q矩阵,则C为mp×nq矩阵。
a11Ba12BaBaB2122说明 A与B的张量积定义为:CABam1Bam2BBA均为mp×nq矩阵,但一般地ABBA。
a1nBa2nBAB与
amnB12312【例3-19】 A B456 求AB。 34789A=[1 2;3 4];B=[1 2 3;4 5 6;7 8 9]; C=kron(A,B) C =
1 2 3 2 4 6 4 5 6 8 10 12 7 8 9 14 16 18 3 6 9 4 8 12 12 15 18 16 20 24 21 24 27 28 32 36
3.4矩阵的行列式
1 矩阵转置
A=(aij) m×n 的转置矩阵在数学中记为A′=(aji) n×m
a11Aa21am1a11A/a12a1n运算符:′
a12a22am2a21a22a2na1na2n amnam1am2 amn运算规则:若矩阵A的元素为实数,则与线性代数中矩阵的转置相同。
若A为复数矩阵,则A转置后的元素由A对应元素的共轭复数构成。若仅希望转
10
置,则用如下命令:A.′。 2 方阵的行列式
把行列式按第i行展开:
a11Aa21an1a12a22an2a1na2nai1Ai1ai2Ai2ainAin ann其中Aij=(-1)i+jMij称为aij的代数余子式;而Mij是划去A中元aij所在的行及列得到的n-1阶子式,叫做aij的余子式。
函数 det
格式 d = det(X) %返回方阵X的多项式的值 【例3-20】行列式的值。
A=[1 2 3;4 5 6;7 8 9] A =
1 2 3 4 5 6 7 8 9
D=det(A) D = 0 3. 矩阵的秩
子式:在(m,n)矩阵A中取某k个行,k个列,由这些行、列相交的元构成的k阶行列式,叫做A的k阶子式。
n阶矩阵只有一个n阶子式,叫做矩阵行列式。用︱A︱或detA表示。
矩阵的秩:矩阵A中不为零的子式的最高阶数如果是r,就说A的秩是r。常用r(A)表示。即矩阵A的秩是矩阵A中最高阶非零子式的阶数;而向量组的秩通常由该向量组构成的矩阵来计算。
n阶矩阵如果它的秩是n,叫做满秩矩阵,否则就是降秩矩阵。
一般矩阵A m×n中,如果r(A)=min(m,n),称A为满秩阵,否则r(A)<min(m,n)称A为降秩阵。
函数 rank
格式 k = rank (A) %求矩阵A的秩 k = rank (A,tol) %tol为给定误差
11
【例3-21】求向量组1(1223),2(2413),3(1203),
4(0623),5(2634)的秩,并判断其线性相关性。
A=[1 -2 2 3;-2 4 -1 3;-1 2 0 3;0 6 2 3;2 -6 3 4]; k=rank(A) 结果为 k = 3
由于秩为3 < 向量个数,因此向量组线性相关。
4.矩阵特征值和特征向量对n阶矩阵A,如果存在非0向量x满足线性方程组(A-λE)x=0,则称λ是矩阵A的特征值,x是A的对应于特征值λ的特征向量。对于每一个实对称矩阵A,总可将A转化为对角矩阵,其主对角线上的元素就是A的n个特征值。
[p,r]=eig(a)且 % eig=eigen(本征的,固有的) a为输入矩阵。r为特征值构成的对角阵。 p的各列为对应于特征值的特征向量构成的矩阵。
211【例3-22】求矩阵A020的特征值和特征向量
413A=[-2 1 1;0 2 0;-4 1 3]; [V,D]=eig(A) 结果显示: V =
-0.7071 -0.2425 0.3015 0 0 0.9045 -0.7071 -0.9701 0.3015
D =
-1 0 0 0 2 0 0 0 2
即:特征值-1对应特征向量(-0.7071 0 -0.7071)T
特征值2对应特征向量(-0.2425 0 -0.9701)T和(-0.3015 0.9045 -0.3015)T
110【例3-23】 求矩阵A430的特征值和特征向量。
102A=[-1 1 0;-4 3 0;1 0 2];
12
[V,D]=eig(A) 结果显示为 V =
0 0.4082 -0.4082
0 0.8165 -0.8165 1.0000 -0.4082 0.4082 D =
2 0 0
0 1 0 0 0 1
3.5矩阵的特殊运算
1.矩阵对角线元素的抽取
函数 diag
格式 X = diag(v,k) %以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。
X = diag(v) %以v为主对角线元素,其余元素为0构成X。
v = diag(X,k) %抽取X的第k条对角线元素构成向量v。k=0:抽取主对角线元素; k>0:抽取上方第k条对角线元素;k<0抽取下方第k条对角线元素。 v = diag(X) %抽取主对角线元素构成向量v。 【例3-24】矩阵对角线元素的抽取。
v=[1 2 3]; x=diag(v,-1) x =
0 0 0 0
1 0 0 0 0 2 0 0 0 0 3 0
A=[1 2 3;4 5 6;7 8 9] A =
13
1 2 3 4 5 6
7 8 9 v=diag(A,1) v = 2 6
2.上三角阵和下三角阵的抽取
函数 tril %取下三角部分
格式 L = tril(X) %抽取X的主对角线的下三角部分构成矩阵L
L = tril(X,k) %抽取X的第k条对角线的下三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。
函数 triu %取上三角部分
格式 U = triu(X) %抽取X的主对角线的上三角部分构成矩阵U
U = triu(X,k) %抽取X的第k条对角线的上三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。 【例3-25】上三角阵和下三角阵的抽取。
A=ones(4) %产生4阶全1阵 A =
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
L=tril(A,1) %取下三角部分 L =
1 1 0 0
1 1 1 0 1 1 1 1
1 1 1 1 U=triu(A,-1) %取上三角部分 U =
14
1 1 1 1
1 1 1 1 0 1 1 1
0 0 1 1 3.矩阵的变维
A(i,:)提取A的第i行A(:,j)提取A的第j列 A(:,j:k)取出A的从第j列到第k列的元素所成的阵。 【例3-26】矩阵的变维
a=[1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4 3.1 3.2 3.3 3.4]; b=a(2,:) c=a(:,3) d=a(:,2:4)
b = 2.1000 2.2000 2.3000 2.4000 c = 1.3000 2.3000 3.3000
d = 1.2000 1.3000 1.4000 2.2000 2.3000 2.4000 3.2000 3.3000 3.4000 4.矩阵的变向
矩阵旋转函数
格式 B = rot90 (A) %将矩阵A逆时针方向旋转90°
B = rot90 (A,k) %将矩阵A逆时针方向旋转(k×90°),k可取正负整数。 【例3-27】矩阵旋转。
A=[1 2 3;4 5 6;7 8 9] A =
1 2 3 4 5 6
7 8 9 Y1=rot90(A),Y2=rot90(A,-1) Y1 = %逆时针方向旋转 3 6 9
15
2 5 8 1 4 7
Y2 = %顺时针方向旋转 7 4 1
8 5 2 9 6 3 矩阵的左右翻转 函数 fliplr
格式 B = fliplr(A) %将矩阵A左右翻转 矩阵的上下翻转 函数 flipud
格式 B = flipud(A) %将矩阵A上下翻转 【例3-28】矩阵的翻转。
A=[1 2 3;4 5 6] A =
1 2 3
4 5 6 B1=fliplr(A),B2=flipud(A)
B1 =
3 2 1
6 5 4 B2 =
4 5 6
1 2 3 5.矩阵的比较关系
矩阵的比较关系是针对于两个矩阵对应元素的,所以在使用关系运算时,首先应该保证两个矩阵的维数一致或其中一个矩阵为标量。关系运算是对两个矩阵的对应运算进行比较,若关系满足,则将结果矩阵中该位置元素置为1,否则置0。MATLAB的各种比较关系运算见下表。 运 算 符 >
含 义 大于关系 16
运算符 < 含 义 大于关系 = = 等于关系 <= 小于或等于关系 【例3-29】矩阵的比较关系 A=[1 2 3 4;5 6 7 8];B=[0 2 1 4;0 7 7 2]; C1=A==B, C2=A>=B, C3=A~=B C1 =
0 1 0 1 0 0 1 0 C2 =
1 1 1 1
1 0 1 1 C3 =
1 0 1 0
1 1 0 1
6.矩阵逻辑运算
>= ~ = 大于或等于关系 不等于关系 设矩阵A和B都是m×n矩阵或其中之一为标量,在MATLAB中定义了如下的逻辑运算:
矩阵的与运算
格式 A&B或and(A, B)
说明 A与B对应元素进行与运算,若两个数均非0,则结果元素的值为1,否则为0。
或运算
格式 A|B或or(A, B)
说明 A与B对应元素进行或运算,若两个数均为0,则结果元素的值为0,否则为1。
非运算
格式 ~A或not (A)
说明 若A的元素为0,则结果元素为1,否则为0。 异或运算 格式 xor (A,B)
说明 A与B对应元素进行异或运算,若相应的两个数中一个为0,一个非0,则结果为0,否则为1。 【例3-30】矩阵逻辑运算
17
A=[0 2 3 4;1 3 5 0],B=[1 0 5 3;1 5 0 5] A =
0 2 3 4
1 3 5 0 B =
1 0 5 3 1 5 0 5
C1=A&B,C2=A|B,C3=~A,C4=xor(A,B) C1 =
0 0 1 1 1 1 0 0 C2 =
1 1 1 1 1 1 1 1 C3 =
1 0 0 0 0 0 0 1 C4 =
1 1 0 0 0 0 1 1
3.6 集 合 运 算
1.两个集合的交集
函数 intersect
格式 c = intersect(a,b) %返回向量a、b的公共部分,即c= a∩b。
c = intersect(A,B,'rows') %A、B为相同列数的矩阵,返回元素相同的行。 [c,ia,ib] = intersect(a,b) %c为a、b的公共元素,ia表示公共元素在a中的位置,ib表示公共元素在b中位置。
【例3-31】两个集合的交集
A=[1 2 3 4;1 2 4 6;6 7 1 4]
18
A =
1 2 3 4
1 2 4 6 6 7 1 4
B=[1 2 3 8;1 1 4 6;6 7 1 4] B =
1 2 3 8
1 1 4 6 6 7 1 4
C=intersect(A,B,'rows') C =
6 7 1 4 2.两集合的差
函数 setdiff
格式 c = setdiff(a,b) %返回属于a但不属于b的不同元素的集合,C = a-b。 c = setdiff(A,B,'rows') %返回属于A但不属于B的不同行
[c,i] = setdiff(…) %c与前面一致,i表示c中元素在A中的位置。 【例3-32】两集合的差.
A = [1 7 9 6 20]; B = [1 2 3 4 6 10 20]; c=setdiff(A,B) c =
7 9
3.两个集合交集的非(异或)
函数 setxor
格式 c = setxor(a,b) %返回集合a、b交集的非
c = setxor(A,B,'rows') %返回矩阵A、B交集的非,A、B有相同列数。 [c,ia,ib] = setxor(…) %ia、ib表示c中元素分别在a (或A)、b(或B)中位置 【例3-33】两个集合交集的非。
A=[1 2 3 4]; B=[2 4 5 8]; C=setxor(A,B)
19
C =
1 3 5 8 4.两集合的并集
函数 union
格式 c = union(a,b) %返回a、b的并集,即c = a∪b。
c = union(A,B,'rows') %返回矩阵A、B不同行向量构成的大矩阵,其中相同行向量只取其一。
[c,ia,ib] = union(…) %ia、ib分别表示c中行向量在原矩阵(向量)中的位置 【例3-34】两集合的并集。
A=[1 2 3 4]; B=[2 4 5 8]; c=union(A,B) 则结果为
c =
1 2 3 4 5 8
3.7 线性方程的组的求解
n个未知量的线性方程组可以写成
a11x1ax211am1x1a12x2a22x2am2x2a1nxna2nxnamnxnb1b2 bm系数矩阵为
a11Aa21am1a12a22am2a1na2n amn加边(增广)矩阵为
a11Ba21am1a12a1na22a2nam2amn20
b1b2 bm
x1b1xb2为一待求列向量 b=2为一已知列向量 x=xmbm由乘法定义有A*x=b 由克莱姆定理有 m 如det(A)≠0,即A的秩r(A)=n,方程组有唯一解。x=A\\b. 如det(A)=0,即A的秩r(A) 利用矩阵除法求线性方程组的特解(或一个解) 方程:AX=b 解法:X=A\\b 5x16x2x15x26x3x25x36x4【例3-35】 求方程组x35x46x5x45x5解: A=[5 6 0 0 0 1 5 6 0 0 0 1 5 6 0 0 0 1 5 6 0 0 0 1 5]; B=[1 0 0 0 1]'; R_A=rank(A) %求秩 X=A\\B %求解 运行后结果如下 100的解。 01 21 R_A = 5 X = 2.2662 -1.7218 1.0571 -0.5940 0.3188 2 求线性齐次方程组的通解 在Matlab中,函数null用来求解零空间,即满足A·X=0的解空间,实际上是求出解空间的一组基(基础解系)。 格式 z = null % z的列向量为方程组的正交规范基,满足ZZI。 znull(A,r) % z的列向量是方程AX=0的有理基 3 求非齐次线性方程组的通解 非齐次线性方程组需要先判断方程组是否有解,若有解,再去求通解。 因此,步骤为: 第一步:判断AX=b是否有解,若有解则进行第二步 第二步:求AX=b的一个特解 第三步:求AX=0的通解 第四步:AX=b的通解= AX=0的通解+AX=b的一个特解。 x12x23x3x41【例3-36】 求解方程组3x1x25x33x42 2x1x22x32x43解:在Matlab中建立M文件如下: A=[1 -2 3 -1;3 -1 5 -3;2 1 2 -2]; b=[1 2 3]'; B=[A b]; n=4; R_A=rank(A) R_B=rank(B) format rat if R_A==R_B&R_A==n %判断有唯一解 X=A\\b elseif R_A==R_B&R_A X=A\\b %求特解 C=null(A,'r') %求AX=0的基础解系 else X='equition no solve' %判断无解 end 运行后结果显示: R_A = 2 R_B = 3 X =equition no solve 说明 该方程组无解 x1x23x3x413x1x23x34x44【例3-37】 求解方程组的通解: x15x29x38x40在Matlab编辑器中建立M文件如下: A=[1 1 -3 -1;3 -1 -3 4;1 5 -9 -8]; b=[1 4 0]'; B=[A b]; n=4; R_A=rank(A) R_B=rank(B) format rat if R_A==R_B&R_A==n X=A\\b elseif R_A==R_B&R_A 运行后结果显示为: R_A = 2 23 R_B = 2 X = 0 0 -8/15 3/5 C = 3/2 -3/4 3/2 7/4 1 0 0 1 3/23/40所以原方程组的通解为X=k3/27/401+k2+ 108/15013/5 (孙福玉 24 韩伟) 因篇幅问题不能全部显示,请点此查看更多更全内容