人工智能原理-基于Python语言和TensorFlow-偏微分方程模拟仿真

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

人工智能原理:

基于Python语言和TensorFlow

张明 副教授

第10章 偏微分方程模拟仿真

1.计算函数的定义

2.偏微分方程的定义

3.仿真

18世纪,瑞士数学家莱昂哈德·欧拉(Leonhard EuLer)在与其他数学家解决物理问题的过程中,创立了微分方程这门学科。常见的微分方程有常微分方程、偏微分方程等,其中,常微分方程是指解得的未知函数是一元函数的微分方程,即一个量随一个自变量变化的规律,比如我们常见到的行驶中的车辆位置会随着时间变化而规律运动;偏微分方程是指解得的未知函数是多元函数的微分方程,即一个量随两个或多个自变量变化的规律,它比常微分方程更复杂一些,不仅仅在于自变量的增多,还因为各个自变量之间会有耦合,比如温度会随着时间的变化而在不同位置上有不同的数值表现,与此同时,温度随位置的变化也会因为时间的不同而在数值上有所变化,生活中的天气预报,就是通过计算机来对偏微分方程进行求解而得到的。

偏微分方程关于纯数学研究的第一篇论文是欧拉所写的《方程的积分法研究》,在此之后,法国数学家达朗贝尔(Jean Le Rond

d'ALembert)也在他的著作《动力学》和论文《张紧的弦振动时形成的曲线的研究》中提出了关于偏微分方程的内容,从而最终开创了偏微分方程这门学科。19世纪是偏微分方程迅速发展的时期,瑞士数学家丹尼尔·伯努利(DanieL BernouLLi)、法国数学家约瑟夫·拉格朗日(Joseph-Louis Lagrange)、让·巴普蒂斯·约瑟夫·傅里叶(Jean Baptiste Joseph Fourier)在各自研究领域的成果都对偏微分方程的发展产生了不同程度的影响。

对于偏微分方程问题的讨论和解决,往往需要应用微分几何学、代数与拓扑学等其他数学分支的理论和方法。偏微分方程的解有无穷多个,但是解决具体的实际问题时,则需要从中选取出所需要的最适合的解,因此,一些必备的附加条件是必不可少的。偏微分方程属于同一类现象的共同规律的表示式,仅仅知道共同规律是无法掌握和了解具体问题的特殊性的,所以,针对不同的具体问题,它的特殊性就在于所处的不同环境的特定条件,即初始条件和边界条件,又被称为定解条件。定解条件反映出具体问题的个性和具体情况,定解条件和方程式的结合被称为定解问题。求偏微分方程的定解问题可以先求出它的通解,然后再用定解条件确定出函数。

首先,针对计算函数,先导入一些模拟仿真所必需的库文件,代码如下

所示。

************************************************************************************ #导入模拟仿真需要的库

import tensorfLow as tf

import numpy as np

#导入可视化需要的库

import PIL.Image

from cStringIO import StringIO

from IPython.dispLay import cLear_output, Image, dispLay

************************************************************************************

源程序代码内容中,通过使用import tensorfLow as tf和import numpy as np将模拟仿真中所需要的TensorFlow模块和NumPy模块进行导入;import PIL.Image代码中的图像处理类库(Python Imaging Library Python,PIL)提供了关于图像的最基本的处理及功能操作,如图像的旋转、裁剪、缩放、颜色的变化等。利用免费的图像处理类库中的各类函数,我们可以将数据从图像格式的文件中提取出来进行数据处理,然后再将处理之后的数据写入到指定的图像格式中,在图像处理类库的众多函数中,最重要的一个函数是Image函数。在代码内容中,from cStringIO import StringIO代码语句中的cStringIO和StringIO所代表的是两个不同功能的模块,这两个模块具有相似的功能操作。

其中,StringIO模块的功能和文件具有很高的相似性,它算是存在于内存中的一个文件,对StringIO模块进行操作的方法与我们对磁盘文件进行操作的方法相类似,即通过StringIO模块对内存文件进行读取和写入的操作;而cStringIO模块则与StringIO模块相类似,但是它又比StringIO模块更高效一些。原因是因为Python语言是一种动态的计算机编程语言,它可以进行解释性执行,如果想要针对Python程序代码的运行速度进行提高,可以通过使用C语言来对某些关键函数进行重写,通过这种方式可以提高整个Python程序代码的执行速度,而具体到cStringIO和StringIO这两个模块来讲,StringIO模块是使用纯Python 代码编写的模块内容,而cStringIO模块中的部分函数则是使用C语言编写的,因此cStringIO模块运行速度会更高效。

针对池塘的表面状态,我们通过一些程序代码来进行相应操作的函数设

定,代码如下所示。

************************************************************************************ def DispLayArray(a, fmt='jpeg', rng=[0,1]):

"""DispLay an array as a picture."""

a = (a - rng[0])/fLoat(rng[1] - rng[0])*255

a = np.uint8(np.cLip(a, 0, 255))

f = StringIO()

PIL.Image.fromarray(a).save(f, fmt)

dispLay(Image(data=f.getvaLue()))

************************************************************************************

相关文档
最新文档