最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

數(shù)值求解波動方程 [4]

2022-08-28 01:18 作者:nyasyamorina  | 我要投稿

這篇里講述了另外一種求得 PML 的方法以及簡單實現(xiàn)二維波動方程的數(shù)值模擬.



另一個 PML 求解

????????在上一篇求一維 PML 時,? PML 變換為?%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%20x%7D%5Cmapsto%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%5Ctilde%20x%7D%3D%5Cfrac%7B1%7D%7B1%2Bi%5Cfrac%7B%5Csigma%7D%7B%5Comega%7D%7D%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%20x%7D,? 以及在假設(shè) v%3De%5E%7Bi(kx-%5Comega%20t)%7D?時得到關(guān)系 %5Cfrac%7B%5Cpartial%20v%7D%7B%5Cpartial%20t%7D%3D-i%5Comega%20v,? 并且在最后恰好全部虛數(shù)單位 i?都被抵消,? 留下一個純實數(shù) (復(fù)數(shù)也可以) 的方程.? 在部分情況下,? 需要施加 PML 變換的波動方程比較復(fù)雜 (比如強(qiáng)迫振動或粘度等),? 造成虛數(shù)單位無法恰好被消除,? 留下一個需要在復(fù)數(shù)域上求解的方程.? 也不是說數(shù)值求解復(fù)數(shù)方程不可以,? 只不過考慮到內(nèi)存和計算開銷,? 復(fù)數(shù)真的不太行.

????????實際上,? 考慮傅里葉變換?%5Cmathcal%20F%20f%3D%5Cmathcal%20F%5C%7Bf(t)%5C%7D(%5Comega)%3D%5Cint_%7B%5Cmathbb%20R%7Df(t)e%5E%7B-i%5Comega%20t%7Ddt%2C%5C%2C%5Comega%5Cin%5Cmathbb%20R,? 無論 v?如何都有 %5Cmathcal%20F%5Cfrac%7B%5Cpartial%20v%7D%7B%5Cpartial%20t%7D%3D-i%5Comega%5Cmathcal%20Fv,? 這與上面提到的關(guān)系是等價的.? 另外再考慮拉普拉斯變換 %5Cmathcal%20Lf%3D%5Cmathcal%20L%5C%7Bf(t)%5C%7D(s)%3D%5Cint_0%5E%7B%2B%5Cinfty%7Df(t)e%5E%7Bst%7Ddt%2C%5C%2Cs%5Cin%5Cmathbb%20C,? 除了積分域和定義域不一樣外,? 它跟傅里葉變換是相同的.? 在波動方程里,? 不需要太關(guān)心 t%3C0?部分 (這里只討論正演而忽略反演),? 那么把 -i%5Comega%3Ds?替換掉所有出現(xiàn)的頻率得到新的 PML 變換 %5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%20x%7D%5Cmapsto%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%5Ctilde%20x%7D%3D%5Cfrac%7B1%7D%7B1%2B%5Cfrac%7B%5Csigma%7D%7Bs%7D%7D%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%20x%7D?和關(guān)系 %5Cmathcal%20L%5Cfrac%7B%5Cpartial%20v%7D%7B%5Cpartial%20t%7D%3Ds%5Cmathcal%20Lv.? 下面繼續(xù)以一維波動方程做例子:

