Математика решения дифференциальных уравнений - PullRequest
0 голосов
/ 26 октября 2010

Я хотел бы численно найти решение для

u_t - u_xx - u_yy = f на квадрате y ∈ [0,1], x ∈ [0,1]

где f = 1, если в единичном круге, и f = 0 в противном случае. Граничные условия u = 0 на всех четырех ребрах.

Я давно пытаюсь использовать ND-solve, но продолжаю получать сообщения об ошибках. Я новичок в Mathematica, поэтому я не знаю, как определить f до ND-Solve.

Заранее спасибо.

1 Ответ

1 голос
/ 26 октября 2010

Файлы справки Mathematica невероятно полны для подобных вещей.Я собираюсь ссылаться на онлайн-версию , но учтите, что в браузере справки в Mathematica вы можете интерактивно изменять и оценивать примеры помощи .Это был единственный способ, которым я многое узнал о Mathematica.

Один момент, прежде чем начать пробовать больше вещей: очень легко определить функцию, такую ​​как u или f когда намереваетесь сделать сравнение.Безошибочный, но несколько ленивый способ исправить потенциальные проблемы, связанные с этим, состоит в том, чтобы выйти из текущего ядра и затем снова что-то оценить.При выходе из ядра теряются все символы, которые вы могли случайно определить до этого момента.(Запуск нового ядра также является причиной того, что Mathematica немного сбивает с толку в первый раз, когда вы выполняете какую-либо операцию, даже если это простое дополнение.)

Продолжая с вопросом под рукой ... В ссылке, которую я связалвыше приведен образец, который решает одномерное уравнение теплопроводности, которое очень похоже на ваш пример.Давайте начнем с этого и изменим его:

NDSolve[{D[u[t, x], t] == D[u[t, x], x, x], u[0, x] == Q0, 
  u[t, 0] == Sin[t], u[t, 5] == 0},
  u, {t, 0, 10}, {x, 0, 5}]

Их уравнения: *u t = ∂u xx с граничными условияминачальная энергия равна Q0 в момент времени 0xx, энергия при x = 0 равна sin (t) и энергия при x = 5 = 0 *t ​​.Вы можете увидеть выше, как эти карты с надеждой.Теперь давайте попробуем то же самое для ваших терминов:

NDSolve[{D[u[t, x, y], t] - D[u[t, x, y], x, x] - D[u[t, x, y], y, y] == f[x, y],
  f[x,y] == If[x^2 + y^2 < 1, 1, 0],
  u[t, 0, y] == 0, u[t, 1, y] == 0, 
  u[t, x, 0] == 0, u[t, y, 1] == 0 }
  u, {x, 0, 1}, {y, 0, 1}]

Я думаю, что это правильно.Тем не менее, здесь есть хотя бы одна проблема. t - все еще свободная переменная.Вы не предоставили никаких уравнений для его ограничения, поэтому система не указана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...