Задача 1
Дан тонкий однородный стержень 0<x<l, боковая поверхность которого теплоизолирована.
Найти распределение температуры u(x,t) в стержне, если концы стержня поддерживаются при нулевой температуре,
а
Решение поставленной задачи сводится к решению смешанной (начально-краевой) задачи для уравнения теплопроводности, которое относится к уравнениям параболического типа.
Решение.
Команда restart очищает значение всех переменных.
Задаем уравнение теплопроводности:
где u(x,t) температура стержня в точке x в момент времени t, a связано с коэффициентами теплоемкости и теплопроводности.
Уравнение заносится в переменную eq , для того, чтобы в дальнейшем можно было сослаться на эту переменную в своих вычислениях. При этом мы используем знак присвоения ":=". Если использовать двоеточие после командыMaple выполнит ее, но не покажет результат. Это бывает удобно, когда много мелких команд.
Для выделения единственного решения уравнения теплопроводности необходимо к уравнению присоединить начальные и граничные условия. Для задач этого типа задается только одно начальное условие, а именно, температура в начальный момент времени.
Будем искать решение методом разделения переменных.
Для решения уравнения в частных производных имеются команда pdsolve и набор команд пакета PDEtools. Обращение к команде имеет следующий вид: pdsolve(PDE,FUN,OPT), где PDE уравнение, FUN неизвестная функция, а OPT дополнительные параметры. Пакет Maple пытается найти общее решение, используя набор специальных методов для некоторых видов уравнений и метод разделения переменных в общем случае. Ответ может быть представлен специальной структурой PDESolStruc, которая содержит термин &where и состоит из двух полей: функционального представления и перечня обыкновенных дифференциальных уравнений, полученных в результате процедуры разделения переменных. Данная структура предназначена для указания возможных решений. Решение при этом может быть получено с помощью команды build из пакета PDEtools. В качестве дополнительных параметров OPT могут использоваться: указание на возможную форму решения HINT=HI, параметр INTEGRATE, означающий автоматическое интегрирование получающейся системы обыкновенных дифференциальных уравнений, указание на поиск явного решения build. В качестве HI могут стоять знаки суммы и произведения или алгебраическое выражение. Уравнения могут быть заданы непосредственно в теле команды, а могут быть присвоены некоторой переменной (как в данном случае).
(1.1.1) |
Нас интересуют два уравнения, которые находятся в квадратных скобках. Извлечь конкретный элемент или несколько элементов из уравнения можно с помощью команды op (i, struc), где struc структура данных из которой нужно извлечь выражение, а i целое число.
(1.1.2) |
(1.1.3) |
Хорошо известно, что физически осмысленные решения получаются при выборе отрицательной константы разделения. Теперь нужно сделать замену переменной . Замену переменной можно провести в ручную, либо воспользовавшись командой subs, структура которой следующая: subs(x=a,EXPR), где x и а заменяемые переменные, а EXPR выражение, в котором происходит замена.
(1.1.4) |
Введем ограничение переменной , которая должна быть больше "0", для этого воспользуемся командой assume()
Для аналитического и численного решения обыкновенных дифференциальных уравнений используется команда dsolve, причем во всех случаях используется единый формат команды: dsolve(ODE,VAR,OPT). Здесь ODE дифференциальное уравнение или система дифференциальных уравнений относительно неизвестных функции VAR, а i дополнительные параметры. Для решения задачи Коши в уравнения ODE нужно включить так же начальные условия, а для краевой задачи соответственно краевые условия.
(1.1.5) |
Для того, чтобы преобразовать наше уравнение в функцию можно воспользоваться командой unapply:
(1.1.6) |
Найдем постоянные и из начальных условий:
(1.1.7) |
(1.1.8) |
Составим систему из полученных уравнений:
(1.1.9) |
Запишем матрицу коэффициентов системы при помощи команды
(1.1.10) |
Вычислим определитель при помощи linarg[det](имя матрицы) .
(1.1.11) |
Для получения всех решений уравнений, содержащих периодические функции, следует присвоить переменной _EnvAllSolutions значение true. В противном случае, по умолчанию функция solve выдаст только одно решение. При помощи команды solve решим полученное выражение относительно.
(1.1.12) |
Заменим для удобочитаемости формулы, символ "%" означает предыдущую строку:
(1.1.13) |
(1.1.14) |
Если нужно вновь использовать переменную так, будто раньше ее никак не использовали (т.е. освободить ее для значений любого типа), присвоим ей ее имя в одинарных кавычках.
Ограничим значение переменной k и заменим переменную λ в уравнении eq1 на функцию ev(k):
(1.1.15) |
Решим уравнение ur при помощи команды dsolve:
(1.1.16) |
(1.1.17) |
Возьмем второе уравнение из уравнения res1:
(1.1.18) |
Заменим на -ev(k) в уравнении eq2
(1.1.19) |
Решим уравнение eq2 при помощи команды dsolve:
(1.1.20) |
Поскольку константа _С1 входит в решение только в виде произведений _С1 *_С2, _С1*_С3, можно сократить количество констант присвоив _С1 значение 1.
(1.1.21) |
Общее решение уравнения представляет из себя линейную комбинацию всех частных решений.
(1.1.22) |
Из начального условия найдем неизвестные коэффициенты
Получили разложение функции в ряд Фурье по синусам. Вычислим коэффициенты разложения:
(1.1.23) |
(1.1.24) |
Для визуализации решения достаточно взять конечное число слагаемых в сумме.
Основной и наиболее часто используемой командой двумерной графики является команда plot из ядра Maple. В зависимости от входных параметров она позволяет рисовать графики функций одной переменной, параметрически заданных функций, наборов точек и т.д. Приведем вариант команды plot, который позволяет в одних осях строить графики нескольких функций. Отметим, что аналогично можно использовать все команды двумерной графики, то есть в качестве входного параметра можно использовать множество функций, наборов точек и т.д. В этом случае обращение к команде имеет вид: plot({func1, func2...},x=a..b, y=c..d, <options>). Здесь func1, func2,... выражения, зависящие от переменной x, a..b диапазон изменения переменной x (отрезок оси абсцисс), c..d выводимый интервал по оси ординат. Здесь и далее в угловых скобках указаны аргументы, которые могут отсутствовать. Если одним из концов интервала изменения x является бесконечность, то выводится график асимптотического поведения функции. Построим график функции u(x,t).
Для того, чтобы построить анимированный график воспользуемся командой animate(F, x=a..b, t=c..d, frame=n) - здесь F - выражение, зависящее от переменных x и t, которые изменяются соответственно в интервалах [a.b] и [c.d]. Переменная x отвечает оси абсцисс, t - переменная времени, а параметр frame задает число кадров.