王荣良:数学建模与编程教学融合的计算思维教育分析
2024-04-28 02:52:26

王荣良:数学建模与编程教学融合的计算思维教育分析

王荣良:数学建模与编程教学融合的计算思维教育分析

教学实践中数学建模应用的疑惑

《普通高中信息技术课程标准(2017年版)》(简称《课标》)指出 :计算思维是指个体运用计算机科学领域的思想方法 ,在形成问题解决方案的良数过程中产生的一系列思维活动。这一系列的学建学融思维活动包括界定问题、抽象特征、模编建立结构模型、程教合理组织数据等操作。计算教育可见,分析建模是王荣形成解决方案所产生的一系列思维活动中的重要环节之一。

模型是良数对事物原型进行模拟或抽象后形成的在某些方面不失真的近似反映。模型可分为对真实事物按比例缩放的学建学融直观模型、知识或经验存储于人脑中的模编思维模型 、用符号语言抽象描述事物特征及关系的程教符号模型等  ,不同学科也会用不同模型来描述并解决学科问题,计算教育如数学模型、分析计算模型、王荣经济模型等 。由于《课标》没有对“结构模型”作出具体阐述,在教学实践中,一线教师往往都将数学建模作为计算思维培养的重要环节 。

案 例 一

项目学习“BMI 指数测算” 。情境描述如下:在国家学生体质健康标准中 ,不仅测算身高  、体重 ,还会测算体质指数BMI。根据相关规定,BMI指数是用体重千克数除以身高米数的平方得出的数值,WHO规定了偏瘦 、正常、偏胖的BMI 值范围  。要求画出BMI 测算的流程图,并编写Python程序,能够根据输入的身高 、体重值判断偏瘦、正常还是偏胖 。教师设计的教学流程如下 :

①抽象与建模 ,确定BMI的计算公式,即完成BMI=体重值/身高值^2的数学建模;

②设计算法 ,画出反映分支结构的流程图 ,并编写程序;

③调试运行 ,记录运行结果 。

根据案例1预设的教学要求  ,学生以解决身边真实问题为目标,通过数学建模,学习算法的分支结构 ,实现计算思维的培养。对照《课标》关于计算思维的描述,仍存在一些困惑:其一 ,①中关于BMI 指数的数学建模 ,是不是符合《课标》中“建立结构模型”的要求,这涉及“建立结构模型”究竟是什么,及其与数学建模的关系;其二  ,①中抽象与建模  ,只是针对WHO有关规定书写了BMI计算公式及判别范围 ,该过程是否达到了数学建模教学所要求的学习效果 ,这涉及什么是数学建模教学的问题;其三 ,②中分支结构的运用 ,是否也是一种建模 ,这涉及如何理解程序设计中的建模问题。

数学模型与数学建模概念追溯

数学模型是将某事物系统的主要特征、主要关系经抽象以后用数学语言概括地或近似地表达的一种数学结构。数学模型是实际问题的一种数学刻画 ,可以是方程  、函数乃至图表或图形。例如 ,BMI的计算公式就是描述人的健康状况的一种数学刻画 ,结果用分段函数表示人的体型胖瘦是否正常  。

以数学模型为工具来解决实际问题的方法称为数学模型方法 。数学模型具有概括性 ,现实世界的一些问题可以归纳为某一成熟的数学模型来解决 。植树问题就是小学数学中的一个典型数学模型 ,通过该模型可以让学生深刻理解并感悟全长与间距 、棵数与间隔数之间的关系 。生活中许多例子可以归结为植树模型,如剪彩的人数和所得绳子的段数之间的关系 、日历中具体的日期和中间间隔的天数之间的关系都符合植树模型。

数学模型方法也包括建立数学模型 ,即数学建模,就是将某一领域的具体问题,经过抽象、简化 ,明确变量和参数 ,依据某种规律建立变量和参数间的数学关系(数学模型) ,然后求解问题,并对此结果进行解释和验证,必要时还需要修正模型 。如在案例1中 ,BMI模型的建立,就是依据健康医学方面的知识并采集相关数据 ,运用回归分析等数学方法,提出假设 ,建立BMI指数与身高、体重的函数关系以及判别健康与否的分段函数,最后对该数学模型进行验证 。由此可知 ,在案例1中,学生并没开展有关BMI的数学建模活动 ,而是直接引用了BMI的计算公式 ,教学设计中的数学建模只是一种问题导入的情境素材 ,其本质上是为了实现分支结构教学目标。

