exponenta event banner

параболический

(Не рекомендуемый), Решают параболическую проблему УЧП

parabolic не рекомендуется. Используйте solvepde вместо этого.

Параболический решатель уравнения

Решает проблемы УЧП типа

dut(cu)+au=f

на 2D или 3-D области Ω, или системная проблема УЧП

dut(cu)+au=f

Переменные c, a, f и d могут зависеть от положения, время и решение u и его градиент.

Синтаксис

u = parabolic(u0,tlist,model,c,a,f,d)
u = parabolic(u0,tlist,b,p,e,t,c,a,f,d)
u = parabolic(u0,tlist,Kc,Fc,B,ud,M)
u = parabolic(___,rtol)
u = parabolic(___,rtol,atol)
u = parabolic(___,'Stats','off')

Описание

пример

u = parabolic(u0,tlist,model,c,a,f,d) производит решение формулировки FEM скалярной проблемы УЧП

dut(cu)+au=f

на 2D или 3-D области Ω, или системная проблема УЧП

dut(cu)+au=f

с геометрией, mesh и граничными условиями, заданными в model, и с начальным значением u0. Переменные c, a, f и d в уравнении соответствуют функциональным коэффициентам c, a, f и d соответственно.

пример

u = parabolic(u0,tlist,b,p,e,t,c,a,f,d) решает проблему с помощью граничных условий b и mesh конечного элемента, заданная в [p,e,t].

пример

u = parabolic(u0,tlist,Kc,Fc,B,ud,M) решает проблему на основе матриц конечного элемента, которые кодируют уравнение, mesh и граничные условия.

u = parabolic(___,rtol) и u = parabolic(___,rtol,atol), для любого из предыдущих входных параметров измените процесс решения путем передачи решателю ОДУ относительного допуска rtol, и опционально абсолютный допуск atol.

u = parabolic(___,'Stats','off'), для любого из предыдущих входных параметров, выключает отображение внутренней статистики решателя ОДУ во время процесса решения.

Примеры

свернуть все

Решите параболическое уравнение

ut=Δu

на квадратной области, заданной squareg.

Создайте модель PDE и импортируйте геометрию.

model = createpde;
geometryFromEdges(model,@squareg);
pdegplot(model,'EdgeLabels','on')
ylim([-1.1,1.1])
axis equal

Установите граничные условия Дирихле u=0 на всех ребрах.

applyBoundaryCondition(model,'dirichlet','Edge',1:model.Geometry.NumEdges,'u',0);

Сгенерируйте относительно мелкую сетку.

generateMesh(model,'Hmax',0.02,'GeometricOrder','linear');

Установите начальное условие, чтобы иметь u(0)=1 на диске x2+y20.42 и u(0)=0 в другом месте.

p = model.Mesh.Nodes;
u0 = zeros(size(p,2),1); 
ix = find(sqrt(p(1,:).^2 + p(2,:).^2) <= 0.4); 
u0(ix) = ones(size(ix));

Установите времена решения быть от 0 до 0,1 с размером шага 0.005.

tlist = linspace(0,0.1,21);

Создайте коэффициенты УЧП.

c = 1;
a = 0;
f = 0;
d = 1;

Решите УЧП.

u = parabolic(u0,tlist,model,c,a,f,d);
133 successful steps
0 failed attempts
268 function evaluations
1 partial derivatives
26 LU decompositions
267 solutions of linear systems

Постройте начальное условие, решение в итоговое время и два промежуточных решения.

figure
subplot(2,2,1)
pdeplot(model,'XYData',u(:,1));
axis equal
title('t = 0')
subplot(2,2,2)
pdeplot(model,'XYData',u(:,5))
axis equal
title('t = 0.02')
subplot(2,2,3)
pdeplot(model,'XYData',u(:,11))
axis equal
title('t = 0.05')
subplot(2,2,4)
pdeplot(model,'XYData',u(:,end))
axis equal
title('t = 0.1')

Решите параболическое уравнение

ut=Δu

