师:同学们大家好,今天我们一起来学习高一必修一4.2节数值计算第二课时。请同学们先下载本节的素材包,并拿出笔和草稿纸。我们先来了解这节课的学习目标:第一,感受数据的图形化表示;第二,设计迭代方程进行数值计算,解决问题;第三,了解数值类算法在实际问题解决时的应用及常用方法。
师:我们来看一个问题,斐波那契在《计算之书》中提到关于兔子问题,每个月的兔子对数是前面两个月兔子对数之和,同时又作为下一个月兔子对数的加数,如左图所示。我们一起分析一下,从这张图中我们可以得到:第一,小兔子需要一个月的成长时间;第二,第三个月开始兔子的对数是前面两个月对数之和。
师:任务一,用电子表格来计算一对兔子24个月后会繁殖成多少对?首先第一个月是一对,第二个月也是一对,那在第三个月,同学们想一想,在这一个单元格我们应该怎么来计算出兔子对数的值?请同学们先在草稿纸上自己想一想,记录一下。
师:这个方法是在第三个月的单元格,我们用公式计算,首先输入一个等号,然后是B2加B3这两个单元格求和。后面的我们就可以直接通过公式套用计算出6个月、12个月兔子的对数,当然继续套用公式我们可以计算出24个月兔子的对数为46368对。
师:我们继续往下看,同学们看任务2,兔子的对数只跟前面两个月兔子对数相关。现在我们用F1来记录上上月的数据,F2用来记录上月数据,F3用来记录当月的数据,请同学们思考,将这三个变量分别填写在左图三个空格的位置,请同学们在草稿纸上先做一个记录。
师:首先第一个位置填入变量F1,第二个位置填入变量F2,第三个位置填入变量F3,它们之间构成了一种关系,那这是一种什么关系呢?我们来看任务3。
师:同学们继续分析左图变量之间的关系,尝试写出完成一次迭代计算所需要的计算表达式。老师先给一点提示,在这张图中有三个编号,说明有三个步骤,编号分别是序号1、2、3,所以有先后顺序。请同学们将这个计算表达式先在草稿纸中做一个记录。
师:我们来一起看一下同学们的计算表达式跟老师给出的是否一致。首先是将F1加上F2求和的值赋予给F3,这样来计算当月的兔子对数;同样把F2赋值给F1,即上月的数据,在下一轮计算中变成上上月的数据;F3赋值给F2,这代表当月的数据在下一轮计算中变成了上月的数据。同学们的计算表达式跟老师的是否一致呢?如果不一样,课后可以找老师交流。
师:刚才老师在介绍过程中提到一个关键词叫迭代计算。什么是迭代计算呢?迭代计算是一种常见的算法,迭代算法也称为辗转法,通常用于接近并到达所需的目标或结果。每一次对过程的重复被称为一次迭代,而每次迭代得到的结果会被用来作为下一次迭代的初始值。
师:明白了什么是迭代之后,请同学们跟着老师进入到任务。我们来组装兔子问题迭代函数的流程图。老师已经把兔子问题的流程图框架搭建好,如左图所示,但在这个流程图框架中,老师故意留了4个空,我们分别要用四项内容来对它进行填充,老师分别用a、b、c、d列举出了四项内容。请同学们认真分析左图,并结合老师在右边给出的四项内容,在草稿纸上先做记录。
师:第一个空我们应该填入c,给第一、二个月赋予初值;第二个空应该填入a,设置控制迭代计算的条件;第三个空填入b,进行一次完整的迭代计算;第四个空填入d,函数输出返回值给主程序。通过这个流程图,我们基本上梳理出了兔子问题的整个模型框架。
师:接着我们进入到任务。同学们请看左图,老师将兔子问题用Python编写出了程序代码,但在这个程序中,老师留了6个空,分别用问号来做标识。现在请同学们认真阅读这个程序,参照老师的注释内容,想一想每一个问号空格应该填入什么内容来补齐代码,让兔子问题的程序能够完整运行来解决这个问题。请同学们先把答案记在草稿纸上。
师:我们一起来分析一下。第一个问号这个空应该填入n + 1;第二个空应该填入F1 + F2;第三个空应该填入F2;第四个空应该填入F3;第五个空也是填入F3,为什么呢?因为F3已经计算出了当前这个月的兔子对数,它需要将这个值返回给主程序。最后一个空,我们填入的是FIB(n),也就是这一个子程序的程序名字。同学们填写的跟老师的答案是否一致呢?
师:接着我们进入到任务6。请同学们将老师素材包中兔子问题这个文件下载到自己电脑中,然后在开始程序中找到Python idle这个程序,运行这个文件,根据提示输入我们2年24个月这个参数值,按回车计算,可以得出两年后兔子的对数为46368对,跟刚才我们用电子表格计算的结果是一样的。但是同学们对比一下,刚才用电子表格计算需要做很多步骤,而利用程序代码来实现自动计算的话,非常快,效率非常高。
