GitHub_Trending/bo/Book3_Elements-of-Mathematics教学案例:鸡兔同笼问题从算术到矩阵解法
问题背景与教学价值
鸡兔同笼问题作为经典数学应用题,贯穿小学算术到大学线性代数的整个学习过程。本案例基于《数学要素》[Book3_Ch23_鸡兔同笼1__数学要素__从加减乘除到机器学习.pdf]、[Book3_Ch24_鸡兔同笼2__数学要素__从加减乘除到机器学习.pdf]和[Book3_Ch25_鸡兔同笼3__数学要素__从加减乘除到机器学习.pdf]三章内容,展示如何通过四种不同方法解决同一问题,帮助学习者理解数学思维的进阶过程。
问题定义
今有鸡兔同笼,上有35头,下有94足,问鸡兔各几何?这个问题可抽象为求解二元一次方程组:
- 鸡数 + 兔数 = 35(头的数量)
- 2×鸡数 + 4×兔数 = 94(脚的数量)
算术解法(适合小学阶段)
算术方法通过假设法将二元问题转化为一元问题,培养直观思维:
- 假设全是鸡,则应有脚 35×2=70只
- 实际多出 94-70=24只脚
- 每只兔子比鸡多2只脚,故兔子数=24÷2=12只
- 鸡数=35-12=23只
这种方法在[Book3_Ch23_Python_Codes/Bk3_Ch23_01.ipynb]的注释中有详细说明,适合理解基础数量关系。
代数解法(适合初中阶段)
引入未知数建立方程,体现符号化思维: 设鸡数为x,兔数为y,则:
x + y = 35
2x + 4y = 94
通过消元法解得x=23,y=12。代数解法在[Book3_Ch24_Python_Codes/Bk3_Ch24_01.ipynb]中与可视化结合,帮助理解方程求解过程。
矩阵解法(适合高中阶段)
将方程组表示为矩阵形式Ax=b,其中:
A = [[1, 1], # 系数矩阵
[2, 4]]
b = [[35], # 常数项向量
[94]]
通过矩阵求逆可得解x=A⁻¹b。在Python中实现如下:
import numpy as np
A = np.array([[1,1],[2,4]])
b = np.array([[35],[94]])
x = np.linalg.inv(A) @ b # 矩阵求逆法
x_ = np.linalg.solve(A,b) # 直接求解法
两种方法均得到结果[[23.],[12.]],完整代码见[Book3_Ch23_Python_Codes/Bk3_Ch23_01.ipynb]。
符号计算与验证(适合大学阶段)
使用SymPy库进行符号推导,验证解的正确性:
from sympy import symbols, solve
x1, x2 = symbols(['x1', 'x2'])
sol = solve([x1 + x2 - 35, 2*x1 + 4*x2 - 94], [x1, x2])
# 输出 {x1: 23, x2: 12}
符号求解过程在[Book3_Ch23_Python_Codes/Bk3_Ch23_01.ipynb]中展示了如何通过计算机代数系统进行数学推理。
教学实验:数据拟合与模型验证
在[Book3_Ch24_Python_Codes/Bk3_Ch24_01.ipynb]中,通过生成模拟数据:
num_chickens = np.array([32, 110, 71, 79, 45, 20, 56, 55, 87, 68, 87, 63, 31, 88])
num_rabbits = np.array([22, 53, 39, 40, 25, 15, 34, 34, 52 , 41, 43, 33, 24, 52])
使用最小二乘法拟合兔子数量与鸡数量的线性关系,得到回归方程y=0.5x+0.3,进一步验证了鸡兔数量的线性关系模型。
马尔可夫链扩展(进阶应用)
[Book3_Ch25_Python_Codes/Bk3_Ch25_01.ipynb]将问题扩展到动态系统,定义转移矩阵:
T = np.matrix([[0.7, 0.2], # 状态转移概率
[0.3, 0.8]])
pi_i = np.matrix([[0.6], [0.4]]) # 初始状态分布
pi_i_1 = T @ pi_i # 下一状态计算
通过矩阵乘法演示系统状态的演化过程,展示了线性代数在概率模型中的应用。
教学资源与进一步学习
- 基础解法代码:[Book3_Ch23_Python_Codes/Bk3_Ch23_01.ipynb]
- 数据拟合实验:[Book3_Ch24_Python_Codes/Bk3_Ch24_01.ipynb]
- 矩阵应用扩展:[Book3_Ch25_Python_Codes/Bk3_Ch25_01.ipynb]
- 理论讲解:[Book3_Ch23_鸡兔同笼1__数学要素__从加减乘除到机器学习.pdf]
本案例展示了同一个数学问题在不同学习阶段的解法,体现了从具体到抽象、从算术到代数的思维发展过程,建议学习者按顺序阅读相关章节并动手实践代码,深入理解数学思想的连贯性与递进性。
练习题与思考
- 尝试用消元法手动求解方程组,并与[Book3_Ch23_Python_Codes/Bk3_Ch23_01.ipynb]中的矩阵解法对比
- 修改[Book3_Ch24_Python_Codes/Bk3_Ch24_01.ipynb]中的数据,观察拟合结果的变化
- 在[Book3_Ch25_Python_Codes/Bk3_Ch25_01.ipynb]基础上,计算经过10次转移后的状态向量
通过这些练习,可以加深对线性代数核心概念的理解,为机器学习等高级应用打下基础。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



