我正在努力将温度梯度绘制为二维,并遇到很多麻烦。我当前的方法是定义插值功能,然后尝试将其绘制很多次,然后对该图表进行动画。这是我到目前为止所拥有的:

RT = 388.726919
R = 1
FUNC == NDSolve[{D[T[x, y, t], t] == 
RT*(D[T[x, y, t], x, x] + D[T[x, y, t], y, y]),

   T[x, y, 0] == 0,
   T[0, y, t] == R*t,
   T[9, y, t] == R*t,
   T[x, 0, t] == R*t,
   T[x, 9, t] == R*t},

  T, {x, 0, 9}, {y, 0, 9}, {t, 0, 6}]

因此,前两个变量仅控制变化速率。我要求解的方程是基本的2D热方程,其中dt/dt = a(d^2t/dx^2+d^2t/dy^2)。初始条件将所有内容设置为0,然后将边缘定义为热量变化的来源。现在,它从t = 0到t = 6的9x9街区扫描。

第二部分试图使功能起作用。

ListAnimate[
Table[
   DensityPlot[T[x, y, t] /. FUNC, {x, 0, 9}, {y, 0, 9}, Mesh -> 9]
, {t, 0, 6}]
]

不幸的是,这行不通,我要疯狂地试图弄清楚原因。我首先认为这与插值功能有关,但是现在我对动画代码也有效。有人有想法么?

有帮助吗?

解决方案

只是快速检查:

RT = 1
R = 1
FUNC = NDSolve[{D[T[x, y, t], t] == 
     RT*(D[T[x, y, t], x, x] + D[T[x, y, t], y, y]), T[x, y, 0] == 0, 
    T[0, y, t] == R*t,
    T[9, y, t] == R*t,
    T[x, 0, t] == R*t,
    T[x, 9, t] == R*t}, T,
   {x, 0, 9}, {y, 0, 9}, {t, 0, 6}];
a = Table[
  Plot3D[T[x, y, t] /. FUNC, {x, 0, 9}, {y, 0, 9}, Mesh -> 15, 
   PlotRange -> {{0, 9}, {0, 9}, {-1, 10}}, 
   ColorFunction -> Function[{x, y, z}, Hue[.3 (1 - z)]]], {t, 0, 6}]
Export["c:\anim.gif", a]

alt text

PS:通过使用小写字母作为您符号的第一个字符来避免很多错误...

其他提示

我与马克(Mark)在一起 - 您的程序没有错。问题是,在您的功能之后,您的功能没有任何有趣的事情 t=0: :尝试看看

ListAnimate[
 Table[Plot3D[T[x, y, t] /. FUNC, {x, 0, 9}, {y, 0, 9}, Mesh -> 9], {t, 0, 6}]]

如您所见,所发生的一切都是缩放,所以当 DensityPlot 独立重新缩放每个框架,最终看起来相同:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top