1、教科版2019信息技术必修1数据与计算第4单元计算与问题解决4.2 数值计算教学设计【教材分析】采用“提出问题分析问题引入新知识解决问题总结提高”的编写模式,通过每一个典型的、针对性强的、贴近现实的案例,把相关的基本概念、解题的基本方法和思路传授给学生,从而使学生形成深刻、形象、牢固的记忆,对启发思维、激励热情、提高学习效率起到重要作用。程序设计不仅仅是让学生掌握一两门计算机语言,而是要让学生学习程序设计的基本概念和方法、掌握编程的技术,更重要的是培养学生逻辑思维和逻辑推理能力、自学能力、动手能力、分析问题和解决问题的能力、创新意识和创新能力。数值计算作为计算数学的主要部分和关键环节,研究求解
2、数学模型的理论及其算法和软件实现。算法针对实际问题求得符合精度的近似解,并对算法的收敛性、稳定性和误差进行分析、计算。数值计算方法的内容十分丰富,它在科学技术中正发挥着越来越多的作用,许多计算领域的问题,如计算物理、计算化学、计算经济学等都可归结为数值计算问题。本节我们将围绕项目“与数学公式面对面”展开,探讨在中学数学领域中常见的数学公式与程序设计的有趣结合。本项目主要包含“绘制数学函数曲线”和“求解裴波那契数列”两个任务。用学生熟悉的数学问题作为活动的主线,任务一重在实现学科知识的融通,将数学函数与计算机模拟相融合,突出计算机在问题解决过程中的地位和作用。任务二重在介绍数值计算中最常用的计算
3、方法迭代。【教学建议】在本项目的教学过程中,对于基本概念、基本理论不应过度强调,可通过案例演示,激发学生学习的积极性和求知欲;同时要向学生介绍该项目的学习方法,强调学习程序设计是培养耐心、毅力、务实、严谨的学习方法的有效途径。建议教师选取一些可激发学生思考的问题,在共同讨论、探究的过程中体验基本概念和基本理论。在教学过程中,引导学生学习数值计算方法内容的同时,训练和提升自己的计算思维能力,重视并积极探索如何通过程序来解决实际问题,并将其引入到教学内容中,推荐采用理论求解与计算机模拟相融合的教学模式。任务一绘制数学函数曲线,通过不同的方式绘制三角函数。培养学生的信息意识,能针对实际问题选择合适的
4、软件和方法;同时借助Python的科学计算模块和绘图库,突出算法思想、简化程序,同时让同学理解Python在程序设计中的优势,消除学生的畏难情绪,激发学习的热情。任务二是求解斐波那契数列。对于数列本身学生可以很轻松地求解,教师应该把重点落在递推式的分析及迭代实现上,便于学生举一反三,从一个问题入手学会一类问题的解决方法。在编程技能方面,要关注函数的定义及调用方式。【教学目标】1.感受数据的图形化表示。2.设计解析式或迭代方程,进行数值计算,解决问题。3.了解数值类算法在实际问题解决时的应用及常用方法。【教学重点、难点】数据的图形化表示。设计解析式或迭代方程,进行数值计算,解决问题。数值类算法在
5、实际问题解决时的应用及常用方法。【教学过程】第一课时 人们对计算机的最初应用大多是数值计算,主要借助计算机运算速度快、精确度高的特点来解决各种数学问题,如函数的计算、方程的求解、数列求和等都属于数值计算。数学是计算机科学的理论基础之一。在实际问题的求解过程中,有许多数学分支,如解析几何、离散数学等,都是计算机科学所依赖的重要理论工具。借助计算机程序,可以解决很多数学方法所描绘的数值计算问题。本节我们将围绕“与数学公式面对面”项目探讨在中学数学领城中常见的数学公式与程序设计的有趣结合。本项目主要包含“绘制数学函数曲线”和“求解斐波那契数列”两个任务。任务一绘 制数学函数曲线在数学课上经常需要手工
6、绘制函数图像,今天我们借助计算机来绘制函数图像。活动1用WPS表格绘制正弦曲线利用平时使用的电子表格软件就能绘制函数图像。方法如下:若以30为间隔,绘制0360之间的正弦函数图像,则首先需要在WPS中完成下列表格数据的计算。请填写表4.2.1。填表之后,选择相应的数据,建立折线图图表,设置x轴数据系列格式,可绘制出如图4.2.1所示的函數图像。 仔细观察图像,会发现图像的关键点太少,精度不够,图像不光滑。要想提高图像的光滑程度,就要减小角度间隔,但间隔增加,工作量也会随之增加:每隔10画一个点,数据表上就会增加300多行新数据;如果以0.1为间隔,将有3000多行数据。活动2利用Python绘
7、制正弦曲线 借助计算机程序描点,可以达到速度快且精确度高的效果。下面我们尝试利用Python编写程序绘制正弦曲线。 在Python中,绘制丽数图像一般要用到numpy和matplotlib两个模块,这两个模块需要另外安装。numpy模块简介 numpy是-一个科学计算包,其中包含很多数学丽数,如三角丽处理大型矩阵、矢数、矩阵计算方法等。通过该模块中的arange函数可以创建一个等差数列。如在02之间每隔0.01取个值,则可以用arange(0,2*numpy.pi,0.01)来表示,其中numpy.pi表示。下列代码可以产生sin(x)的若干个关键点。#加载numpy模块并取一个简洁的别名为n
8、p,便于后续引用importnumpyasnp #x在0到2m之间,每隔0.01取一一个点x=np.arange(0,2*np.pi,0.01)y=np.sin(x) #通过解析式计算列表x对应的列表y的值matplotlib模块简介 matplotlib模块是Python中最出色的绘图库,功能很完善。调用matplotlib.pyplot时,坐标系可以根据数值范围自动生成。 matplotlib的绘图原理很简单,利用plot画线函数就可以在直角平面内轻松地将(x,y)坐标点对连接成平滑曲线。例如:在上述代码的适当位置增加下列语句,就可以将刚才生成的关键点连接起来。#加载matplotlib.
9、pyplot并取别名为pltimportmatplotlib.pyplotaspltplt.plot(x,y) #将点对连线plt.show() #将绘制的图像窗口显示出来参考上述代码,让我们一起来完善以下Python程序,尝试绘出“sin(x)”“sin(-x)”和“sin(2x)2”的图像。 #加载numpy模块并取别名为np#加载matplotlib.pyplot并取别名为pltimportmatplotlib.pyplotasplt #列表x在0到2r之间,每隔0.01取一个点 #求sin(x)对应的列表y1的值y2=np.sin(-x) #求sin(-x)对应的列表y2的值 #求si
10、n(2x)/2对应的列表y3的值plt.plot(x,y1) #绘制sin(x)的图像 #绘制sin(-x)的图像 #绘制sin(2x)/2的图像plt.title(sin(x) #设置图像标题plt.xlabel(X) #设置x轴标题plt.ylabel(Y) #设置Y轴标题plt.show() #将绘制的函数图像窗口显示出来 运行上述代码,对比在活动1中生成的图像,程序绘制的函数图像果然平滑了很多,如图4.2.2所示。第二课时任务二求解斐波那契数列活动1用WPS求解数列 斐波那契在计算之书中提出了一个有趣的兔子问题:假设一对兔子每个月可以生一对小兔子,一对兔子出生后第2个月就开始生小兔子。
11、则一对兔子一年内能繁殖成多少对?10年呢? 根据描述,兔子的对数如图4.2.3所示。从第3个月起,每个月大兔子的对数等于上个月大兔子与小兔子的对数之和(即上个月兔子总对数),每个月小兔子的对数等于上个月大兔子的对数(即上上个月兔子总对数)。 使用电子表格可以很方便地求解,如图4.2.4所示。 我们发现,当计算到第74个月的时候,由于数据范围及表示精度的问题,导致结果出错,如图4.2.5所示。活动2用Python求解数列 第1个月和第2个月的兔子对数之和为第3个月的兔子对数,第2个月和第3个月的兔子对数之和为第4个月的兔子对数.每个月的兔子对数是前两个月的兔子对数之和,又同时作为下一个月兔子对数
12、的加数。这种重复反馈的过程称为迭代。 迭代法也称辗转法,是用计算机解决问题的一-种基本方法。迭代通常是为了接近并到达所需的目标或结果。每-次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。 由于在迭代系列中的每个月份兔子对数只跟前两个月有关,因此在编写程序时,只需两个变量f1和f2分别记录上上月和上月的数据。 请根据示意图完善下列程序代码。deffib(n):#利用迭代求斐波那契数列的第n个数f2=f1=1 #第1个月、第2个月初值设定foriinrange(3,n+1): #_ f1,f2=f2,f1+f2returnf2n=int(input(输入需要
13、计算的月份数:)print(兔子总对数为:,fib(n) #输出最终解程序运行结果如下:输入需要计算的月份数:74兔子总对数为:1304969544928657 利用迭代算法解决问题,有三个关键步骤:(1)确定迭代变量,如活动2中的fl、f2;(2)建立迭代关系式;(3)对迭代过程进行控制,这是编写迭代程序必须考虑的问题,不能让迭代过程无休止地重复执行下去。 现代自然科学和工程电子技术的研究过程中,都离不开大规模的数学计算问题。例如:数学类课程中的线性方程求解、微分方程求解、概率统计等;实用性和实验性技术应用中的模拟核试验、油田开发、飞机设计等。练习1.尝试用Python绘制y=x2-2r+1
14、的图像。2.尝试用辗转相除法求解两个正整数的最大公约数。【拓展训练】尝试用Python绘制 y = x2 2x + 1 的图像。 参考答案:import numpy as np #加载numpy模块并取名为npimport matplotlib.pyplot as plt #加载matplotlib.pyplot并取名为pltx=np.arange(-10,12,0.01) y=x*2-2*x+1plt.plot(x,y) plt.title(一元二次方程) plt.xlabel(X) plt.ylabel(Y) plt.show() 尝试用辗转相除法求解两个正整数的最大公约数。参考答案:num1=int(input(请输入第一个正整数:)num2=int(input(请输入第二个正整数:)m=max(num1,num2)n=min(num1,num2)r=m % nwhile r!=0: m=n n=r r=m % nprint(这两个数的最大公约数为:,n)input(运行完毕,请按回车键退出.) 【教学反思】