典型的偏微分方程数值解法

news2025/8/12 12:38:59
  • 马上要参加亚太杯啦,听说今年亚太杯有经典的物理题,没什么好说的,盘它!

  • 偏微分方程的数值解十分重要

椭圆型偏微分方程(不含时)

数值解法

u_{i,j}=\frac{u_{i,j-1}+u_{i-1,j}+u_{i+1,j}+u_{i,j+1}-h^2f(x,y)}{4}

二维拉普拉斯方程

\frac{\partial^2u(x,y)}{\partial^2 x}+\frac{\partial^2u(x,y)}{\partial^2 y}=0

边界条件

\left\{\begin{matrix} \frac{log(1+i)}{10}&\,\,(x_{-1},y_i) \\ sin(\frac{2\pi i}{(M-1)})&\,\,(x_0,y_i) \\ cos(i)&\,\, (x_i,y_{-1}))\\ e^{\frac{i}{100}} & \,\,(x_i,y_0) \end{matrix}\right.

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import math

limit = 1000 #迭代次数极限
N = 101 #X轴方向分割次数
M = 101 #Y轴方向分割次数

def iteration(u):
    global N
    global M
    u_next = np.zeros((M,N))
    for i in range(1,N-1):
        for j in range(1,M-1):
            u_next[i][j] = 0.25*(u[i][j-1]+u[i-1][j]+u[i+1][j]+u[i][j+1])
    for i in range(1,N-1):
        for j in range(1,M-1):
            u[i][j] = u_next[i][j]

u = np.zeros((M,N))
for i in range(M):
    u[0][i] = math.sin(2*math.pi*i/(M-1))
for i in range(N):
    u[-1][i] = math.log(1+i)/10
for i in range(M):
    u[i][-1] = math.cos(i)
for i in range(N):
    u[i][0] = math.e ** (i/100)
for i in range(limit):
    iteration(u)

x = np.arange(0,N)
y = np.arange(0,M)
X,Y = np.meshgrid(x,y)
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_wireframe(X,Y,u)
plt.show()

二维泊松方程

\frac{\partial^2u(x,y)}{\partial^2 x}+\frac{\partial^2u(x,y)}{\partial^2 y}=f(x,y)

f(x,y)=x+y

边界条件:\left\{\begin{matrix} \frac{log(1+i)}{10}&\,\,(x_{-1},y_i) \\ sin(\frac{2\pi i}{(M-1)})&\,\,(x_0,y_i) \\ cos(i)&\,\, (x_i,y_{-1}))\\ e^{\frac{i}{100}} & \,\,(x_i,y_0) \end{matrix}\right.

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import math

limit = 1000 #迭代次数极限
N = 101 #X轴方向分割次数
M = 101 #Y轴方向分割次数
h = 1
f = lambda x,y : x+y

def iteration(u):
    global N
    global M
    u_next = np.zeros((M,N))
    for i in range(1,N-1):
        for j in range(1,M-1):
            u_next[i][j] = 0.25*(u[i][j-1]+u[i-1][j]+u[i+1][j]+u[i][j+1]-h**2*f(i,j))
    for i in range(1,N-1):
        for j in range(1,M-1):
            u[i][j] = u_next[i][j]

u = np.zeros((M,N))
for i in range(M):
    u[0][i] = math.sin(2*math.pi*i/(M-1))
for i in range(N):
    u[-1][i] = math.log(1+i)/10
for i in range(M):
    u[i][-1] = math.cos(i)
for i in range(N):
    u[i][0] = math.e ** (i/100)
for i in range(limit):
    iteration(u)

x = np.arange(0,N)
y = np.arange(0,M)
X,Y = np.meshgrid(x,y)
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_wireframe(X,Y,u)
plt.show()

二阶抛物型偏微分方程

一维热传导方程

\frac{\partial u(x,t)}{\partial t}=\lambda \frac{\partial^2 u(x,t)}{\partial x^2}\,\,\,0\leq t \leq T,0\leq x \leq l

