1. 引言
“要把服务高质量发展作为建设教育强国的重要任务。”[1]。求木之长者,必固其根本;欲流之远者,必浚其泉源。为扎实基础学科的本科教育,教育部组织实施了“101计划”,其旨在以课程改革小切口带动解决人才培养模式大问题,实现高等教育改革创新发展新突破。该计划的主要工作是推进基础学科和“四新”关键领域核心课程建设,即在数学、物理学、化学、生物科学、基础医学、中药学、经济学、哲学等基础理科、文科和医科相关领域,在新一代信息技术、新能源等新工科相关领域,生物育种等新农科相关领域,预防医学等新医科相关领域,涉外法治等新文科相关领域,建设一批核心课程,推动核心教材、核心师资、核心实践项目建设,引领带动高校相关学科领域人才培养质量的整体提升。
高等数学作为众多课程的基础,是学生进行本科学习的基础必修课。与此同时,随着Python语言的不断成熟,Python逐渐成为受众最广的编程语言,亦成为许多理工科学生应具备的“基本功”。根据“101计划”课程建设要求和总体部署,结合计算机专业学生的培养计划,我们认为,引入Python语言到高等数学的教学中,利用Python语言辅助学生学习高数、服务课堂,对进一步落实计算机“101计划”、提升教学效果和人才培养效果具有重要意义。
2. 高等数学教学现状和引入Python的必要性
2.1. 高等数学教学现状
我国的高等教育早已进入了大众化阶段,而高等教育大众化的现实对高等数学课程的改革优化提出了更高的要求。有论文指出,相较于精英教育阶段,进入新建地方本科院校学生的数学基础较为薄弱,学生入学平均水平下降[2]。学生在知识基础、学习能力和自觉性等方面普遍有所降低。因此我们需要结合计算机“101计划”进行改革,只有积极主动地做出改变,以适应高等教育的新形势,才能从本质上提高教学质量和教学效果。
高等数学这门课程从十七世纪下半叶牛顿、莱布尼兹创建微积分理论,到十九世纪柯西对它的完善,直至最近一个世纪传入中国以来,课程体系与教学内容几乎是一成不变地出现在教师和学生面前。本质上,数学作为一种文化,一种创造性活动,还具有艺术特征。而当下的高等数课程却往往使高校学生对数学望而生畏,敬而远之。高数课堂普遍枯燥刻板,课堂氛围普遍冷淡,教师与学生互动少,理论教学篇幅过多,实际应用内容太少,高等数学教育也越来越偏向于填鸭式教育,不符合现代社会对大学教育的期待,也不利于培养学生独立思考问题和探究解决问题的能力。
2.2. 引入Python的必要性
传统的高等数学教学模式的枯燥刻板,导致了越来越多的学生需要一种新的教学模式来满足高等数学学习的需求,在众多的编程语言中,为什么选择引入Python语言进入高数课堂。经过查证分析,我们认为将Python语言引入高数课堂具有以下优势:
第一,多数学生感到高数课堂枯燥无味,其本源在于课堂所授数学知识与现实应用较为割裂。Python作为一种功能强大的编程语言,具有解决数学问题、绘制图表、进行数据分析等功能。虽然大多数计算机语言都可以满足数学计算需求,但高等数学作为大一新生入学的基础课程,面向的学生极有可能不具备编程基础,Python比与C语言、java等语言拥有更低的学习成本、更优秀的可读性和便利性,不会给零基础的学生造成过重的学习负担,无疑最适合用于辅助高等数学教学[3]。
第二,Python具有强大的数学计算库(如NumPy、SciPy等)与数据可视化库(如Matplotlib、Seaborn等),可以用于数学建模和仿真。学生可以使用Python编写程序来解决实际数学问题,从而加深对数学概念与数据分析方法的理解。
第三,Python是一种通用编程语言,可以用来实现各种算法。对于计算机专业的学生来说,通过Python实现数学算法,不仅可以加深对算法的理解,还可以通过尝试优化算法来提高计算效率,培养算法设计和优化的能力,为日后的学习与工作打下较为坚实的基础。此外Python语言有许多集成开发环境(IDE)和文本编辑器,提供了交互式的开发体验,使得学生可以在实时环境中编写和执行代码,并立即查看结果。这种实时反馈有助于加速学习过程,并提高学生的学习动力。Python也是一种开放源代码的编程语言,学生可以通过查阅网络文档、参与论坛讨论等方式获取帮助,并不断扩展他们的编程技能。
第四,在数学教育心理学视角下,引入Python语言到高等数学教学中,有利于提升学生的数学认知结构,从学生对于数学理解的心理本质出发,切实提升学习动力、提高学习效率[4]。教育心理学强调学习动机在学生学习过程中的重要性。高等数学往往因其抽象性和复杂性而使学生感到困难和乏味,而Python语言的引入可以为高等数学的教学提供新的工具和方法,其具有的简洁易读等特性以及在数据处理、可视化、及时反馈等方面的强大功能,都能吸引学生的注意力,激发学生的学习兴趣,提高学习的主动性。学生的认知发展是通过与环境的互动来实现的。传统课堂中,学生与数学知识间的互动形式多以做题为主,过程单调乏味。在高等数学教学中引入Python语言,学生可以通过Python来求解复杂的数学问题,验证数学定理,或者进行数学模型的模拟和实验,还可以利用Python社区进行拓展学习,帮助学生深入理解数学概念和原理,增加学生与外界的合作、互动,促进他们的认知发展,提高学生的创新能力。
3. Python语言在高等数学教学中的运用
3.1. 课程设计和内容
结合Python到高等数学教学中,我们需要把握学生对Python语言的理解,并且在必要的情况下我们还需要对一些Python的概念进行解释。在本次教改计划中假设学生有基本的编程知识(即能理解判断、循环和函数定义)和基础的Python编程环境。引入Python到高等数学教育中,不同于传统教学的口算和笔算,在教学过程中注重应用化、可视化,其中sympy库应当是学生主要应用的计算库。该库以符号计算为主,便于学生学习理解。它涉及到因式分解、化简、微分、积分、解代数方程、求解常微分方程等。
3.2. 引入教学举例
通过如下举例,启发高等数学教学新思路,可以从以下模式中衍生出新式PPT、作业题等。以下例题中涉及到的程序文件均以fromsympy import*开头。
3.2.1. 变限积分函数求导
变限积分函数是牛顿–莱布尼兹公式的理论基础,是求导和极限问题中的高频知识点,同时,作为一种重要的函数工具,也经常在考研题目中出现。然而大学教材在变限积分的应用方面论述很少或分散在教材中不同部分,因此许多学生无法一窥全貌、深刻理解。我们将引入python到该函数的讲解中,借助编程的优势辅助学生进一步学习理解。
例1 设函数
是由方程
所确定,求
。
解:对上式化简可得,
等式两端分别对x求导,
将x = 0,y = 0代入上式,可得
下面利用Python语言进行模拟实现,其程序代码如下:
x, y, t = symbols('x y t')
expr_1 = exp(-t*t)
expr_2 = x * sin(t) * sin(t)
integral_result_1 = integrate(expr_1, (t,0,x+y))
integral_result_2 = integrate(expr_2,(t,0,x))
integral_result_1
integral_result_2
z = integral_result_1 - integral_result_2
idiff_z = idiff(z, y, x)
idiff_result_z = idiff_z.subs(x, 0)
idiff_z
对变上限积分函数求导时,首先要弄清是对哪个变量求导,学生在实现计算时可以灵活运用代码来验证自己的想法,把变上限积分函数的自变量与积分变量区分开来。同时学生可以通过程序清晰得到运算结果,反馈验证自己书面计算的对错,形成程序与纸上互利共赢,帮助学生掌握有关极限的计算和导数定义、隐函数求导及积分的性质等知识点。
3.2.2. 一阶线性微分方程
一阶微分方程的教学目标是让学生理解方程解的结构,熟练掌握齐次微分方程、可分离变量的微分方程和一阶线性微分方程的解法,引入经典题型并用Python求解不仅可以激发学生的学习兴趣,而且能帮助教师优化教学方法,进而推进学生创新思维能力和综合素质的提升。
例1. 设函数y(x)微分方程
,满足条件
的解,求曲线y的渐近线。
分析:此题为2022年研究生入学考试题,学生在高等数学中会掌握包括公式法、常数变易法等解题方法,在此列出提及2种解法[5]。
解:原微分方程相应的齐次微分方程为
该齐次微分方程的通解为
设原微分方程的通解为
则
带入原微分方程进一步得
故求得原式通解为
对应的Python程序代码如下所示
x = symbols('x')
y = Function('y')(x)
C1 = Function('C1')(x)
homogeneous_diffeq = Eq(y.diff(x) + (1/(2*sqrt(x)))*y, 0)
homogeneous_solution = dsolve(homogeneous_diffeq, y)
C1_value = homogeneous_solution.args[1]
nonhomogeneous_diffeq = Eq(y.diff(x) + (1/(2*sqrt(x)))*y, 2 + sqrt(x))
v = Function('v')(x)
substitution = {y: C1_value * v}
substituted_diffeq = nonhomogeneous_diffeq.subs(substitution)
v_solution = dsolve(substituted_diffeq)
C1_solution = diffeq.subs(substitution)
y_solution = substitution[y].subs({C1: C1_solution.rhs, v: v_solution.rhs})
y_solution
f = (2*x+exp(1-sqrt(x)))/x
a = limit(f,x,oo)
f = 2*x+exp(1-sqrt(x))-2*x
b = limit(f,x,oo)
为了更好的理解渐近线的概念,可以利用Python进行绘制图像,如图1所示:
Figure 1. Graphs of special solution functions of differential equations
图1. 微分方程特解函数的曲线图
其Python绘图程序代码如下:
def func(x): return 2 * x + np.exp(1 - np.sqrt(x))
x_values = np.linspace(0, 1, 400)
y_values = func(x_values)
plt.figure(figsize=(8, 6))
plt.plot(x_values,y_values, label=r'$y = 2x + e^{1-\sqrt{x}}$', color='blue', linewidth=2)
plt.xlabel('x',fontsize=14)
plt.ylabel('y',fontsize=14)
plt.title('Plot of $y = 2x + e^{1-\sqrt{x}}$ in [0, 1]',fontsize=16)
plt.legend(fontsize=12)
plt.grid(True)
plt.tick_params(axis='both', which='major',labelsize=12)
plt.show()
通过编程代码,为学生免去冗杂的计算过程,有助于让学生专注于探索解题方法,降低试错成本。在过程中分析思考每一种方法的解题要点及思路,并允许学生通过电脑强大的计算能力来绘制出方程的图像,以便于进一步地理解解题步骤。
3.2.3. 三重积分
曲面积分一直都是研究生入学考试中高等数学试题的命题热点,也是大学高等数学学习的难点。我们可以通过Python绘图将一个积分区域进行可视化,使学生更加直观的理解多重积分的意义。
例1 计算三重积分
,
其中
,
,
,
。
分析:由题分析可得该图形应为1/4个半圆,主要考察学生对积分区域的理解。
解:在xOy平面上投影区域
对于D中任意一点(x,y),z的相应变化范围是
,所以