????????對一維波動方程?%5Cfrac%7B%5Cpartial%5E2u%7D%7B%5Cpartial%20t%5E2%7D%3Dc%5E2%5Cfrac%7B%5Cpartial%5E2u%7D%7B%5Cpartial%20x%5E2%7D?施加拉普拉斯變換得到 %5Cmathcal%20L%5Cfrac%7B%5Cpartial%5E2u%7D%7B%5Cpartial%20t%5E2%7D%3D%5Cmathcal%20L%5Cleft(c%5E2%5Cfrac%7B%5Cpartial%5E2u%7D%7B%5Cpartial%20x%5E2%7D%5Cright),? 即 s%5E2%5Cmathcal%20Lu%3Dc%5E2%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%20x%7D%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%20x%7D%5Cmathcal%20Lu?(偏微分算符和拉普拉斯變換的線性),? 這個就是波動方程在 s 域的形式.? 對 s 域的波動方程施加 PML 變換得?s%5E2%5Cmathcal%20Lu%3D%5Cfrac%7Bc%5E2%7D%7B1%2B%5Cfrac%5Csigma%20s%7D%5Cfrac%5Cpartial%7B%5Cpartial%20x%7D%5Cleft(%5Cfrac1%7B1%2B%5Cfrac%5Csigma%20s%7D%5Cfrac%5Cpartial%7B%5Cpartial%20x%7D%5Cmathcal%20Lu%5Cright),? 兩邊同乘 %5Cfrac%7Bs%2B%5Csigma%7D%7Bs%5E2%7D?得 s%5Cmathcal%20L%20u%2B%5Csigma%5Cmathcal%20Lu%3Dc%5E2%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%20x%7D%5Cleft(%5Cfrac1%7Bs%2B%5Csigma%7D%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%20x%7D%5Cmathcal%20Lu%5Cright).? 引入新量 v?使得 %5Cmathcal%20Lv%3A%3D%5Cfrac1%7Bs%2B%5Csigma%7D%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%20x%7D%5Cmathcal%20Lu,? 即得到 %5Cleft%5C%7B%5Cbegin%7Bmatrix%7Ds%5Cmathcal%20Lu%2B%5Csigma%5Cmathcal%20Lu%3Dc%5E2%5Cfrac%5Cpartial%7B%5Cpartial%20x%7D%5Cmathcal%20Lv%5C%5Cs%5Cmathcal%20Lv%2B%5Csigma%5Cmathcal%20Lv%3D%5Cfrac%5Cpartial%7B%5Cpartial%20x%7D%5Cmathcal%20Lu%5Cend%7Bmatrix%7D%5Cright.,? 把方程組從 s 域轉(zhuǎn)為時域得 %5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%5Cfrac%7B%5Cpartial%20u%7D%7B%5Cpartial%20t%7D%2B%5Csigma%20u%3Dc%5E2%5Cfrac%7B%5Cpartial%20v%7D%7B%5Cpartial%20x%7D%5C%5C%5Cfrac%7B%5Cpartial%20v%7D%7B%5Cpartial%20t%7D%2B%5Csigma%20v%3D%5Cfrac%7B%5Cpartial%20u%7D%7B%5Cpartial%20x%7D%5Cend%7Bmatrix%7D%5Cright.,? 可以看到這與之前得到的一模一樣.

????????盡管兩個方法得到的結(jié)果都是一樣的,? 但在 s 域上處理 PML 變換是非常通用的,? 至少不需要假設(shè)一些條件.



二維波動方程

????????二維波動方程為?%5Cfrac%7B%5Cpartial%5E2u%7D%7B%5Cpartial%20t%5E2%7D%3Dc%5E2%5Cleft(%5Cfrac%7B%5Cpartial%5E2u%7D%7B%5Cpartial%20x_1%5E2%7D%2B%5Cfrac%7B%5Cpartial%5E2u%7D%7B%5Cpartial%20x_2%5E2%7D%5Cright),? 其中 u(x_1%2Cx_2%2Ct)?為所求波的解.? 習(xí)慣上使用 x%2Cy 作為二維笛卡爾坐標(biāo),? 但是 unicode 沒有下標(biāo) y,? 所以這里使用?x_1%2Cx_2?作為坐標(biāo)了 (方便以后的編程實現(xiàn)).? 跟一維波動方程類似,? 二維波動方程離散化為?

%5Cfrac%7Bu_%7Bx_1%2Cx_2%2Ct%2B1%7D%2Bu_%7Bx_1%2Cx_2%2Ct-1%7D-2u_%7Bx_1%2Cx_2%2Ct%7D%7D%7B%5CDelta%20t%5E2%7D%3Dc%5E2%5Cleft(%5Cfrac%7Bu_%7Bx_1%2B1%2Cx_2%2Ct%7D%2Bu_%7Bx_1-1%2Cx_2%2Ct%7D-2u_%7Bx_1%2Cx_2%2Ct%7D%7D%7B%5CDelta%20x_1%5E2%7D%2B%5Cfrac%7Bu_%7Bx_1%2Cx_2%2B1%2Ct%7D%2Bu_%7Bx_1%2Cx_2-1%2Ct%7D-2u_%7Bx_1%2Cx_2%2Ct%7D%7D%7B%5CDelta%20x_2%5E2%7D%5Cright)

有一說一, 確實有點長了.? 整理后得到

u_%7Bx_1%2Cx_2%2Ct%2B1%7D%3Dc_1(u_%7Bx_1%2B1%2Cx_2%2Ct%7D%2Bu_%7Bx_1-1%2Cx_2%2Ct%7D)%2Bc_2(u_%7Bx_1%2Cx_2%2B1%2Ct%7D%2Bu_%7Bx_1%2Cx_2-1%2Ct%7D)%2Bc_3u_%7Bx_1%2Cx_2%2Ct%7D-u_%7Bx_1%2Cx_2%2Ct-1%7D

其中?c_1%3D%5Cfrac%7Bc%5E2%5CDelta%20t%5E2%7D%7B%5CDelta%20x_1%5E2%7D%3B%5C%3Bc_2%3D%5Cfrac%7Bc%5E2%5CDelta%20t%5E2%7D%7B%5CDelta%20x_2%5E2%7D%3B%5C%3Bc_3%3D2(1-c_1-c_2).? 在離散化后還需要截斷計算區(qū)域,? 截斷方式與一維的一樣,? 但只不過現(xiàn)在不管是截斷一個維度,? 而是兩個.? 但是值得留意的是,? 邊界圍成的形狀不一定只能是正方形長方形,? 但奇形怪狀的邊界很多時候需要額外計算邊界處的離散化,? 所以這里只展示正方形的邊界了.



