线性方程组的求解

线性方程组的求解

课程内容设计:《线性方程组的求解》

第一部分:线性方程组的表示
  1. 引入线性方程组

    • 线性方程组是一组包含未知数的线性方程,通常表示为:
      a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 … a m 1 x 1 + a m 2 x 2 + ⋯ + a m n x n = b m \begin{aligned} a_{11}x_1 + a_{12}x_2 + \dots + a_{1n}x_n &= b_1 \\ a_{21}x_1 + a_{22}x_2 + \dots + a_{2n}x_n &= b_2 \\ \dots \\ a_{m1}x_1 + a_{m2}x_2 + \dots + a_{mn}x_n &= b_m \end{aligned} a11x1+a12x2++a1nxna21x1+a22x2++a2nxnam1x1+am2x2++amnxn=b1=b2=bm

    • 这是一个含有 m m m 个方程和 n n n 个未知数的线性方程组。通过矩阵的方式可以方便地表示为:
      A x = b \mathbf{A} \mathbf{x} = \mathbf{b} Ax=b
      其中:
      A = [ a 11 a 12 … a 1 n a 21 a 22 … a 2 n … … … … a m 1 a m 2 … a m n ] , x = [ x 1 x 2 ⋮ x n ] , b = [ b 1 b 2 ⋮ b m ] \mathbf{A} = \begin{bmatrix} a_{11} & a_{12} & \dots & a_{1n} \\ a_{21} & a_{22} & \dots & a_{2n} \\ \dots & \dots & \dots & \dots \\ a_{m1} & a_{m2} & \dots & a_{mn} \end{bmatrix}, \quad \mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} b_1 \\ b_2 \\ \vdots \\ b_m \end{bmatrix} A= a11a21am1a12a22am2a1na2namn ,x= x1x2xn ,b= b1b2bm

  2. 应用实例

    • 比如有如下的线性方程组:

      2 x + 3 y = 5 4 x + y = 6 \begin{aligned} 2x + 3y &= 5 \\ 4x + y &= 6 \end{aligned} 2x+3y4x+y=5=6

      可以用矩阵表示为:
      2 x + 3 y = 5 4 x + y = 6 \begin{aligned} 2x + 3y &= 5 \\ 4x + y &= 6 \end{aligned} 2x+3y4x+y=5=6

      可以用矩阵表示为:
      [ 2 3 4 1 ] \begin{bmatrix} 2 & 3 \\ 4 & 1 \end{bmatrix} [2431]
      [ x y ] \begin{bmatrix} x \\ y \end{bmatrix} [xy]

      [ 5 6 ] \begin{bmatrix} 5 \\ 6 \end{bmatrix} [56]
      这个矩阵方程表示了两个未知数 x x x y y y 的线性关系。


第二部分:高斯消元法
  1. 高斯消元法的基本步骤

    • 目标:通过一系列的行变换将线性方程组化为上三角矩阵,从而可以通过回代法求解未知数。
    • 步骤
      1. 对增广矩阵应用初等行变换,使得主对角线下方的元素变为零。
      2. 然后从最后一个方程开始,反向代入求解各个未知数。
  2. 示例:高斯消元法解线性方程组

    • 考虑如下的方程组:
      2 x + 3 y = 5 4 x + y = 6 \begin{aligned} 2x + 3y &= 5 \\ 4x + y &= 6 \end{aligned} 2x+3y4x+y=5=6
      我们可以将其写成增广矩阵的形式:
      [ 2 3 5 4 1 6 ] \left[\begin{array}{cc|c} 2 & 3 & 5 \\ 4 & 1 & 6 \end{array}\right] [243156]

      1. 第一步,将第一行的第一个元素变成 1。用第一行除以 2:
        [ 1 1.5 2.5 4 1 6 ] \left[\begin{array}{cc|c} 1 & 1.5 & 2.5 \\ 4 & 1 & 6 \end{array}\right] [141.512.56]

      2. 第二步,消去第二行的第一个元素。用第二行减去 4 倍的第一行:
        [ 1 1.5 2.5 0 − 5 − 4 ] \left[\begin{array}{cc|c} 1 & 1.5 & 2.5 \\ 0 & -5 & -4 \end{array}\right] [101.552.54]

      3. 第三步,处理第二行。将第二行除以 -5:
        [ 1 1.5 2.5 0 1 0.8 ] \left[\begin{array}{cc|c} 1 & 1.5 & 2.5 \\ 0 & 1 & 0.8 \end{array}\right] [101.512.50.8]

      4. 最后,消去第一行中的 y y y 项。用第一行减去 1.5 倍的第二行:
        [ 1 0 1 0 1 0.8 ] \left[\begin{array}{cc|c} 1 & 0 & 1 \\ 0 & 1 & 0.8 \end{array}\right] [100110.8]

      从上面的矩阵可以直接得出:
      x = 1 , y = 0.8 x = 1, \quad y = 0.8 x=1,y=0.8


