4.2数值计算博山实验中学电教中心4.2数值计算人们对计算机的最初应用大多是数值计算,主要借助计算机运算速度快、精确度高的特点来解决各种数学问题,如函数的计算、方程的求解、数列求和等都属于数值计算。学习目标★感受数据的图形化表示。★设计解析式或迭代方程,进行数值计算,解决问题。★了解数值类算法在实际问题解决时的应用及常用方法。任务一绘制数学函数曲线在数学课上经常需要手工绘制函数图像,今天我们借助计算机来绘制函数图像。※活动1用WPS表格绘制正弦曲线利用平时使用的电子表格软件就能绘制函数图像。方法如下:若以30°为间隔,绘制0~360°之间的正弦函数图像,则首先需要在WPS中完成下列表格数据的计算。请填写表4.2.1。4.2.1函数计算4.2.1利用wps绘制函数图像※活动2利Python绘制正弦曲线仔细观察團像,会发现图像的关键点太少,精度不够,團像不光滑。要想提高图像的光滑程度,就要减小角度间隔,但间隔增加,工作量也会随之增加:每隔1°画一个点,数据表上就会增加300多行新数据;如果以0.1°为间隔,将有3000多行数据。借助计算机程序描点,可以达到速度快且精确度高的效果。下面我们尝试利用Python编写程序绘制正弦曲线。在Python中,绘制函数图像一般要用到numpy和matplotlib两个模块,这两个模块需要另外安装。numpy模块简介numpy是一个科学计算包,其中包含很多数学函数,如三角函数、矩阵计算方法等。通过该模块中的arange函数可以创建一个等差数列。如在0~2π之间每隔0.01取个值,则可以用arange(0,2*numpy.pi,0.01)来表示,其中numpy.pi表示π。下列代码可以产生sin(x)的若干个关键点。#加载numpy模块并取一个简洁的别名为np,便于后续引用importnumpyasnp#x在0到2π之间,每隔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)坐标点对连接成平滑曲线。例如:在上述代码的适当位置增加下列语句,就可以将刚才生成的关键点连接起来。importnumpyasnp#加载numpy模块并取名为npimportmatplotlib.pyplotasplt#加载matplotlib.pyplot并取名为pltplt.plot(x,y)#将点对连线plt.show()#将绘制的函数图像窗口显示出来importnumpyasnp#加载numpy模块并取名为npimportmatplotlib.pyplotasplt#加载matplotlib.pyplot并取名为pltx=np.arange(0,2*np.pi,0.01)#x在0到2π之间,每隔0.01取一个点y1=np.sin(x)#求sin(x)对应的y1值y2=np.sin(-x)#求sin(-x)对应的y2值y3=np.sin(2*x)/2#求sin(2x)/2对应的y3值plt.plot(x,y1)#绘制sin(x)图像plt.plot(x,y2)#绘制sin(-x)图像plt.plot(x,y3)#绘制sin(2*x)/2图像plt.title('sin(x)')#设置图像标题plt.xlabel('X')#设置X轴标题plt.ylabel('Y')#设置Y轴标题plt.show()#将绘制的函数图像窗口显示出来input(运行完毕,请按回车键退出...)利用python程序绘制的函数图象※活动1用WPS求解数列斐波那契在《计算之书》中提出了一个有趣的兔子问题:假设一对兔子每个月可以生一对小兔子,一对兔子出生后第2个月就开始生小兔子。则一对兔子一年内能繁殖成多少对?10年呢?根据描述,兔子的对数如图4.2.3所示。※活动1用WPS求解数列从第3个月起,每个月大兔子的对数等于上个月大兔子与小兔子的对数之和(即上个月兔子总对数),每个月小兔子的对数等于上个月大兔子的对数(即上上个月兔子总对数)。使用电子表格可以很方便地求解,如图4.2.4所示。我们发现,当计算到第74个月的时候,由于数据范围及表示精度的问题,导致结果出错,如图4.2.5所示。※活动2用Python求解数列第1个月和第2个月的兔子对数之和为第3个月的兔子对数,第2个月和第3个月的兔子对数之和为第4个月的兔子对数....,每个月的兔子对数是前两个月的兔子对数之和,又同时作为下一个月兔子对数的加数。这种重复反馈的过程称为迭代。迭代法也称辗转法,是用计算机解决问题的一种基本方法。迭代通常是为了接近并到达所需的目标或结果。每--次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一一次迭代的初始值。迭代斐波那契数列由于在迭代系列中的每个月份兔子对数只跟前两个月有关,因此在编写程序时,只需两个变量fl和12分别记录上上月和上月的数据。迭代计算的示意图如图4.2.6所示。根据示意图完成程序代码deffib(n):#迭代求Fibonacci数列f2=f1=1foriinrange(3,n+1):f1,f2=f2,f1+f2returnf2n=int(input('输入需要计算的月份数:'))print('兔子总对数为:',fib(n))input(运行完毕,请按回车键退出...)三个关键步骤利用迭代算法解决问题,有三个关键步骤:(1)确定迭代变量,如活动2中的f1、f2;(2)建立迭代关系式;(3)对迭代过程进行控制,这是编写迭代程序必须考虑的问题,不能让迭代过程无休止地重复执行下去。现代自然科学和工程电子技术的研究过程中,都离不开大规模的数学计算问题。例如:数学类课程中的线性方程求解、微分方程求解、概率统计等;实用性和实验性技术应用中的模拟核试验、油田开发、飞机设计等。