1. 引言
常微分方程(ODEs)在自然科学、工程技术等领域具有重要的理论和应用价值,是数值分析课程中的核心内容之一[1] [2]。然而,传统的教学模式往往过于注重算法推导和公式记忆,缺乏对其实际应用场景和深层次数学背景的探讨,学生难以从中获得对问题实质的全面理解。特别是在数值解法的教学中,学生的学习体验常局限于纸面计算,忽略了现代计算机工具在解决复杂问题时的优势。
随着计算机技术的快速发展,诸如Matlab和Python等计算工具为数值分析提供了丰富的支持手段,可以显著提升数值解法的教学效果。然而,在实际教学中,这些工具的应用往往受到教学时间限制、课程设计局限和师生技术水平的影响,未能有效整合到教学体系中。此外,现行的“以教师为中心”的教学模式无法充分调动学生的学习积极性,学生的自主探究能力和创新思维亟待提升[3]。
本文基于这些问题,结合计算机辅助教学和问题导向学习(PBL)模式,提出了一种创新的教学改革方案。以Lotka-Volterra捕食–被捕食模型[4]为案例,通过四阶龙格–库塔(Runge-Kutta)方法[5] [6]对常微分方程进行数值求解,旨在引导学生在理论学习与实际问题解决之间建立联系。通过该教学探索,学生不仅能掌握数值解法的基本理论,还能在动手实践中锻炼数值计算能力和解决实际问题的能力,为未来的学术研究或职业发展打下基础。
2. 现有教学问题与挑战
2.1. 理论与实践脱节
传统数值解法教学的重点集中在算法推导和解析能力的培养,学生学习内容通常停留在公式的推导和基本问题的求解上,缺乏对算法在复杂实际问题中应用的直观感受。例如,学生可能能够推导出四阶龙格–库塔法的公式,但在面对非线性动力系统的建模或解决实际问题时,难以灵活应用所学知识。这种理论与实践的脱节导致学生在毕业后难以适应实际科研或工程任务的要求。
2.2. 缺乏计算机辅助工具的使用
虽然计算机技术的发展为数值分析课程提供了极大的便利,现代数值计算工具能够快速处理复杂的数值问题,但目前课堂教学对这些工具的应用仍较为有限。许多课程仅在理论层面对算法进行讨论,未将现代计算工具融入教学体系,导致学生的计算机编程能力和算法实现能力未得到有效培养。此外,缺乏可视化的数值结果分析,学生难以直观感受到数值解法的意义和应用潜力。
2.3. 教学模式单一
目前的教学模式多为以教师讲授为主,缺少互动性和问题导向性。学生在被动接受知识的过程中,难以形成批判性思维或创新能力。同时,由于案例教学和团队协作的不足,学生的团队合作能力和综合素质未能在教学中得到充分锻炼。这种单一的教学模式无法适应现代教育对培养创新型人才的要求。
3. 教学改革方案与创新方法
3.1. 教学改革目标
为应对上述问题,本文提出了结合计算机辅助工具和问题导向学习(PBL)的教学改革方案,旨在实现以下目标:
a) 理论与实践结合:通过实际案例展示常微分方程数值解法的应用,帮助学生在实际问题解决中深化对数学原理的理解。
b) 计算机辅助教学:引入现代计算工具(如Matlab或Python),加强学生对数值算法的编程实现能力,培养其使用计算工具解决问题的能力。
c) 问题导向学习:设计以问题为核心的学习任务,鼓励学生自主探究和团队合作,提升其分析复杂问题和创新解决方案的能力。
3.2. 创新教学方法
为实现上述目标,本研究设计了一系列具体的教学方法,具体包括以下几点:
a) 引入计算机辅助工具:在课堂教学中,系统性地引入Matlab或Python等计算工具,结合教学内容设计相应的编程任务。例如,通过编写四阶龙格–库塔法的代码并应用于Lotka-Volterra捕食–被捕食模型的求解,学生能够从计算实践中理解算法的流程、精度和适用性。同时,通过数值结果的图形化展示,学生可以直观感受到算法求解的效果及其对真实问题建模的意义。
b) 案例驱动教学:以经典的Lotka-Volterra捕食–被捕食模型为切入点,将抽象的数值算法与实际问题紧密结合。具体教学设计包括:介绍生态系统中的基本动力学原理,引导学生构建对应的常微分方程模型,并利用四阶龙格–库塔法进行数值求解。通过调整模型参数(如捕食率或出生率),学生能够观察不同条件对生态系统稳定性的影响,从而更深入地理解数值方法在真实问题中的应用价值。
c) 问题导向学习:将教学内容设计为多个具有挑战性的项目任务,引导学生以团队合作的形式完成。例如,要求学生选择一个真实问题(如疾病传播模型、金融市场分析等),构建常微分方程模型并利用数值方法求解。在任务过程中,学生需要综合运用所学的数学知识、编程能力和分析能力,最终完成项目报告和展示。这一过程不仅强化了学生对课程内容的理解,还培养了其沟通能力、团队协作能力和创新思维。
4. 教学实施与案例分析
在本次教学实践中,我们围绕Lotka-Volterra捕食–被捕食模型,设计了一个完整的教学单元,旨在通过该经典模型的求解与分析,帮助学生系统掌握数值解法的基本原理、编程实现与结果可视化。首先,教学从Lotka-Volterra模型的背景知识讲解开始,引导学生理解该模型在生态系统动力学中的意义。重点讲解常微分方程组的构建、参数的实际意义(如捕食者的死亡率、捕食率等),并通过手绘示意图帮助学生直观理解种群数量随时间变化的动态行为。其次,通过龙格–库塔法的基本理论讲解,引入求解Lotka-Volterra方程的四阶龙格–库塔数值方法。通过逐步推导并结合Matlab实现代码的逐行解析,帮助学生掌握算法的内核思想,如时间步长对计算精度的影响。最后,布置实验任务,比如,学生被分成小组,合作完成指定任务。任务内容包括:1) 使用Matlab实现龙格–库塔法代码,对Lotka-Volterra方程进行数值求解;2) 通过调整参数(如
)观察生态系统的种群动态变化;3) 分析不同条件下种群数量的周期性波动以及系统稳定性的变化。
4.1. Lotka-Volterra捕食–被捕食模型
Lotka-Volterra捕食–被捕食模型[6]描述了捕食者与被捕食者之间的动态相互作用。模型的常微分为:
其中,
和
分别表示捕食者和被捕食者的种群数量,
和
分别表示被捕食者增长率,捕食率,捕食者增长率和捕食者死亡率。该模型可以通过经典的四阶龙格–库塔方法求解。记状态向量为
和常微分方程右侧函数为
,则龙格–库塔函数的中间步骤函数如下:
状态向量的更新公式为:
4.2. 数值求解与计算
学生可以通过编程实现上述Lotka-Volterra捕食–被捕食模型的龙格–库塔数值解法,以下是一个用Matlab实现的代码示例:
% 右侧函数f(t, x, y)
function dxdt = f(t, x, y, alpha, beta, delta, gamma)
dxdt = [alpha*x - beta*x*y; % dx/dt
delta*x*y - gamma*y]; % dy/dt
end
function LotkaVolterra_RK4()
% 参数设置
alpha = 0.1; % 被捕食者增长率
beta = 0.02; % 捕食率
delta = 0.01; % 捕食者增长率
gamma = 0.1; % 捕食者死亡率
h = 0.01; % 时间步长
T = 100; % 总时间
t = 0:h:T; % 时间数组
% 初始种群数量
x0 = 40; % 被捕食者初始数量
y0 = 9; % 捕食者初始数量
% 初始化种群向量
z = [x0; y0]; % 初始状态向量[x(0), y(0)]
% 初始化结果存储
num_steps = length(t);
X = zeros(1, num_steps); % 被捕食者种群数量
Y = zeros(1, num_steps); % 捕食者种群数量
X(1) = z(1);
Y(1) = z(2);
% 四阶龙格–库塔法求解
for n = 1:num_steps-1
% 计算四个k值
k1 = f(t(n), z(1), z(2), alpha, beta, delta, gamma);
k2 = f(t(n) + h/2, z(1) + h*k1(1)/2, z(2) + h*k1(2)/2, alpha, beta, delta, gamma);
k3 = f(t(n) + h/2, z(1) + h*k2(1)/2, z(2) + h*k2(2)/2, alpha, beta, delta, gamma);
k4 = f(t(n) + h, z(1) + h*k3(1), z(2) + h*k3(2), alpha, beta, delta, gamma);
% 更新种群
z = z + (h/6) * (k1 + 2*k2 + 2*k3 + k4);
% 存储结果
X(n+1) = z(1);
Y(n+1) = z(2);
end
% 绘制种群随时间的变化
figure;
plot(t, X, 'b', 'LineWidth', 2); % 被捕食者种群数量
hold on;
plot(t, Y, 'r', 'LineWidth', 2); % 捕食者种群数量
xlabel('时间 t');
ylabel('种群数量');
title('Lotka-Volterra捕食–被捕食模型');
legend('被捕食者', '捕食者');
grid on;
% 绘制alpha对种群的影响
alpha_values = [0.05, 0.1, 0.2];
figure;
for i = 1:length(alpha_values)
alpha = alpha_values(i);
z = [x0; y0];
X_alpha = zeros(1, num_steps);
Y_alpha = zeros(1, num_steps);
X_alpha(1) = z(1);
Y_alpha(1) = z(2);
for n = 1:num_steps-1
k1 = f(t(n), z(1), z(2), alpha, beta, delta, gamma);
k2 = f(t(n) + h/2, z(1) + h*k1(1)/2, z(2) + h*k1(2)/2, alpha, beta, delta, gamma);
k3 = f(t(n) + h/2, z(1) + h*k2(1)/2, z(2) + h*k2(2)/2, alpha, beta, delta, gamma);
k4 = f(t(n) + h, z(1) + h*k3(1), z(2) + h*k3(2), alpha, beta, delta, gamma);
z = z + (h/6) * (k1 + 2*k2 + 2*k3 + k4);
X_alpha(n+1) = z(1);
Y_alpha(n+1) = z(2);
end
plot(t, X_alpha, 'LineWidth', 1.5); hold on;
end
xlabel('时间 t');
ylabel('被捕食者数量');
title('不同 \alpha 对被捕食者数量的影响');
legend('\alpha = 0.05', '\alpha = 0.1', '\alpha = 0.2');
grid on;
% 绘制 beta 对种群的影响
beta_values = [0.01, 0.02, 0.05];
figure;
for i = 1:length(beta_values)
beta = beta_values(i);
z = [x0; y0];
X_beta = zeros(1, num_steps);
Y_beta = zeros(1, num_steps);
X_beta(1) = z(1);
Y_beta(1) = z(2);
for n = 1:num_steps-1
k1 = f(t(n), z(1), z(2), alpha, beta, delta, gamma);
k2 = f(t(n) + h/2, z(1) + h*k1(1)/2, z(2) + h*k1(2)/2, alpha, beta, delta, gamma);
k3 = f(t(n) + h/2, z(1) + h*k2(1)/2, z(2) + h*k2(2)/2, alpha, beta, delta, gamma);
k4 = f(t(n) + h, z(1) + h*k3(1), z(2) + h*k3(2), alpha, beta, delta, gamma);
z = z + (h/6) * (k1 + 2*k2 + 2*k3 + k4);
X_beta(n+1) = z(1);
Y_beta(n+1) = z(2);
end
plot(t, Y_beta, 'LineWidth', 1.5); hold on;
end
xlabel('时间t');
ylabel('捕食者数量');
title('不同\beta对捕食者数量的影响');
legend('\beta = 0.01', '\beta = 0.02', '\beta = 0.05');
grid on;
end
程序运行结果如下:
Figure 1. Population sizes in the Lotka-Volterra predator-prey model
图1. Lotka-Volterra捕食–被捕食模型的种群数量
图1展示了捕食者与被捕食者数量随时间的典型周期性变化,结果表明两者之间存在相互依存关系:被捕食者数量的增长为捕食者提供了食物来源,而捕食者数量过高则会导致被捕食者数量减少,从而影响捕食者的生存,最终形成周期性波动。这一结果与理论分析高度一致,为学生直观展示了数学模型在解释生物现象方面的作用。
Figure 2. The influence of prey growth rate on the numbers of predators and prey
图2. 被捕食者增长率对捕食者和被捕食者数量的影响
图2显示了在不同
(被捕食者增长率)条件下,被捕食者种群数量随时间的变化趋势。当
取较大值时,被捕食者种群数量增长迅速,周期振幅增大,而捕食者数量也随之波动增强。学生通过该实验理解了参数敏感性的重要性,进一步强化了对模型参数调节实际意义的理解。
Figure 3. The impact of predation rate on the populations of predators and prey
图3. 捕食率对捕食者和被捕食者数量的影响
图3比较了不同
(捕食率)值下捕食者数量随时间的变化。当捕食率较高时,捕食者的种群数量波动更大,且周期更短,表明捕食行为的强弱显著影响捕食者的繁衍和生存能力。学生通过多次实验,探索了捕食率变化对种群动力学的影响规律,从而加深了对数值分析与实际问题建模间联系的理解。
4.3. 教学效果分析
通过数值模拟,学生可以清晰地看到种群数量随时间的变化,以及捕食者与被捕食者之间的动态关系,其中Matlab编程任务使他们更加直观地理解了数值方法的流程,弥补了理论学习中算法抽象性较强的问题。其次,教师可以引导学生讨论参数对种群波动的影响,调整模型参数并观察结果变化的任务激发了他们的好奇心,使学习过程更加有趣和贴近实际问题。最后,小组合作与课堂展示环节帮助学生培养了团队协作能力,同时强化了问题表达与解决能力。
5. 结语
本文结合计算机辅助教学与问题导向学习(PBL)模式,探索了常微分方程数值解法的创新教学设计。以Lotka-Volterra捕食–被捕食模型为案例,采用四阶龙格–库塔法进行数值求解,学生通过编程实践、参数分析与可视化展示,不仅深化了对数值方法原理的理解,还增强了其理论知识与实际应用的结合能力。然而,该教学设计仍存在一些不足之处。例如,学生在编程能力上的差异可能导致部分学生在任务完成时出现困难,未来可以通过增加基础编程技能的教学环节或提供更多代码模板来解决这一问题。此外,由于教学时间有限,其他数值方法(如隐式方法,线性多步方法)的讲解未能深入展开,未来可在课程中设计更多丰富的案例与算法练习。
综上所述,本文提出的教学改革方案为数值分析课程提供了一种新的探索方向,具有较高的可推广性。未来将进一步完善教学设计,将更多非线性动力系统案例引入课堂,并扩大改革方案的适用范围,以进一步提升学生的综合能力与学习体验。
基金项目
国家自然科学基金项目(12201586);中国地质大学(武汉)教改项目(2023107, 2022132);江西省教育厅教改项目(JXYJG-2024-098, JXJG-24-8-14)。
NOTES
*通讯作者。