на квадратной области, заданной squareg, с помощью функции геометрии, чтобы задать геометрию, граничная функция, чтобы задать граничные условия, и с помощью initmesh, чтобы создать mesh конечного элемента.

Задайте геометрию как @squareg и постройте геометрию.

g = @squareg;
pdegplot(g,'EdgeLabels','on')
ylim([-1.1,1.1])
axis equal

Установите граничные условия Дирихле u=0 на всех ребрах. Функция squareb1 задает эти граничные условия.

b = @squareb1;

Сгенерируйте относительно мелкую сетку.

[p,e,t] = initmesh(g,'Hmax',0.02);

Установите начальное условие, чтобы иметь u(0)=1 на диске x2+y20.42 и u(0)=0 в другом месте.

u0 = zeros(size(p,2),1); 
ix = find(sqrt(p(1,:).^2 + p(2,:).^2) <= 0.4); 
u0(ix) = ones(size(ix));

Установите времена решения быть от 0 до 0,1 с размером шага 0.005.

tlist = linspace(0,0.1,21);

Создайте коэффициенты УЧП.

c = 1;
a = 0;
f = 0;
d = 1;

Решите УЧП.

u = parabolic(u0,tlist,b,p,e,t,c,a,f,d);
147 successful steps
0 failed attempts
296 function evaluations
1 partial derivatives
28 LU decompositions
295 solutions of linear systems

Постройте начальное условие, решение в итоговое время и два промежуточных решения.

figure
subplot(2,2,1)
pdeplot(p,e,t,'XYData',u(:,1));
axis equal
title('t = 0')
subplot(2,2,2)
pdeplot(p,e,t,'XYData',u(:,5))
axis equal
title('t = 0.02')
subplot(2,2,3)
pdeplot(p,e,t,'XYData',u(:,11))
axis equal
title('t = 0.05')
subplot(2,2,4)
pdeplot(p,e,t,'XYData',u(:,end))
axis equal
title('t = 0.1')

Создайте матрицы конечного элемента, которые кодируют параболическую проблему и решают проблему.

Проблемой является эволюция температуры в блоке проведения. Блок является прямоугольной плитой.

model = createpde(1);
importGeometry(model,'Block.stl');
handl = pdegplot(model,'FaceLabels','on');
view(-42,24)
handl(1).FaceAlpha = 0.5;

Поверхности 1, 4, и 6 из плиты сохранены в 0 градусах. Другие поверхности изолируются. Включайте граничное условие на поверхностях 1, 4, и 6. Вы не должны включать граничное условие на других поверхностях, потому что условие по умолчанию изолируется.

applyBoundaryCondition(model,'dirichlet','Face',[1,4,6],'u',0);

Начальное температурное распределение в блоке имеет форму

u0=10-3xyz.

generateMesh(model);
p = model.Mesh.Nodes;
x = p(1,:);
y = p(2,:);
z = p(3,:);
u0 = x.*y.*z*1e-3;

Параболическое уравнение в синтаксисе тулбокса

dut-(cu)+au=f.

Предположим, что теплопроводность блока приводит к a c содействующее значение 1. Значения других коэффициентов в этой проблеме d=1, a=0, и f=0.

d = 1;
c = 1;
a = 0;
f = 0;

Создайте матрицы конечного элемента, которые кодируют проблему.

[Kc,Fc,B,ud] = assempde(model,c,a,f);
[~,M,~] = assema(model,0,d,f);

Решите проблему на временных шагах 1 в течение многих времен в пределах от от 0 до 40.

tlist = linspace(0,40,41);
u = parabolic(u0,tlist,Kc,Fc,B,ud,M);
35 successful steps
0 failed attempts
72 function evaluations
1 partial derivatives
11 LU decompositions
71 solutions of linear systems

Постройте решение за пределами блока время от времени 0, 10, 25, и 40. Гарантируйте, что окраска является тем же самым для всех графиков.

