首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Mathematica中指定部分区域的初始条件?

如何在Mathematica中指定部分区域的初始条件?
EN

Stack Overflow用户
提问于 2011-03-31 05:32:32
回答 1查看 1.5K关注 0票数 1

我试着将我的有限体积法的解与my的简单热方程U_t = U_xx的解进行比较。为此,我必须在Mathematica中为NDSolve函数指定初始条件和边界条件。我希望在边界上U= 90。作为初始条件,我希望在除边界外的所有方域中都有100。我该怎么做呢?很明显,我的代码无法工作。

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-31 06:14:35

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

代码语言:javascript
复制
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]] (部分);您可能想要在文档中查看这些操作。这些都是将输出推敲成正确形状所必需的。

您会得到一条关于边界和初始条件不一致的错误消息(这是正确的)。尽管如此,结果还是有用的。

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

代码语言:javascript
复制
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

代码语言:javascript
复制
Manipulate[ContourPlot[FUNC[x, y, t], {x, 0, 9}, {y, 0, 9}], {t, 0, 10}]

或者是一个动画GIF:

代码语言:javascript
复制
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"]

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5492709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档