我正在研究在两个维度上绘制温度梯度并且遇到很多麻烦。我目前的方法是定义一个插值函数,然后尝试多次绘制它,然后设置该图表的动画。这是我到目前为止所做的:
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}]
所以前两个变量只是控制变化率。我正在求解的方程是基本的二维热方程,其中dT / dt = a(d ^ 2T / dx ^ 2 + d ^ 2T / dy ^ 2)。初始条件将所有内容设置为0,然后将边缘定义为热量变化的来源。现在它从t = 0扫描到9x9块到t = 6.
第二部分尝试动画功能正常工作。
ListAnimate[
Table[
DensityPlot[T[x, y, t] /. FUNC, {x, 0, 9}, {y, 0, 9}, Mesh -> 9]
, {t, 0, 6}]
]
不幸的是,这不起作用,我会疯狂地试图找出原因。我首先想到它与插值函数有关,但现在我对动画代码的工作也不太自信。有人有什么想法吗?
答案 0 :(得分:9)
快速检查:
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]
PS:使用小写字母作为符号的第一个字符可以避免很多错误......
答案 1 :(得分:1)
我和Mark在一起 - 你的程序没有任何问题。问题是在t=0
之后你的函数没有任何有趣的事情:试着看看
ListAnimate[
Table[Plot3D[T[x, y, t] /. FUNC, {x, 0, 9}, {y, 0, 9}, Mesh -> 9], {t, 0, 6}]]
正如您所看到的,所有发生的事情都是缩放,因此当DensityPlot
独立重新调整每个帧时,它们看起来完全相同:)