神经网络求解二阶常微分方程

神经网络求解二阶常微分方程

最近课题组老师给出一篇文献,文件原文如链接一所示。需要让我使用深度神经网络求解偏微分方程。在相关调研过程中,CSDN上作者Trytobenice分享过相关的程序源码。基于相关程序源码,我将他的一阶常微分方程求解扩充到二阶常微分方程求解。并且按照此方法可以求解高阶常微分方程。

理论分析

对于任意一个微分方程,我们都可以用这个方程表示出
在这里插入图片描述
求解目的就是找出这样的一个方程:ψ(x),能够满足以上的G()函数。
对于计算机求解,第一步要将其离散化处理:
在这里插入图片描述
人工神经网络若要求解该方程,那就设方程ψ(x)函数如下形式:
在这里插入图片描述
将预设的ψ(x)带入原方程中,只需要让G()函数在定义范围内达到最小,那就求解出这个方程了。二次方项是为了将负数对结果的影响消除。
在这里插入图片描述
下面再来分析ψ(x)的内容:
在讲解这个解函数之前,需要给出一个补充知识。要求解出常微分方程,仅仅给出常微分方程表达式是不够的,还要给出常微分方程的初始条件和边界条件。这样才能保证解函数的唯一性。

ψ(x)函数中包含两项。第一项是A(x),这一项是为了满足初始条件或者边界条件。第二项F{x,N(x,p)},这一项是神经网络满足偏微分方程的部分,不考虑边界条件。【注:为什么F()项能够不考虑边界条件,文中例子会给出介绍】

继续看F{x,N(x,p)},这一项中包含N(x,p)。这个N()函数就是神经网络函数表达式形式。x表示输入数据,p表示神经网络中的参数。通过BP网络优化神经网络中的参数p,使神经网络能够达到最适,就能得到神经网络的解函数ψ(x)。

设出这个解函数之后,我们下一步要根据解函数表达出微分方程。微分方程中至少包含一个微分项,可能是一阶,也可能是二阶;可能是常微分,也可能是偏微分。论文中给出神经网络N(x,p)输出对输入x的微分公式。公式形式如下:在这里插入图片描述
式中k表示k阶导数,j表示对输入数据 xj(j是下角标) 的偏导。本文仅仅探讨常微分形式。

举例分析

这里给出一个一阶常微分方程表达式,用这个方程分析如何使用神经网络求解。方程入下:
在这里插入图片描述
并且给出边界条件,在这里插入图片描述
这个方程有很明确的解析解,解析解如下所示:
在这里插入图片描述
对于神经网络求解,我们可以设神经网络解ψ(x)形式为:
在这里插入图片描述
在这里,满足边界条件的A(x)直接为1。不需要考虑边界条件的项F{x,N(x,p)}设为x*N(x,p),那么在x=0的情况下,解第二项直接为0,仅仅保留A(x),这样就能解释前部分的【注】。

方法提升

以上分析全部针对论文1的内容,论文1出版年份为1998年,论文2于2019年提出了更进一步的方法,下面我们进一步分析论文2的内容:

论文2设计的神经网络与论文1,解析解设计过程中,直接设神经网络输出的结果为
在这里插入图片描述
在这里不考虑边界值,边界值在损失函数上体现。损失函数第一项如论文1相同,第二项体现边界值。损失函数通过以下函数给出:神经网络求解二阶常微分方程_第1张图片
论文2设计的神经网络结构非常简单,中间只有一个隐藏层,隐藏层中只有10个神经元。

神经网络求解二阶常微分方程_第2张图片

代码结果

在这里展示我使用Tensorflow设计的,求解二阶常微分方程的程序结果。二阶常微分方程式由以下方程给出:
神经网络求解二阶常微分方程_第3张图片

二阶微分方程的初始值:
在这里插入图片描述

该微分方程的解析解:
在这里插入图片描述

使用设计的程序,仿真出的结果如图所示:
神经网络求解二阶常微分方程_第4张图片
其中,解析解和神经网络解之间的差值用下图可以看出:
神经网络求解二阶常微分方程_第5张图片
可以看到,这个拟合结果还是非常不错的,误差数量级控制在10^-4以下。

有时间会在github上开源代码,到时候下载别忘了给我点一个star。

论文1: Artificial neural networks for solving ordinary and partial differential equations
论文2: Solving differential equations with neural networks: Applications to the calculation of cosmological phase transitions.

你可能感兴趣的:(深度学习,人工智能,python,偏微分方程)