2011-09-08 26 views
7

我試圖用NDSolve解決了波動方程,以檢查它是否容易和/或更快地使用它,而不是我的老特性的EQ。方法實現。不穩定而NDSolving波動方程

我得到了很多的不穩定,我不與特性的方法獲得的,並且因爲這些是簡單的公式,我不知道什麼是錯的......(希望,而不是物理問題的一個方面.. 。)

ans = [email protected][{ 
u[t, x]*D[d[t, x], x] + d[t, x]*D[u[t, x], x] + D[d[t, x], t] == 0, 
D[d[t, x], x] + u[t, x]/9.8*D[u[t, x], x] + 
1/9.8*D[u[t, x], t] + 0.0001 u[t, x]*Abs[u[t, x]] == 0, 
u[0, x] == 0, 
d[0, x] == 3 + x/1000*1, 
u[t, 0] == 0, 
u[t, 1000] == 0 
}, 
d, {t, 0, 1000}, {x, 0, 1000}, DependentVariables -> {u, d} 
] 

Animate[Plot[(d /. ans)[t, x], {x, 0, 1000}, 
     PlotRange -> {{0, 1000}, {0, 6}}], {t, 0, 1000} 
] 

enter image description here

有人能幫助我嗎?

編輯:

我已經與我的特點的解決方案放在NDSolve溶液(以下JXB的編輯),一起在同一個動畫。除了最初的快速振盪之外,它們足夠接近。隨着時間的推移,他們傾向於開始去同步化,但我相信這可能是由於我們在推導特徵時必須承認的一點點簡化。

simulation

紅:NDsolve;藍色:「手動」特徵方法;

按F5(刷新瀏覽器),從t=0重新啓動動畫。

(XX規模是我與「手冊」的方法,其中,每個點代表20個單位的NDSolve /物理規模的使用點的數目)

NDSolve網格取樣播放,呈現完全不同的振盪的效果。有沒有人有或知道確保正確整合的技術?

+0

我想你會得到更多的答案,要求在數學網站:http://math.stackexchange.com/ –

+0

@dario謝謝你的建議(我會試試看)。但是因爲這些方程應該穩定,所以我認爲這更像是一個Mathematica問題,儘管我不是這方面的專家...... –

+0

如果您懷疑這個問題,因爲我從未使用過Mathematica,我只能將其更新爲最新版本。如果它是由一個錯誤的數學 –

回答

4

通過改變你的係數,以無限精度(例如,1/9.8-> 10/98),以及設置WorkingPrecision->5(數值6是太高),我不再得到的錯誤消息:

ans = [email protected] 
    NDSolve[{D[u[t, x] d[t, x], x] + D[d[t, x], t] == 0, 
    D[d[t, x], x] + u[t, x] 10/98*D[u[t, x], x] + 
     10/98*D[u[t, x], t] + 1/10000 u[t, x]*Abs[u[t, x]] == 0, 
    u[0, x] == 0, d[0, x] == 3 + x/1000, u[t, 0] == 0, 
    u[t, 1000] == 0}, d, {t, 0, 1000}, {x, 0, 1000}, 
    DependentVariables -> {u, d}, WorkingPrecision -> 5] 

Animate[ 
Plot[(d /. ans)[t, x], {x, 0, 1000}, 
    PlotRange -> {{0, 1000}, {0, 6}}], {t, 0, 1000}] 

我不知道這個公式,所以我不相信該解決方案:小規模的振盪開始成長,然後被衰減掉。

+0

它做得好得多,並且我相信這證明了高振盪效應是NDSolve的某種數值異常。這應該是一個水波。邊界條件被設定爲模擬在關閉的「水池」內的水,水從非水平狀態下降之後在水池之間跳動。所以,我也不相信小規模的振盪......也因爲我的「手動」特徵方法沒有顯示出這種行爲(它們只是顯示了很長的慢波)。如果你添加填充 - >底部,它會變得更清晰什麼是模擬... –

+0

@JxB這將是很好,如果你會解釋爲什麼WorkingPrecision應該低(以及爲什麼6太高)。 –