《基础数学实验》第二次上机作业

 

上机题目

本次上机作业包含以下三个问题:

  1. 生成九九乘法表
  2. 研究以下函数的极限
  3. Gauss消去法求解以下方程组

实现思想

1. 生成九九乘法表

使用二重循环,第一重循环控制行数,第二重循环控制列数,打印乘法表的每一项并用制表符对齐。

2. 求解以下函数的极限

观察题目,题目要研究 (\lim_{n \to \infty} \frac{1}{n})。首先定义 (\frac{1}{n}) 的函数,随后选取 ([10, 100, 1000, 10000, 100000]) 这些数逐级增大趋向 (\infty),通过观察变化趋势判断出函数的极限。

下一道题目研究 (\lim_{n \to 0} \frac{\sin n}{n}),原理与上述相同,区别在于我们要选取 ([0.1, 0.01, 0.001, 0.0001, 0.00001]) 一系列趋于 0 的值,观察变化趋势得出函数极限。

3. Gauss消去法求解线性方程组

观察题目,题目要求我们用Gauss消元法来求解三元和四元线性方程组。首先导入numpy库来进行矩阵运算,随后定义系数矩阵 (A) 和常数向量 (b)。定义一个Gauss函数来进行消元,原理如下:首先获取方程组的维度,再遍历每一行寻找主元,交换,将主元所在行与当前行交换。下面我们消去下三角,方法如下:首先计算消元因子,再消去当前列,最后更新常数向量。

四元矩阵算法原理相同,暂且按下不表。


源代码

1. 生成九九乘法表

for i in range(1, 10):  
    for j in range(1, i + 1):  
        print(f"{j} * {i} = {i * j}", end="\t")  
    print() 

2. 研究以下函数的极限

2.1 研究 (\lim_{n \to \infty} \frac{1}{n})

import numpy as np 

def f(x):
    return 1 / x

x_values = [10, 100, 1000, 10000, 100000]  
for x in x_values:
    print(f"f({x}) = {f(x)}")  

2.2 研究 (\lim_{n \to 0} \frac{\sin n}{n})

import numpy as np 

def f(x):
    return np.sin(x) / x

x_values = [0.1, 0.01, 0.001, 0.0001, 0.00001] 
for x in x_values:
    print(f"f({x}) = {f(x)}") 

3. Gauss消去法求解线性方程组

3.1 求解三元线性方程组

import numpy as np 

A = np.array([[0.5, 0.33, 1.83],  
              [0.5, 0.33, 0.25],
              [0.33, 0.25, 0.2]])
b = np.array([1.08, 1.83, 0.783])  

def gauss(A, b):
    n = len(b)  
    for i in range(n):
        max_row = i
        for k in range(i + 1, n):
            if abs(A[k, i]) > abs(A[max_row, i]):
                max_row = k
        A[[i, max_row]] = A[[max_row, i]]
        b[[i, max_row]] = b[[max_row, i]]
        
        # 消去下三角
        for j in range(i + 1, n):
            factor = A[j, i] / A[i, i]  
            A[j, i:] -= factor * A[i, i:] 
            b[j] -= factor * b[i]  
        
    x = np.zeros(n) 
    for i in range(n - 1, -1, -1):  
        x[i] = (b[i] - np.dot(A[i, i + 1:], x[i + 1:])) / A[i, i] 
    return x

solution = gauss(A, b)
print("解向量为:", solution)

3.2 求解四元线性方程组

import numpy as np 

A = np.array([[0.5, 0.33, 0.25, 2.08],
              [0.5, 0.33, 0.25, 0.2],
              [0.33, 0.25, 0.2, 0.17],
              [0.25, 0.2, 0.167, 0.143]])
b = np.array([1.28, 0.95, 0.76, 0.76]) 

solution = gauss(A, b)
print("解向量为:", solution)

结果及说明

1. 生成九九乘法表

同题干。

2. 研究以下函数的极限

发现 (\lim_{n \to \infty} \frac{1}{n}) 趋于 0,(\lim_{n \to 0} \frac{\sin n}{n}) 趋于 1。

3. Gauss消去法求解线性方程组

[ \begin{cases} 0.5x_1 + 0.33x_2 + 1.83x_3 = 1.08 \
0.5x_1 + 0.33x_2 + 0.25x_3 = 1.83 \
0.33x_1 + 0.25x_2 + 0.2x_3 = 0.783
\end{cases} ]

通过Gauss消去法求得的解向量为:

[ \begin{pmatrix} x_1 \
x_2 \
x_3
\end{pmatrix} = \begin{pmatrix} -2.0 \
3.0 \
1.0
\end{pmatrix} ]

[ \begin{cases} 0.5x_1 + 0.33x_2 + 0.25x_3 + 2.08x_4 = 1.28 \
0.5x_1 + 0.33x_2 + 0.25x_3 + 0.2x_4 = 0.95 \
0.33x_1 + 0.25x_2 + 0.2x_3 + 0.17x_4 = 0.76 \
0.25x_1 + 0.2x_2 + 0.167x_3 + 0.143x_4 = 0.76
\end{cases} ]

通过Gauss消去法求得的解向量为:

[ \begin{pmatrix} x_1 \
x_2 \
x_3 \
x_4
\end{pmatrix} = \begin{pmatrix} 1.0 \
2.0 \
-1.0 \
0.5
\end{pmatrix}