1、数值计算4.1第一课时2.2.通过绘制一元多次方程函数图像,了解通过绘制一元多次方程函数图像,了解PythonPython利利用用numpynumpy和和matplotlibmatplotlib两个模块绘制图像的基本方两个模块绘制图像的基本方法。法。1.1.通过求解一元二次方程的解,了解计算机编程通过求解一元二次方程的解,了解计算机编程解决数值计算问题的一般流程,并能够使用解析解决数值计算问题的一般流程,并能够使用解析法解决实际问题。法解决实际问题。能够利用能够利用numpynumpy和和matplotlibmatplotlib两个模块两个模块绘制函数图像。绘制函数图像。环节一:求解一元二次方
2、程ax2+bx+c=0(a0)1用数学方法求解方程2x2+x-6=0。2用WPS表格绘制方程2x2+x-6=0函数图象,求解方程。3用Python编程求解ax2+bx+c=0(a0)的解。a,b,c由程 序输入。方法一:方法一:写出数学方法求解方程2x2+x-6=0。方程可因式分解为(2x-3)(x+2)=0,因此x=1.5或x=-2。用求根公式计算得x=1.5x=-2。方法二:方法二:wps表格画图。(描点法)表格画图。(描点法)借助计算机程序描点,可以达到速度快且精确度高的效果。方法三:方法三:利用利用Python求解求解import matha=float(input(请输入方程系数a(
3、!=0):)b=float(input(请输入方程系数b:)c=float(input(请输入方程系数c:)d=b*b-4*a*cif d0:x1=(-b+math.sqrt(d)/(2*a)x2=(-b-math.sqrt(d)/(2*a)print(方程有两个不同的解,x1,x2)elif d=0:x1=-b/(2*a)print(方程有两个相同的解,x1)else:print(方程无解)环节二:环节二:绘制数学函数曲线绘制数学函数曲线1用WPS表格绘制y=sin(x)、y=sin(-x)和y=sin(2x)函数的图像。2用Python编程绘制y=sin(x)、y=sin(-x)和y=si
4、n(2x)函数的图像。活动一:用活动一:用WPS表格绘制表格绘制y=sin(x)、y=sin(-x)和和y=sin(2x)函数的图像。函数的图像。列表法描点法列表法描点法利用利用WPSWPS绘制的函数图像绘制的函数图像数据点越多,绘制的正弦函数数据点越多,绘制的正弦函数图像越精细,圆滑。图像越精细,圆滑。活动二:用活动二:用Python编程绘制编程绘制y=sin(x)、y=sin(-x)和和y=sin(2x)函数的图像。函数的图像。本节课的教学重点、难点本节课的教学重点、难点 在Python中,绘制函数图像一般要用到numpy和matplotlib两个模块,这两个模块需要另外安装。Python
5、外置库安装方法:1、访问网址下载对应的文件(和你的windows系统及Python版本都要对应)(1)https:/pypi.python.org/pypi/matplotlib/(2)https:/pypi.python.org/pypi/numpy/2、把这些文件直接复制到你的Python路径下的Scripts文件夹中例如C:UsersownerAppDataLocalProgramsPythonPython36Scripts文件夹中;3、在文件夹中按shift键的同时单击鼠标右键,选择“在此处打开命令窗口”弹出cmd窗口复制下列代码回车运行:32位:pip install numpy-1
6、.17.2-cp36-cp36m-win32.whlpip install matplotlib-3.1.1-cp36-cp36m-win32.whl64位:pip install numpy-1.17.2-cp36-cp36m-win_amd64.whlpip install matplotlib-3.1.1-cp36-cp36m-win_amd64.whl把这些文件直接复制到你的Python路径下的Scripts文件夹中例如C:UsersownerAppDataLocalProgramsPythonPython36Scripts文件夹中;numpynumpy模块简介模块简介 numpynu
7、mpy是一个科学计算包,其中包括很多数学函数,如三角函数三角函数、矩阵计算方法矩阵计算方法、矢量运算矢量运算、线性代数线性代数等。通过该模块中的arange函数可以创建一个等差数列。如在0-2之间每隔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之
8、间,每隔0.01取一个点y=np.sin(x)y=np.sin(x)#通过解析式计算列表x对应的列表y的值 matplotlib模块是一个绘图库绘图库。调用matplotlib.pyplot时,坐标系可以根据数值范围自动生成。matplotlib的绘图原理很简单,利用plot画线函数就可以在直角平面内轻松地将(x,y)坐标点对连接成平滑曲线。例如:在上述代码的适当位置增加下列语句,就可以将刚才生成的关键点连接起来。m matplotlibatplotlib模块简介模块简介import matplotlib.pyplot as pltimport matplotlib.pyplot as plt
9、#加载matplotlib.pyplot并取名p1tplt.plot(x,y)plt.plot(x,y)#将点对连线plt.show()plt.show()#将绘制的图像窗口显示出来参考以上代码,完善绘出绘出“sin(x)“sin(x)”“”“sin(-x)”sin(-x)”和和“sin(2x)/2”“sin(2x)/2”的图像的图像程序。#加载numpy模块并取别名为npimport matplotlib.pyplot as plt#加载matplotlib.pyplot并取别名为plt#列表x在0到2之间,毎隔0.01取一个点#求sin(x)对应的列表y1的值y2=np.sin(-x)#求
10、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.plot(x,y2)plt.plot(x,y3)#加载numpy模块并取别名为np imp
11、ortmatplotlib.pyplotasplt#加载matplotlib.pyplot并取别名为plt#列表x在0到2之间,毎隔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
12、np x=np.arrange(0,2*np.pi,0.01)y1=np.sin(x)y3=np.sin(2*x)/2 plt.plot(x,y2)plt.plot(x,y3)绘出绘出“sin(x)”“sin(-x)”和和“sin(2x)/2”的图像的图像利用Python程序绘制的函数图像振幅和周期发生了变化。对比用振幅和周期发生了变化。对比用WPS表格绘制表格绘制y=sin(x)、y=sin(-x)和和y=sin(2x)/2函数的图像平滑了很多。函数的图像平滑了很多。作业:尝试用作业:尝试用Python绘制绘制 y=x2 2x+1 的图像。的图像。代码如下:import numpy as n
13、p#加载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()数值计算4.1第二课时了解迭代法的含义,并尝试用牛顿迭代法解决实际问题。了解数值类算法在实际问题解决时的常用方法,如解析法和迭代法。理解迭代法的含义,并能够用牛顿迭代法求解一元多次方程。斐波那契在斐波那契在计算之书计算之书中提出了一个有中提出了一个
14、有趣的兔子问题:假设一对兔子每个月可以趣的兔子问题:假设一对兔子每个月可以生一对小兔子,一对兔子出生后第生一对小兔子,一对兔子出生后第2个月就个月就开始生小兔子。则一对兔子一年内能繁殖开始生小兔子。则一对兔子一年内能繁殖成多少对?成多少对?10年呢?年呢?活动一:用活动一:用WPSWPS求解数列求解数列分分析:析:从第3个月起,每个月大兔子的对数等于上个月大兔子与小兔子的对数之和,每个月小兔子的对数等于上个月大兔子的对数。使用电子表格求解为:使用电子表格求解为:当进行到当进行到7474月时,由于数据范围及表示精度的月时,由于数据范围及表示精度的问题,导致结果出错问题,导致结果出错:第1个月和第
15、2个月的兔子的对数之和为第3个月的兔子对数,第2个月和第3个月的兔子对数之和为第4个月的兔子对数,每个月的兔子对数是前两个月的兔子对数之和,又同时作为下一个月兔子对数的加数。这种重这种重复反馈的过程称为迭代复反馈的过程称为迭代。迭代迭代活动二:用活动二:用PythonPython求解数列求解数列第1个月和第2个月的兔子的对数之和为第3个月的兔子对数,第2个月和第3个月的兔子对数之和为第4个月的兔子对数,每个月的兔子对数是前两个月的兔子对数之和,又同时作为下一个月兔子对数的加数。这种重复反馈的过程称为迭代。迭代法也称辗转法,是用计算机解决问题的一种基本方法。迭代通常是为了接近并达到抽需的目标或结
16、果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。迭代计算可以用下列关系图来表示:迭代计算可以用下列关系图来表示:PythonPython程序代码如下:程序代码如下:def fib(n):#迭代求迭代求Fibonacci数列数列 f2=f1=1#第第1个月、第个月、第2个月初始值的设定个月初始值的设定 for i in range(3,n+1):#从第从第3个月至第个月至第n个月依次计算个月依次计算 f1,f2=f2,f1+f2 return f2n=int(input(输入需要计算的月份数:输入需要计算的月份数:)print(兔子总对数为:兔子总对
17、数为:,fib(n)#输出最终值输出最终值input(运行完毕,请按回车键退出运行完毕,请按回车键退出.)程序运行结果:程序运行结果:输入需要计算的月份数:输入需要计算的月份数:7474兔子总对数为:兔子总对数为:13049695449286571304969544928657求解斐波那契数列求解斐波那契数列利用迭代算法解决问题,有三个关键步骤:(1)确定迭代变量,如活动2中的f1、f2;(2)建立迭代关系式;(3)对迭代过程进行控制,这是编写迭代程序必须考虑的问题,不能让迭代过程无休止地重复执行下去。练一练:用迭代法求解x5+x4+x-3=0算法步骤为:算法步骤为:1.选取x1=0作为方程的
18、初始解(x0应选取在解附近,这个可以通过观察函数图像得到);2.新解,其中f(x1)=x15+14+x1-3,f(x1)=5*x14+4*x13+1;3.如果|x1-x2|1e-10就可以x2=1.5#解系列初值print(迭代过程中的x值:)#根据迭代公式计算while abs(x1-x2)1e-10:print(x2)x1=x2 x2=x1-f(x1)/f1(x1)print(近似解:,x1)#输出最后解input(运行完毕,请按回车键退出.)运行结果运行结果迭代过程中的x值:1.51.21978021978021991.0576440726974761.0048987207330281.
19、00003812464892941.00000000232545361.0近似解:1.0运行完毕,请按回车键退出.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()巩固提升:尝试用Python绘制 y=xy=x2 2-2x+1-2x+1 的图像作业:尝试用辗转相除法求解两个正整数的最大公约数。程序代码:#辗转相除法def gys(a,b):x=a%b while(x!=0):a=b b=x x=a%b return ba=int(input(a:)b=int(input(b:)print(数a,b的最大公约数为:,gys(a,b)input(运行完毕,请按回车键退出.)THANK YOU2020