为了更好的让学生理二重积分的概念,可以对积分区域进行绘制图形进行描述和展现,如图2。
下面利用Python语言进行模拟实现,其程序代码如下
import numpy as np
import matplotlib.pyplot as plt
u1 = np.linspace(0, 0.5 * np.pi, 60)
v1 = np.linspace(0, 0.5 * np.pi, 60)
u2 = np.linspace(0, 1, 60)
v2 = np.linspace(0, 1, 60)
[u1, v1] = np.meshgrid(u1, v1)
[u2, v2] = np.meshgrid(u2, v2)
x1 = np.sin(u1) * np.cos(v1)
y1 = np.sin(u1) * np.sin(v1)
z1 = np.cos(u1)
z2 = 0 * u2 + 0 * v2
fig = plt.figure(figsize=plt.figaspect(1))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(u2, v2, z2,cstride=1, color='c', alpha=0.7)
ax.plot_surface(z2, v2, u2,cstride=1, color='c', alpha=0.7)
ax.plot_surface(u2, z2, v2,cstride=1, color='c', alpha=0.7)
ax.plot_wireframe(x1, y1, z1,cstride=2, color='red', alpha=0.5)
ax.set_xlabel("x Label")
ax.set_ylabel("y Label")
ax.set_zlabel("z Label")
ax.view_init(azim=10,elev=15)
plt.show()
Figure 2. Integral region of the triple integral
图2. 三重积分的积分区域
Python的可视化功能有助于学生对高等数学知识点的理解,让学生体验到编程语言给高等数学带来的优势,高等数学的思维也为程序的编写提供了理论基础。绘图程序的自定义程度但也对学生图像理解提出了挑战,学生在研究如何绘制出直观的图像时,也间接分析了重积分在图像上的涵义。
3.2.4. 方向导数
方向导数是多元函数微分学中非常重要却又极其抽象的概念,在对这类实际问题的数学描述进行分析时,我们可以借助几何直观、绘制做图理解方向导数的概念;借助Python代码认知方向导数与偏导数的关系。
例1 有一只蚂蚁在铁盘上点
处,铁盘上任意点的温度为
,问这只蚂蚁应沿着什么方向爬行,才能最快到达较凉快的地点?
分析:先找到温度函数
的梯度,然后蚂蚁应该沿着梯度的反方向移动,以最快地到达温度较低的地方。
解:先计算
的梯度
蚂蚁逃生路线应与梯度向量相切,代入起始点解微分方程
得曲线方程
,沿远离原点方向温度下降最快。
为了具体的体现出来温度趋势以及蚂蚁的移动轨迹,可以通过Python绘制梯度图,如图3所示。
import numpy as np
import matplotlib.pyplot as plt
def f(x, y): return 240 / (x**2 + 2*y**2 + 1)
def grad_f(x, y):
fx = -480 * x / (x**2 + 2*y**2 + 1)**2
fy = -960 * y / (x**2 + 2*y**2 + 1)**2
return fx,fy
x_vals = np.linspace(-2, 2, 100)
y_vals = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x_vals,y_vals)
Z = f(X, Y)
U, V = grad_f(X, Y)
plt.figure(figsize=(8, 6))
plt.streamplot(X, Y, U, V, color=np.sqrt(U**2 + V**2), linewidth=1,cmap='hot_r', density=2)
x_values = np.linspace(1, 2, 100)
plt.plot(x_values,x_values**2, '--', label='$y = x^2$',color='purple',linewidth=2.5)
plt.quiver(x_points,y_points, -U_points, -V_points, color='purple', width=0.005,headwidth=6
x_points = np.array([1, 1.25])
y_points = x_points**2
U_points,V_points = grad_f(x_points,y_points)
plt.imshow(Z, extent=[-2, 2, -2, 2],cmap='hot_r', interpolation='spline36')
plt.colorbar(label='Temperature')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(0, 2)
plt.ylim(0, 2)
plt.title('Temperature Distribution')
plt.grid(True)
plt.show()
Figure 3. Temperature distribution map and ant movement routes
图3. 温度分布图以及蚂蚁运动路线
Python的库是多元且丰富的,众多函数文件有助于学生真正的“拥有”数学这项工具,将数学问题可视化,解答步骤可读化。在对照书面解题流程来编写代码的过程中思考每行计算步骤的联系,所应用知识的关系。学生通过代码会更容易将高等数学中所学知识点串联起来。如果学生有了新思路,那Python强大的社区资源会辅助学生在实现自己想法,不受知识壁垒的限制,将学生培养成一个敢闯敢做、勇于逐梦的人才。
3.3. 评估和反馈
在教学过程中定期进行评估,以确保学生真正理解了数学概念和Python编程的应用。可以通过在作业、小组讨论、项目作业等引入编程的方式来实现。例如对成绩的考评要采取平时作业、编程练习、小组项目、随堂测验相结合的多元化方法,以此引导学生应用数学,促进学生主动学习。平时成绩除课后作业等常规手段外也可以包括查阅资料、分析资料、应用举例、程序设计等;当然随堂测验也可以包括机考练习、PPT汇报等;期末考试可由教学指导委员会组织研制的试题库组卷,各自所占比例可根据学生的具体情况来定。考核标准不应强调通过期末成绩来鞭策学生,通过这种多元化的评估方法改革,从根本上改变普遍大学以笔试作为唯一或占大额的考核评价手段的弊端,让学生明白学习贵在平时积累,而不是靠考前“临阵磨枪”,引导“学贵在用”。对以上方法,浙江某学院就在2009年将Matlab引入高等数学教学中,进行了5年的教学实验,并取得不错的成绩[6],从一定程度上证明这种新思路是可行的并值得探索的。
3.4. 优势与挑战
与其他编程语言相比,Python语言仍具有独特的优势。常见的可用于高等数学教学的编程类语言还有MATLAB、R语言等[7],但二者的局限性表现为应用领域相对较窄,其中MATLAB的应用基本集中在科学和工程领域,而R语言多用于统计学领域。相比之下,Python语言具有可用于多种领域,包括Web开发、数据科学、人工智能、机器学习、科学计算、自然语言处理、网络编程等,其灵活性和通用性使得Python成为了一个全能的编程语言,对于计算机专业的学生而言,Python语言对于其后续专业的学习将具有更深远的帮助。
利用Python语言辅助高等数学的教学确实为教师和学生带来了很多便利,如利用可视化理解数学概念、利用编程求解复杂问题等。然而,这种教学方法也面临一些挑战。首先,我们无法确保所有的学生都具有编程基础,而高等数学作为大一新生必修课,如何合适地将Python语言融入高等数学的教学中,使学生既能够理解、运用Python语言,同时避免学生花费大量精力在Python语言的学习上,造成本末倒置现象,是值得高等教育工作者们思考的问题。其次,在课堂上使用Python进行教学可能会分散学生的注意力,尤其是当学生在解决技术问题或调试代码时。这也对教师们对于课堂的把控能力提出了更高的要求。
4. 教学改革手段和预期成果
4.1. 教学改革方法
4.1.1. 调整教学模式
新高等数学教育应该在传统高等数学教育上取其精华而去其糟粕,站在巨人的肩膀上以获得更新更广的视野。利用Python对高等数学进行辅助教学,可以选择合适的工具和库,如NumPy可以用于进行数值计算,如矩阵运算、线性代数等,SciPy可以提供许多科学计算函数,如积分、微分、优化等,matplotlib和seaborn可以用于绘制图形和可视化数据,这些工具均有利于学生更加直观、深入地理解高等数学。教师在备课时还可以利用Python制作交互式教学材料,如使用Jupyter、Notebook或PowerPoint等工具,结合Python代码和图形,展示数学概念和解题方法,或者在课堂中利用提前编写的Python代码来生成数学问题,让学生在线解答并提交并自动评分。课后教师也可以选择性地布置部分编程作业,要求学生使用Python解决如数值计算、数据分析等数学问题,在对知识进行巩固复习的同时,学生的编程能力也得到了锻炼。此外,教师还可以选使用Python编写代码,自动分析学生作业中的错误和不足之处,提供有针对性的反馈;通过在线调查收集学生对Python辅助教学的反馈,不断改进和优化教学方法和材料,最终达到教学相长的目的。
4.1.2. 采取渐进式教学
罗马不是一天建成的,引入Python到高等数学教育中应追求循序渐进。考虑到面对高等数学教育的普遍为大一新生,为了避免给学生带来过大的学习压力和困惑,我们应逐步引入Python语言。教师应当恰当的使用Python编程将抽象问题直观化、零星问题结构化[8],从简单的数学问题开始,例如数列求和、函数图像绘制等,以帮助学生逐渐熟悉编程环境和基本语法。同时注重基础知识和强调概念理解,确保学生已经掌握了必要的数学基础知识,包括函数、导数、积分等。这样才能更好地理解编程过程中涉及到的数学概念和方法。尽管在大一新生的高等数学课程中引入Python可能需要更加谨慎和适度,但通过合理的教学设计和方法选择,仍然可以让学生从中受益。
4.1.3. 开展个性化教学
高等数学作为一门基础通识课,面向各个专业的学生。由于专业设置的不同,在进行教学前应了解不同学生的学习需求和背景,根据他们的实际情况进行个性化教学。计算机相关的专业必定对于编程能力有着更高的要求,作为进行基础课程教学的老师,可以多进行一些实例演示,如展示自己的研究成果或利用编程带领学生解决一些实际问题,以此展示Python的实际应用价值,并激发计算机类专业的学生对于后续专业课学习的热情。而对于具有一定基础的学生,提供自主学习的机会,鼓励学生利用Python语言解决更复杂的问题、参加相关比赛或者开展个人项目,也是高等数学教育者应当注重的。
4.1.4. 提供支持与鼓励
Python作为编程语言,在初高中阶段接触较少,部分学生可能存在入门较困难的情况,甚至出现畏难心理。对于那些对学习有困难或缺乏自信心的学生,及时提供支持和鼓励,帮助他们克服困难,激发学习兴趣。同时,向学生传达积极的学习态度和价值观,鼓励他们勇敢尝试新事物,并相信自己的潜力。
4.2. 预期成果
通过Python编程实践,学生可以直观地看到数学概念在实际情境中的应用,获得更深刻理解,解决更加复杂的数学问题,其问题解决能力和创新意识得到显著提升。Python灵活且强大的库支持使得学生能够不仅仅局限于课本,探索更多数学领域,并尝试不同的解决方法,有助于学生在数学领域有所建树。编程训练能够培养学生的计算思维能力,即将问题转化为计算机可以理解和处理的形式,然后利用编程语言解决问题,这种数学建模能力对计算机专业学生的未来发展具有重要意义。对于一些对传统数学课程缺乏兴趣的学生来说,引入Python编程,可以使学习过程更加生动有趣,打破传统数学的刻板印象,激发学生对数学的兴趣,在一定程度上会增加他们的参与度和学习积极性,从而有更多的学生愿意接触数学,提升教学效果。同时,Python作为基础的编程软件,也是计算机专业学生必备的基础能力,在高等数学教学中引入Python编程,也有利于锻炼学生对于Python语言的使用能力,为后续的专业课学习奠定基础。
5. 结束语
在计算机“101计划”背景下,将Python语言融入高等数学的教学中,对提升计算机专业的人才培养水平和促进高等数学教学适应新的时代形势起到了积极的推进作用,然而,这种教学模式也存在一些局限,例如在高等数学的教学中仅仅用Python语言去辅助解决一些简单的例题,部分学生可能产生高等数学的考试中不考察Python的运用而不愿额外学习的想法,或者出现一些学生过度依赖Python的计算功能,不愿亲自计算,这样的现象反而与本教学改革的初衷背道而驰。因此在教学中引入Python语言需要合理的方法和策略,以确保它能够有效地提高学生的学习效果与能力,而不是成为“花拳绣腿”。此外,在引入Python语言之前,明确教学目标和保持教学的平衡和合理性也是至关重要的。确定在课程中引入Python的目的,是为了帮助学生更好地理解数学概念,还是为了提高他们的计算机编程能力?清晰的目标有助于指导教学方法和策略的选择,不同院校应当结合本校定位、教学目的和教学能力做出判断。
就数学本身而言,它对社会的作用已从幕后走到台前。与计算机相伴产生的数学技术以及飞速发展的核心数学,正在改变过去的数学观念教育需要顺应时代潮流,因此改革是必不可少的,我们应该敢于尝试新鲜事物。引入Python语言到高等数学教学中为落实“101计划”提供了一个新思路,希望其能在未来帮助更多学生学习高等数学知识、扎实编程基本功,为国家培养更多基础扎实、适应时代的新型人才。
基金项目
深圳技术大学教学改革项目“计算机‘101计划’背景下的数学课程教学改革的探索”(20241010);广东省高等教育科学研究专题“人工智能人才培养的产学互增理论与应用研究”(2023GXJK471);深圳技术大学教学改革项目“产学互增式成长型人工智能人才培养”(20231056010015)。
NOTES
*通讯作者。