Математика 2D Тепловое уравнение анимации
-
30-09-2019 - |
Вопрос
Я работаю над сопоставлением градиента температуры в двух измерениях и иметь много неприятностей. Мой нынешний подход состоит в том, чтобы определить интерполяционную функцию, а затем попытаться графом много раз, а затем анимируйте эту таблицу графов. Вот что у меня сейчас:
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, затем определите края в качестве источника изменения тепла. Прямо сейчас он подметает над блоком 9x9 от T = 0 до T = 6.
Вторая часть пытается оживить функцию, работающую.
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]
PS: Многие ошибки избегают, используя строчную букву как первый символ для ваших символов ...
Другие советы
Я с Марком - нет ничего плохого в вашей программе. Проблема в том, что ничего интересного не происходит с вашей функцией после t=0
: Попробуйте взглянуть на
ListAnimate[
Table[Plot3D[T[x, y, t] /. FUNC, {x, 0, 9}, {y, 0, 9}, Mesh -> 9], {t, 0, 6}]]
Как вы можете видеть, все, что происходит, это масштабирование, так что когда DensityPlot
Рекалирует каждый кадр самостоятельно, они в конечном итоге выглядят идентичны :)