第三部分:克拉默法则
  1. 克拉默法则的公式

    • 克拉默法则提供了一种用行列式计算线性方程组解的方法。设方程组为:
      A x = b \mathbf{A} \mathbf{x} = \mathbf{b} Ax=b
      其中 A \mathbf{A} A 是系数矩阵, x \mathbf{x} x 是未知数列, b \mathbf{b} b 是常数列。

      x \mathbf{x} x 中的第 i i i 个未知数的公式为:
      x i = det ( A i ) det ( A ) x_i = \frac{\text{det}(\mathbf{A}_i)}{\text{det}(\mathbf{A})} xi=det(A)det(Ai)
      其中 A i \mathbf{A}_i Ai 是通过将系数矩阵 A \mathbf{A} A 的第 i i i 列替换为常数列 b \mathbf{b} b 得到的矩阵。

  2. 示例:用克拉默法则解线性方程组

    • 对于方程组:
      2 x + 3 y = 5 4 x + y = 6 \begin{aligned} 2x + 3y &= 5 \\ 4x + y &= 6 \end{aligned} 2x+3y4x+y=5=6
      系数矩阵为:
      A = [ 2 3 4 1 ] , b = [ 5 6 ] \mathbf{A} = \begin{bmatrix} 2 & 3 \\ 4 & 1 \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} 5 \\ 6 \end{bmatrix} A=[2431],b=[56]
      1. 计算 det ( A ) \text{det}(\mathbf{A}) det(A)
        det ( A ) = 2 × 1 − 3 × 4 = 2 − 12 = − 10 \text{det}(\mathbf{A}) = 2 \times 1 - 3 \times 4 = 2 - 12 = -10 det(A)=2×13×4=212=10

      2. 计算 det ( A 1 ) \text{det}(\mathbf{A}_1) det(A1)(替换第一列为 b \mathbf{b} b):
        A 1 = [ 5 3 6 1 ] , det ( A 1 ) = 5 × 1 − 3 × 6 = 5 − 18 = − 13 \mathbf{A}_1 = \begin{bmatrix} 5 & 3 \\ 6 & 1 \end{bmatrix}, \quad \text{det}(\mathbf{A}_1) = 5 \times 1 - 3 \times 6 = 5 - 18 = -13 A1=[5631],det(A1)=5×13×6=518=13

      3. 计算 det ( A 2 ) \text{det}(\mathbf{A}_2) det(A2)(替换第二列为 b \mathbf{b} b):
        A 2 = [ 2 5 4 6 ] , det ( A 2 ) = 2 × 6 − 5 × 4 = 12 − 20 = − 8 \mathbf{A}_2 = \begin{bmatrix} 2 & 5 \\ 4 & 6 \end{bmatrix}, \quad \text{det}(\mathbf{A}_2) = 2 \times 6 - 5 \times 4 = 12 - 20 = -8 A2=[2456],det(A2)=2×65×4=1220=8

      4. 解得:
        x = det ( A 1 ) det ( A ) = − 13 − 10 = 1.3 , y = det ( A 2 ) det ( A ) = − 8 − 10 = 0.8 x = \frac{\text{det}(\mathbf{A}_1)}{\text{det}(\mathbf{A})} = \frac{-13}{-10} = 1.3, \quad y = \frac{\text{det}(\mathbf{A}_2)}{\text{det}(\mathbf{A})} = \frac{-8}{-10} = 0.8 x=det(A)det(A1)=1013=1.3,y=det(A)det(A2)=108=0.8


课堂活动:高斯消元法的实践
  1. 活动目的:让学生使用高斯消元法解决一个实际的线性方程组,并讨论解的情况。

  2. 任务

    • 给出一个随机的线性方程组,要求学生使用高斯消元法进行求解。并判断方程组的解是否是唯一解、无解或者无穷多解。