边界条件:\left\{\begin{matrix} u(x,0)=f(x)\\ u(0,t)=g_1(t)\\ u(l,t)=g_2(t) \end{matrix}\right.

空间步长h与时间步长\tau

递推关系:\left\{\begin{matrix} u_{i,k+1}=\frac{\lambda \tau}{h^2}u_{i+1,k}+(1-2\frac{\lambda \tau}{h^2})u_{i,k}+\frac{\lambda \tau}{h^2}u_{i-1,k}\\ u_{i,0}=f(ih)\,\,\, i=1,2,...,N-1,N=\frac{l}{h}\\ u_{0,k}=g_1(k\tau)\,\,\, k=0,1,...,M,M=\frac{T}{\tau}\\ u_{N,k}=g_2(k\tau) \end{matrix}\right.

例:

import numpy as np
import matplotlib.pyplot as plt

#参量设置
l = 1
lambde =     1.0
start_time = 0.0
end_time =   10
h =   0.05
tau = 0.001
K = lambde  * tau /h**2
#参量设置结束

#数值解向量
U = np.zeros((int((l)/h),int((end_time-start_time)/tau)))
#数值解向量组设置结束


#边界条件设置
for j in range(int((end_time-start_time)/tau)):
    U[0,j] = np.sin(j)
    U[-1,j] = 0.0
#边界条件设置结束


#初始条件设置
for i in range(int(l/h)):
    U[i,0] = 0
#初始条件设置结束



#时域差分法
for j in range(int((end_time-start_time)/tau)-1):
    for i in range(1,int(l/h)-1):
        try:
            U[i,j+1] = K*U[i+1,j]+(1-2*K)*U[i,j]+K*U[i-1,j]
        except:
            print("i,j",i," ",j)
#时域差分法设置结束


#数据可视化
for i in range(10):
    try:
        u = U[:,i*1000]
        plt.plot(range(len(u)),u)
        plt.pause(0.5)
    except:
        print("超出时域范围")

for i in range(20):
    try:
        u = U[i,:]
        plt.plot(range(len(u)),u)
        plt.pause(0.5)
    except:
        print("超出长度范围")

二维热传导方程

\frac{\partial u}{\partial t}=\lambda (\frac{\partial ^2 u}{\partial x^2}+\frac{\partial ^2 u}{\partial y^2})+q_v\,\,\, 0\leq t \leq t_e,0<x<1,0<y<1

边界条件:\left\{\begin{matrix} u(x,y,0)=u_0(x,y)\\ u(0,y,t)=u_a(t)\\ u(1,y,t)=u_b(t)\\ u(x,0,t)=u_c(t)\\ u(x,1,t)=u_d(t)\\ \end{matrix}\right.

递推关系:\left\{\begin{matrix} u_{i,j}^{k+1}=r_x(u_{i-1,j}^{k}+u^k_{i+1,y})+2(1-r_x-r_y)u_{i,j}^k+r_y(u_{i,j-1}^k+u_{i,j+1}^k)-u_{i,j}^{k-1}\\ r_x=\lambda \frac{\tau}{h_x^2}\\ r_y=\lambda \frac{\tau}{h_y^2} \end{matrix}\right.

双曲型方程

二维波动方程

\frac{\partial ^2 u}{\partial t^2}=c^2(\frac{\partial^2 u}{\partial x^2}+\frac{\partial ^2u}{\partial y^2})

边界条件:\left\{\begin{matrix} \frac{\partial}{\partial t} u(x,y,0)=0\\ u(x,y,0)=u_0(x,y)\\ u(0,y,t)=u_a(t)\\ u(1,y,t)=u_b(t))\\ u(x,0,t)=u_c(t)\\ u(x,1,t)=u_d(t)\\ 0 \leq t \leq T,0 \leq x \leq 1,0 \leq y \leq 1\\ \end{matrix}\right.

递推关系:\left\{\begin{matrix} u_{i,j}^{k+1}=r_x(u_{i-1,j}^k+u_{i+1,j}^k)+2(1-r_x-r_y)u_{i,j}^k+r_y(u_{i,j-1}^k+u_{i,j+1}^k)-u_{i,j}^{k-1}\\ r_x = c^2\frac{\tau^2}{h_x^2}\\ r_y = c^2\frac{\tau^2}{h_y^2} \end{matrix}\right.

迎风法的收敛条件

 r=\frac{4c^2\tau^2}{h_x^2+h_y^2}\leq 1

例:

import numpy as np
import matplotlib.pyplot as plt

#参量设置
c = 1.0
start_time,end_time = 0.0,1.0
start_x,end_x = 0.0,1.0
start_y,end_y = 0.0,1.0
tau = 0.01
hx =  0.02
hy =  0.02
rx = c**2*tau**2/hx**2
ry = c**2*tau**2/hy**2
#参量设置结束


#步长检验
assert(4*c**2*tau**2/(hx**2+hy**2)<=1),"不符合迎风法收敛条件"
#步长检验结束



#数值解向量
X,Y = np.meshgrid(np.arange(0,int((end_x-start_x)),hx),np.arange(0,int((end_y-start_y)),hy))
U = np.zeros((int((end_time-start_time)/tau),int((end_x-start_x)/hx),int((end_y-start_y)/hy)))
#数值解向量组设置结束


#初始条件设置
U[0] = np.sin(2*np.pi*X)
U[1] = np.cos(2*np.pi*Y)
#初始条件设置结束



#有限差分法
for k in range(2,int((end_time-start_time)/tau)):

    for i in range(1,int((end_x-start_x)/hx)-1):
        for j in range(1,int((end_y-start_y)/hy)-1):
            try:
                U[k,i,j] = rx*(U[k-1,i-1,j]+U[k-1,i+1,j]) + ry*(U[k-1,i,j-1] + U[k-1,i,j+1]) + 2*(1-rx-ry)*U[k-1,i,j] - U[k-2,i,j]
            except:
                print("k,i,j",k," ",i," ",j,"")
#有限差分法设置结束


#数据可视化
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111,projection="3d")
for i in range(int((end_time-start_time)/tau)):
    surf = ax.plot_surface(X,Y,U[i,:,:],rstride=2,cstride=2,cmap='rainbow')
    plt.pause(0.01)
    plt.cla()
    
  • 很好,我发现需要再多写一点字来提高文章的质量,尽管我觉得这篇文章的质量已经不低了
  • 期末来了。正好碰上了亚太杯
  • 哎,光学+原物+数理方法!都是好课,爱了爱了
  • 偏微分方程 好课好课
  • 高等代数 好课好课
  • 常微分方程  好课好课
  • 数数看,这学期学了几个专业学分 光学4 原物3 数理方法4 偏微分方程4 高等代数5 常微分方程4 共计 24专业学分。

偏微分方程内双语词汇

  • 专门为美赛与亚太杯准备
  • absoulte error  决对误差
  • absoulte tolerance  容忍限
  • machine precision  机器精度
  • error estimate  误差估计
  • exact solution  精确解
  • adaptive mesh  适应性网格 

  • mixed boundary condition  混合边界条件
  • Neuman boundary condition  Neuman 边界条件
  • boundary condition  边界条件
  • converge  收敛

  • contour plot  等值线图
  • coordinate  坐标系

  • decomposed  分解的
  • decomposed geometry matrix  分解几何矩阵
  • diagonal matrix  对角矩阵

  • elliptic 椭圆型的
  • hyperbolic  双曲线型的
  • parabolic  抛物型的

插值双语词汇

  • approximation  逼近
  • spline approximation  样条拟合
  • spline function  样条函数
  • spline surface 样条曲线
  • multivariate function  多元函数
  • univariate function  一元函数

  • a spline of polynomial piece  分段多项式样条
  • bivariate spline function  二元样条函数
  • cubic interpolation  三次插值
  • cubic polynomial  三次多项式
  • cubic smoothing splinr  三次平滑样条

  • weight  权重
  • tolerance  允许精度
  • degree of freedom 自由度

优化双语词汇

  • unconstrained  无约束的
  • semi-infinitely problem  半无限问题
  • robust  稳健的
  • over-determined 超定的
  • exceede  溢出的
  • feasible  可行的
  • nolinear  非线性的 

  • objection function  目标函数
  • multiobjective  多目标的
  • argument  变量
  • termination message  终止信息
  • optimize  优化
  • optimizer  求解器
  • rasiduals  残差

数理统计双语词汇

  • acceptable region  接受域
  • convariance  协方差分析
  • association  相关性
  • availability  有效性
  • binomial distribution  二项分布
  • cluster analysis  聚类分析
  • components  构成,分量
  • confidence interval  置信区间
  • likelihood ratio test  似然比检验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

教你如何使用云服务器搭建我的世界Minecraft服务器(超级简单-10分钟完成)

一个人玩游戏没啥意思&#xff0c;和朋友一块联机呢&#xff0c;距离太远&#xff0c;家庭局域网宽带又没有公网ip&#xff0c;你的朋友没办法与你联机&#xff0c;然而你只需要一台服务器即可搞定了&#xff1b;但是很多用户没没接触过相关的内容&#xff0c;具体的该怎么操作…

怎样做音乐相册怎样制作?手把手教你制作

大家平时出门游玩的时候&#xff0c;会拍摄一些好看的照片吗&#xff1f;那你们会将这些照片分享在社交平台上吗&#xff1f;普通的照片分享&#xff0c;有时会显得比较枯燥单调&#xff0c;其实我们可以将这些照片制作成音乐相册&#xff0c;这样就可以丰富照片的内容&#xf…

传输层-用户数据报协议(UDP)

UDP协议概述 用户数据报协议 UDP 是 Internet 传输层协议&#xff0c;提供无连接、不可靠、数据报尽力传输服务。 无连接&#xff1a;因此在支持两个进程间通信时&#xff0c;没有握手过程。不可靠&#xff1a;当应用进程将一个报文发送近 UDP 套接字时&#xff0c;UDP 并不能…

python+vue+elementui固定资产管理系统django mysql

目 录 摘 要 I ABSTRACT I 目 录 III 第1章 绪论 1 1.1开发背景 1 1.2开发意义 1 1.3研究内容 1 第2章 主要技术和工具介绍 3 前端技术&#xff1a;nodejsvueelementui 我们最初的项目结构由五个文件组成&#xff1a; manage.py&#xff1a;使用…

为什么管理类硕士(MBA/MEM/MPA)报考会成为职场人的香饽饽?

没个硕士学位&#xff0c;将来出门可能真的都不好意思打招呼了。近些天传言2023年考研人数达到接近550万的信息满天飞&#xff0c;无论真假&#xff0c;从目前已公布报考人数的院校来看&#xff0c;在去年的457万基础上再涨一波的几率是很大的。这其中&#xff0c;报考管理类、…

电科大离散数学-2-命题逻辑-1

目录 2.1 什么是命题 2.1.1 命题的定义 2.1.2 复合命题 2.2 命题联结词 2.2.1 否定联结词 2.2.2 合取联结词 2.2.3 析取联结词 2.2.4 蕴涵联结词 2.2.5 等价联结词 2.3 命题符号化及应用 2.3.1 命题连接词总结 2.3.2 命题联结词的优先级 2.3.3 命题联接词与开关电…

scala

Scala 概述 Scala是一门以Java虚拟机&#xff08;JVM&#xff09;为运行环境并将面向对象和函数式编程的最佳特性结合在一起的 静态类型编程语言&#xff08;静态语言需要提前编译的如&#xff1a;Java、c、c等&#xff0c;动态语言如&#xff1a;js&#xff09;。 Scala是一…

4-20mA转RS-485,Modbus数据采集模块 YL121

特点&#xff1a; ● 模拟信号采集&#xff0c;隔离转换 RS-485输出 ● 采用12位AD转换器&#xff0c;测量精度优于0.1% ● 通过RS-485接口可以程控校准模块精度 ● 信号输入 / 输出之间隔离耐压1000VDC ● 宽电源供电范围&#xff1a;8 ~ 32VDC ● 可靠性高&#xff0c;…

equals与==判断相等

一、 判断相等&#xff0c;判断的是物理地址相等。 二、equals 判断相等 equals 与hashCode 都是Object的方法。 所有的类都继承于Object&#xff0c;如果不重写equals。equals判断相等&#xff0c;底层也是使用来判断物理地址相等。 public boolean equals(Object obj) {re…

影响MySQL索引B+树高度的是什么?

提到MySQL&#xff0c;想必大多后端同学都不会陌生&#xff0c;提到B树&#xff0c;想必还是有很大部分都知道InnoDB引擎的索引实现&#xff0c;利用了B树的数据结构。 那InnoDB 的一棵B树可以存放多少行数据&#xff1f;它又有多高呢&#xff1f; 到底是哪些因素会对此造成影…

【软件测试】测试人的职责,我就是不当背锅侠......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试的目的&#xf…

基于机器视觉的移动消防机器人(四)--实验验证

本文素材来源于北方民族大学 机电工程学院 作者&#xff1a;牟义达、黄瑞翔、李涛 指导老师&#xff1a;田国禾、张春涛 1. 自主行走功能验证 实验目的&#xff1a;让机器人小车行驶500ms后停500ms&#xff0c;循环重复。 实验器材&#xff1a;计算机、消防机器人小车。 实…

ACM MM ECCV 2022 | 美团视觉8篇论文揭秘内容领域的智能科技

人工智能技术正在成为内容领域的中台力量&#xff0c;其中视觉AI已经渗透到内容生产、内容审核、内容分发、用户互动、商业化变现等各个环节。美团视觉智能部以场景化的内容产品、智能化的内容工具助力产业&#xff0c;在内容的创作、内容分发等环节应用广泛。 前不久&#xff…

开源项目让你也可以尝试玩转工业物联网以及智慧工厂(智能制造),IOT开源网关、SCADA取数开源、PLC数据采集

物联网进入与传统产业深度融合发展的崭新阶段。未来10年内&#xff0c;全球物联网将创造10多万亿美元的价值&#xff0c;约占全球经济的1/10&#xff0c;并与城市管理、生产制造、汽车驾驶、能源环保等形成数个千亿级规模以上的细分市场。 随着物联网技术的快速发展&#xff0c…

win10怎么录屏?windows自带录屏功能怎么用

​相信很多小伙伴家里的电脑都是win10系统的&#xff0c;想要录制电脑上的画面&#xff0c;那么就需要用到了windows自带的录屏功能。win10怎么录屏&#xff1f;windows自带的录屏功能怎么用&#xff1f;别担心&#xff0c;今天小编就来教教大家如何在win10系统上录制电脑屏幕。…

Python程序员:代码写的好,丝滑的壁纸少不了

人生苦短&#xff0c;我用Python序言python批量下载最后序言 不知道大家的电脑桌面一般用的什么类型的壁纸&#xff1f; 早上来上班&#xff0c;打开电脑&#xff0c;被漂亮的桌面壁纸所吸引&#xff0c;年底将近&#xff0c;这又是哪个地方的节日&#xff1f; 才晓得&#x…

[附源码]java毕业设计美妆销售系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]java毕业设计农产品网络销售系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

论文阅读笔记 | 三维目标检测——F-PointNet算法

如有错误&#xff0c;恳请指出。 文章目录1. 背景2. 网络结构2.1 Frustum Proposal2.2 3D Instance Segmentation2.3 3D Box Estimation3. 实验结果paper&#xff1a;《Frustum PointNets for 3D Object Detection from RGB-D Data》1. 背景 基与鸟瞰图投影的方法&#xff08;…

一个小台灯

22年11月填旧坑 项目地址&#xff1a;myhome: 服务器终端和微信小程序 (gitee.com) 物联网台灯小项目——ILamp 1、主要硬件&#xff0c;STM32&#xff0c;ESP8266&#xff1b; 2、3D打印的外壳&#xff0c;淘宝金属灯杆、灯罩、配重块&#xff1b; 3、喷涂了白色油漆外观…