umin = min(min(u));
umax = max(max(u));
subplot(2,2,1)
pdeplot3D(model,'ColorMapData',u(:,1))
colorbar off
view(125,22)
title 't = 0'
caxis([umin umax]);
subplot(2,2,2)
pdeplot3D(model,'ColorMapData',u(:,11))
colorbar off
view(125,22)
title 't = 10'
caxis([umin umax]);
subplot(2,2,3)
pdeplot3D(model,'ColorMapData',u(:,26))
colorbar off
view(125,22)
title 't = 25'
caxis([umin umax]);
subplot(2,2,4)
pdeplot3D(model,'ColorMapData',u(:,41))
colorbar off
view(125,22)
title 't = 40'
caxis([umin umax]);

Входные параметры

свернуть все

Начальное условие, заданное как скаляр, вектор узловых значений, вектора символов, символьного массива, представляет в виде строки скаляр или вектор строки. Начальное условие является значением решения u в начальное время, заданное как вектор-столбец значений в узлах. Узлы являются или p в структуре данных [p,e,t] или являются model.Mesh.Nodes. Для получения дополнительной информации смотрите, Решают УЧП с Начальными условиями.

  • Если начальным условием является постоянный скалярный v, задайте u0 как v.

  • Если существуют узлы Np в mesh и уравнения N в системе УЧП, задают u0 как вектор-столбец Np *N элементы, где первые элементы Np соответствуют первому компоненту решения u, вторые элементы Np соответствуют второму компоненту решения u и т.д.

  • Дайте текстовое выражение функции, такой как 'x.^2 + 5*cos(x.*y)'. Если вы имеете систему N > 1 уравнение, даете текстовый массив такой как

    char('x.^2 + 5*cos(x.*y)',...
        'tanh(x.*y)./(1+z.^2)')

Пример: x.^2+5*cos(y.*x)

Типы данных: double | char | string
Поддержка комплексного числа: Да

Времена решения, заданные как вектор действительных чисел. Решатель возвращает решение УЧП во времена решения.

Пример: 0:0.2:4

Типы данных: double

Модель PDE, заданная как объект PDEModel.

Пример: model = createpde

Коэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, представляет в виде строки скаляр, вектор строки или коэффициентную функцию. c представляет коэффициент c в скалярном УЧП

dut(cu)+au=f

или в системе УЧП

dut(cu)+au=f

Вы можете specifyc в различных способах, детализированных в c Коэффициенте для Систем. См. также Задают Скалярные Коэффициенты УЧП в символьной Форме, Задают 2D Скалярные Коэффициенты в Функциональной Форме и Задают 3-D Коэффициенты УЧП в Функциональной Форме.

Пример: 'cosh(x+y.^2)'

Типы данных: double | char | string | function_handle
Поддержка комплексного числа: Да

Коэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, представляет в виде строки скаляр, вектор строки или коэффициентную функцию. a представляет коэффициент a в скалярном УЧП

dut(cu)+au=f

или в системе УЧП

dut(cu)+au=f

Вы можете specifya в различных способах, детализированных в a или d Коэффициенте для Систем. См. также Задают Скалярные Коэффициенты УЧП в символьной Форме, Задают 2D Скалярные Коэффициенты в Функциональной Форме и Задают 3-D Коэффициенты УЧП в Функциональной Форме.

Пример: 2*eye(3)

Типы данных: double | char | string | function_handle
Поддержка комплексного числа: Да

Коэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, представляет в виде строки скаляр, вектор строки или коэффициентную функцию. f представляет коэффициент f в скалярном УЧП

dut(cu)+au=f

или в системе УЧП

dut(cu)+au=f

Вы можете specifyf в различных способах, детализированных в f Коэффициенте для Систем. См. также Задают Скалярные Коэффициенты УЧП в символьной Форме, Задают 2D Скалярные Коэффициенты в Функциональной Форме и Задают 3-D Коэффициенты УЧП в Функциональной Форме.

Пример: char('sin(x)';'cos(y)';'tan(z)')

Типы данных: double | char | string | function_handle
Поддержка комплексного числа: Да

Коэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, представляет в виде строки скаляр, вектор строки или коэффициентную функцию. d представляет коэффициент d в скалярном УЧП

dut(cu)+au=f

или в системе УЧП

dut(cu)+au=f

Вы можете specifyd в различных способах, детализированных в a или d Коэффициенте для Систем. См. также Задают Скалярные Коэффициенты УЧП в символьной Форме, Задают 2D Скалярные Коэффициенты в Функциональной Форме и Задают 3-D Коэффициенты УЧП в Функциональной Форме.

Пример: 2*eye(3)

Типы данных: double | char | string | function_handle
Поддержка комплексного числа: Да

Граничные условия, заданные как граничная матрица или массив данных граничных условий. Передайте массив данных граничных условий как указатель на функцию или как имя файла.

Пример: b = 'circleb1', b = "circleb1" или b = @circleb1

Типы данных: double | char | string | function_handle

Поймайте в сети точки, заданные как 2 Np матрицей точек, где Np является числом точек в mesh. Для описания (p, e, t) матрицы, смотрите Данные о Mesh.

Как правило, вы используете p, e и данные t, экспортированные из приложения PDE Modeler или сгенерированные initmesh или refinemesh.

Пример: [p,e,t] = initmesh(gd)

Типы данных: double

Поймайте в сети ребра, заданные как 7-by-Ne матрица ребер, где Ne является количеством ребер в mesh. Для описания (p, e, t) матрицы, смотрите Данные о Mesh.

Как правило, вы используете p, e и данные t, экспортированные из приложения PDE Modeler или сгенерированные initmesh или refinemesh.

Пример: [p,e,t] = initmesh(gd)

Типы данных: double

Поймайте в сети треугольники, заданные как 4-by-Nt матрица треугольников, где Nt является количеством треугольников в mesh. Для описания (p, e, t) матрицы, смотрите Данные о Mesh.

Как правило, вы используете p, e и данные t, экспортированные из приложения PDE Modeler или сгенерированные initmesh или refinemesh.

Пример: [p,e,t] = initmesh(gd)

Типы данных: double

Матрица жесткости, заданная как разреженная матрица или как полная матрица. Смотрите Эллиптические уравнения. Как правило, Kc является вывод assempde.

Вектор загрузки, заданный как вектор. Смотрите Эллиптические уравнения. Как правило, Fc является вывод assempde.

Дирихле nullspace, возвращенный как разреженная матрица. См. Алгоритмы. Как правило, B является вывод assempde.

Вектор Дирихле, возвращенный как вектор. См. Алгоритмы. Как правило, ud является вывод assempde.

Большая матрица. заданный как разреженная матрица или полная матрица. Смотрите Эллиптические уравнения.

Получить входные матрицы для pdeeig, hyperbolic или parabolic, выполнения и assema и assempde:

[Kc,Fc,B,ud] = assempde(model,c,a,f);
[~,M,~] = assema(model,0,d,f);

Примечание

Создайте матрицу M использование assema с d, не a, в качестве аргумента перед f.

Типы данных: double
Поддержка комплексного числа: Да

Относительный допуск к решателю ОДУ, заданному как положительное действительное.

Пример: 2e-4

Типы данных: double

Абсолютный допуск к решателю ОДУ, заданному как положительное действительное.

Пример: 2e-7

Типы данных: double

Выходные аргументы

свернуть все

Решение для УЧП, возвращенное как матрица. Матрицей является Np *N-by-T, где Np является количеством узлов в mesh, N является количеством уравнений в УЧП (N = 1 для скалярного УЧП), и T является номером времен решения, означая длину tlist. Матрица решения имеет следующую структуру.

  • Первые элементы Np каждого столбца в u представляют решение уравнения 1, затем следующие элементы Np представляют решение уравнения 2 и т.д. Решение u является значением в соответствующем узле в mesh.

  • Столбец i u представляет решение во время tlist (i).

Чтобы получить решение в произвольной точке в геометрии, используйте pdeInterpolant.

