PINN求解一维波动方程,pytorch框架,附代码(二)
本文对比了PyTorch和TensorFlow框架的差异,并介绍了使用PINN(物理信息神经网络)求解一维波动方程的正问题和逆问题。正问题中,已知方程形式和参数c,通过神经网络预测结果;逆问题则通过观测数据反推未知参数c。文章展示了两种问题的网络架构、损失函数设计及实验结果,包括采样点分布、损失变化和预测误差对比。最后指出,PINN求解前需确保问题的适定性(存在性、唯一性、稳定性),并提供了完整代
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}∂t2∂2u(x,t)=c2∂x2∂2u(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} = 0∂t∂u(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(x−ct)]
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的集合。



感谢阅读!如果觉得本文对你有帮助,欢迎关注我的csdn账号@「Ahicert」和微信公众号「工业界的程序猿」。在公众号后台回复 “PINN-2”关键词即可免费获取完整的代码示例
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)