附录二 Matlab在线性代数中的应用 §1向量组的线性相关性 求列向量组A的一个最大线性无关组可用命令reA)将A化成阶梯形的行最简形 式,其中单位向量对应的列向量即为最大线性无关组所含向量,其它列向量的坐标即为 其对应向量用最大线性无关组线性表示的系数 例1求下列矩阵列向量组的一个最大无关组 A 2-10 062 解编写M文件ex1m如下 format rat a=[1,-2,-1,0,2;-2,4,2,6,-6;2,-1,0,2,3;3,3,3,3,4]; b=rref (a) 求得 b=101/3016/3 012/30-1/9 0 记矩阵A的五个列向量依次为a1、a2、a3、a4、a5,则a1、a2、a4是列向 量组的一个最大无关组。且有 1 4 例2设A=[a1,a2,al]=2-12,B=[b1,b2]=03 验证a1,a2a3是R的一个基,并把b,b2用这个基线性表示。 解编写M文件ex2.m如下: format rat a=[2,2,-1;2,-1,2;-1,2,2];b=[1,4;0,3;-4,2]; ef(la bl 求得 c=1002/34 010-2/31 §2线性方程组 Matlab中解线性方程组可以使用“\”。虽然表面上只是一个简简单单的符号,而它 的内部却包含许许多多的自适应算法,如对超定方程用最小二乘法,对欠定方程它将给 出范数最小的一个解,解三对角阵方程组时用追赶法等。 另外欠定方程组可以使用求矩阵A的阶梯形行最简形式命令reA,求出所有的
-310- 附录二 Matlab 在线性代数中的应用 §1 向量组的线性相关性 求列向量组 A 的一个最大线性无关组可用命令 rref(A)将 A 化成阶梯形的行最简形 式,其中单位向量对应的列向量即为最大线性无关组所含向量,其它列向量的坐标即为 其对应向量用最大线性无关组线性表示的系数。 例 1 求下列矩阵列向量组的一个最大无关组。 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ − − − − − = 3 3 3 3 4 2 1 0 2 3 2 4 2 6 6 1 2 1 0 2 A 解 编写 M 文件 ex1.m 如下: format rat a=[1,-2,-1,0,2;-2,4,2,6,-6;2,-1,0,2,3;3,3,3,3,4]; b=rref(a) 求得 b = 1 0 1/3 0 16/3 0 1 2/3 0 -1/9 0 0 0 1 -1/3 0 0 0 0 0 记矩阵 A 的五个列向量依次为α1 、α2 、α3 、α4 、α5 ,则α1 、α2 、α4 是列向 量组的一个最大无关组。且有 3 1 2 3 2 3 1 α = α + α , 5 1 2 4 3 1 9 1 3 16 α = α − α − α . 例 2 设 ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ − − − = = 1 2 2 2 1 2 2 2 1 [ , , ] 1 2 3 A a a a , ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ − = = 4 2 0 3 1 4 [ , ] 1 2 B b b , 验证 1 2 3 a ,a ,a 是 3 R 的一个基,并把 1 2 b ,b 用这个基线性表示。 解 编写 M 文件 ex2.m 如下: format rat a=[2,2,-1;2,-1,2;-1,2,2];b=[1,4;0,3;-4,2]; c=rref([a,b]) 求得 c= 1 0 0 2/3 4/3 0 1 0 -2/3 1 0 0 1 -1 2/3 §2 线性方程组 Matlab 中解线性方程组可以使用“\”。虽然表面上只是一个简简单单的符号,而它 的内部却包含许许多多的自适应算法,如对超定方程用最小二乘法,对欠定方程它将给 出范数最小的一个解,解三对角阵方程组时用追赶法等。 另外欠定方程组可以使用求矩阵 A 的阶梯形行最简形式命令 rref(A),求出所有的
基础解系 例3求解下列方程组 x1-3x,-6x4=9 2x2-x3+2x4=-5 x1+4x2-7x3+6x4=0 解编写M文件ex3m如下 format rat a=[2,1,-5,1;1,-3,0,-6;0,2,-1,2;1,4,-7,6]; b=[8;9;-5;0] solution=a \b 求得 solution=[3-4-1 例4求超定方程组 2x1+4x,=11 1+2x,=6 2x1+x2=7 解编写M文件ex4m如下 a=[243,-51,2;2,l] [1;3:6;7]; solution=alb 求得 solution=304031.2418]。 例5求解方程组 x2-x3+x4=0 X 3x4=1, X-x 解编写M文件ex5.m如下 format rat a=[1,-1,-1,1,0;1,-1,1,-3,1;1,-1,-2,3,-1/2]; b=rref(a) 求得: b=1-10-11/2 001-21/2 00000 故方程组有解,并有 x=x+x
-311- 基础解系。 例 3 求解下列方程组 ⎪⎪⎩⎪⎪⎨⎧ + − + = − + = − − − = + − + = 4 7 6 0 2 2 5 3 6 9 2 5 8 1 2 3 4 2 3 4 1 2 4 1 2 3 4 x x x x x x x x x x x x x x 解 编写 M 文件 ex3.m 如下: format rat a=[2,1,-5,1;1,-3,0,-6;0,2,-1,2;1,4,-7,6]; b=[8;9;-5;0]; solution=a\b 求得 solution=[3 -4 -1 1]' 。 例 4 求超定方程组 ⎪⎪⎩⎪⎪⎨⎧ + = + = − = + = 2 7 2 6 3 5 3 2 4 11 1 2 1 2 1 2 1 2 x x x x x x x x 解 编写 M 文件 ex4.m 如下: a=[2,4;3,-5;1,2;2,1]; b=[11;3;6;7]; solution=a\b 求得 solution=[ 3.0403 1.2418]' 。 例 5 求解方程组 ⎪⎪⎩⎪⎪⎨⎧ − − + = − − + − = − − + = . 21 2 3 1 , 0 , 1 2 3 4 1 2 3 4 1 2 3 4 x x x x x x x x x x x x 解 编写 M 文件 ex5.m 如下: format rat a=[1,-1,-1,1,0;1,-1,1,-3,1;1,-1,-2,3,-1/2]; b=rref(a) 求得: b= 1 -1 0 -1 1/2 0 0 1 -2 1/2 0 0 0 0 0 故方程组有解,并有 ⎪⎪⎩⎪⎪⎨⎧ = + = + + 21 2 21 3 4 1 2 4 x x x x x
§3相似矩阵及二次型 有时我们需要精确的特征值和特征向量,就须利用 Matlab的符号运算功能。 在Mat1ab中创建符号矩阵和创建数值矩阵的形式很相似,只不过要用到符号定义 函数sym。下面介绍使用此函数创建符号函数的几种形式 3.1使用sm函数直接创建符号矩阵 此方法和直接创建数值矩阵的方法几乎完全相同。矩阵元素可以是符号表达式,各 符号表达式的长度可以不同,矩阵元素之间可用空格或逗号分隔。 例如 x=sym(' [a+sin(d),b:1/c, d]')i y=det (x 求得y=(d*c*a+d*c*sin(d)-b)/c 3.2将数值矩阵转化为符号矩阵 在 Matlab中,数值矩阵不能直接参与符号运算,必须先转化为符号矩阵。 例如 a=[2/3,sqrt(2);3,1] a=0.6667 4142 1.0000 b=sym(a) b=[2/3,sqrt(2)] 3.3符号矩阵的索引和修改 Matlab的符号矩阵索引和修改同数值矩阵的索引和修改完全相同。 例如:对上例中的矩阵b进行修改 b(2,2)=log(9) 34举例 例6求一个正交变换x=Py,把二次型 f=2x1x2+2x1x3-2x1x4-2x2x3+2x2x4+2x3x4 化为标准形 解:二次型的矩阵为 l-10 l110 由 A=[0,1,1,-1;1,0,-1,1;1,-1,0,1;-1,1,1,0 求得 P=0.78870.21130.5000-0.2887 0.21130.7887-0.50000.2887 0.5774-0.5774-0.50000.2887 00.50000.8660 D=1.0000 01.0000
-312- §3 相似矩阵及二次型 有时我们需要精确的特征值和特征向量,就须利用 Matlab 的符号运算功能。 在 Matlab 中创建符号矩阵和创建数值矩阵的形式很相似,只不过要用到符号定义 函数 sym。下面介绍使用此函数创建符号函数的几种形式。 3.1 使用 sym 函数直接创建符号矩阵 此方法和直接创建数值矩阵的方法几乎完全相同。矩阵元素可以是符号表达式,各 符号表达式的长度可以不同,矩阵元素之间可用空格或逗号分隔。 例如: x=sym('[a+sin(d),b;1/c,d]'); y=det(x) 求得 y=(d*c*a+d*c*sin(d)-b)/c 3.2 将数值矩阵转化为符号矩阵 在 Matlab 中,数值矩阵不能直接参与符号运算,必须先转化为符号矩阵。 例如: a=[2/3,sqrt(2);3,1] a= 0.6667 1.4142 3.0000 1.0000 b=sym(a) b=[ 2/3, sqrt(2)] [ 3, 1] 3.3 符号矩阵的索引和修改 Matlab 的符号矩阵索引和修改同数值矩阵的索引和修改完全相同。 例如:对上例中的矩阵 b 进行修改 b(2,2)='log(9)' 3.4 举例 例 6 求一个正交变换 x = Py ,把二次型 2 1 2 2 1 3 2 1 4 2 2 3 2 2 4 2 3 4 f = x x + x x − x x − x x + x x + x x 化为标准形。 解:二次型的矩阵为 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ − − − − = 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 1 A 由 A=[0,1,1,-1;1,0,-1,1;1,-1,0,1;-1,1,1,0]; [P,D]=eig(A) 求得 P= 0.7887 0.2113 0.5000 -0.2887 0.2113 0.7887 -0.5000 0.2887 0.5774 -0.5774 -0.5000 0.2887 0 0 0.5000 0.8660 D= 1.0000 0 0 0 0 1.0000 0 0
0-3.0000 0 P就是所求的正交矩阵,使得PAP=D,令X=PY,其中X x4 丁,化简后的二次型为g=y2+y2-3y2+y2。 上面求得的正交矩阵P是数值解,下面我们求正交矩阵的精确解。 由 ('[0,1,1,-1;1,0,-1,1;1,-1,0,1;-1,1,1,01) [v,d]=eig(a) 求得 v=[1,-1,1,1] d=[1,0,0,0 [1,0,0,-1] [0,1,0,0 [0,0,1,-1] [0,0,1,0] 1] [0,0,0,-3] 即求得矩阵A的特征值为1、1、1、3,对应的特征向量分别是矩阵v的第1、2、 3、4列。再把对应于特征值1的3个特征向量正交化、单位化,我们就容易求出正交 矩阵P。 -313
-313- 0 0 -3.0000 0 0 0 0 1.0000 P 就是所求的正交矩阵,使得 PT AP=D,令 X = PY ,其中 [ ]T X x x = 1 L 4 , [ ]T Y y y = 1 L 4 ,化简后的二次型为 2 4 2 3 2 2 2 g = y1 + y − 3y + y 。 上面求得的正交矩阵 P 是数值解,下面我们求正交矩阵的精确解。 由 a=sym('[0,1,1,-1;1,0,-1,1;1,-1,0,1;-1,1,1,0]'); [v,d]=eig(a) 求得 v=[ 1, -1, 1, 1] d=[ 1, 0, 0, 0] [ 1, 0, 0, -1] [ 0, 1, 0, 0] [ 0, 0, 1, -1] [ 0, 0, 1, 0] [ 0, 1, 0, 1] [ 0, 0, 0, -3] 即求得矩阵 A 的特征值为 1、1、1、3,对应的特征向量分别是矩阵 v 的第 1、2、 3、4 列。再把对应于特征值 1 的 3 个特征向量正交化、单位化,我们就容易求出正交 矩阵 P