线性代数及其应用第5版(David C. Lay)笔记
第1章 线性代数中的线性方程组
1.2行化简与阶梯形矩阵
行化简算法(也称行消去法)
行化简算法可以用来解任意线性方程组,判断解的存在与唯一性问题。
定义
非零行的先导元素
阶梯型(或行阶梯型)矩阵
简化阶梯型(或简化行阶梯型)矩阵
定理:每个矩阵行等价于唯一的简化阶梯形矩阵。
任何非零矩阵都可以行化简(即用初等行变换)变为阶梯形矩阵,但用不同的方法可化为不同的阶梯形矩阵.然而,一个矩阵只能化为唯一的简化阶梯形矩阵。RREF:简化(行)阶梯形,REF:(行)阶梯形
定义
主元位置
主元列
主元
行化简算法(1-4步产生阶梯形矩阵,第5步产生简化阶梯形矩阵)
第一步,由最左的非零列开始.这是一个主元列,主元位置在该列顶端;
第二步,在主元列中选取一个非零元素作为主元,若有必要的话,对换两行使这个元素移到主元位置上;
第三步,用倍加行变换将主元下面的元素变成0;
第四步,暂时不管包含主元位置的行以及它上面的各行,对剩下的子矩阵使用上述的三个步骤直到没有非零行需要处理为止;
第五步,由最右边的主元开始,把每个主元上方的各元素变成0,若某个主元不是1,用倍乘变换将它变成1。
(一至四:向前步骤,五:向后步骤)
线性方程组的解
定义
基本变量
自由变量
用简化阶梯形解线性方程组:用自由变量表示基本变量得到方程组的通解
解集的参数表示:自由变量作为参数,用自由变量表示基本变量。当一个方程组是相容的,且具有自由变量,则它的解集具有多种参数表示。
计算机程序常用回代法解线性方程组
存在与惟一性问题
通过非简化的阶梯形可以回答线性方程组的2个基本问题。
定理:存在与惟一性定理
线性方程组相容的充要条件是增广矩阵的最右列不是主元列。就是说,增广矩阵的阶梯形没有形如 [0 …0 b] b≠0 的行,若线性方程组相容,它的解集可能有两种情形:(i)当没有自由变量时,有惟一解;(ii)若至少有一个自由变量,有无穷多解。
应用行化简算法解线性方程组的步骤:
- 写出方程组的增广矩阵.
- 应用行化简算法把增广矩阵化为阶梯形.确定方程组是否有解,如果没有解则停止; 否则进行下一步.
- 继续行化简算法得到它的简化阶梯形・
- 写出由第3步所得矩阵所对应的方程组•
- 把第4步所得的每个方程改写为用自由变量表示基本变量的形式,
练习题
1.求出下列增广矩阵对应的方程组的通解
导入linear_algebra模块,通过transform_matrix函数对增广矩阵进行初等变换。
import numpy as np
from linear_algebra import *
a=np.array([[1,-3,-5,0],[0,1,-1,-1]]);a
array([[ 1, -3, -5, 0],
[ 0, 1, -1, -1]])
b=transform_matrix(a,-3,1,0,3);b
array([[ 1., 0., -8., -3.],
[ 0., 1., -1., -1.]])
增广矩阵共4列,说明有3个未知数,写出化简后的线性方程组如下:
方程组的解为:
2.求方程组的通解
a=np.array([[1,-2,-1,3,0],[-2,4,5,-5,3],[3,-6,-6,8,2]]);a
array([[ 1, -2, -1, 3, 0],
[-2, 4, 5, -5, 3],
[ 3, -6, -6, 8, 2]])
b=transform_matrix(a,-3,0,1,2);b
array([[ 1., -2., -1., 3., 0.],
[ 0., 0., 3., 1., 3.],
[ 3., -6., -6., 8., 2.]])
c=transform_matrix(b,-3,0,2,-3);c
array([[ 1., -2., -1., 3., 0.],
[ 0., 0., 3., 1., 3.],
[ 0., 0., -3., -1., 2.]])
d=transform_matrix(c,-3,1,2,1);d
array([[ 1., -2., -1., 3., 0.],
[ 0., 0., 3., 1., 3.],
[ 0., 0., 0., 0., 5.]])
可以看出方程组不相容
习题1.2
求通解
a=np.array([[1,3,4,7],[3,9,7,6]]);a
array([[1, 3, 4, 7],
[3, 9, 7, 6]])
b=transform_matrix(a,-3,0,1,-3);b
array([[ 1., 3., 4., 7.],
[ 0., 0., -5., -15.]])
c=transform_matrix(b,-1,1,0,-1/5);c
array([[1., 3., 4., 7.],
[0., 0., 1., 3.]])
d=transform_matrix(c,-3,1,0,-4);d
array([[ 1., 3., 0., -5.],
[ 0., 0., 1., 3.]])
可以看出解是:
a=np.array([[1,4,0,7],[2,7,0,10]]);a
array([[ 1, 4, 0, 7],
[ 2, 7, 0, 10]])
b=transform_matrix(a,-3,0,1,-2);b
array([[ 1., 4., 0., 7.],
[ 0., -1., 0., -4.]])
c=transform_matrix(b,-3,1,0,4);c
array([[ 1., 0., 0., -9.],
[ 0., -1., 0., -4.]])
d=transform_matrix(c,-1,1,0,-1);d
array([[ 1., 0., 0., -9.],
[ 0., 1., 0., 4.]])
可以看出,方程组的解是:是自由变量。
10.直接写解的过程,约定a是要解的方程组的增广矩阵,通过np.array函数初始化。
a=np.array([[1,-2,-1,3],[-3,-6,-2,2]]);a
array([[ 1, -2, -1, 3],
[-3, -6, -2, 2]])
b==transform_matrix(a,-3,0,1,3);b
array([[ 1., 4., 0., 7.],
[ 0., -1., 0., -4.]])
c=transform_matrix(b,-3,1,0,4);c
array([[ 1., 0., 0., -9.],
[ 0., -1., 0., -4.]])
d=transform_matrix(c,-1,1,0,-1);d
array([[ 1., 0., 0., -9.],
[ 0., 1., 0., 4.]])
可以看出,解是是自由变量。
a=np.array([[1,-7,0,6,5],[0,0,1,-2,-3],[-1,7,-4,2,7]]);a
array([[ 1, -7, 0, 6, 5],
[ 0, 0, 1, -2, -3],
[-1, 7, -4, 2, 7]])
b=transform_matrix(a,-3,0,2,1);b
array([[ 1., -7., 0., 6., 5.],
[ 0., 0., 1., -2., -3.],
[ 0., 0., -4., 8., 12.]])
c=transform_matrix(b,-3,1,2,4);c
array([[ 1., -7., 0., 6., 5.],
[ 0., 0., 1., -2., -3.],
[ 0., 0., 0., 0., 0.]])
可以看出方程组的解是是自由变量。