当前位置: 首页 > news >正文

python 代码使用 DeepXDE 库实现了一个求解二维非线性偏微分方程(PDE)的功能

import deepxde as dde
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf# 设置时空计算域
Lx = 1  # x 范围从 0 到 1
Ly = 1  # y 范围从 0 到 1
Lt = 0.05  # t 范围从 0 到 0.05
geom = dde.geometry.Rectangle([0, 0], [Lx, Ly])  # 空间域
timedomain = dde.geometry.TimeDomain(0, Lt)  # 时间域
geomtime = dde.geometry.GeometryXTime(geom, timedomain)# 设置 PDE 方程
def pde(x, y):u = y[:, 0:1]  # 提取 u(x, y, t)u_x = dde.grad.jacobian(y, x, i=0, j=0)  # u 对 x 的一阶导数u_y = dde.grad.jacobian(y, x, i=0, j=1)  # u 对 y 的一阶导数u_t = dde.grad.jacobian(y, x, i=0, j=2)  # u 对 t 的一阶导数# 计算 u 对 x 和 y 的梯度grad_u = tf.concat([u_x, u_y], axis=1)  # 使用 TensorFlow 的 concat 函数拼接张量# 计算 (u^2 - u + 1) * 梯度项term = u ** 2 - u + 1  # 计算 (u^2 - u + 1)A = term * grad_u  # 乘以梯度# 计算散度:对 (A) 进行求导,即计算 (A_x + A_y)A_x = dde.grad.jacobian(A, x, i=0, j=0)  # A 对 x 的导数A_y = dde.grad.jacobian(A, x, i=0, j=1)  # A 对 y 的导数# 散度 = A_x + A_ydiv_A = A_x + A_y# 返回 PDE 方程 u_t - div((u^2 - u + 1) * grad(u)) = 0return u_t - div_A# 边界条件:u = 0,在边界上
def boundary(x, on_boundary):return on_boundarybc = dde.icbc.DirichletBC(geomtime, lambda x: 0, boundary, component=0)# 初始条件:u = sin(pi * x) * sin(pi * y)
def ic_func(x):return np.sin(np.pi * x[:, 0:1]) * np.sin(np.pi * x[:, 1:2])ic = dde.icbc.IC(geomtime, ic_func, lambda x, on_initial: on_initial, component=0)# 创建数据对象
data = dde.data.TimePDE(geomtime,pde,[bc, ic],num_domain=10000,  # 训练样本数量num_boundary=8000,  # 边界上的训练样本数量num_initial=5000,  # 初始条件上的训练样本数量num_test=10000,  # 测试样本数量
)# 设置神经网络架构
layer_size = [3] + [50] * 3 + [1]  # 输入层(3维:x, y, t),4个隐藏层,每层80个神经元,输出层(u)
activation = "tanh"  # 激活函数
initializer = "Glorot uniform"  # 权重初始化方法net = dde.nn.FNN(layer_size, activation, initializer)# 创建模型并训练
model = dde.Model(data, net)
model.compile("adam", lr=1e-3)  # 使用 Adam 优化器,学习率为 1e-3
losshistory, train_state = model.train(iterations=3000, display_every=200)# 保存训练历史和状态
dde.saveplot(losshistory, train_state, issave=False, isplot=True)# 可视化结果,绘制 t=0.05 时刻的 u(x, y)
xx, yy = np.meshgrid(np.linspace(0, 1, 28), np.linspace(0, 1, 28))
xy = np.vstack((xx.ravel(), yy.ravel())).T
t = np.ones((xy.shape[0], 1)) * 0.05  # 设置 t=0.05
xy_t = np.hstack((xy, t))  # 合并 x, y, tu_pred = model.predict(xy_t)  # 预测 u(x, y, t) 在 t=0.05 时的值
u_pred = u_pred.reshape(xx.shape)  # 重塑为网格形状# 筛选 u >= 0
u_pred = np.maximum(u_pred, 0)# 绘制 u(x, y) 的 3D 图
fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(xx, yy, u_pred, cmap="viridis")
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('u(x, y, t=0.05)')
ax.set_title('u(x, y, t=0.05)')plt.show()

