【问题标题】:How to specify initial conditions at parts of domain in Mathematica?如何在 Mathematica 的部分域中指定初始条件?
【发布时间】:2011-03-30 21:32:31
【问题描述】:

我尝试将我的有限体积法的解决方案与 Mathematica 的解决方案进行比较,以获得简单的热方程 U_t = U_xx。为此,我必须在 Mathematica 中为 NDSolve 函数指定初始条件和边界条件。我想在边界上有 U = 90。作为初始条件,我希望在除边界之外的所有方形域中都有 100。我怎样才能做到这一点?显然我的代码不起作用。

FUNC = NDSolve[{D[T[x, y, t], t] == (D[T[x, y, t], x, x] + D[T[x, y, t], y, y]), 
    T[x, y, 0] == 100, T[0, y, t] == 90, T[9, y, t] == 90, 
    T[x, 0, t] == 90, T[x, 9, t] == 90}, 
   T, {x, 0, 9}, {y, 0, 9}, {t, 0, 6}];

它尝试将所有域的初始条件设置为100。

【问题讨论】:

    标签: wolfram-mathematica differential-equations


    【解决方案1】:

    实际上,只要稍加修改,您的代码就可以工作。

    FUNC = T /. 
      NDSolve[{
         D[T[x, y, t], t] == (D[T[x, y, t], x, x] + D[T[x, y, t], y, y]), 
         T[x, y, 0] == 100, T[0, y, t] == 90, T[9, y, t] == 90, 
         T[x, 0, t] == 90, T[x, 9, t] == 90}, 
        T, {x, 0, 9}, {y, 0, 9}, {t, 0, 10}][[1]]
    

    修改的是前面的T/.(ReplaceAll)部分和末尾的[[1]](部分);您可能想在文档中查看这些操作。有必要将输出按摩成正确的形状。

    您收到关于边界和初始条件不一致的错误消息(这是正确的)。结果仍然可用。

    或者,您可以更改初始条件以读取

    FUNC = T /. 
      NDSolve[{
         D[T[x, y, t], t] == (D[T[x, y, t], x, x] + D[T[x, y, t], y, y]), 
         T[x, y, 0] == If[x == 0 || x == 9 || y == 0 || y == 9, 90, 100], 
         T[0, y, t] == 90, T[9, y, t] == 90, T[x, 0, t] == 90, 
         T[x, 9, t] == 90}, T, {x, 0, 9}, {y, 0, 9}, {t, 0, 10}][[1]]
    

    您现在可以使用此功能做很多事情,例如Manipulate:

    Manipulate[ContourPlot[FUNC[x, y, t], {x, 0, 9}, {y, 0, 9}], {t, 0, 10}]
    

    或动画 GIF:

    anim = Table[DensityPlot[FUNC[x, y, t], {x, 0, 9}, {y, 0, 9}, 
              ColorFunctionScaling -> False, PlotPoints -> 50,
              ColorFunction -> (Hue[Rescale[#, {50, 100}], 1, 1] &)], 
            {t, 0, 10, .2}];
    Export[ToFileName[$UserDocumentsDirectory, "anim.gif"], anim, "GIF"]
    

    【讨论】:

    • 你打败了我!如果可以的话,我已经在你的答案中添加了动画。
    • @Simon 我同时在编辑我自己的贡献。不确定一切顺利。你能查一下吗?
    • 是的 - 遇到了麻烦!对于那个很抱歉。我希望改变是好的。我得出的结论和你一模一样,所以不值得发新帖,但我确实想用我的动画!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2019-05-29
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多