Разработчики впервые применили дополнительные встроенные функции для решения параболических и гиперболических уравнений в частных производных в версии Mathcad 11, отлично осознавая значимость этих задач для современного исследователя и инженера. Предусмотрены два варианта решения: при помощи вычислительного блока
Given/pdesolve, а также при помощи встроенной функции
numol. Первый путь проще в применении и нагляднее, зато второй позволяет автоматизировать процесс решения уравнений в частных производных, например, если нужно включить его в качестве составного шага в более сложную Mathcad-программу.
Вычислительный блок Given /pdesolve
Встроенная функция pdesolve применяется в рамках вычислительного блока, начинающегося ключевым словом
- u — явно заданный вектор имен функций (без указания имен аргументов), подлежащих вычислению. Эти функции, а также граничные условия (в форме Дирихле или Неймана) должны быть определены пользователем перед применением функции pdesolve в вычислительном блоке после ключевого слова Given. Если решается не система уравнений в частных производных, а единственное уравнение, то, соответственно, вектор и должен содержать только одно имя функции и вырождается в скаляр;
- х — пространственная координата (имя аргумента неизвестной функции);
- xrange — пространственный интервал, т. е. вектор значений аргумента х для граничных условий. Этот вектор должен состоять из двух действительных чисел (представляющих левую и правую границу расчетного интервала);
- t — время (имя аргумента неизвестной функции);
- t range — расчетная временная область: вектор значений аргумента t, который должен состоять из двух действительных чисел (представляющих левую и правую границу расчетного интервала по времени);
- xpts — количество пространственных точек дискретизации (может не указываться явно, в таком случае будет подобрано программой автоматически);
- tpts — количество временных слоев, т. е. интервалов дискретизации по времени (также может не указываться пользователем явно).
Для корректного использования функции pdesolve предварительно, после ключевого слова
Given, следует записать само уравнение и граничные условия при помощи логических операторов (для их ввода в Mathcad существует специальная панель). Обратите внимание, что уравнение должно содержать имя неизвестной функции u(x,t) вместе с именами аргументов (а не так, как она записывается в пределах встроенной функции
pdesolve). Для идентификации частных производных в пределах вычислительного блока следует использовать нижние индексы, например,
uxx(,t), для обозначения второй производной функции и по пространственной координате
х.
Как видно из рис. 11.14, на котором изображены результаты расчетов по листингу 11.4, встроенная функция с успехом справляется с уравнением диффузии, отыскивая уже хорошо знакомое нам решение. Заметим, что использование встроенной функции
pdesolve связано с довольно громоздкими вычислениями, которые могут отнимать существенное время.
ПРИМЕЧАНИЕ
Как вы можете заметить, выбирать величину шага по пространственной и временной переменным может как сам алгоритм, так и пользователь (неявным образом, через число узлов сетки). Читателю предлагается повторить вычисления листинга 11.4 для различных комбинаций параметров (главным образом, числа узлов сетки), чтобы проверить, в каких случаях алгоритм встроенной функции справляется с задачей, выдавая верное решение, а в каких дает сбой.
Рис. 11.14. Решение уравнения диффузии тепла при помощи встроенной функции pdesoдve (листинг 11.4)
Пример: волновое уравнение
Приведем еще один пример применения функции pdesoive для решения уравнений в частных производных. Рассмотрим одномерное волновое уравнение, которое описывает, например, свободные колебания струны музыкального инструмента:
Здесь неизвестная функция u(x,t) описывает динамику смещения профиля струны относительно невозмущенного (прямолинейного) положения, а параметр с характеризует материал, из которого изготовлена струна.
Как вы видите, уравнение (11.11) содержит производные второго порядка, как по пространственной координате, так и по времени. Для того чтобы можно было использовать встроенную функцию
pdesolve, необходимо переписать волновое уравнение в виде системы двух уравнений в частных производных, введя вторую неизвестную функцию
v=ut. Программа для решения волнового уравнения приведена в листинге 11.5, а результат— на рис. 11.15.
Листинг 11.5. Решение волнового уравнения
Рис. 11.15. Решение волнового уравнения (продолжение листинга 11.5)
Встроенная функция numol
Альтернативный вариант решения дифференциальных уравнений в частных производных заключается в применении еще одной встроенной функции
numo|, которая реализует тот же самый алгоритм сеток, позволяя вручную задать большинство его параметров:
- Npde — общее количество дифференциальных уравнений в частных производных в системе;
- Nae — общее количество дополнительных алгебраических уравнений, которые также могут входить в систему;
- rhs — векторная функция, определяющая систему дифференциальных и алгебраических уравнений (формат этого и двух следующих матричных параметров объяснен в листинге 11.9);
- init — векторная функция, определяющая начальные условия для каждой неизвестной функции;
- be — функциональная матрица граничных условий;
- xrange — пространственный интервал, т. е. вектор значений аргумента х для граничных условий. Этот вектор должен состоять из двух действительных чисел (представляющих левую и правую границу расчетного интервала);
- xpts — количество пространственных точек дискретизации (может не указываться явно, в таком случае будет подобрано программой автоматически);
- trange — расчетная временная область: вектор значений аргумента t, который должен состоять из двух действительных чисел (представляющих левую и правую границу расчетного интервала по времени);
- tpts — количество временных слоев, т. е. интервалов дискретизации по времени (также может не указываться пользователем явно);
Как вы видите, функция numol имеет еще большее число аргументов, нежели
pdesolve, и позволяет автоматизировать применение метода сеток. Однако пользоваться ею намного сложнее, чем вычислительным блоком, поскольку и уравнения, и начальные и граничные условия должны быть записаны в специальном формате. Применение функции
numol оправданно, когда необходимо включить решение уравнений в частных производных в более сложные вычисления в качестве подпрограммы, организовать серию расчетов с меняющимся параметром, подготовить анимацию графиков решения и т. п.
Рис. 11.16. Решение волнового уравнения (продолжение листинга 11.6)
Именно в целях визуализации решения параболических и гиперболических уравнений в частных производных использование функции
numol наиболее полезно. График решения динамических уравнений (зависящих от времени t) выглядит намного эффектнее и воспринимается несравненно лучше, если он оформлен в виде анимации. Для создания анимационных роликов расчетное время следует выразить через константу
FRAME и затем применить команду View / Animate (Вид / Анимация) (см. разд. 13.3.2).