- •Введение
- •Командное окно
- •Редактирование командной строки.
- •Длинные командные строки.
- •Вывод на печать командного окна.
- •Запуск внешних программ.
- •!Notepad
- •Команда format.
- •Выражения
- •Переменные.
- •Inf бесконечность
- •Операторы.
- •Функции.
- •Текстовые комментарии и символьные константы.
- •Операции с рабочей областью
- •Операции с файлами
- •Дневник командного окна
- •Операции с векторами и матрицами
- •Оператор «двоеточие».
- •Векторные индексы.
- •Удаление строк и столбцов.
- •Объединение матриц.
- •Транспонирование матриц.
- •Создание матриц с заданными свойствами.
- •Создание вектора равноотстоящих точек.
- •Создание вектора равноотстоящих точек в логарифмическом масштабе.
- •Разреженные матрицы.
- •Графика
- •Команда plot.
- •Графические объекты.
- •Окна изображений.
- •Добавление кривых на существующий график.
- •Управление осями.
- •Разбиение графического окна.
- •Подписи к осям и заголовки.
- •Графики в полярной системе координат.
- •Контурные графики и графики полей градиентов.
- •Создание массивов данных для трехмерной графики.
- •Построение графиков трехмерных поверхностей.
- •Программирование в системе matlab.
- •Основные типы данных.
- •Арифметические операторы и массивы.
- •Операторы отношения.
- •Логические операторы и функции.
- •Приоритет выполнения операторов.
- •Структура файлов сценариев.
- •Структура m-файлов функций.
- •Использование подфункций.
- •Операторная функция.
- •Передача данных через глобальные переменные.
- •Параметры функционального типа.
- •Функции с переменным числом аргументов.
- •Управление потоками.
- •If expression1
- •Диалоговый ввод.
- •Численные методы и обработка данных
- •Решение систем линейных алгебраических уравнений.
- •Решение систем линейных уравнений итерационными методами.
- •Обратная матрица и определитель.
- •Факторизация Холецкого.
- •Lu факторизация.
- •Qr факторизация.
- •Матричная экспонента.
- •Собственные значения и собственные вектора.
- •Нормальная форма Жордана.
- •Разложение Шура.
- •Сингулярное разложение.
- •Численное интегрирование.
- •Представление полиномов в среде matlab.
- •Умножение и деление многочленов.
- •Вычисление производной от многочлена.
- •Решение систем нелинейных уравнений.
- •Преобразование Фурье.
- •Xlabel('time (seconds)')
- •Решение обыкновенных дифференциальных уравнений.
- •Численное решение дифференциальных уравнений в частных производных.
- •Литература
Численное решение дифференциальных уравнений в частных производных.
Для численного решения систем дифференциальных уравнений (PDE) второго порядка следует использовать пакет прикладных программ под названием Partial Differential Equations Toolbox. Укажем основные возможности пакета:
автоматический и адаптивный выбор сетки;
задание смешанных граничных условий, условий Дирихле и Неймана;
использование нелинейных и адаптивных расчетных схем;
визуализация решения.
Для решения гиперболических PDE, имеющих вид , служит функция hyperbolic. Рассмотрим один из нескольких имеющихся форматов вызова:
u1=hyperbolic(u0, ut0, tlist, b, p, e, t, c, a, f, d).
Здесь параметры p, e и t описывают сетку расчетной области. Детали можно посмотреть в описании функции initmesh, которая проводит триангуляцию расчетной области.
Параметр b отвечает за постановку граничных условий. Он может быть матрицей или именем m-файла. Граничные условия могут зависеть от времени t. Подробности можно найти в описаниях функций assemb и pdebound.
Коэффициенты c, a, d, и f можно задавать различными способами, они могут также зависеть от времени t. Детали изложены в описании функции assempde.
Параметры u0 и ut0 задают значение функции и производной в начальный момент времени.
В случае единственного уравнения, каждая строка матрицы u1 содержит решение в узлах сетки, координаты которых задаются соответствующим столбцом в p. Каждый столбец в u1 является решением в момент времени, который определяется соответствующей координатой вектора tlist.
Если решается система из N уравнений на сетке из np узлов, то первые np строк из u1 описывают первую компоненту решения u; следующие np строк описывают вторую компоненту u, и так далее.
Рассмотрим решение уравнения колебания мембраны
в квадратной области (squareg), с граничными условиями Дирихле
для ,
и граничными условиями Неймана
для (squareb3).
Положим
и .
Решение будем искать на временном интервале от 0 до 5 с шагом 1/6.
[p, e, t]=initmesh('squareg');
x=p(1, :)'; y=p(2,:)';
u0=atan(cos(pi/2*x));
ut0=3*sin(pi*x).*exp(cos(pi*y));
tlist=linspace(0, 5, 31);
uu=hyperbolic(u0, ut0, tlist,'squareb3', p, e, t, 1, 0, 0, 1);
Построим график решения на третьем временном слое с помощью функции pdeplot:
umax=max(max(uu)); umin=min(min(uu)); i=3;
pdeplot(p, e, t, 'xydata', uu(:, i),'zdata', uu(:,i),'zstyle', 'continuous','mesh','on','colorbar','off');
axis([-1 1 -1 1 umin umax]); caxis([umin umax]);
Для решения параболических PDE, имеющих вид , служит функция parabolic.
Рассмотрим решение уравнения теплопроводности
в квадратной области (squareg), с граничными условиями Дирихле
(squareb1).
Положим в начальный момент времени
при , и в противном случае.
Решение будем искать на временном интервале от 0 до 0.1 с шагом 1/20.
[p, e, t]=initmesh('squareg');
[p, e, t]=refinemesh('squareg', p, e, t);
u0=zeros(size(p, 2), 1);
ix=find(sqrt(p(1,:).^2+p(2,:).^2)<0.4);
u0(ix)=ones(size(ix));
tlist=linspace(0, 0.1, 21);
uu=parabolic(u0, tlist, 'squareb1', p, e, t, 1, 0, 1, 1);
Построим график решения на одиннадцатом шаге по времени с помощью функции pdeplot, используя команды из предыдущего примера:
Для решения эллиптических PDE, имеющих вид , служит функция assempde.
Решим уравнение
в области L – образной формы:
При решении будем использовать однородные граничные условия Дирихле.
Построим триангуляционную сетку узлов:
[p, e, t]=initmesh('lshapeg','Hmax', 0.2);
[p, e, t]=refinemesh('lshapeg', p, e, t);
pdemesh(p, e, t)
Решим уравнение Пуассона:
u=assempde('lshapeb', p, e, t, 1, 0, 1);
Построим график:
pdeplot(p,[],t,'xydata', u,'xystyle','flat','zdata', u,'zstyle','continuous','mesh','on','colorbar','off');
colormap(cool);
view(164, 28);