Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Matlab BSU.doc
Скачиваний:
12
Добавлен:
08.09.2019
Размер:
1.04 Mб
Скачать

Численное решение дифференциальных уравнений в частных производных.

Для численного решения систем дифференциальных уравнений (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);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]