Чтобы построить решение, используйте pdeplot для 2D геометрии или см. График 3-D Решения и Их Градиенты.

Алгоритмы

свернуть все

Сокращение параболических уравнений к эллиптическим уравнениям

parabolic внутренне вызывает assema, assemb и assempde, чтобы создать матрицы конечного элемента, соответствующие проблеме. Это вызывает ode15s, чтобы решить получившуюся систему обыкновенных дифференциальных уравнений.

Partial Differential Equation Toolbox™ решает уравнения формы

m2ut2+dut·(cu)+au=f

Когда коэффициент m 0, но d не, документация называет уравнение parabolic, является ли это математически в параболической форме.

Параболическая проблема состоит в том, чтобы решить уравнение

dut(cu)+au=f    \in Ω

с начальным условием

u (x, 0) = u 0 (x) для x ∊Ω(1)

где x представляет 2D или 3-D точку и существуют граничные условия того же вида что касается эллиптического уравнения на ∂ Ω.

Чтения уравнения тепла

ρCut·(ku)+h(uu)=f

в присутствии распределенной потери тепла к среде. ρ является плотностью, C является тепловой способностью, k является теплопроводностью, h является пленочным коэффициентом, u является температурой окружающей среды, и f является источником тепла.

Для независимых от времени коэффициентов установившееся решение уравнения является решением стандартного эллиптического уравнения

– ∇ · (cu) + au = f.(2)

При принятии mesh на Ω и t ≥ 0, расширьте решение УЧП (как функция x) в основании метода конечных элементов:

u(x,t)=iUi(t)ϕi(x)

Включение расширения в УЧП, умножение с тестом функционируют ϕj, интеграция по Ω и применение формулы Грина и урожая граничных условий

iΩdϕjϕidUi(t)dtdx+i(Ω(ϕj(cϕi)+aϕjϕi)dx+Ωqϕjϕids)Ui(t)=Ωfϕjdx+Ωgϕjdsj

В матричном обозначении мы должны решить линейную, большую и разреженную систему ОДУ

MdUdt+KU=F

Этот метод является традиционно вызываемым методом полудискретизации строк.

Решение ОДУ с начальным значением

Ui (0) = u 0 (xi) (3)

приводит к решению УЧП в каждом узле xi и время t. Обратите внимание на то, что K и F являются матрицей жесткости и правой стороной эллиптической проблемы

– ∇ · (cu) + au = f в Ω (4)

с исходными граничными условиями, в то время как M является только большой матрицей проблемы

– ∇ · (0∇u) + du = 0 в Ω.(5)

Когда условия Дирихле являются зависящими от времени, F содержит вклады от производных времени h и r. Эти производные оценены конечными разностями заданных пользователями данных.

Система ОДУ плохо обусловливается. Явные интеграторы времени обеспечены требованиями устойчивости к очень кратковременным шагам, в то время как неявные решатели могут быть дорогими, поскольку они решают эллиптическую проблему на каждом временном шаге. Численное интегрирование системы ОДУ выполняется функциями MATLAB® ODE Suite, которые эффективны для этого класса проблем. Временным шагом управляют, чтобы удовлетворить допуск при ошибке, и факторизации содействующих матриц выполняются только при необходимости. Когда коэффициенты являются зависящими от времени, необходимость переоценки и переразложения на множители матриц, каждый временной шаг может все еще сделать решение трудоемким, несмотря на то, что parabolic переоценивает только то, что меняется в зависимости от времени. В определенных случаях зависящая от времени матрица h Дирихле (t) может заставить контроль ошибок перестать работать, даже если проблема является математически звуковой и решение, u (t) сглажен. Это может произойти, потому что интегратор ОДУ смотрит только на уменьшаемое решение v с u = Bv + ud. Как h изменения, вертящаяся схема, используемая для числовой устойчивости, может изменить порядок устранения от одного шага до следующего. Это означает, что B, v и ud все изменение с перерывами, несмотря на то, что сам u не делает.

Смотрите также

Представлено до R2006a