1、4.2 数值计算第4单元 计算与问题解决学学 习习 目目 标标(重点)(重点)计算机最初研究的应用大多是数值计算,人们主要借助计算机运算速度快,精确度高的特点来解决各种数学问题,如函数计算、方程的求解、数列求和等都属于数值计算。在数学课上经常需要手工绘制函数图像,今天我们借助计算机来绘制函数图像。ABCDxsin(x)sin(-x)sin(2x)/21000023036014360000表表4.2.1 4.2.1 函数计算函数计算活动1 用WPS表格绘制正弦曲线方法如下:若以30为间隔,绘制0-360之间的正弦函数图像,则首先需要完成下列表格数据的计算。任务一任务一 绘制数学函数曲线绘制数学函
2、数曲线利用利用wpswps绘制的函数图像绘制的函数图像方法:选择相应的数据,建立折线图表,设置x轴数据系列格式。绘制出如下函数图像:活动2 利用Python绘制正弦曲线任务一任务一 绘制数学函数曲线绘制数学函数曲线 在Python中,绘制函数图像一般要用到NumpyNumpy和MatplotlibMatplotlib两个模块,这两个模块需要另外安装。numpynumpy模块简介模块简介 numpy numpy是一个科学计算包,其中包括很多数学函数,如三角函数三角函数、矩阵计算方法矩阵计算方法、矢量运算矢量运算、线性代数线性代数等。通过该模块中的arange函数可以创建一个等差数列。如在0-2之
3、间每隔0.01取个值,则可以用arange(0,2*numpy.pi,0.01)表示,其中numpy.pi表示。下列代码可以产生sin(x)的若干个关键点。import numpy as np import numpy as np#加载numpy模块并取一个简洁的别名np,便于后续引用x x=np.arange(0,2np.arange(0,2*np.pi,0.01)np.pi,0.01)#x在0到2之间,每隔0.01取一个点y=np.sin(x)y=np.sin(x)#通过解析式计算列表x对应的列表y的值 matplotlib模块是一个绘图绘图库库。调用matplotlib.pyplot时,
4、坐标系可以根据数值范围自动生成。matplotlib的绘图原理很简单,利用plot画线函数就可以在直角平面内轻松地将(x,y)坐标点对连接成平滑曲线。例如:在上述代码的适当位置增加下列语句,就可以将刚才生成的关键点连接起来。m matplotlibatplotlib模块简介模块简介import matplotlib.pyplot as pltimport matplotlib.pyplot as plt#加载matplotlib.pyplot并取名p1tplt.plot(x,y)plt.plot(x,y)#将点对连线plt.show()plt.show()#将绘制的图像窗口显示出来利用Pyth
5、on绘制正弦曲线方法方法:导入numpy模块,通过该模块中的arange函数可以创建一个等差数列,也就是描点法中的取x值,然后用y=np.sin(x)计算y的值。接着调用matplotlib模块绘制函数图像。调用matplotlib.pyplot在直角平面内轻松地将(x,y)坐标点对连接成平滑曲线。绘制y=sin(x)函数的图像程序如下:import numpy as np import numpy as np#加载numpy模块并取一个简洁的别名为np,便于后续引用import matplotlib.pyplot as plt#加载matplotlib.pyplot并取别名为pltx=np.
6、arange(0,2*np.pi,0.01)#x在0到2之间,每隔0.01取一个点y=np.sin(x)#求sin(x)对应的y值plt.plot(x,y)#绘制sin(x)图像,系统自动配置蓝色plt.title(sin(x)#设置图像标题plt.xlabel(X)#设置X轴标题plt.ylabel(Y)#设置Y轴标题plt.show()#将绘制的函数图像窗口显示出来 参考以上代码,完善P95-P96的Python程序。#加载numpy模块并取别名为npimport matplotlib.pyplot as plt#加载matplotlib.pyplot并取别名为plt#列表x在0到2之间,
7、毎隔0.01取一个点#求sin(x)对应的列表y1的值y2=np.sin(-x)#求sin(-x)对立的列表y2的值#求sin(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()#将绘制的函数图像窗口显示出来import numpy as npx=np.arange(0,2*np.pi,0.01)y1=np.sin(x)y3=np.sin(2*x)/2plt.plo
8、t(x,y2)plt.plot(x,y3)利用python程序绘制的函数图像任务二任务二 求解斐波那契数列求解斐波那契数列活动1 用WPS求解数列 斐波那契在计算之书中提出了一个有趣的兔子问题:假设一对兔子每个月可以生一对小兔子,一对兔子出生后第2个月就开始生小兔子。则一对兔子一年内能繁殖成多少对?10年呢?图4.2.3 兔子数量 使用电子表格可以很方便地求解,如上左图所示。当计算到第74个月的时候,由于数据范围及表示精度的问题,导致结果出错,如上右图所示。第1个月和第2个月的兔子的对数之和为第3个月的兔子对数,第2个月和第3个月的兔子对数之和为第4个月的兔子对数,每个月的兔子对数是前两个月的
9、兔子对数之和,又同时作为下一个月兔子对数的加数。这种重这种重复反馈的过程称为复反馈的过程称为迭代迭代。迭代法也称辗转法,是用计算机解决问题的一种基本方法。迭代通常是为了接近并达到所需的目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。4.2.6 计算的迭代示意图任务二任务二 求解斐波那契数列求解斐波那契数列活动2 用Python求解数列 def fib(n):#利用迭代求斐波那契数列的第n个数 f2=f1=1#第1个月、第2个月初值设定 for i in range(3,n+1):f1,f2=f2,f1+f2 return f2n=int(i
10、nput(输入需要计算的月份数:)print(兔子总对数为:,fib(n)#输出结果input(运行完毕,请按回车键退出.)程序执行后,输入74,运行结果:利用迭代算法解决问题,有三个关键步骤:(1)确定迭代变量,如活动2中的f1、f2;(2)建立迭代关系式;(3)对迭代过程进行控制,这是编写迭代程序必须考虑的问题,不能让迭代过程无休止地重复执行下去。1.尝试用Python绘制 y=xy=x2 2 -2x-2x+1+1 的图像。import numpy as np#加载numpy模块并取名为npimport matplotlib.pyplot as plt#加载matplotlib.pyplo
11、t并取名为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()巩固提升巩固提升2.尝试用辗转相除法求解两个正整数的最大公约数。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(运行完毕,请按回车键退出.)巩固提升巩固提升