人工智能原理与实践:基于Python语言和TensorFlow-第10章-偏微分方程模拟仿真课件_第1页
人工智能原理与实践:基于Python语言和TensorFlow-第10章-偏微分方程模拟仿真课件_第2页
人工智能原理与实践:基于Python语言和TensorFlow-第10章-偏微分方程模拟仿真课件_第3页
人工智能原理与实践:基于Python语言和TensorFlow-第10章-偏微分方程模拟仿真课件_第4页
人工智能原理与实践:基于Python语言和TensorFlow-第10章-偏微分方程模拟仿真课件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

人工智能原理:基于Python语言和TensorFlow人工智能原理:1第10章偏微分方程模拟仿真计算函数的定义偏微分方程的定义仿真第10章偏微分方程模拟仿真计算函数的定义2简介18世纪,瑞士数学家莱昂哈德·欧拉(LeonhardEuLer)在与其他数学家解决物理问题的过程中,创立了微分方程这门学科。常见的微分方程有常微分方程、偏微分方程等,其中,常微分方程是指解得的未知函数是一元函数的微分方程,即一个量随一个自变量变化的规律,比如我们常见到的行驶中的车辆位置会随着时间变化而规律运动;偏微分方程是指解得的未知函数是多元函数的微分方程,即一个量随两个或多个自变量变化的规律,它比常微分方程更复杂一些,不仅仅在于自变量的增多,还因为各个自变量之间会有耦合,比如温度会随着时间的变化而在不同位置上有不同的数值表现,与此同时,温度随位置的变化也会因为时间的不同而在数值上有所变化,生活中的天气预报,就是通过计算机来对偏微分方程进行求解而得到的。简介18世纪,瑞士数学家莱昂哈德·欧拉(LeonhardE3简介偏微分方程关于纯数学研究的第一篇论文是欧拉所写的《方程的积分法研究》,在此之后,法国数学家达朗贝尔(JeanLeRondd'ALembert)也在他的著作《动力学》和论文《张紧的弦振动时形成的曲线的研究》中提出了关于偏微分方程的内容,从而最终开创了偏微分方程这门学科。19世纪是偏微分方程迅速发展的时期,瑞士数学家丹尼尔·伯努利(DanieLBernouLLi)、法国数学家约瑟夫·拉格朗日(Joseph-LouisLagrange)、让·巴普蒂斯·约瑟夫·傅里叶(JeanBaptisteJosephFourier)在各自研究领域的成果都对偏微分方程的发展产生了不同程度的影响。简介偏微分方程关于纯数学研究的第一篇论文是欧拉所写的《方程的4简介对于偏微分方程问题的讨论和解决,往往需要应用微分几何学、代数与拓扑学等其他数学分支的理论和方法。偏微分方程的解有无穷多个,但是解决具体的实际问题时,则需要从中选取出所需要的最适合的解,因此,一些必备的附加条件是必不可少的。偏微分方程属于同一类现象的共同规律的表示式,仅仅知道共同规律是无法掌握和了解具体问题的特殊性的,所以,针对不同的具体问题,它的特殊性就在于所处的不同环境的特定条件,即初始条件和边界条件,又被称为定解条件。定解条件反映出具体问题的个性和具体情况,定解条件和方程式的结合被称为定解问题。求偏微分方程的定解问题可以先求出它的通解,然后再用定解条件确定出函数。简介对于偏微分方程问题的讨论和解决,往往需要应用微分几何学、510.1计算函数的定义首先,针对计算函数,先导入一些模拟仿真所必需的库文件,代码如下所示。************************************************************************************#导入模拟仿真需要的库importtensorfLowastfimportnumpyasnp#导入可视化需要的库importPIL.ImagefromcStringIOimportStringIOfromIPython.dispLayimportcLear_output,Image,dispLay************************************************************************************10.1计算函数的定义首先,针对计算函数,先导入一些模拟610.1计算函数的定义源程序代码内容中,通过使用importtensorfLowastf和importnumpyasnp将模拟仿真中所需要的TensorFlow模块和NumPy模块进行导入;importPIL.Image代码中的图像处理类库(PythonImagingLibraryPython,PIL)提供了关于图像的最基本的处理及功能操作,如图像的旋转、裁剪、缩放、颜色的变化等。利用免费的图像处理类库中的各类函数,我们可以将数据从图像格式的文件中提取出来进行数据处理,然后再将处理之后的数据写入到指定的图像格式中,在图像处理类库的众多函数中,最重要的一个函数是Image函数。在代码内容中,fromcStringIOimportStringIO代码语句中的cStringIO和StringIO所代表的是两个不同功能的模块,这两个模块具有相似的功能操作。10.1计算函数的定义源程序代码内容中,通过使用impo710.1计算函数的定义其中,StringIO模块的功能和文件具有很高的相似性,它算是存在于内存中的一个文件,对StringIO模块进行操作的方法与我们对磁盘文件进行操作的方法相类似,即通过StringIO模块对内存文件进行读取和写入的操作;而cStringIO模块则与StringIO模块相类似,但是它又比StringIO模块更高效一些。原因是因为Python语言是一种动态的计算机编程语言,它可以进行解释性执行,如果想要针对Python程序代码的运行速度进行提高,可以通过使用C语言来对某些关键函数进行重写,通过这种方式可以提高整个Python程序代码的执行速度,而具体到cStringIO和StringIO这两个模块来讲,StringIO模块是使用纯Python代码编写的模块内容,而cStringIO模块中的部分函数则是使用C语言编写的,因此cStringIO模块运行速度会更高效。10.1计算函数的定义其中,StringIO模块的功能和810.1计算函数的定义针对池塘的表面状态,我们通过一些程序代码来进行相应操作的函数设定,代码如下所示。************************************************************************************defDispLayArray(a,fmt='jpeg',rng=[0,1]):"""DispLayanarrayasapicture."""a=(a-rng[0])/fLoat(rng[1]-rng[0])*255a=np.uint8(np.cLip(a,0,255))f=StringIO()PIL.Image.fromarray(a).save(f,fmt)dispLay(Image(data=f.getvaLue()))************************************************************************************10.1计算函数的定义针对池塘的表面状态,我们通过一些程910.1计算函数的定义接下来,需要打开一个TensorFLow的交互式会话内容,来进行更加方便的效果演示。此外,将相关代码内容写入到Python编程语言的可执行文件中,这样能够在以后的操作中更加方便地进行调用,代码如下所示。************************************************************************************sess=tf.InteractiveSession()************************************************************************************10.1计算函数的定义接下来,需要打开一个TensorF1010.1计算函数的定义经过前面知识点的学习,我们已经知道了TensorFLow是基于图的计算系统,图的节点是由操作来构成的,而图的各个节点是由张量作为边来进行连接的,TensorFLow的图必须在一个Session操作中来进行计算,Session操作提供了代码执行和张量求值的环境。TensorFLow中的变量和操作定义好以后,由Session对象合成图形才会得到最终的结果图像,我们一般使用tf.Session()对象来进行相应的操作,但是Session的运行会涉及运算,比较消耗资源,因此在Session的运行操作结束以后,我们需要通过使用sess.cLose()语句来手动关闭Session操作。另外,对于Python原生编辑器或类似于Jupyter这样的基于浏览器的Python编辑器来讲,运行时需要将程序代码一段一段地输入,于是,就出现了tf.InteractiveSession()这样的交互式Session。用来完成在图的运行过程中实现一些计算图的插入,这些计算图可以由某些操作构成。通过此种方式,可以提高交互式环境中工作的便利性,在构建交互式会话时,可以先构建一个Session,然后再定义一个操作,其目的是为了实现交互式环境下,手动设定当前Session为默认Session,从而避免掉了每次都要针对sess进行说明的繁琐过程,10.1计算函数的定义经过前面知识点的学习,我们已经知道1110.1计算函数的定义代码如下所示。************************************************************************************defmake_kerneL(a):"""Transforma2DarrayintoaconvoLutionkerneL"""a=np.asarray(a)a=a.reshape(List(a.shape)+[1,1])returntf.constant(a,dtype=1)defsimpLe_conv(x,k):"""AsimpLified2DconvoLutionoperation"""x=tf.expand_dims(tf.expand_dims(x,0),-1)y=tf.nn.depthwise_conv2d(x,k,[1,1,1,1],padding='SAME')returny[0,:,:,0]defLapLace(x):"""Computethe2DLapLacianofanarray"""LapLace_k=make_kerneL([[0.5,1.0,0.5],[1.0,-6.,1.0],[0.5,1.0,0.5]])returnsimpLe_conv(x,LapLace_k)************************************************************************************10.1计算函数的定义代码如下所示。**********12第10章偏微分方程模拟仿真计算函数的定义偏微分方程的定义仿真第10章偏微分方程模拟仿真计算函数的定义1310.2偏微分方程的定义我们首先创建一个500×500的方形池塘以及若干滴即将落入池塘中的雨滴,代码如下所示。************************************************************************************N=500#初始条件--一些雨滴落入池塘#设置变量为零u_init=np.zeros([N,N],dtype="fLoat32")ut_init=np.zeros([N,N],dtype="fLoat32")#一些雨滴随机落入池塘中forninrange(40):a,b=np.random.randint(0,N,2)u_init[a,b]=np.random.uniform()DispLayArray(u_init,rng=[-0.1,0.1])************************************************************************************10.2偏微分方程的定义我们首先创建一个500×500的1410.2偏微分方程的定义运行后,模拟图片如图所示。10.2偏微分方程的定义运行后,模拟图片如图所示。1510.2偏微分方程的定义下一步,针对微分方程的一些详细参数,进行制定,代码如下所示。************************************************************************************#参数:#eps–时间分辨率#damping–波阻尼eps=tf.pLacehoLder(tf.fLoat32,shape=())damping=tf.pLacehoLder(tf.fLoat32,shape=())#为模拟状态创建变量U=tf.VariabLe(u_init)Ut=tf.VariabLe(ut_init)#离散PDE更新规则U_=U+eps*UtUt_=Ut+eps*(LapLace(U)-damping*Ut)#更新状态的操作step=tf.group(U.assign(U_),Ut.assign(Ut_))************************************************************************************10.2偏微分方程的定义下一步,针对微分方程的一些详细参16第10章偏微分方程模拟仿真计算函数的定义偏微分方程的定义仿真第10章偏微分方程模拟仿真计算函数的定义1710.3仿真仿真过程中,加入for循环代码部分,来实现仿真效果的清晰化,代码如下所示。 ************************************************************************************#初始化状态到初始条件tf.initiaLize_aLL_variabLes().run()#Run1000stepsofPDEforiinrange(1000):#步骤模拟step.run({eps:0.03,damping:0.04})#VisuaLizeevery50stepsifi%50==0:cLear_output()DispLayArray(U.evaL(),rng=[-0.1,0.1])************************************************************************************10.3仿真仿真过程中,加入for循环代码部分,来实现仿1810.3仿真最终,形成雨滴落在池塘后掀起点点涟漪的图片内容,如图所示。

10.3仿真最终,形成雨滴落在池塘后掀起点点涟漪的图片内19人工智能原理:基于Python语言和TensorFlow人工智能原理:20第10章偏微分方程模拟仿真计算函数的定义偏微分方程的定义仿真第10章偏微分方程模拟仿真计算函数的定义21简介18世纪,瑞士数学家莱昂哈德·欧拉(LeonhardEuLer)在与其他数学家解决物理问题的过程中,创立了微分方程这门学科。常见的微分方程有常微分方程、偏微分方程等,其中,常微分方程是指解得的未知函数是一元函数的微分方程,即一个量随一个自变量变化的规律,比如我们常见到的行驶中的车辆位置会随着时间变化而规律运动;偏微分方程是指解得的未知函数是多元函数的微分方程,即一个量随两个或多个自变量变化的规律,它比常微分方程更复杂一些,不仅仅在于自变量的增多,还因为各个自变量之间会有耦合,比如温度会随着时间的变化而在不同位置上有不同的数值表现,与此同时,温度随位置的变化也会因为时间的不同而在数值上有所变化,生活中的天气预报,就是通过计算机来对偏微分方程进行求解而得到的。简介18世纪,瑞士数学家莱昂哈德·欧拉(LeonhardE22简介偏微分方程关于纯数学研究的第一篇论文是欧拉所写的《方程的积分法研究》,在此之后,法国数学家达朗贝尔(JeanLeRondd'ALembert)也在他的著作《动力学》和论文《张紧的弦振动时形成的曲线的研究》中提出了关于偏微分方程的内容,从而最终开创了偏微分方程这门学科。19世纪是偏微分方程迅速发展的时期,瑞士数学家丹尼尔·伯努利(DanieLBernouLLi)、法国数学家约瑟夫·拉格朗日(Joseph-LouisLagrange)、让·巴普蒂斯·约瑟夫·傅里叶(JeanBaptisteJosephFourier)在各自研究领域的成果都对偏微分方程的发展产生了不同程度的影响。简介偏微分方程关于纯数学研究的第一篇论文是欧拉所写的《方程的23简介对于偏微分方程问题的讨论和解决,往往需要应用微分几何学、代数与拓扑学等其他数学分支的理论和方法。偏微分方程的解有无穷多个,但是解决具体的实际问题时,则需要从中选取出所需要的最适合的解,因此,一些必备的附加条件是必不可少的。偏微分方程属于同一类现象的共同规律的表示式,仅仅知道共同规律是无法掌握和了解具体问题的特殊性的,所以,针对不同的具体问题,它的特殊性就在于所处的不同环境的特定条件,即初始条件和边界条件,又被称为定解条件。定解条件反映出具体问题的个性和具体情况,定解条件和方程式的结合被称为定解问题。求偏微分方程的定解问题可以先求出它的通解,然后再用定解条件确定出函数。简介对于偏微分方程问题的讨论和解决,往往需要应用微分几何学、2410.1计算函数的定义首先,针对计算函数,先导入一些模拟仿真所必需的库文件,代码如下所示。************************************************************************************#导入模拟仿真需要的库importtensorfLowastfimportnumpyasnp#导入可视化需要的库importPIL.ImagefromcStringIOimportStringIOfromIPython.dispLayimportcLear_output,Image,dispLay************************************************************************************10.1计算函数的定义首先,针对计算函数,先导入一些模拟2510.1计算函数的定义源程序代码内容中,通过使用importtensorfLowastf和importnumpyasnp将模拟仿真中所需要的TensorFlow模块和NumPy模块进行导入;importPIL.Image代码中的图像处理类库(PythonImagingLibraryPython,PIL)提供了关于图像的最基本的处理及功能操作,如图像的旋转、裁剪、缩放、颜色的变化等。利用免费的图像处理类库中的各类函数,我们可以将数据从图像格式的文件中提取出来进行数据处理,然后再将处理之后的数据写入到指定的图像格式中,在图像处理类库的众多函数中,最重要的一个函数是Image函数。在代码内容中,fromcStringIOimportStringIO代码语句中的cStringIO和StringIO所代表的是两个不同功能的模块,这两个模块具有相似的功能操作。10.1计算函数的定义源程序代码内容中,通过使用impo2610.1计算函数的定义其中,StringIO模块的功能和文件具有很高的相似性,它算是存在于内存中的一个文件,对StringIO模块进行操作的方法与我们对磁盘文件进行操作的方法相类似,即通过StringIO模块对内存文件进行读取和写入的操作;而cStringIO模块则与StringIO模块相类似,但是它又比StringIO模块更高效一些。原因是因为Python语言是一种动态的计算机编程语言,它可以进行解释性执行,如果想要针对Python程序代码的运行速度进行提高,可以通过使用C语言来对某些关键函数进行重写,通过这种方式可以提高整个Python程序代码的执行速度,而具体到cStringIO和StringIO这两个模块来讲,StringIO模块是使用纯Python代码编写的模块内容,而cStringIO模块中的部分函数则是使用C语言编写的,因此cStringIO模块运行速度会更高效。10.1计算函数的定义其中,StringIO模块的功能和2710.1计算函数的定义针对池塘的表面状态,我们通过一些程序代码来进行相应操作的函数设定,代码如下所示。************************************************************************************defDispLayArray(a,fmt='jpeg',rng=[0,1]):"""DispLayanarrayasapicture."""a=(a-rng[0])/fLoat(rng[1]-rng[0])*255a=np.uint8(np.cLip(a,0,255))f=StringIO()PIL.Image.fromarray(a).save(f,fmt)dispLay(Image(data=f.getvaLue()))************************************************************************************10.1计算函数的定义针对池塘的表面状态,我们通过一些程2810.1计算函数的定义接下来,需要打开一个TensorFLow的交互式会话内容,来进行更加方便的效果演示。此外,将相关代码内容写入到Python编程语言的可执行文件中,这样能够在以后的操作中更加方便地进行调用,代码如下所示。************************************************************************************sess=tf.InteractiveSession()************************************************************************************10.1计算函数的定义接下来,需要打开一个TensorF2910.1计算函数的定义经过前面知识点的学习,我们已经知道了TensorFLow是基于图的计算系统,图的节点是由操作来构成的,而图的各个节点是由张量作为边来进行连接的,TensorFLow的图必须在一个Session操作中来进行计算,Session操作提供了代码执行和张量求值的环境。TensorFLow中的变量和操作定义好以后,由Session对象合成图形才会得到最终的结果图像,我们一般使用tf.Session()对象来进行相应的操作,但是Session的运行会涉及运算,比较消耗资源,因此在Session的运行操作结束以后,我们需要通过使用sess.cLose()语句来手动关闭Session操作。另外,对于Python原生编辑器或类似于Jupyter这样的基于浏览器的Python编辑器来讲,运行时需要将程序代码一段一段地输入,于是,就出现了tf.InteractiveSession()这样的交互式Session。用来完成在图的运行过程中实现一些计算图的插入,这些计算图可以由某些操作构成。通过此种方式,可以提高交互式环境中工作的便利性,在构建交互式会话时,可以先构建一个Session,然后再定义一个操作,其目的是为了实现交互式环境下,手动设定当前Session为默认Session,从而避免掉了每次都要针对sess进行说明的繁琐过程,10.1计算函数的定义经过前面知识点的学习,我们已经知道3010.1计算函数的定义代码如下所示。************************************************************************************defmake_kerneL(a):"""Transforma2DarrayintoaconvoLutionkerneL"""a=np.asarray(a)a=a.reshape(List(a.shape)+[1,1])returntf.constant(a,dtype=1)defsimpLe_conv(x,k):"""AsimpLified2DconvoLutionoperation"""x=tf.expand_dims(tf.expand_dims(x,0),-1)y=tf.nn.depthwise_conv2d(x,k,[1,1,1,1],padding='SAME')returny[0,:,:,0]defLapLace(x):"""Computethe2DLapLacianofanarray"""LapLace_k=make_kerneL([[0.5,1.0,0.5],[1.0,-6.,1.0],[0.5,1.0,0.5]])returnsimpLe_conv(x,LapLace_k)************************************************************************************10.1计算函数的定义代码如下所示。**********31第10章偏微分方程模拟仿真计算函数的定义偏微分方程的定义仿真第10章偏微分方程模拟仿真计算函数的定义3210.2偏微分方程的定义我们首先创建一个500×500的方形池塘以及若干滴即将落入池塘中的雨滴,代码如下所示。************************************************************************************N=500#初始条件--一些雨滴落入池塘#设置变量为零u_init=np.zeros([N,N],dtype="fLoat32")ut_init=np.zeros([N,N],dtype="fLoat32")#一些雨滴随机落入池塘中forninrange(40):a,b=np.random.randint(0,N,2)u_init[a,b]=np.random.uniform()DispLayArray(u_init,rng=[-0.1,0.1])******************************************************************

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论