这段代码使用 DeepXDE 库实现了一个求解二维非线性偏微分方程(PDE)的功能。以下是对代码功能的详细解释:

  1. 设置时空计算域

    • 定义了空间范围 LxLy 分别为 1,时间范围 Lt 为 0.05。
    • 创建了空间域 geom(一个矩形)、时间域 timedomain 以及时空域 geomtime
  2. 设置 PDE 方程

    • 定义了一个函数 pde 来描述 PDE 方程。
    • 计算了函数 uxyt 的一阶导数。
    • 计算了 u 的梯度和 (u^2 - u + 1) * 梯度 项。
    • 计算了上述项的散度,并构建了 PDE 方程 u_t - div((u^2 - u + 1) * grad(u)) = 0
  3. 定义边界条件和初始条件

    • 边界条件:定义了一个函数 boundary 来判断点是否在边界上,并设置边界条件为 u = 0
    • 初始条件:定义了一个函数 ic_func 来描述初始条件 u = sin(pi * x) * sin(pi * y)
  4. 创建数据对象

    • 使用 dde.data.TimePDE 创建了一个数据对象 data,包含了 PDE 方程、边界条件和初始条件。
    • 定义了训练样本、边界样本、初始条件样本和测试样本的数量。
  5. 设置神经网络架构

    • 定义了神经网络的层结构,包括输入层(3 维:xyt)、4 个隐藏层(每层 50 个神经元)和输出层(1 维:u)。
    • 选择了激活函数 tanh 和权重初始化方法 Glorot uniform
  6. 创建模型并训练

    • 使用 dde.Model 创建了一个模型,将数据对象和神经网络传入。
    • 使用 Adam 优化器,学习率为 1e-3 对模型进行编译。
    • 训练模型,迭代 3000 次,并每 200 次迭代显示一次训练信息。
  7. 保存和可视化结果

    • 使用 dde.saveplot 保存训练历史和状态,并绘制损失曲线。
    • t = 0.05 时刻,生成网格点 xxyy,并将其与 t 合并为 xy_t
    • 使用训练好的模型预测 u(x, y, t)t = 0.05 时的值,并重塑为网格形状。
    • 筛选出 u >= 0 的值。
    • 绘制 u(x, y, t = 0.05) 的 3D 图。

综上所述,这段代码实现了使用深度学习方法求解二维非线性 PDE 的功能,并对结果进行了可视化展示。

相关文章:

python 代码使用 DeepXDE 库实现了一个求解二维非线性偏微分方程(PDE)的功能

import deepxde as dde import numpy as np import matplotlib.pyplot as plt import tensorflow as tf# 设置时空计算域 Lx 1 # x 范围从 0 到 1 Ly 1 # y 范围从 0 到 1 Lt 0.05 # t 范围从 0 到 0.05 geom dde.geometry.Rectangle([0, 0], [Lx, Ly]) # 空间域 timed…...

【Go】:深入解析 Go 1.24:新特性、改进与最佳实践

前言 Go 1.24 尚未发布。这些是正在进行中的发布说明。Go 1.24 预计将于 2025 年 2 月发布。本文将深入探讨 Go 1.24 中引入的各项更新,并通过具体示例展示这些变化如何影响日常开发工作,确保为读者提供详尽而有价值的参考。 新特性及改进综述 HTTP/2 …...

VUE3 一些常用的 npm 和 cnpm 命令,涵盖了修改源、清理缓存、修改 SSL 协议设置等内容。

以下是一些常用的 npm 和 cnpm 命令,涵盖了修改源、清理缓存、修改 SSL 协议设置等内容。 npm 常用命令 1. 修改 npm 源 更改为淘宝的 npm 镜像源(可以提高安装速度): bash复制代码 npm config set registry https://registry…...

【SpringBoot】@Value 没有注入预期的值

问题复现 在装配对象成员属性时,我们常常会使用 Autowired 来装配。但是,有时候我们也使用 Value 进行装配。不过这两种注解使用风格不同,使用 Autowired 一般都不会设置属性值,而 Value 必须指定一个字符串值,因为其…...

【STM32-学习笔记-6-】DMA

文章目录 DMAⅠ、DMA框图Ⅱ、DMA基本结构Ⅲ、不同外设的DMA请求Ⅳ、DMA函数Ⅴ、DMA_InitTypeDef结构体参数①、DMA_PeripheralBaseAddr②、DMA_PeripheralDataSize③、DMA_PeripheralInc④、DMA_MemoryBaseAddr⑤、DMA_MemoryDataSize⑥、DMA_MemoryInc⑦、DMA_DIR⑧、DMA_Buff…...

js实现一个可以自动重链的websocket客户端

