声波传播方程-Helmholtz方程差分计算

2023-10-07 06:20

本文主要是介绍声波传播方程-Helmholtz方程差分计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.声波传播方程程序

∇ 2 p + k 2 p = 0 (1) {\nabla ^2}p + {k^2}p = 0 \tag{1} 2p+k2p=0(1)

其中 , k = ω / c , ω = 2 π f k = \omega /c,\omega = 2\pi f k=ω/c,ω=2πf,采用中心差分格式: ∇ 2 p = ∂ 2 p ∂ x 2 + ∂ 2 p ∂ y 2 {\nabla ^2}p = {{{\partial ^2}p} \over {\partial {x^2}}} + {{{\partial ^2}p} \over {\partial {y^2}}} 2p=x22p+y22p ,其中:
∂ 2 p ∂ x 2 = p i + 1 , j + p i − 1 , j − 2 p i , j ( Δ x ) 2 {{{\partial ^2}p} \over {\partial {x^2}}} = {{{p_{i + 1,j}} + {p_{i - 1,j}} - 2{p_{i,j}}} \over {{{(\Delta x)}^2}}} x22p=(Δx)2pi+1,j+pi1,j2pi,j ∂ 2 p ∂ y 2 = p i , j + 1 + p i , j − 1 − 2 p i , j ( Δ y ) 2 (2) {{{\partial ^2}p} \over {\partial {y^2}}} = {{{p_{i,j + 1}} + {p_{i,j - 1}} - 2{p_{i,j}}} \over {{{(\Delta y)}^2}}}\tag{2} y22p=(Δy)2pi,j+1+pi,j12pi,j(2)
将(2)带入(1)式中得:
p i + 1 , j + p i − 1 , j − 2 p i , j ( Δ x ) 2 + p i , j + 1 + p i , j − 1 − 2 p i , j ( Δ y ) 2 + k 2 p i , j = 0 (3) {{{p_{i + 1,j}} + {p_{i - 1,j}} - 2{p_{i,j}}} \over {{{(\Delta x)}^2}}} + {{{p_{i,j + 1}} + {p_{i,j - 1}} - 2{p_{i,j}}} \over {{{(\Delta y)}^2}}} + {k^2}{p_{i,j}} = 0\tag{3} (Δx)2pi+1,j+pi1,j2pi,j+(Δy)2pi,j+1+pi,j12pi,j+k2pi,j=0(3)
图1 差分格式
(3)式为Helmholtz方程差分计算的基本方程。因此将声压变量向量形式得到:
A P = 0 (4) AP = 0\tag{4} AP=0(4)
由于差分方程(3)中的变量数目为5,因此A是带宽为5的稀疏矩阵。 P = [ p 1 , 1 , p 1 , 2 , p 1 , 3 ⋯ p m , n ] T P = {[{p_{1,1}},{p_{1,2}},{p_{1,3}} \cdots {p_{m,n}}]^T} P=[p1,1,p1,2,p1,3pm,n]T为声压列向量。由于矩阵A是满秩的,因此方程(4)仅有0解。在实际频域计算时往往存在一些激励,比如平面波入射,单极子、偶极子点源等。
假设位置 r 0 r0 r0处含有单极子电源,此时方程(1)可表示如下形式:
∇ 2 p + k 2 p = 4 π S δ ( r − r 0 ) (5) {\nabla ^2}p + {k^2}p = 4\pi S\delta (r - r0)\tag{5} 2p+k2p=4πSδ(rr0)(5)
其中 r 0 r0 r0处的激励为 , 此时(4)式右边存在与 r 0 r0 r0点对应非零项b,矩阵方程(4)转化为:
A P = b (6) AP = b\tag{6} AP=b(6)
其中 b b b为已知列向量,然后可以利用迭代求解得到未知量 。

2.边界条件

根据离散方程(3)的差分格式,我们注意到,角边界点只有三个变量,而非角边界只有4个变量。这是由于在形成矩阵的时候默认了最外层边界为0。实际上在单个点源激励时,无穷远处才会存在声压为0的现象,因此在计算区域限制的情况下,必然会出现反射问题。为了减小反射的影响,除了扩大计算域外,还可以添加吸收层,其中最常用的吸收层为完美匹配层(PML),其基本原理是将复数空间引入到Helmholtz方程之中,如同在边界上添加了一层阻尼,声压传递到外层时会呈指数下降,因此声压传递到最外层时已经大小趋近于0,反射对计算域产生的影响较小。
在这里插入图片描述
当然边界条件设定除了满足计算需求外,还可以简化计算,可以对称界面设定,比如以 p 1 , j {p_{1,j}} p1,j为对称点即 p 2 , j + p 0 , j − 2 p i , j ( Δ x ) 2 + p 1 , j + 1 + p 1 , j − 1 − 2 p i , j ( Δ y ) 2 + k 2 p 1 , j = 0 {{{p_{2,j}} + {p_{0,j}} - 2{p_{i,j}}} \over {{{(\Delta x)}^2}}} + {{{p_{1,j + 1}} + {p_{1,j - 1}} - 2{p_{i,j}}} \over {{{(\Delta y)}^2}}} + {k^2}{p_{1,j}} = 0 (Δx)2p2,j+p0,j2pi,j+(Δy)2p1,j+1+p1,j12pi,j+k2p1,j=0可转化为:
2 p 2 , j − 2 p i , j ( Δ x ) 2 + p 1 , j + 1 + p 1 , j − 1 − 2 p i , j ( Δ y ) 2 + k 2 p 1 , j = 0 (7) {{2{p_{2,j}} - 2{p_{i,j}}} \over {{{(\Delta x)}^2}}} + {{{p_{1,j + 1}} + {p_{1,j - 1}} - 2{p_{i,j}}} \over {{{(\Delta y)}^2}}} + {k^2}{p_{1,j}} = 0\tag{7} (Δx)22p2,j2pi,j+(Δy)2p1,j+1+p1,j12pi,j+k2p1,j=0(7)
p 2 , j {p_{2,j}} p2,j对应系数增加一倍。
以上便是频域差分方程求解的整体思路,要注意的是与时域的求解方式link不同,椭圆形的频域方程无法采用递进计算的方式求解。交流学习请联系qq2862274738或邮箱dynyanhao@163.com

这篇关于声波传播方程-Helmholtz方程差分计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/156598

相关文章

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

poj 3159 (spfa差分约束最短路) poj 1201

poj 3159: 题意: 每次给出b比a多不多于c个糖果,求n最多比1多多少个糖果。 解析: 差分约束。 这个博客讲差分约束讲的比较好: http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 套个spfa。 代码: #include <iostream>#include <cstdio>#i

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

poj 3169 spfa 差分约束

题意: 给n只牛,这些牛有些关系。 ml个关系:fr 与 to 牛间的距离要小于等于 cost。 md个关系:fr 与 to 牛间的距离要大于等于 cost。 隐含关系: d[ i ] <= d[ i + 1 ] 解析: 用以上关系建图,求1-n间最短路即可。 新学了一种建图的方法。。。。。。 代码: #include <iostream>#include