
系列课程“Wolfram科学计算:思维与技能”,包括基础篇、数据篇、模拟篇以及实验篇,课程建设历经三个阶段,2008-2012青铜时代,2013-2016白银时代,2017-2022黄金时代。
何为“计算思维”?综合运用模型、算法以及编程,实施计算,解决问题。这是课程对“计算思维”的定义。
提升一门课的“高阶性”不等于单纯地甚至无谓地增加课程的难度。学生学习兴趣被持续激励,学生主动探索解决过程的底层逻辑,学生有机会直面复杂工程问题,这些应是“高阶性”的内核。
系列课程“Wolfram科学计算:思维与技能”,包括基础篇、数据篇和模拟篇,课程以“范例教学”理念为指引,全程案例驱动,沿着“算法”和“编程”两条主线打通学生教养性学习的任督二脉。
课程进行了周密的目标设计,为每一场讲座制定了“小目标”,而且所有学习目标都是可以测量的;仅“Wolfram科学计算:思维与技能”(基础篇)就包括27次编程复演练习和5次大作业,这些是达成目标的保障,请务必认真对待。
从材料测试数据中挖掘其微观结构、宏观性能两方面的信息,这对“数据分析及可视化”相关的算法、绘图、建模提出了非常高的要求。以此为例,不难理解基于一门编程语言掌握这些技术的意义。
将数据记录到Mathematica笔记本中,需要借助“列表”这一数据结构。这是数据分析及可视化的第一步。范例中例举了纯净硅在低温下的热容数据。请认真完成复演No. 28的实操练习。
此外,本章是系列课程“Wolfram科学计算:思维与技能”的第二篇的第一个内容,其在系列课程内部的编号是7,因此你会看到“§2.1 数据处理·绘散点图”、“§7 数据处理·绘散点图”、“7.1 记录”等标题。以后的章节也会采用这种排序方式。
以嵌套的花括号录入数据,以嵌套的中括号提取数据,这是Wolfram语言的内部约定。硅热容的数据将贯穿“数据篇”,其来源自文献:Physical Review,1959(113)33-39. 请认真完成复演No. 29的实操练习。
此外,本节在系列课程“Wolfram科学计算:思维与技能”内部的排序为“7.2 提取”。
现代化的测试仪器通常会自动将数据结果保存在一个ASCII文件中,这个以“.DAT”结尾的文本文件可能包含了成千上万个数据点。Wolfram函数Import可以从ASCII文件中自动导入这些数据。请认真完成复演No. 30的实操练习。
列表是 Wolfram 语言的主要结构,用来表示各种类型的集合、数组以及序列。列表可以是任意结构和大小,甚至包含数百万个元素。在Mathetica 13中,Wolfram 语言直接在列表上操作的函数超过 1000个,使得列表成为一个协同工作的强大工具。请认真完成复演No. 31的实操练习。
数据点在直角坐标系平面上的分布图,即散点图,其表现了因变量随自变量而变化的大致趋势。绘散点图是后面的数据分析的基础。调用ListPlot函数可以轻松地为数据绘制散点图。请认真完成复演No. 32的实操练习。
一幅规范的绘图可以为你的实验报告增色不少。数据点清晰而醒目,坐标轴及数据背景标注明确,这些都是需要遵守的规则。Wolfram语言中的函数ListPlot拥有很多非常实用的选项,例如PlotStyle、PlotLabel、AxesLabel等。请认真完成复演No. 33的实操练习。
图片返回值自带一个建议栏,ListPlot函数的选项能够实现的功能,例如调整图片大小、标注坐标轴等,借助于这个建议栏也都可以实现,当然其中也包括以指定格式导出图片。你应该多花费时间尝试这个建议栏的各个菜单按键。请认真完成复演No. 33(2)的实操练习。
借助于Mathematica也可以绘制出像Origin中的那种点线图。绘制点线图的关键技术在于以何种方式将那些离散的数据点连接起来,这涉及到一种常用数值算法——插值法。请认真完成复演No. 34的实操练习。
本章是系列课程“Wolfram科学计算:思维与技能”的第二篇的第二个内容,其在系列课程内部的编号是8,因此你会看到“§2.2 数据插值·绘点线图”、“§8 数据插值·绘点线图”、“8.1 绘点线图·函数 ListLinePlot”等标题。以后的章节也会采用这种排序方式。
插值法一个重要应用在于填补数据中的空隙。从ListLinePlot函数返回的点线图中,拾取坐标,捕获实验区间内任意一点温度下的硅热容数据,这在Mathematica中是被轻易实现的。至此,你应该可以归纳出“插值法”的基本思想来了。
隐藏在ListLinePlot函数背后的算法为分段线性插值,其全称“拉格朗日分段线性插值”。合理地“分段”可有效避免Runge现象。这也是通用数据分析及可视化软件Origin在绘制XRD图谱时常用的方法。然而,这种处理方式是粗糙的,插值曲线在结点处失掉了连续性。在后续章节中,你将学习到修正的方法。请认真完成复演No. 35的实操练习。
Wolfram语言中的插值函数Interpolation默认采用分段三次Hermite插值算法。这是一种比分段线性插值更优的函数逼近算法。首次接触到的InterpolatingFuncition对象,是一种非常有用的程序结构,今后还会用到。对InterpolatingFuncition对象作赋值,对于后续的数据可视化是十分便利的。请认真完成复演No. 36的实操练习。
Wolfram语言及Mathematica提供了非常强大的绘图功能。善于综合运用ListPlot、Plot、Show等函数为程序作“画像”,将有助于深刻理解程序背后的算法原理。“画像”直观地表明:Hermite插值较之于线性插值的优越性,即连续且光滑。而这也为我们提出了建议——应该以何种方式去采集实验数据。请认真完成复演No. 37的实操练习。
通过填加选项方能发挥Interpolation函数的巨大潜能,例如实现更简单的分段线性插值(InterpolationOrder选项),亦或更复杂的B样条插值(Method选项)。较之于Hermite插值曲线,样条插值曲线更为光滑、美观。请认真完成复演No. 38、39的实操练习。
插值法、最小二乘法是最常用的两种函数逼算法,在数据分析及可视化中更有着广泛的应用。通过一次挑战——改进数值积分程序的计算精确度,你将更为深刻的理解和掌握插值法以及函数逼近方法。请认真完成复演No. 40的实操练习。
文献(Physical Review, 1959(113): 33-39)中所呈现的并非初始的实验数据,而是经过“线性化”加工后的形式。这样做的理由何在?花费额外的时间和算力做这件事儿是否值得?请你细心体会。“线性化”的前提条件至少有两点须要牢记并坚守——在前提条件未能被满足时,绝不随意为之。“线性化”是深思熟虑后的一系列操作,切忌为了线性化而线性化。
本章是系列课程“Wolfram科学计算:思维与技能”的第二篇的第三个内容,其在系列课程内部的编号是9,因此你会看到“§2.3 数据的线性化”、“§9 数据的线性化”、“9.1 目的、前提条件”等标题。以后的章节也会采用这种排序方式。
线性化数据的方法很容易掌握,困难在于你是否能够坚持原则:当直线的斜率和截距不含有物理意义且无助于分析数据时,选择放弃,而非随意为之。值得你思考的一个问题:“线性化”需要一系列重复而繁琐的操作,如何利用计算机轻松搞定呢?这也是下一小节的主题。
你首先需要构造一个通式!最简单的做法是仅从一个数据点、一组数据来着手。这考验你是否对列表这种数据结构有足够的了解呢?一对嵌套的中括号被用于从列表中提取出元素。对于当前的任务,这个方法很重要。请认真完成复演No. 41的实操练习。
一旦你能够从那个通式中识别出循环变量及循环体,那么你一定会选择遍历循环。如果你具有一定的C、JAVA的编程经验,那么你可以自己试试编写程序,将线性化操作自动化遍历整套数据。当然,你也可以复演讲座中的Do循环语句,甚至你可以直接下载程序。请认真完成复演No. 42、43的实操练习。
Wolfram语言惯用的迭代方式并不是为你熟知的Do循环、For循环,而是特有的迭代器Table函数。Table同时也是一个制表函数。你需要牢记该函数返回的是一个列表,每一步迭代的结果都将作为元素保留在列表中。请认真完成复演No. 44、45的实操练习。
一旦掌握了迭代器Table的用法,便可以轻而易举地将线性化操作自动化遍历整套数据。这次Table函数返回了一个嵌套的列表,其恰恰是我们所期望的存储数据的标准格式。绘制散点图将被用于检验线性化操作是否可行。请认真完成复演No. 46的实操练习。
一幅规范的绘图尽管直观但难于定量,构建线性模型将有助于进一步从物理层面上分析数据。Wolfram语言提供了多个最小二乘拟合函数,Fit函数是其中最实用、最简单的一个。但你需要事先搞清楚何为线性模型以及Wolfram语言是如何表示它的,即Fit函数的第二个变元。请认真完成复演No. 47的实操练习。
仿效文献(Physical Review, 1959(113): 33-39),利用Fit函数为硅的热容数据构建线性模型,利用Show等函数绘制如文献中所呈现的那样的点线图。最后,通过从物理层面上对数据进行深入分析得到与文献相同的结论。请认真完成复演No. 48、49的实操练习。
此前,针对线性化后的硅低温热容数据实施的线性回归分析以及函数Fit的底层数值算法正是最小二乘法。最小二乘法与插值法同属“函数逼近”算法。在定义了“偏差”之后,就可以轻易地区分开这两种算法。可以依据“偏差”δ是否为零来辨识二者。(当然也存在着特例,如“B样条插值”。)
更换数据背景,本章将面向石墨电导率的温度相关性数据来展开。数据来源于2013年发表于Carbon的一篇经典文献。与“线性化数据”的情况相似,最小二乘拟合也需要在一定的前提条件下实施。硬造出一个公式的勇气是可嘉的,然而往往丧失了从物理层面上深入分析数据的机会。这是得不偿失的。
阿列纽斯方程(Arrhenius equation)是一个非常有用的经验模型,在此被用于分析石墨的输运性质。方程中的指前因子A、活化能Eα具有明确的物理内涵。这节课巩固了前一章的数据线性化方法,同时也为后面的几小节提供了线性数据。请认真完成复演No. 50的实操练习。
LinearModelFit函数堪称一个功能强大的集成工具,从其返回值类型便可见一斑。FittedModel对象,这又是一个新型的返回值。它不是一个单纯的Wolfram函数,其具有“属性”,例如“BestFit”, “RSquared”等等。这些属性全面而详细地描述了由LinearModelFit函数构建的这个线性拟合模型。这一节的内容既丰富又坚深。请认真完成复演No. 51、52的实操练习。
构建数据的非线性拟合模型在很多情况下是一种更直接的做法。这方面的Wolfram函数有两个,FindFit和NonlinearModelFit,前者可以视为后者的“减配版”。FindFit函数以规则的形式返回拟合的模型,这需要你在掌握规则、规则变换后才能随心使用它。请认真完成复演No. 53的实操练习。
人类已经进入了工业互联网时代,大数据、人工智能、数字孪生体与各个工程技术领域之间正在进行着深度的融合,计算机不仅仅是解决问题的效率工具,它深刻影响了人们的作业方式、认知方式。“计算思维”不再是计算机专家和程序员的专属能力,而成为了一种普遍的认识和一类普适的技能,每一名学生都应该热心于它的学习和运用。君不见,当下所有复杂工程问题的解决都离不开计算思维的助力。这一切为非计算机专业的理工科学生提出了更高的要求:深谙计算机工作原理,精通一门高级编程语言,掌握必备的数值算法,开发或应用计算机模拟程序,……
“Wolfram科学计算:思维与技能”系列课程旨在启发计算思维、磨练计算技能。课程的总体设计以德国教育实践家瓦根舍因创立的“范例教学理论”作为指导思想。面向一门交叉学科的课程,放弃百科全书式授课思路,大胆地实施“缺漏”教学,教授最根本的、最基础的、最本质性的范例内容,以培养学生学习的主动性和创造性为目标。从科学计算、数据分析、基于方程的计算机模拟、仿真等方向上精选教学范例。沿着“算法”(积分梯形法则-迭代与递归-插值法-最小二乘法-牛顿法-有限差分法-有限单元法)和“编程”(命令式范式-面向过程-函数式范式-迭代式开发-增量式开发)两条主线打通学生“教养性”学习的任督二脉。
本课程是“Wolfram科学计算:思维与技能”系列课程的第二篇,基于“全球现代技术计算权威系统”Wolfram Mathematica高效、精准地处理、分析及可视化手头的实验数据,让几乎没有编程经验的学习者通过开发Wolfram程序深刻解读数据。数据篇课程涵盖四个专题,全程案例驱动,其中不乏“分析硅在低温下的热容数据”、“石墨电导率的阿列纽斯方程(Arrhenius equation)”等复杂工程问题。