[英]How do I use MATLAB to solve this PDE
我在練習考試中有以下問題:
我需要使用MATLAB來解決它。 問題是,我之前沒有看到這樣的問題而且我正在努力開始。
我有1x1網格,分成10x10。 我知道我可以使用1/10 * x * 2計算角落以外的整個底行。 我也知道我可以使用(1/10)(1 + t)^ 2計算整個右行。 但是,我無法弄清楚如何獲得足夠的分數來填充整個網格的值。 我知道它必須與問題中給出的偏導數有關,但我不太確定它們在哪里發揮作用(尤其是u_x方程)。 有人可以幫助我從這里開始嗎?
我不需要整個解決方案。 一旦我有足夠的積分,我就可以輕松編寫一個matlab程序來解決剩下的問題。 真的,我想我只需要解決x = 0軸,然后我就填寫網格的中間部分。
我已計算出底行,減去兩個角,為0.001,0.004,0.009,0.016,0.025,0.036,0.049,0.064,0.081。 類似地,使用給定的邊界條件計算整個右行是很簡單的。 我只是無法拼湊到哪里去那里。
編輯:第三個邊界條件方程輸入錯誤。 它應該是:
u_x(0,t)= 1 / 5t,NOT u(0,t)= 1 / 5t
首先要意識到你必須解決的方程是線性波方程 ,你給出的數值方案可以改寫為
( u^(n+1)_m - 2u^n_m + u^(n-1)_m )/k^2 = ( u^n_(m-1) - 2u^n_m + u^n_(m+1) )/h^2
其中k
是時間步長, h
是空間中的delta x
。
重新構造的數值方案清楚地表明,左側和右側分別是u_tt
和u_xx
二階中心有限差分近似。
但是,要以數字方式解決問題,您需要使用給定的形式,因為它是您需要以數字方式實現的顯式更新公式:它在時間n+1
為您提供前兩次的函數n
和n-1
。 您需要從初始條件開始並及時進行解決方案。
觀察到解決方案是在域的邊界上分配的( x=0
和x=1
),因此離散化解u^(n)_0
和u^(n)_10
的值對於任何n
都是已知的( t=n*k
)。 在第n
個步驟,你的未知是向量[u^(n+1)_1, u^(n+1)_2, ..., u^(n+1)_9]
。
另請注意,要使用更新公式在n+1
步驟中找到解決方案,需要在前兩個步驟中了解解決方案。 那么,你如何從開始n=0
,如果你需要從前面兩個時間的信息? 這是初始條件發揮作用的地方。 你有n=0
( t=0
)的解決方案,但你在t=0
也有u_t
。 這兩條信息組合起來可以給你u^0
和u^1
並讓你入門。
我會使用以下啟動方案:
u^0_m = u(h*m,0) // initial condition on u
(u^2_m - u^0_m)/(2k) = u_t(h*m,0) // initial condition on u_t
與n=1
使用的數值方案相結合,為m=1,...,9
提供了為u^1_m
和u^2_m
定義線性系統所需的一切。
總結一下:
--use啟動方案來發現在溶液n=1
和n=2
同時進行 。
- 使用您給出的數值方案從3月開始。
如果你完全迷失了,請查看:有限差分格式,平流方程的有限差分格式,雙曲線方程的有限差分格式,時間推進等。
編輯:
對於u_x
上的邊界條件,通常使用ghost單元格方法:
在m=-1
處引入鬼影單元,即用於處理邊界條件的虛擬(或輔助)網格點,但這不是解決方案的一部分。
第一個節點m=0
回到你的未知向量,即你現在正在使用[u_0 u_1 ... u_9]
。
使用左側邊界條件關閉系統。 具體地說,通過記下邊界條件的居中近似值
u^n_(1) - u^n_(-1) = 2*h*u_x(0,k*n)
上面的等式允許您根據內部實節點上的解決方案在ghost節點上表達解決方案。 因此,您可以將時間推進的數值方案(您給出的方案)應用於m=0
節點。 (應用於m=0
的數值方案將包含來自m=-1
重影節點的貢獻,但現在您已根據m=1
節點表示。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.