总结
  • 线性方程组的表示:矩阵方程的形式 A x = b A \mathbf{x} = \mathbf{b} Ax=b 为解线性方程组提供了一个简洁的表达方式。
  • 高斯消元法:通过一系列的行变换将矩阵化为上三角矩阵,从而解出方程的解。
  • 克拉默法则:通过行列式求解线性方程组,适用于方程组的解是唯一的情况。

通过高斯消元法和克拉默法则,学生可以更好地理解线性方程组的解的结构,并掌握求解的方法。


下面结合 高斯消元法克拉默法则,给出 Python 代码实现的具体案例。这些代码可以用于解决线性方程组,并计算方程组的解。


1. 高斯消元法代码实现

高斯消元法是通过初等行变换将线性方程组转化为上三角矩阵,然后用回代法求解。我们将使用 Python 来实现这个过程。

代码实现:高斯消元法
import numpy as np

def gaussian_elimination(A, b):
    n = len(b)
    # 创建增广矩阵
    augmented_matrix = np.hstack([A, b.reshape(-1, 1)])

    # 高斯消元
    for i in range(n):
        # 找到第 i 列中绝对值最大元素的行
        max_row = np.argmax(np.abs(augmented_matrix[i:n, i])) + i
        augmented_matrix[[i, max_row]] = augmented_matrix[[max_row, i]]

        # 将第 i 列下方的元素消去
        for j in range(i + 1, n):
            ratio = augmented_matrix[j, i] / augmented_matrix[i, i]
            augmented_matrix[j, i:] -= ratio * augmented_matrix[i, i:]

    # 回代求解
    x = np.zeros(n)
    for i in range(n - 1, -1, -1):
        x[i] = (augmented_matrix[i, -1] - np.dot(augmented_matrix[i, i+1:n], x[i+1:n])) / augmented_matrix[i, i]
    
    return x

# 测试线性方程组: 2x + 3y = 5, 4x + y = 6
A = np.array([[2, 3], [4, 1]], dtype=float)
b = np.array([5, 6], dtype=float)

x = gaussian_elimination(A, b)
print("解为:", x)
解释
  1. 增广矩阵:我们首先将系数矩阵和常数列拼接成增广矩阵。
  2. 高斯消元:我们通过行变换使得增广矩阵成为上三角矩阵。
  3. 回代法:最后通过回代法从上往下求解未知数。
输出
解为: [1.  0.8]

2. 克拉默法则代码实现

克拉默法则通过行列式求解线性方程组。我们将利用 NumPy 来计算矩阵的行列式和解。

代码实现:克拉默法则
def cramer_rule(A, b):
    det_A = np.linalg.det(A)  # 计算系数矩阵的行列式
    n = A.shape[1]
    
    if det_A == 0:
        raise ValueError("系数矩阵的行列式为零,方程组无唯一解")
    
    # 计算每个变量的解
    x = np.zeros(n)
    for i in range(n):
        A_copy = A.copy()
        A_copy[:, i] = b  # 替换第 i 列为常数列
        x[i] = np.linalg.det(A_copy) / det_A
    
    return x

# 测试线性方程组: 2x + 3y = 5, 4x + y = 6
A = np.array([[2, 3], [4, 1]], dtype=float)
b = np.array([5, 6], dtype=float)

x = cramer_rule(A, b)
print("解为:", x)
解释
  1. 计算行列式:首先计算系数矩阵 ( A ) 的行列式。
  2. 替换列:对于每个未知数,我们将系数矩阵的相应列替换为常数列 ( b ),并计算新矩阵的行列式。
  3. 解的计算:每个变量的解就是对应行列式与 ( A ) 的行列式之比。
输出
解为: [1.  0.8]

3. 总结

  1. 高斯消元法 是一种通过行变换得到上三角矩阵,再通过回代求解的方法。它适用于任何线性方程组,但当系数矩阵的行列式为零时,方程组没有唯一解。

  2. 克拉默法则 使用行列式的比值来解线性方程组,适用于解有唯一解的方程组。当系数矩阵的行列式为零时,方程组无解或有无穷多解。

以上代码和方法非常适合在教学中进行示范,可以帮助学生更直观地理解线性方程组的求解过程。通过 Python 实现,我们不仅可以节省计算时间,还可以帮助学生深刻理解高斯消元法和克拉默法则的步骤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值