数学建模是数学学科的核心素养要素之一 。高中数学课程标准要求:数学建模活动是对现实问题进行数学抽象的一个过程,学生首先要学会用数学语言表达实际问题 ,再用数学方法构建模型解决问题。学生需要经历以下过程:联系生活实际,以数学的视角发现问题、提出问题 、分析问题、形成模型 ,通过数学的语言对模型进行参数确定、计算求解 ,对模型进行结果检验 、模型改进 ,解决实际问题 。

观点1:数学建模是数学学科的教学内容之一。在数学建模教学活动中,学生从现实世界中获取有价值信息并进行定量分析 ,运用所学的数学知识、技能以及思想方法表达现实问题,形成通过数量关系认识事物的思维品质 ,提高用数学思维发现和提出问题 、分析和解决问题的能力 。

数学建模中的编程应用分析

数学是人类对世界直观感知 、高度抽象以及理性认识的产物,数学建模则是应用数学联系现实世界的重要纽带 。数学建模的发展从数学学科向计算机 、生物 、物理等领域渗透 ,几乎涉及人类所有的知识领域  ,成为这些学科不可或缺的必备工具 。另外,计算机技术的应用 ,也提高了数学建模的功效  ,运用计算技术能够更有效、快捷、准确地发现问题、理解问题、解决问题 。无论是在模型假设阶段还是在验证阶段 ,计算机都可以帮助收集基本信息  、基本数据,提供多种假设的可能性 ,快速验证假设的有效性。特别是在模型求解时 ,通过编制计算机程序,可以高速、准确地求得模型的解 ,从而提高数学模型的应用效率。开展数学建模教学 ,融入编程及算法实现的教学内容 ,既反映了计算机技术支持下数学建模解决问题的真实现状,也有利于通过跨学科学习培养学生解决问题的综合能力 。

案 例 二

笔者早期主编的《数学建模与算法实现》一书中收录的一个高中数字建模教学案例“篮球罚球投篮”。问题情境如下:按照标准尺寸 ,罚球位置与篮框水平距离4.6米 ,篮框高3.05米 ,篮球直径0.246米 ,质量0.6千克,篮框直径0.45米 ,讨论怎样的出手角度和出手速度可以使罚球投中成功率最高。学习活动设计如下 :

①分析问题,简化条件,提炼关键信息,如不考虑篮球在空中运动时的空气阻力和篮球自转产生的影响;

②分析篮球、球架、球框等参数关系,提出反映出手高度、出手速度、出手角度与上述参数之间关系的函数表达以及合理的数值范围,即实现初步的数学建模;

③编制程序 ,采用循环方法,针对不同的出手高度和出手速度 ,计算合理的出手角度,记录数据;

④应用数学模型,分析数据 ,得到若干结论,如随着出手速度的增加 ,出手高度对出手角度的影响变小 。

比较案例1和案例2可以发现,案例2中的学生经历了数学建模的全过程,将身边的一个非纯数学问题转化为数学问题并用数学方法解决 。教学过程主要体现了数学思想方法的培养,计算思维支持学生自如地使用编程工具解决数学建模过程中的计算问题。在实际教学实践中,要求学生已经掌握了循环结构的编程技能 ,能够以编程技术为工具获得投篮命中的出手高度 、出手速度 、出手角度相关数据供分析 。因为如果学生不具备相应的编程技能,就会出现两方面的问题 :其一,学生在数学建模的问题解决过程中 ,难以主动意识到用编程的方法产生数据进行分析;其二 ,学习编程技能所需要的时间成本开销可能会冲淡数学建模教学的连贯性  。

观点2:案例2是以数学思想方法学习为教学主线,编程技术是教学实施环节中的一种支持工具。在这一类教学实践中 ,学生计算思维的培养主要体现在计算学科思想方法应用的意识建立和熟练应用方面,而应用意识的养成是以掌握学科方法为前提的。

计算学科中的模型与建模

模型方法就是根据研究要求,舍弃次要的 、非本质的因素 ,抓住主要的 、本质的因素,建立一个便于研究 、能反映研究对象目标要求的新形象。模型方法并不是数学学科所独有的 ,如知识管理专业就用DIKW模型描述从数据、信息 、知识到智慧的进阶关系。由于专业视角不同,模型也有局限性,如DI KW强调从数据中获取信息 ,而不强调客观世界的本体信息用数据表征的过程。在计算学科 ,建立模型就是运用模型方法表达出一般化的计算方法或计算过程 。计算思维作为一种学科思维 ,支持计算学科的建模过程 。