二維實現(xiàn)

????????在模擬二維波動方程里,? 有一個比較大的問題就是計算速度,? 因為網(wǎng)格大小會隨著空間精度和大小的增大呈平方上升,? 所以與其放在 cpu 上面跑,? 不如放在 gpu 上面.

????????julia 的 cuda 支持在?https://cuda.juliagpu.org/stable?有詳細(xì)記述.? 一般來說有顯卡驅(qū)動時直接在 REPL 里 `]add CUDA` 就可以安裝了,? 并且 julia 函數(shù)可以編譯為 cuda 代碼,? 而不用像 python 那樣在字符串里寫 C++ CUDA 函數(shù).? 下面是 Wave2D 相關(guān)的實現(xiàn),? 在代碼里上下邊界使用了 Neumann 邊界,? 而左右邊界則是循環(huán)邊界.

????????不過在渲染 gif 的時候無論如何都不能把文件大小降下來,? 明明隔壁 mp4 都超級小了,? 怎么 gif 就那么大 (mp4: 211K, gif: 13.8M).? 所以下面貼圖片算了,? 但是代碼是直接渲染視頻的.

????????觀察到圖中,? 波包在空間擴(kuò)散時,? 在后面留下了不為零的"尾跡",? 并且尾跡不會消失 (可以參考《數(shù)理方程》)?,? 亦即不符合 Huggens 原理,? 這種現(xiàn)象稱為波的彌散或有后效現(xiàn)象,? 并且這是偶數(shù)維度空間特有的.? 下圖是沿軸方向的切片,? 可以更直觀地看到這個現(xiàn)象:

???????在上面的代碼實現(xiàn)里,? 已經(jīng)包括了不均勻介質(zhì),? 下圖為空間中心有一個半徑為 0.1 的實心玻璃圓.

????????渲染的代碼稍微有點長,? 所以這里單獨拿出來貼一份:

圖里 "% 06d" 應(yīng)為 "%06d",? CodeSnap 抽風(fēng)了



數(shù)值穩(wěn)定性

????????因為二維波動方程有三個維度 (兩個空間一個時間),? 那么應(yīng)該討論三個維度的數(shù)值穩(wěn)定性.? 據(jù)自己的觀察經(jīng)驗,? 當(dāng)?%5Cleft.%5Cfrac%7B%5Cpartial%20u%7D%7B%5Cpartial%20t%7D%5Cright%7C_%7Bt%3D0%7D%3D0?時,? c_3%3C0?會造成空間數(shù)值不穩(wěn)定,? 否則 c_3%3C1 是空間數(shù)值不穩(wěn)定 (? 我也不知道為何).? 在空間維度上,??c_1%2Cc_2?是衡量時間不穩(wěn)定的指標(biāo),? 與一維波動方程類似,? 這兩個數(shù)值在?%3C1?時會在相應(yīng)維度上產(chǎn)生時間不穩(wěn)定,? 但必須確保全局上不能有空間不穩(wěn)定,? 即 c_3%3D2(1-c_1-c_2)%5Cgeq0,? 所以任何維度都不能不產(chǎn)生時間不穩(wěn)定.

????????盡管在任何維度上必定是時間不穩(wěn)定的,? 但是當(dāng)?%5CDelta%20x_1%3D%5CDelta%20x_2%3B%5C%3B%5CDelta%20t%3D%5CDelta%20x_1%2F%5Csqrt2?時,? 在空間對角線上是數(shù)值穩(wěn)定的,? 如下圖所示:

在 x? 上的時間不穩(wěn)定
在對角線上的數(shù)值穩(wěn)定

????????為了應(yīng)對這種情況,? 可以選擇具有復(fù)雜網(wǎng)格的實現(xiàn)方式,? 比如旋轉(zhuǎn)網(wǎng)格或自適應(yīng)網(wǎng)格等.? 但這些技術(shù)的輪子實在不太好搓,? 這里就 pass 了.

數(shù)值求解波動方程 [4]的評論 (共 條)

分享到微博請遵守國家法律
永定县| 嘉义县| 溧阳市| 涡阳县| 新龙县| 南宫市| 穆棱市| 富阳市| 东港市| 商都县| 泰来县| 哈巴河县| 巢湖市| 湘乡市| 邹城市| 保定市| 沧源| 丹寨县| 射洪县| 昭苏县| 渭南市| 绥江县| 阿拉善盟| 五莲县| 南昌市| 凌云县| 洛宁县| 大悟县| 金川县| 永安市| 三明市| 甘南县| 株洲县| 盖州市| 营口市| 定襄县| 万山特区| 伊川县| 蒙山县| 阳朔县| 罗江县|