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

pytorch和tensorflow区别

以下tensorflow简称TF

  • pytorch具有更加易用的API,目前的TF 2.x + Keras也提供类似的易用的API
  • pytorch构建动态计算图,方便调试,TF以静态图为主,有利于部署和加速,目前也支持动态图,鼓励用语法糖转化为静态图获得性能提升
  • 部署方面,TF有完整的工具链,目前pytorch也增强了部署能力
  • 可视化工具,TF集成有TensorBoard,pytorch也支持用TensorBoard

总结:但随着版本迭代,两者正在相互借鉴优点,差距逐渐缩小。学习阶段可以采用pytorch,获得成熟可用的项目后可以转用tensorflow部署获得更高的性能。

正问题

正问题是已知一切条件预测结果,这是一个确定性的计算过程。

  • 已知方程形式,且已知c=2c=2c=2
    ∂2u(x,t)∂t2=c2∂2u(x,t)∂x2\frac{\partial^2 u(x,t)}{\partial t^2} = c^2 \frac{\partial^2 u(x,t)}{\partial x^2}t22u(x,t)=c2x22u(x,t)
    初始条件:
    u(x,0)=sin⁡(πx)+sin⁡(2πx) u(x,0) = \sin(\pi x) + \sin(2\pi x)u(x,0)=sin(πx)+sin(2πx)
    ∂u(x,0)∂t=0\frac{\partial u(x,0)}{\partial t} = 0tu(x,0)=0
    边界条件:
    u(0,t)=0,u(L,t)=0u(0,t) = 0,u(L,t) = 0u(0,t)=0,u(L,t)=0
    解析解:
    根据达朗贝尔公式可得:
    u(x,t)=12[f(x+ct)+f(x−ct)]u(x,t)=\frac{1}{2}[f(x+ct)+f(x-ct)]u(x,t)=21[f(x+ct)+f(xct)]
    f(x)f(x)f(x)表达式如下:
    f(x)=sin(πx)+sin(2πx)f(x)=sin(\pi x)+sin(2\pi x)f(x)=sin(πx)+sin(2πx)
    损失函数表达式:
    L(θ)=λpdeLpde(θ)+λicLic(θ)+λbcLbc(θ)\mathcal{L}(\theta) = \lambda_{pde}\mathcal{L}_{pde}(\theta)+\lambda_{ic}\mathcal{L}_{ic}(\theta)+\lambda_{bc}\mathcal{L}_{bc}(\theta)L(θ)=λpdeLpde(θ)+λicLic(θ)+λbcLbc(θ)
  • 网络架构
    • 输入层:空间坐标(x,t)(x,t)x,t
    • 隐藏层:3层,每层50个神经元
    • 输出层:物理场预测值uθ(x,t)u_{\theta}(x,t)uθ(x,t)

值得一提的是:
PINN本身并不提供解的存在唯一性证明。这个保证来自于应用数学领域的微分方程理论。在将一个问题交给PINN求解之前,我们通常依赖于已知的数学定理来确保问题是一个“适定性问题”,即:

  • ​存在性​:至少有一个解。
  • ​唯一性​:最多有一个解。
  • ​稳定性​:解连续地依赖于初始条件或边界条件。

例如将上述波动方程初始条件中的一阶导公式去掉,解就失去了唯一性,PINN就无法按预期工作。

原始采样点

损失函数变化

真实结果、预测结果、绝对误差

逆问题

逆问题是已知一些观测数据,但是不确定方程中的一些系数是多少,目标是利用这些观测数据来反推出方程中的系数。更进一步,有大量的观测数据,但是不知道方程的具体形式,利用已有数据来推出方程的表达式,因此逆问题可能不具备适定性,求解更困难。

  • 将上述正问题做两点改动,1.添加一些已知观测数据。2.参数c的数值未知。那么上述正问题就变成了一个逆问题。

此时损失函数表达式:
L(Θ)=λpdeLpde(Θ)+λicLic(θ)+λbcLbc(θ)+λdataLdata(θ)\mathcal{L}(\Theta) = \lambda_{pde}\mathcal{L}_{pde}(\Theta)+\lambda_{ic}\mathcal{L}_{ic}(\theta)+\lambda_{bc}\mathcal{L}_{bc}(\theta)+\lambda_{data}\mathcal{L}_{data}(\theta)L(Θ)=λpdeLpde(Θ)+λicLic(θ)+λbcLbc(θ)+λdataLdata(θ)
Θ\ThetaΘ表示的是θ\thetaθ和参数ccc的集合。

原始采样点

损失函数变化、参数c变化

真实结果、预测结果、绝对误差

感谢阅读​!如果觉得本文对你有帮助,欢迎关注我的csdn账号@「Ahicert」和微信公众号「工业界的程序猿」。在公众号后台回复 ​“PINN-2”关键词​即可免费获取完整的代码示例

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