因此 ,运用模型方法可以简洁地表示计算学科的基本原理和工作模式。例如 ,由CPU、存储器、I/O及接口 、三种总线等组成的一般化的计算机组织结构,就是反映计算机工作原理的模型。依据该模型 ,可以解释键盘输入的键值通过I/O接口及总线读入CPU,并根据需要存入内存的工作过程 。

模型具有层次性 ,不同层次需要用不同的模型来表述 。在高级语言层次的模型 ,CPU不再被关注 ,重点反映的是数据的存储与处理流程。所以,程序设计所涉及的模型通常是一种反映自动执行序列的过程模型,这类模型的关键要素有数据结构、运算公式和流程控制,具体是通过变量定义、赋值语句、控制语句来构造自动化的。

案 例 三

求1+2+……+100的累加和的编程教学 。通常的教学过程如下 :①问题分析 ,确定采用s=s+i,i=1 、2……100的循环累加方法;②确定循环初值 、结束条件以及循环体的操作;③绘制流程图 ,编写程序 。

累加求和是程序设计中的一种基础算法  。如在案例3中,变量s作为累加器,与变量i 相加后结果存回累加器s中;随着i 的变化  ,该操作重复100次 。案例3的教学过程,是学习用循环结构实现累加的算法 ,也是经历建模的过程 ,该模型由变量s和i、运算公式s=s+i和i=i+1 、循环控制结构所确定 。①完成了累加求和学科方法的初步认识 ,②完成了累加求和算法的实施细节 ,③完成了用程序设计语言表述该模型的构造。从某种意义上说,算法就是用于计算的一种过程模型,程序是该模型的一种形式化表达。

学生在掌握了累加求和算法后 ,遇到相类似的问题,就可以用相同的算法或相似的建模方法来构造程序 。例如 ,对于连续输入100个数,求该100个数之和这样一个问题,学生很容易通过迁移获得解决问题的方法。一般而言 ,学生面对问题 ,可以迁移成熟算法的建模思想,或者将该问题转化为成熟算法问题 ,最终实现计算。以上建模和化归的应用 ,都是计算思维的体现 。

在案例1中 ,其教学目标是通过BMI指数判别学习分支结构。用建模的观点分析案例1,可以发现,该教学可以使学生经历这样一个建模过程,即建立一个由分支结构 、BMI计算公式以及相关参数变量组成的模型。同时,学生也形成这样一种解决问题的意识 :凡是具有分段函数特征的问题 ,都可以转换为分支结构的模型来实现可计算化 。

观点3 :计算思维重点体现在个体是否具备将问题可计算化的意识与能力,其中算法起到了很明显的作用 。算法作为一个成熟的模型,是运用计算学科的思想和建模方法,将问题一般化 ,经过抽象以及形式化表达 ,并经历自动化执行验证所形成的。理解并运用成熟算法,或经历算法形成的建模过程,都是良好的计算思维培养渠道 。

编程教学与数学建模的融合

由于数学学科和计算学科的天然关联,许多数学学科思想方法支持计算学科的发展 。在算法与程序实现中,往往可以直接使用成熟的数学模型,在案例1中,就是直接采用BMI模型作为程序的计算公式 。这是因为许多数学模型具有确定性、符号性等特征,恰好与程序设计所需要的可计算要求相吻合  。数学建模的思想方法也支持具有自动化属性的程序构造,在案例3中,累加求和本质上就是数学思想的实现 ,只是在数据结构、程序流程控制等方面有明显的计算机技术特征 。

案例3原本就是一个学习循环结构的典型例题 。从教学视角分析可以发现,该例题可以清晰地阐述循环结构的关键要素 ,如执行累加操作的循环体 、循环结束的判断条件以及循环初值设定等。在教学过程中 ,可以清晰地阐述这些关键要素,帮助学生理解循环结构的编程应用 。

事实上,案例3 的教学情境并不是一个完全真实的应用场景。作为一名程序员,如果要完成1+2+……+100这一类等差数列累加操作 ,一般不会采用累加求和的方法,而只要采用高斯定理s=(1+100)*100/50,仅需要一条赋值语句就可以高效地完成运算。

