2

私は2次元での温度勾配のマッピングに取り組んでおり、多くの問題を抱えています。私の現在のアプローチは、補間関数を定義し、それを何度もグラフ化してから、そのグラフのテーブルをアニメーション化することです。これが私がこれまでに持っているものです:

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}]

したがって、最初の2つの変数は、変化率を制御するだけです。私が解いている方程式は、基本的な2D熱方程式です。ここで、dT / dt = a(d ^ 2T / dx ^ 2 + d ^ 2T / dy ^ 2)です。初期条件ではすべてを0に設定してから、エッジを熱変化のソースとして定義します。現在、t=0からt=6まで9x9ブロックをスイープします。

2番目の部分では、機能の動作をアニメーション化しようとします。

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

残念ながら、これは機能しません。その理由を理解しようと夢中になっています。最初は補間関数と関係があると思っていましたが、今ではアニメーションコードも機能するという自信がありません。誰かアイデアはありますか?

4

2 に答える 2

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:記号の最初の文字として小文字を使用することで、多くの間違いを回避できます...

于 2010-12-03T12:16:02.290 に答える
1

私はマークと一緒です-あなたのプログラムには何の問題もありません。問題は、次の後に関数に興味深いことが何も起こらないことt=0です。

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

ご覧のとおり、発生するのはスケーリングだけなので、DensityPlot各フレームを個別に再スケーリングすると、同じように見えます:)

于 2010-12-03T07:22:22.930 に答える