2013-06-26 16 views
1

我正在研究求解偏微分方程的解決方案,即Fick的擴散第二定律。 我能夠使用NDSolve和Plot3D函數生成3D圖。 代碼用於:NDSolve(Mathematica)中指定參數的數值解

NDSolve[{D[c[t, h], t] == 1*D[c[t, h], h, h], 
       c[0, h] == Erfc[h/(2*81.2)], 
       c[t, 0] == 1, 
      c[t, 4000] == 3.08*^-18}, c, {t, 0, 900}, {h, 0, 274}] 

相反的圖形表示的,我想找到在t = 900 我想知道如何把在T = 900到NDSolve(或其它圖形的數值分函數),以便生成解決方案的詳細數值點。

回答

0

嘗試先保存在一個變量的解決方案:

e = NDSolve[{D[c[t, h], t] == 1*D[c[t, h], h, h], c[0, h] == Erfc[h/(2*81.2)], c[t, 0] == 1, c[t, 4000] == 3.08*^-18}, c, {t, 0, 900}, {h, 0, 274}] 

然後我們就可以計算該表達式爲我們所期望的變量:

Evaluate[c[900, 10] /. e] 
(*{0.914014}*) 

或者使其更加靈活,我們可以使用操縱:

Manipulate[Evaluate[c[t, h] /. e], {t, 0, 900}, {h, 0, 274}] 

Manipulate

更新: 考慮到我從下面的評論中收到的信息;我們可以定義一個函數等Q [T,H]這會給我們溶液中作爲功能:

q[t_, h_] := Evaluate[c[t, h] /. e] 
q[900, 10] 
(*{0.914014}*) 
+0

稍微更整潔,因爲我們知道有一種解決方案定義'E = C /。 First @ NDSolve..',那麼你可以直接使用e:'e [900,10] - > .91' – agentp

+0

@george這很好。 – Ali

+0

非常感謝喬治!這正是我想要做的! 但我似乎無法定義e = c /。 First @ NDSolve .. 我收到了一條錯誤消息: First :: normal:在First [NDSolve]的位置1預期的非原子表達式。 >> ReplaceAll :: reps:{First [NDSolve] ..}既不是替換規則的列表,也不是有效的調度表,因此不能用於替換。 >> 我該如何解決這個問題? –