使用Deepxde求解微分方程

Deepxde 安装和学习笔记系列1

1. deepxde 安装

在conda 环境下 使用pip安装 deepxde

// Install deepxde
pip install deepxde

或者

// Install deepxde
conda install -c conda-forge deepxde

2. deepxde 使用pytorch

deepxde 默认使用tensorflow.compat.v1
因为我想使用pytorch,所以需要更换。

方法1

在c盘user文件夹里面找到.deepxde文件夹,C:\Users\hp\.deepxde
打开.deepxde文件夹里面的config.json。
改为

{"backend": "pytorch"}

方法2

打开cmd,依次运行下面的代码

cd .deepxde
config.json

然后修改config.json就可以了,改为

{"backend": "pytorch"}

3. deepxde例子

python 代码(pytorch)- 求解Burgers方程的例子

#Backend supported: tensorflow.compat.v1, tensorflow, pytorch
#Documentation: https://deepxde.readthedocs.io/en/latest/demos/burgers.html

import deepxde as dde
import numpy as np


def gen_testdata():
    data = np.load("dataset/Burgers.npz")
    t, x, exact = data["t"], data["x"], data["usol"].T
    xx, tt = np.meshgrid(x, t)
    X = np.vstack((np.ravel(xx), np.ravel(tt))).T
    y = exact.flatten()[:, None]
    return X, y


def pde(x, y):
    dy_x = dde.grad.jacobian(y, x, i=0, j=0)
    dy_t = dde.grad.jacobian(y, x, i=0, j=1)
    dy_xx = dde.grad.hessian(y, x, i=0, j=0)
    return dy_t + y * dy_x - 0.01 / np.pi * dy_xx


geom = dde.geometry.Interval(-1, 1)
timedomain = dde.geometry.TimeDomain(0, 0.99)
geomtime = dde.geometry.GeometryXTime(geom, timedomain)

bc = dde.DirichletBC(geomtime, lambda x: 0, lambda _, on_boundary: on_boundary)
ic = dde.IC(
    geomtime, lambda x: -np.sin(np.pi * x[:, 0:1]), lambda _, on_initial: on_initial
)

data = dde.data.TimePDE(
    geomtime, pde, [bc, ic], num_domain=2540, num_boundary=80, num_initial=160
)
net = dde.maps.FNN([2] + [20] * 3 + [1], "tanh", "Glorot normal")
model = dde.Model(data, net)

model.compile("adam", lr=1e-3)
model.train(epochs=15000)
model.compile("L-BFGS")
losshistory, train_state = model.train()
dde.saveplot(losshistory, train_state, issave=True, isplot=True)

X, y_true = gen_testdata()
y_pred = model.predict(X)
f = model.predict(X, operator=pde)
print("Mean residual:", np.mean(np.absolute(f)))
print("L2 relative error:", dde.metrics.l2_relative_error(y_true, y_pred))
np.savetxt("test.dat", np.hstack((X, y_true, y_pred)))

但是我运行完以后,报错了

ImportError: DLL load failed while importing _imaging: 找不到指定的模块。

卸载重新安装 Pillow 就好了, 重新安装了 几次 就成功了。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
DeepXDEDeep eXtended Finite Elements)是一个用于求解微分方程的深度学习框架,它支持自定义PML(Perfectly Matched Layer)边界条件。 要自定义PML边界条件,需要重载DeepXDE中的PML类,并提供自己的边界条件实现。PML类是DeepXDE中的一个Python类,它定义了PML边界条件的一般实现。您可以从DeepXDE中导入PML类,并在您的代码中重载它。 以下是一个示例代码,展示了如何在DeepXDE中自定义PML边界条件: ```python from deepxde.backend import tf from deepxde.layers import PML class CustomPML(PML): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def build(self, inputs): super().build(inputs) # Custom PML implementation # ... def boundary_cond(self, inputs, outputs): super().boundary_cond(inputs, outputs) # Custom PML boundary condition implementation # ... # Instantiate the custom PML class pml = CustomPML(dim=2, npml=10) # Use the custom PML class in your DeepXDE model model = dde.Model( ... bc=[ ... , pml], ... ) ``` 在以上示例代码中,我们从DeepXDE中导入了PML类,并创建了一个名为CustomPML的子类。我们通过重载CustomPML类中的build和boundary_cond方法来实现自定义的PML边界条件。然后,我们可以在DeepXDE模型中使用CustomPML类的实例作为边界条件。 请注意,我们在实例化CustomPML类时,指定了维度(dim)和PML层数(npml)。这些参数需要根据您的问题进行调整。另外,您需要根据您的实现方式重载CustomPML类中的其他方法。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值