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)的功能。以下是对代码功能的详细解释:
-
设置时空计算域:
- 定义了空间范围
Lx
和Ly
分别为 1,时间范围Lt
为 0.05。 - 创建了空间域
geom
(一个矩形)、时间域timedomain
以及时空域geomtime
。
- 定义了空间范围
-
设置 PDE 方程:
- 定义了一个函数
pde
来描述 PDE 方程。 - 计算了函数
u
对x
、y
和t
的一阶导数。 - 计算了
u
的梯度和(u^2 - u + 1) * 梯度
项。 - 计算了上述项的散度,并构建了 PDE 方程
u_t - div((u^2 - u + 1) * grad(u)) = 0
。
- 定义了一个函数
-
定义边界条件和初始条件:
- 边界条件:定义了一个函数
boundary
来判断点是否在边界上,并设置边界条件为u = 0
。 - 初始条件:定义了一个函数
ic_func
来描述初始条件u = sin(pi * x) * sin(pi * y)
。
- 边界条件:定义了一个函数
-
创建数据对象:
- 使用
dde.data.TimePDE
创建了一个数据对象data
,包含了 PDE 方程、边界条件和初始条件。 - 定义了训练样本、边界样本、初始条件样本和测试样本的数量。
- 使用
-
设置神经网络架构:
- 定义了神经网络的层结构,包括输入层(3 维:
x
、y
、t
)、4 个隐藏层(每层 50 个神经元)和输出层(1 维:u
)。 - 选择了激活函数
tanh
和权重初始化方法Glorot uniform
。
- 定义了神经网络的层结构,包括输入层(3 维:
-
创建模型并训练:
- 使用
dde.Model
创建了一个模型,将数据对象和神经网络传入。 - 使用 Adam 优化器,学习率为
1e-3
对模型进行编译。 - 训练模型,迭代 3000 次,并每 200 次迭代显示一次训练信息。
- 使用
-
保存和可视化结果:
- 使用
dde.saveplot
保存训练历史和状态,并绘制损失曲线。 - 在
t = 0.05
时刻,生成网格点xx
和yy
,并将其与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…...
后端技术选型 sa-token校验学习 下 结合项目学习 后端鉴权
目录 后端注册拦截器 实现对 WebMvcConfigurer 接口的类实现 静态变量 方法重写 注册 Spring Framework拦截器 Sa-Token中SaServletFilter拦截器 思考 为什么使用两个拦截器 1. Spring Framework 拦截器 2. SaServletFilter 为什么要注册两个拦截器? 总结 …...
继承(8)
大家好,今天我们来学习一下继承方式相关的知识,有助于我们对java的继承有更深的了解,话不多说,来看。 1.10 继承方式 在现实生活中,事物之间的关系是非常复杂,灵活多样。 Java中支持以下几种继承方式: 单继承: 多层…...
深度学习-图神经网络-超图概念及在Hyper-YOLO的应用(小白也看懂)
为什么需要超图? 在一个复杂系统中,某些节点(实体)之间的互动可能不是仅限于两个节点之间的关系,而是多个节点同时参与的更复杂的关系(超边)。简单说就是为了更好的描述事物之间的关系…...
django基于Python的校园个人闲置物品换购平台
Django 基于 Python 的校园个人闲置物品换购平台 一、平台概述 Django 基于 Python 的校园个人闲置物品换购平台是专为校园师生打造的一个便捷、环保且充满活力的线上交易场所。它借助 Django 这一强大的 Python Web 开发框架,整合了校园内丰富的闲置物品资源&…...
opencv的NLM去噪算法
NLM(Non-Local Means)去噪算法是一种基于图像块(patch)相似性的去噪方法。其基本原理是: 图像块相似性:算法首先定义了一个搜索窗口(search window),然后在该窗口内寻找…...
嵌入式系统中的 OpenCV 与 OpenGLES 协同应用
🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 一、OpenCV 在嵌入式中的基石地位二、OpenGLES 为嵌入式图形渲染赋能三、二者协同的精妙之处四、面临的挑战与应对策略 在嵌入式开…...
第三十六章 Spring之假如让你来写MVC——拦截器篇
Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...
DDD - 如何运用 DDD 进行数据库设计
文章目录 Pre概述领域对象持久化的思想领域模型的设计传统的 4 种关系1. 一对一关系2. 多对一关系3. 一对多关系4. 多对多关系 继承关系的 3 种设计1. 继承关系的第一种方案:整个父类与子类都写入一张表2. 继承关系的第二种方案:各子类各自对应各自的表3…...
OSPF - 特殊报文与ospf的机制
👠1 携带FA地址的5类LSA 除去7类转5类的LSA会携带FA地址,还有一种情况会有FA地址 FA地址:forwarding address 转发地址,解决次优路径,避免环路5类LSA FA地址不为0,则直接通过FA地址去往目标网段 FA地址为0,…...
VSCode 插件
VSCode 插件 1. GitHub Copilot - AI 代码助手 功能:根据上下文提供实时代码补全,支持自然语言转代码,提供符合现代编程规范的建议。进阶技巧: 使用快捷键 Alt ] 切换多个建议。写注释时,描述业务逻辑而不是具体实现…...
jQuery CSS 类
jQuery CSS 类 引言 在网页设计和开发中,CSS(层叠样式表)起着至关重要的作用,它负责定义网页的布局、颜色、字体等视觉效果。jQuery,作为一个快速、小巧且功能丰富的JavaScript库,极大地简化了HTML文档的…...
CentOS下安装Docker
Docker 必须要在Linux环境下才能运行,windows下运行也是安装虚拟机后才能下载安装运行,菜鸟教程 下载安装 linux 依次执行下边步骤 更新 yum yum update 卸载旧的Docker yum remove docker docker-client docker-client-latest docker-common doc…...
SQLAlchemy
https://docs.sqlalchemy.org.cn/en/20/orm/quickstart.htmlhttps://docs.sqlalchemy.org.cn/en/20/orm/quickstart.html 声明模型 在这里,我们定义模块级构造,这些构造将构成我们从数据库中查询的结构。这种结构被称为 声明式映射,它同时定…...
2025年第三届“华数杯”国际赛A题解题思路与代码(Python版)
游泳竞技策略优化模型代码详解 第一题:速度优化模型 在这一部分,我们将详细解析如何通过数学建模来优化游泳运动员在不同距离比赛中的速度分配策略。 1. 模型概述 我们的模型主要包含三个核心文件: speed_optimization.py: 速度优化的核…...
深入架构剖析 博客点赞逻辑 strategy 策略模式 策略接口 上下文 具体策略 项目实战
目录 点赞策略上下文 策略上下文代码详解 1. 策略模式概述 2. 核心组件 3. 代码解读 LikeStrategyContext 类 LikeTypeEnum 枚举 LikeStrategy 接口 具体策略类 4. 如何使用这个设计 5. 优点 6. 总结 具体代码实现 定义枚举类 从控制层传入参数到上下文 在策略上…...
嵌入式Linux之C语言开发基础
一、C 语言编译过程 Linux 的 C 语言开发,一般选择 GCC 工具链进行编译,示例: 1.mkdir helloworld 2.cd helloworld // 1.main.c #include "hello.h" int main() {say_hello();return 0; } // 2.hello.h #ifndef __HELLO_H__ #de…...
std::accumulate
std::accumulate 是 C 标准库中的一个算法,定义在 <numeric> 头文件中。它用于计算给定范围内元素的累积值(通常是一个和,但也可以是其他类型的累积操作)。 template< class InputIt, class T > T accumulate( Input…...
计算机网络 (33)传输控制协议TCP概述
一、定义与基本概念 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它工作在OSI模型的第四层,即传输层,为用户提供可靠的、有序的和无差错的数据传输服务。TCP协议与UDP协议是传输层的两大主要协议,但两者在设计上有明显的不同&…...
Gitee图形界面上传(详细步骤)
目录 1.软件安装 2.安装顺序 3.创建仓库 4.克隆远程仓库到本地电脑 提交代码的三板斧 1.软件安装 Git - Downloads (git-scm.com) Download – TortoiseGit – Windows Shell Interface to Git 2.安装顺序 1. 首先安装git-2.33.1-64-bit.exe,顺序不能搞错2. …...
【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…...
苍穹外卖08——(涉及接收日期格式数据、ApachePOI导出报表、sql获取top10菜品数据)
营业额统计 service层 在需要处理空值、与数据库交互或使用集合时,Integer 、Double是更好的选择。 // 导入string工具类 import org.apache.commons.lang.StringUtils; Service // 标记该类为Spring的服务组件 Slf4j // 引入日志功能 public class Repor…...
Node.js——fs(文件系统)模块
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...
【Docker】入门教程
目录 一、Docker的安装 二、Docker的命令 Docker命令实验 1.下载镜像 2.启动容器 3.修改页面 4.保存镜像 5.分享社区 三、Docker存储 1.目录挂载 2.卷映射 四、Docker网络 1.容器间相互访问 2.Redis主从同步集群 3.启动MySQL 五、Docker Compose 1.命令式安装 …...
Ubuntu中使用miniconda安装R和R包devtools
安装devtools环境包 sudo apt-get install gfortran -y sudo apt-get install build-essential -y sudo apt-get install libxt-dev -y sudo apt-get install libcurl4-openssl-dev -y sudo apt-get install libxml2.6-dev -y sudo apt-get install libssl-dev -y sudo apt-g…...
大语言模型预训练、微调、RLHF
转发,如有侵权,请联系删除: 1.【LLM】3:从零开始训练大语言模型(预训练、微调、RLHF) 2.老婆饼里没有老婆,RLHF里也没有真正的RL 3.【大模型微调】一文掌握7种大模型微调的方法 4.基于 Qwen2.…...
啥!GitHub Copilot也免费使用了
文章目录 前言免费版直接修复代码多文件上下文Agent模式总结 前言 最近,GitHub 给开发者们带来了一个好消息:他们的 AI 编程助手 GitHub Copilot 现在可以免费使用了!以前,每个月要花 10 美元才能享受的服务,现在对所…...
【Ubuntu与Linux操作系统:五、文件与目录管理】
第5章 磁盘存储管理 5.1 Linux磁盘存储概述 磁盘存储是Linux系统存储数据的重要组件,它通过分区和文件系统组织和管理数据。Linux支持多种文件系统,如ext4、xfs和btrfs,并以块的形式管理存储设备。 1. 分区与文件系统: 分区&am…...
【PDF转Word】 PDF在线转word文档 好用!优质网站资源推荐
大家在工作与学习中,经常需要将PDF文件转换为Word格式以便进行编辑和修改。很多人都不知道怎么操作,今天我们介绍一个非常好用的工具:小白工具网,可以在线帮忙大家快速把PDF转换成word格式。 小白工具网提供的PDF转Word功能&…...
计算机网络 (38)TCP的拥塞控制
前言 TCP拥塞控制是传输控制协议(Transmission Control Protocol,TCP)避免网络拥塞的算法,是互联网上主要的一个拥塞控制措施。 一、目的 TCP拥塞控制的主要目的是防止过多的数据注入到网络中,使网络能够承受现有的网络…...
构造函数的原型原型链
代码示例 // 定义一个构造函数 Test function Test() {this.name 张三 }; //向构造函数的原型添加一个属性 age18 Test.prototype.age 18;//使用构造函数 Test 来实例化一个新对象 const test new Test();//向 Object.prototype 添加了一个名为 sex 的属性,其值…...
2025华数杯国际赛A题完整论文讲解(含每一问python代码+数据+可视化图)
大家好呀,从发布赛题一直到现在,总算完成了2025“华数杯”国际大学生数学建模竞赛A题Can He Swim Faster的完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文…...
[RabbitMQ] RabbitMQ运维问题
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
GenAIOps:生成式 AI 运维 - 实用指南
https://medium.com/google-cloud/genaiops-operationalize-generative-ai-a-practical-guide-d5bedaa59d78 作者:Dr Sokratis Kartakis 从创意到生产:使用生成式 AI 和运维 (GenAIOps) 概述 生成式 AI (GenAI) 的世界充满了令人兴奋的可…...
用户界面软件04
后果 使用这种架构很容易对两个层面的非功能性需求进行优化,但是你仍然需要小心不要将功能 需求重复实现。 现在,两个层面可能有完全不同的设计。比如,用户界面层可能使用配件模型(Widget Model), 以大量的…...
分布式系统设计:Java的秘密基地布局
分布式系统设计是Java企业级开发中的一个关键领域,它涉及到构建高可用、可扩展、高性能的系统。以下是分布式系统设计的一些核心概念和实践: 3.1 分布式系统的特点 分布式系统由多个独立的计算机节点组成,这些节点通过网络连接在一起&#x…...
【Redis学习 | 第5篇】Redis缓存 —— 缓存的概念 + 缓存穿透 + 缓存雪崩 + 缓存击穿
文章目录 完成任务1. 什么是缓存2. 添加商户缓存3. 缓存更新策略3.1 主动更新 4. 缓存穿透5. 缓存雪崩6. 缓存击穿6.1 使用互斥锁查询商铺信息6.2 使用逻辑过期查询商铺信息 7. 封装 Redis 工具类 完成任务 1. 什么是缓存 缓存:数据交换的缓冲区(Cache…...
MySQL索引覆盖(覆盖索引, Covering Index)
文章目录 说明MySQL索引覆盖(覆盖索引, Covering Index)覆盖索引的概念覆盖索引的示例示例查询及索引覆盖情况覆盖索引的性能优势覆盖索引的实现条件覆盖索引 vs 非覆盖索引覆盖索引的限制如何设计覆盖索引覆盖索引的实际案例场景 1:电商系统…...
VUE3 provide 和 inject,跨越多层级组件传递数据
provide 和 inject 是 Vue 3 提供的 API,主要用于实现祖先组件与后代组件之间的依赖注入。它们可以让你在组件树中,跨越多层组件传递数据,而不需要通过 props 或事件的方式逐层传递。这个机制主要用于状态共享、插件系统或某些跨层级的功能。…...
【UE5 C++课程系列笔记】29——在UE中使用第三方库的流程
目录 前言 步骤 一、新建插件 二、创建第三方库 三、使用第三方库 前言 主要就是介绍如何将普通C++工程生成的头文件和.dll导入到UE中去使用。 步骤 一、新建插件 1. 打开插件浏览器选项卡 2. 打开插件创建器 3. 选择“第三方库”,这里命名为“MyThirdPartyLibrary…...
Type-C双屏显示器方案
在数字化时代,高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步,一款结合了便携性和高效视觉输出的设备——双屏便携屏,逐渐崭露头角,成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…...
20250112面试鸭特训营第20天
更多特训营笔记详见个人主页【面试鸭特训营】专栏 250112 1. TCP 和 UDP 有什么区别? 特性TCPUDP连接方式面向连接(需要建立连接)无连接(无需建立连接)可靠性可靠的,提供确认、重传机制不可靠,…...
使用conda出现requests.exceptions.HTTPError 解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
玩转大语言模型——langchain调用ollama视觉多模态语言模型
系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 langchain调用ollama视觉多模态语言模型 系列文章目录前言使用Ollama下载模型查找模型下载模型 测试模型ollama测试langchain测试加载图片加载模型…...
【玩转MacBook】mdfind命令搜索
mdfind 是 macOS 上的一个命令行工具,它允许用户根据元数据来查找文件。mdfind 使用 Spotlight 索引来快速搜索文件系统中的项目。这意味着它可以非常快地找到文件,因为它不直接在磁盘上搜索,而是查询由 Spotlight 维护的索引数据库。 基本用…...
数据结构与算法之二叉树: LeetCode 637. 二叉树的层平均值 (Ts版)
二叉树的层平均值 https://leetcode.cn/problems/average-of-levels-in-binary-tree/description/ 描述 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值与实际答案相差 1 0 − 5 10^{-5} 10−5 以内的答案可以被接受 示例 1 输入:root…...
【巨实用】Git客户端基本操作
本文主要分享Git的一些基本常规操作,手把手教你如何配置~ ● 一个文件夹中初始化Git git init ● 为了方便以后提交代码需要对git进行配置(第一次使用或者需求变更的时候),告诉git未来是谁在提交代码 git config --global user.na…...
从预训练的BERT中提取Embedding
文章目录 背景前置准备思路利用Transformer 库实现 背景 假设要执行一项情感分析任务,样本数据如下 可以看到几个句子及其对应的标签,其中1表示正面情绪,0表示负面情绪。我们可以利用给定的数据集训练一个分类器,对句子所表达的…...
BGP 泄露
大家读完觉得有帮助记得关注和点赞!!! 目录 1. BGP 是什么? 2. 什么是 BGP 泄露? 3. 今天发生了什么? 4. 正常和被劫持状态下的路由示意图 5. 受影响区域 6. 责任在谁? 7. 有办法避免这…...
IntelliJ IDEA和MAVEN基本操作:项目和缓存存储到非C盘
为了将 IntelliJ IDEA 的所有项目和缓存存储到 C 盘以外的地方,以下是你需要调整的设置和步骤: 1. 更改项目默认存储位置 打开 IntelliJ IDEA。点击顶部菜单的 File > Settings (Windows)或 IntelliJ IDEA > Preferences &…...