首页/文章/ 详情

龙格库塔Pinn方法求解方程,pytorch框架(四)

9月前浏览249

ODE数值方法的演进路程

已知方程一阶导数公式和初始值,求方程的解

 
  1. 显式欧拉法
 

从当前点     出发,沿着当前的切线方向走一小步    ,就到达了下一点,该方法简单容易,但是精度较低,数值解容易爆炸。

  1. 隐式欧拉
 

用下一步的斜率来当作当前的切线方向,方程的右端包含待求解的    ,因此称为隐式欧拉,比较稳定,数值解不容易爆炸,但是计算量显著增加。

  1. 改进欧拉法

先用显式欧拉法计算一步

 

然后用两端的斜率均值作为当前切线方向

 

基于上述计算方法,因此该方法也叫预测-矫正法。精度高,且是显式的计算相对方便。

  1. 梯形法则和中点公式
 
 
  1. 显式龙格库塔方法

在    内取点    个点构成    级RK(龙格库塔)格式(精度阶数和级数并不总是相等),此时

 

当    的值由    对应点的斜率加权平均得到时,该公式称为显式RK法,当取    时,选取适当点的位置,比较典型的例子就是改进欧拉方法。

  1. 半隐式龙格库塔方法

当    的值由    对应点的斜率加权平均得到时,该公式称为半隐式RK法。比较典型的例子就是梯形法则。

隐式龙格库塔方法

当    的值由    对应点的斜率加权平均得到时,该公式称为半隐式RK法。 记导数为    满足

 

其中    称为待定常数,则

 

为一个单步的    级Rk方法,    也为常数。 通常情况下,我们通过一个系数表(Butcher tableau)来表示一个RK方法,一般记为如下形式

基于系数表,当    为严格下三角是,称该方法为显式的,当    为下三角时称为半隐式,当A不是上述情况时称为隐式。

  • 显式欧拉,隐式欧拉,改进欧拉,梯形公式,中点公式的Butcher tableau如下所示
     

龙格库塔的Pinn方法应用

正问题

将    级龙格库塔方法的一般形式应用如下方程

 

得到

 

将公式移项,记作

 

此时可知

 

用神经网络预测以下结果

 

将预测的结果带入到移项后的公式计算得到

 

即可以对比误差获得损失函数。

    def fwd_gradients(self, U, x, dummy):
        # 第一次求导:U对x
        grad = torch.autograd.grad(U, x,
                                       grad_outputs=dummy,
                                       create_graph=True,
                                       retain_graph=True)[0]

        # 第二次求导:结果对dummy
        dummy_grad = torch.ones_like(grad)
        grad_U_x = torch.autograd.grad(grad, dummy,
                                    grad_outputs=dummy_grad,
                                    create_graph=True,
                                    retain_graph=True)[0]

        return grad_U_x
  • 在具体实践中为了避免多次的反向传播,通常采用哑变量求导的方式,第一次求导获得      ,第二次再对      求导获得      。

反问题

前面与正问题类似,不同的是将公式移项后,记作

 

此时

 

同样的用神经网络预测以下结果

 

带入移项后的公式获得如下结果

 
 

对比精确值,即可获得损失函数。

q = int(np.ceil(0.5 * np.log(np.finfo(float).eps) / np.log(dt)))
  • 这里的公式是      ,      代表机器误差,反问题中要使理论误差接近机器误差,由于机器精度的限制,无论使用多高阶的方法,结果精度无法超过机器精度
  • 龙格库塔方法的理论误差为      ,其中      代表预测步长,      代表方法级次,在正问题中采用的方法理论误差远小于机器误差。

感谢每一位朋友的关注!期待能和大家在这个领域携手前行,后续会有更多技术解读和实战技巧分享,我们一起学习,共同成长!~~~🤞🤞🤞


来源:我的博士日记
UM理论爆炸
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-01-08
最近编辑:9月前
此生君子意逍遥
博士 签名征集中
获赞 62粉丝 134文章 164课程 0
点赞
收藏
作者推荐

PINN求解一维波动方程,pytorch框架,附代码(二)

pytorch和tensorflow区别以下tensorflow简称TFpytorch具有更加易用的API,目前的TF 2.x + Keras也提供类似的易用的APIpytorch构建动态计算图,方便调试,TF以静态图为主,有利于部署和加速,目前也支持动态图,鼓励用语法糖转化为静态图获得性能提升部署方面,TF有完整的工具链,目前pytorch也增强了部署能力可视化工具,TF集成有TensorBoard,pytorch也支持用TensorBoard总结:但随着版本迭代,两者正在相互借鉴优点,差距逐渐缩小。学习阶段可以采用pytorch,获得成熟可用的项目后可以转用tensorflow部署获得更高的性能。正问题正问题是已知一切条件预测结果,这是一个确定性的计算过程。已知方程形式,且已知 : 初始条件: 边界条件: 解析解: 根据达朗贝尔公式可得: 表达式如下: 损失函数表达式: 网络架构输入层:空间坐标 隐藏层:3层,每层50个神经元输出层:物理场预测值 值得一提的是: PINN本身并不提供解的存在唯一性证明。这个保证来自于应用数学领域的微分方程理论。在将一个问题交给PINN求解之前,我们通常依赖于已知的数学定理来确保问题是一个“适定性问题”,即:存在性:至少有一个解。唯一性:最多有一个解。稳定性:解连续地依赖于初始条件或边界条件。例如将上述波动方程初始条件中的一阶导公式去掉,解就失去了唯一性,PINN就无法按预期工作。原始采样点 损失函数变化 真实结果、预测结果、绝对误差逆问题逆问题是已知一些观测数据,但是不确定方程中的一些系数是多少,目标是利用这些观测数据来反推出方程中的系数。更进一步,有大量的观测数据,但是不知道方程的具体形式,利用已有数据来推出方程的表达式,因此逆问题可能不具备适定性,求解更困难。将上述正问题做两点改动,1.添加一些已知观测数据。2.参数c的数值未知。那么上述正问题就变成了一个逆问题。此时损失函数表达式: 表示的是 和参数 的集 合。 原始采样点 损失函数变化、参数 变化 真实结果、预测结果、绝对误差 来源:我的博士日记

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