class WebSocketClient {constructor(url, callback, options {}) {this.url url; // WebSocket 服务器地址this.options options; // 配置选项(例如重试间隔、最大重试次数等)this.retryInterval options.retryInterval || 1000; // 重试间隔&#…...

企业总部和分支通过GRE VPN互通

PC1可以ping通PC2 1、首先按照地址表配置ip地址 2、分别在AR1和AR3上配置nat 3、配置GRE a 创建tunnel接口,并选择tunnel协议为GRE,为隧道创建一个地址,用作互联 b 为隧道配置源地址或者源接口,这里选择源接口;再为…...

油猴支持阿里云自动登陆插件

遇到的以下问题,都已在脚本中解决: 获取到的元素赋值在页面显示,但是底层的value并没有改写,导致请求就是获取不到数据元素的加载时机不定,尤其是弱网情况下,只靠延迟还是有可能获取不到,且登陆…...

【2024年华为OD机试】(C卷,100分)- 字符串筛选排序 (Java JS PythonC/C++)

一、问题描述 题目描述 输入一个由N个大小写字母组成的字符串 按照ASCII码值从小到大进行排序 查找字符串中第K个最小ASCII码值的字母 (k > 1) 输出该字母所在字符串中的位置索引 (字符串的第一个位置索引为0) k如果大于字符串长度则输出最大ASCII码值的字母所在字符串…...

iOS - runtime总结

详细总结一下 Runtime 的核心内容: 1. 消息发送机制 // 消息发送的基本流程 id objc_msgSend(id self, SEL _cmd, ...) {// 1. 获取 isaClass cls object_getClass(self);// 2. 查找缓存IMP imp cache_getImp(cls, _cmd);if (imp) return imp(self, _cmd, ...);…...

第33 章 - ES 实战篇 - MySQL 与 Elasticsearch 的一致性问题

思维导图 0. 前言 MySQL 与 Elasticsearch 一致性问题是老生常谈了。网上有太多关于这方面的文章了,但是千篇一律,看了跟没看没有太大区别。 在生产中,我们往往会通过 DTS 工具将 binlog 导入到 Kafka,再通过 Kafka 消费 binlog&…...

Artec Leo 3D扫描仪与Ray助力野生水生动物法医鉴定【沪敖3D】

挑战:捕获大型水生哺乳动物(如鲸鱼)的数据,搭建全彩3D模型,用于水生野生动物的法医鉴定、研究和保护工作。 解决方案:Artec Eva、Artec Space Spider、Artec Leo、Artec Ray、Artec Studio、CT scans 效果&…...

PythonQT5打包exe线程使用

打包: pyinstaller --noconsole --onefile test.py–noconsole 表示不需要打开命令行 修改:test.spec 一般项目里面需要用的资源文件,比如lib、png、exe等。 需要单独修改spec文件 pathex[.],binaries[(D:/test.png, .),(D:/simsun.ttc, .…...

【Powershell】Windows大法powershell好(二)

PowerShell基础(二) 声明:该笔记为up主 泷羽的课程笔记,本节链接指路。 警告:本教程仅作学习用途,若有用于非法行为的,概不负责。 1. powershell 执行外部命令 powershell也可以执行一些外部的…...

前端学习-环境this对象以及回调函数(二十七)

目录 前言 目标 环境对象 作用 环境对象this是什么? 判断this指向的粗略规则是什么? 回调函数 目标 常见的使用场景 综合案例:Tab任务栏切换 总结 前言 男儿何不带吴钩,收取关山五十州 目标 能够分析判断函数运行在不…...

Element-plus、Element-ui之Tree 树形控件回显Bug问题。

需求&#xff1a;提交时&#xff0c;需要把选中状态和半选中状态 的数据id提交。如图所示&#xff1a; 数据回显时&#xff0c;会出现代码如下&#xff1a; <template><el-tree ref"treeRef" :data"tree" show-checkbox node-key"id" …...

互联网全景消息(10)之Kafka深度剖析(中)

一、深入应用 1.1 SpringBoot集成Kafka 引入对应的依赖。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupI…...

Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步

Oracle Dataguard&#xff08;主库为双节点集群&#xff09;配置详解&#xff08;5&#xff09;&#xff1a;将主库复制到备库并启动同步 目录 Oracle Dataguard&#xff08;主库为双节点集群&#xff09;配置详解&#xff08;5&#xff09;&#xff1a;将主库复制到备库并启动…...

pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)

pytorch小记&#xff08;一&#xff09;&#xff1a;pytorch矩阵乘法&#xff1a;torch.matmul&#xff08;x, y&#xff09;/ x y 代码代码 1&#xff1a;torch.matmul(x, y)输入张量&#xff1a;计算逻辑&#xff1a;输出结果&#xff1a; 代码 2&#xff1a;y y.view(4,1)…...

PyTorch环境配置常见报错的解决办法

目标 小白在最基础的环境配置里一般都会出现许多问题。 这里把一些常见的问题分享出来。希望可以节省大家一些时间。 最终目标是可以在cmd虚拟环境里进入jupyter notebook&#xff0c;new的时候有对应的环境&#xff0c;并且可以跑通所有的import code。 第一步&#xff1a;…...

OpenClaw性能调优:Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF长文本处理技巧

OpenClaw性能调优&#xff1a;Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF长文本处理技巧 1. 为什么需要长文本优化 上周我尝试用OpenClaw处理一份200页的技术文档摘要任务时&#xff0c;遭遇了典型的"长文本困境"——模型要么漏掉关键段落&#xff0c;要么生…...

实战演练企业级mysql环境搭建,快马平台生成电商项目配置全流程

今天想和大家分享一个企业级MySQL环境搭建的实战经验。最近在帮朋友搭建一个电商网站的后台数据库&#xff0c;正好用到了InsCode(快马)平台来快速生成配置方案&#xff0c;整个过程非常顺畅。 1. 准备工作与环境选择 首先需要明确的是&#xff0c;企业级MySQL部署和本地开发…...

ARM开发板也能玩转电子相册?手把手教你用GEC6818和Linux驱动LCD屏

ARM开发板上的电子相册实战&#xff1a;从Linux驱动到触摸交互的全解析 在嵌入式开发领域&#xff0c;将一块裸板变成能与人交互的智能设备&#xff0c;这种创造过程总是令人着迷。今天我们要探讨的&#xff0c;是如何让一块GEC6818 ARM开发板变身为一台功能完整的电子相册。这…...

SMUDebugTool终极指南:AMD Ryzen系统硬件调试与性能优化的完整解决方案

SMUDebugTool终极指南&#xff1a;AMD Ryzen系统硬件调试与性能优化的完整解决方案 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目…...

智慧树自动学习助手:三分钟实现高效网课学习的完整指南

智慧树自动学习助手&#xff1a;三分钟实现高效网课学习的完整指南 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台冗长的网课视频而烦恼吗&#xff1…...

【ComfyUI】Qwen-Image-Edit-F2P用于影视概念设计:快速生成角色面部概念图

ComfyUI Qwen-Image-Edit-F2P用于影视概念设计&#xff1a;快速生成角色面部概念图 1. 引言&#xff1a;当AI画笔遇见影视美术 想象一下这个场景&#xff1a;一部新剧的美术指导正在为“饱经风霜的西部枪手”这个角色发愁。导演想要一张能瞬间抓住观众眼球的脸&#xff0c;一…...

机器人控制入门:用Pi0具身智能v1镜像5分钟搭建你的第一个动作预测Demo

机器人控制入门&#xff1a;用Pi0具身智能v1镜像5分钟搭建你的第一个动作预测Demo 1. 快速部署Pi0具身智能镜像 1.1 选择并启动镜像 在云平台镜像市场中搜索并选择"ins-pi0-independent-v1"镜像&#xff0c;点击"部署实例"按钮。首次启动大约需要1-2分钟…...

AI黑科技展示:CYBER-VISION零号协议实时视频分割效果

AI黑科技展示&#xff1a;CYBER-VISION零号协议实时视频分割效果 1. 未来已来&#xff1a;当AI视觉遇见赛博朋克 想象一下这样的场景&#xff1a;一位视障人士戴上智能眼镜&#xff0c;眼前的世界突然变得清晰可辨——人行道上的盲道被高亮标注&#xff0c;前方的障碍物用醒目…...

LeetCode 最长回文子串:python 题解

一、核心问题及解决方案&#xff08;按踩坑频率排序&#xff09; 问题 1&#xff1a;误删他人持有锁——最基础也最易犯的漏洞 成因&#xff1a;释放锁时未做身份校验&#xff0c;直接执行 DEL 命令删除键。典型场景&#xff1a;服务 A 持有锁后&#xff0c;业务逻辑耗时超过锁…...

C++学习笔记——初始化列表、创建和实例化对象、new 关键字、隐式构造与 explicit 关键字、运算符与运算符重载

目录 1. 初始化列表 1.1 基本语法 1.2 为什么使用初始化列表&#xff1f; 1.3 初始化顺序 2. 创建和实例化对象 2.1 栈上分配&#xff08;自动存储期&#xff09; 2.2 堆上分配&#xff08;动态存储期&#xff09; 2.3 栈 vs 堆&#xff1a;Cherno 的建议 3. new 关键…...