如果在教学中 ,采用高斯定理编程实现,将会如何呢 ?当然其教学目标就不再是循环结构的认识了 。将1+2+……+100的计算,用s=(1+100)*100/50公式表示,这一过程本质上也是数学建模 ,即用数学模型方法来解决数学问题。在此教学过程中,学生获得的体验是 :运用成熟的数学模型结论可以清晰地形式化表达问题 ,方便程序构造,最后自动化实现 。

如果学生没有高斯定理的认知基础 ,那么 ,在教学中,教师就需要引导学生完成1+2+……+100求和的计算推导 ,即首先需要数学建模s=(1+100)*100/50,然后才程序实现 。在此教学过程中 ,虽然高斯定理的推导是解决数学问题 ,但数学建模是为程序实现服务的,经历这样的过程 ,可以使学生体会到数学建模对程序实现的重要性,同时也感受到数学建模的思想方法可以迁移到程序实现的应用中 。

案 例 四

递推算法。主要教学过程如下 :

①引入课题 ,分享斐波那契和兔子的故事;②分析兔子问题 ,推导斐波那契数公式;③提出实际问题  :走道上有15块地板,规定每步可以走一块或两块地板 ,从第一块走到最后一块 ,共有几种走法?最后得出符合斐波那契数公式的结论;④编写程序并调试运行;⑤归纳总结。

案例4预设的教学目标是 :学会运用递推算法来解决实际生活问题,培养计算思维  。在实际教学中,因为学生没有斐波那契数的认知基础,故花费了大部分的课时来理解和推导斐波那契数公式,结果学生重点关注的是用数学的方法解决问题,缺乏体验到采用合理的算法构造及程序实现来实现递推的巧妙 ,同时也淡化了计算思维培养的实际效果。

观点4:数学建模作为将现实问题经抽象以后形式化表达的一种有效方式,在编程实现中有独特的作用 。编程教学是中小学计算思维培养的重要渠道,在计算思维教育中,需要正确理解数学建模的作用,合理运用数学建模开展编程教学 。

数学建模教学给计算思维教育的启示

计算思维教育不在于宏大叙事,而在于教学细微之处的落实。数学建模的教学实践经验对计算思维教育有启示意义 。程序设计的工作是通过问题分析 、构造算法,最终形成可以自动执行的指令序列。程序设计与数据建模在方法上很相似 。数学建模教学不满足套用现成的数学公式解决问题 ,而是强调学生在经历分析问题 、建立模型、确定参数、计算求解 、检验结果、改进模型过程中自觉地用数学的眼光观察世界并发现问题和解决问题 。编程及其算法教学可以借鉴数学建模的教学理念 ,不能仅以学会使用Python语言 、冒泡算法或者调用库函数实现人脸识别为目标 ,而应培养学生形成用计算的观点看待世界 ,形成将问题可计算化的意识与能力。这也正是计算思维教育的目标。

数学建模教学强调经历问题解决的全过程 ,计算思维教育也一样 。任何理性的思维都是解决问题的思维 ,在计算思维教育中 ,问题解决仅是一个基础性目标,不能把所有的问题解决都归为计算思维,关键在于是否采用计算学科的思想方法解决问题。从数学建模与编程教学相融合的教学案例中可以发现,数学建模与程序实现中的建模要求有相同也有不同。就模型类型而言 ,数学模型有函数模型 、概率模型 、几何模型等 ,而程序设计通常是选择合适的数学模型结果,并用程序语言描述的过程模型来实现,该过程模型的建立,是以自动化实现为目标的 ,是用形式化的方式精确表达的 ,具有符号性 、离散性、确定性等特征 ,可以实现对象控制和数据交换。

计算思维的培养不可能架空于计算学科知识与方法的学习而存在 ,个体对计算学科知识与方法的认识深度也影响其计算思维形成的深刻性。计算机应用的广泛性,促使计算思维有更广泛的应用价值,其教学形态往往是在与其他学科知识相结合解决实际问题的场景下完成的,具有跨学科学习特征 。

在本文中所列的数学建模与编程教学融合的案例中,数学学科和计算学科的思想方法也是相互交融互为支持的,但不同的案例所侧重的教学目标还是有差别的。以计算思维为培养目标的编程教学 ,其相关教学需要符合计算学科的问题解决脉络 ,合理运用计算学科知识与方法获得可计算的形式化表达,设计算法以获得可计算的构造 ,不能以跨学科学习为理由来掩盖对计算学科认识的模糊 。


(本文作者 :王荣良,华东师范大学)

文章刊登于《中国信息技术教育》2022年第12期

(作者:产品中心)