Извлеките коэффициенты дифференциального уравнения с частными производными
извлекает коэффициенты дифференциального уравнения с частными производными (PDE) как структура чисел с двойной точностью и указателей на функцию, которые могут использоваться в качестве входа coeffs
= pdeCoefficients(pdeeq
,u
)specifyCoefficients
функция в Partial Differential Equation Toolbox™.
pdeeq
скалярный УЧП или система УЧП в символьной форме, которая является функцией u
. pdeCoefficients
функция преобразует pdeeq
в систему уравнений формы
и возвращает структуру coeffs
это содержит коэффициенты m
D
C
A
, и f
. Для получения дополнительной информации смотрите уравнения, которые Можно Решить Используя Тулбокс УЧП (Partial Differential Equation Toolbox).
Если pdeCoefficients
не может преобразовать УЧП в форму расхождения выше, затем она выпускает предупреждающее сообщение и пишет все остающиеся градиенты в f
коэффициент. Тулбокс УЧП будет не мочь решить этот тип УЧП.
Создайте символьный УЧП, который представляет Лапласиан переменной u(x,y)
.
syms u(x,y)
pdeeq = laplacian(u,[x y]) == -3
pdeeq(x, y) =
Извлеките коэффициенты УЧП.
coeffs = pdeCoefficients(pdeeq,u)
coeffs = struct with fields:
a: 0
c: [4x1 double]
m: 0
d: 0
f: -3
pdeCoefficients
преобразует символьный УЧП в скалярное уравнение PDE формы
и извлекает коэффициенты m
D
C
A
, и f
в структуру coeffs
. Для 2D систем уравнения, c
тензор с 4 элементы. Для получения дополнительной информации см. c Коэффициент для specifyCoefficients (Partial Differential Equation Toolbox). В этом случае, , так коэффициент c
4 1 вектор-строка, который представляет c
C
C
, и c
.
coeffs.c
ans = 4×1
-1
0
0
-1
Этот пример использует:
Решите уравнение 2D однородного Лапласа в области, ограниченной модульным кругом. Используйте pdeCoefficients
функционируйте, чтобы извлечь коэффициенты уравнения Лапласа.
Создайте модель PDE и включайте геометрию.
model = createpde; geometryFromEdges(model,@circleg);
Постройте геометрию и отобразите метки ребра для использования в определении граничного условия.
figure pdegplot(model,'EdgeLabels','on') axis equal
Создайте символьное выражение pdeeq
это представляет уравнение Лапласа.
syms u(x,y)
pdeeq = laplacian(u,[x y])
pdeeq(x, y) =
Извлеките коэффициенты уравнения Лапласа.
coeffs = pdeCoefficients(pdeeq,u)
coeffs = struct with fields:
a: 0
c: [4x1 double]
m: 0
d: 0
f: 0
Задайте коэффициенты модели PDE.
specifyCoefficients(model,'m',coeffs.m,'d',coeffs.d, ... 'c',coeffs.c,'a',coeffs.a,'f',coeffs.f);
Примените граничное условие Дирихле во всех 4 ребрах, которые формируют круг.
applyBoundaryCondition(model,'dirichlet','Edge',1:4,'u',@(region,state) region.x.^4 + region.y.^4);
Сгенерируйте mesh по умолчанию для геометрии.
generateMesh(model);
Решите УЧП и постройте решение.
results = solvepde(model);
pdeplot(model,'XYData',results.NodalSolution)
f
КоэффициентЭтот пример использует:
Решите уравнение 2D Пуассона в области, ограниченной модульным кругом. Форма расхождения УЧП имеет непостоянный f
коэффициент. Можно решить УЧП путем извлечения коэффициентов с помощью pdeCoefficients
и определение коэффициентов в модели PDE с помощью specifyCoefficients
.
Создайте модель PDE и включайте геометрию.
model = createpde; geometryFromEdges(model,@circleg);
Создайте символьное выражение pdeeq
это представляет уравнение Пуассона.
syms u(x,y)
pdeeq = diff(u,x,x) + diff(u,y,y) - 1/(x^2 + y^2)
pdeeq(x, y) =
Извлеките коэффициенты уравнения.
coeffs = pdeCoefficients(pdeeq,u)
coeffs = struct with fields:
a: 0
c: [4x1 double]
m: 0
d: 0
f: @makeCoefficient/coefficientFunction
f
коэффициент не является константой. Это отображено как @makeCoefficient/coefficientFunction
, который указывает, что это было возвращено в рабочую область некоторой внутренней функции. Чтобы показать формулу позади указателя на функцию, используйте coeffs.f('show')
.
coeffs.f('show')
ans =
Задайте коэффициенты модели PDE.
specifyCoefficients(model,'m',coeffs.m,'d',coeffs.d, ... 'c',coeffs.c,'a',coeffs.a,'f',coeffs.f);
Примените граничное условие Дирихле во всех 4 ребрах, которые формируют круг.
applyBoundaryCondition(model,'dirichlet','Edge',1:4,'u',0);
Сгенерируйте mesh по умолчанию для геометрии.
generateMesh(model);
Решите УЧП. Постройте узловое решение с помощью опции 'XYData'
в pdeplot
функция.
results = solvepde(model);
pdeplot(model,'XYData',results.NodalSolution)
Постройте градиент решения в узловых местоположениях с помощью опции 'FlowData'
.
pdeplot(model,'FlowData',[results.XGradients results.YGradients])
Создайте УЧП без формы расхождения.
syms u(x,y)
pdeeq = diff(u,x,x) + cos(x+y)/4*diff(u,x,y) + 1/2*diff(u,y,y)
pdeeq(x, y) =
Извлеките его коэффициенты. Когда pdeCoefficients
не может преобразовать УЧП в форму расхождения
,
это выпускает предупреждающее сообщение, но это все еще производит выход.
coeffs = pdeCoefficients(pdeeq,u)
Warning: After extracting m, d, and c, some gradients remain. Writing all remaining terms to f.
coeffs = struct with fields:
a: 0
c: @makeCoefficient/coefficientFunction
m: 0
d: 0
f: @makeCoefficient/coefficientFunction
Показать указатели на функцию в извлеченных коэффициентах c
и f
, используйте опцию 'show'
. Все остающиеся градиенты в УЧП записаны в f
коэффициент.
coeffs.c('show')
ans =
coeffs.f('show')
ans =
Поскольку УЧП не имеет никакой формы расхождения, требуемой Тулбоксом УЧП, тулбокс будет не мочь решить этот УЧП.
Этот пример использует:
Решите зависящее от времени уравнение волны в области, ограниченной модульным кругом. Уравнение волны является УЧП со скалярной функцией это зависит вовремя и координаты и .
Создайте модель PDE и включайте геометрию.
model = createpde(1); geometryFromEdges(model,@circleg);
Создайте символьный УЧП, который представляет уравнение волны.
syms u(t,x,y)
pdeeq = diff(u,t,t) - laplacian(u,[x y])
pdeeq(t, x, y) =
Извлеките коэффициенты УЧП.
coeffs = pdeCoefficients(pdeeq,u)
coeffs = struct with fields:
a: 0
c: [4x1 double]
m: 1
d: 0
f: 0
Задайте коэффициенты модели PDE.
specifyCoefficients(model,'m',coeffs.m,'d',coeffs.d, ... 'c',coeffs.c,'a',coeffs.a,'f',coeffs.f);
Установите начальные условия зависящей от времени проблемы на целой геометрии.
setInitialConditions(model,0,1);
Примените граничное условие Дирихле во всех 4 ребрах, которые формируют круг.
applyBoundaryCondition(model,'dirichlet','Edge',1:4,'u',0);
Сгенерируйте mesh по умолчанию для геометрии.
generateMesh(model);
Найдите решения зависящего от времени УЧП в диапазоне времени от 0s до 50-х с 2 интервалами с.
results = solvepde(model,linspace(0,2,50));
Постройте решение уравнения волны для каждых 5 интервалов с.
figure; for k = 1:10 subplot(5,2,k); pdeplot(model,'XYData',results.NodalSolution(:,k*5)) axis equal end
Этот пример использует:
Решите систему двух УЧП второго порядка. Можно решить систему УЧП путем извлечения коэффициентов УЧП символически с помощью pdeCoefficients
, преобразование коэффициентов к числам с двойной точностью с помощью pdeCoefficientsToDouble
, и определение коэффициентов в модели PDE с помощью specifyCoefficients
.
Система УЧП представляет отклонение зафиксированной структурной пластины при универсальной загрузке давления. Система УЧП с зависимыми переменными и дают
,
,
где изгибающаяся жесткость пластины, данной
,
и модуль эластичности, отношение Пуассона, толщина пластины, поперечное отклонение пластины, и загрузка давления.
Создайте модель PDE для системы двух уравнений.
model = createpde(2);
Создайте квадратную геометрию. Задайте длину стороны квадрата. Затем включайте геометрию в модель PDE.
len = 10.0; gdm = [3 4 0 len len 0 0 0 len len]'; g = decsg(gdm,'S1',('S1')'); geometryFromEdges(model,g);
Задайте значения физических параметров системы. Позвольте внешнему давлению будьте символьной переменной pres
это может принять любое значение.
E = 1.0e6;
h_thick = 0.1;
nu = 0.3;
D = E*h_thick^3/(12*(1 - nu^2));
syms pres
Объявите систему УЧП как систему символьные уравнения. Извлеките коэффициенты УЧП и возвратите их в символьной форме.
syms u1(x,y) u2(x,y) pdeeq = [-laplacian(u1) + u2; -D*laplacian(u2) - pres]; symCoeffs = pdeCoefficients(pdeeq,[u1 u2],'Symbolic',true)
symCoeffs = struct with fields:
m: [1x1 sym]
a: [2x2 sym]
c: [4x4 sym]
f: [2x1 sym]
d: [1x1 sym]
Отобразите коэффициенты m
A
C
F
, и d
.
structfun(@disp,symCoeffs)
Замените значением pres
использование subs
функция. Начиная с выходных параметров subs
символьные объекты, используют pdeCoefficientsToDouble
функционируйте, чтобы преобразовать коэффициенты в double
тип данных, который делает их допустимыми входными параметрами для Тулбокса УЧП.
symCoeffs = subs(symCoeffs,pres,2); coeffs = pdeCoefficientsToDouble(symCoeffs)
coeffs = struct with fields:
a: [4x1 double]
c: [16x1 double]
m: 0
d: 0
f: [2x1 double]
Задайте коэффициенты УЧП для модели PDE.
specifyCoefficients(model,'m',coeffs.m,'d',coeffs.d, ... 'c',coeffs.c,'a',coeffs.a,'f',coeffs.f);
Задайте пружинную жесткость. Задайте граничные условия путем определения распределенных пружин на всех четырех ребрах.
k = 1e7; bOuter = applyBoundaryCondition(model,'neumann','Edge',(1:4), ... 'g',[0 0],'q',[0 0; k 0]);
Задайте размер mesh геометрии и сгенерируйте mesh для модели PDE.
hmax = len/20;
generateMesh(model,'Hmax',hmax);
Решите модель.
res = solvepde(model);
Доступ к решению в узловых местоположениях.
u = res.NodalSolution;
Постройте поперечное отклонение пластины.
numNodes = size(model.Mesh.Nodes,2); figure; pdeplot(model,'XYData',u(1:numNodes),'contour','on') title 'Transverse Deflection'
Найдите поперечное отклонение в центре пластины.
wMax = min(u(1:numNodes,1))
wMax = -0.2763
Сравните результат с отклонением в центре пластины, вычисленном аналитически.
pres = 2; wMax = -.0138*pres*len^4/(E*h_thick^3)
wMax = -0.2760
pdeeq
— УЧП в символьной формеУЧП в символьной форме в виде символьного уравнения, выражения или символьного вектора.
u
— Переменная УЧППеременная УЧП в виде символьной функции. u
должна быть стационарная или зависящая от времени переменная в два или три измерения. Например, создайте переменную u
использование одного из этих операторов:
syms u(x,y)
syms u(t,x,y)
syms u(x,y,z)
syms u(t,x,y,z)
coeffs
— Коэффициенты УЧПКоэффициенты УЧП, возвращенного как структура чисел с двойной точностью и указателей на функцию как требуется specifyCoefficients
функция. Полями структуры является a
C
M
D
, и f
. Для получения дополнительной информации при интерпретации коэффициентов в формате, требуемом Тулбоксом УЧП, см.:
c Коэффициент для specifyCoefficients (Partial Differential Equation Toolbox)
m, d, или Коэффициент для specifyCoefficients (Partial Differential Equation Toolbox)
f Коэффициент для specifyCoefficients (Partial Differential Equation Toolbox)
Любой коэффициент может быть номером с двойной точностью или указателем на функцию. Например, коэффициент coeffs.f
может быть указатель на функцию, который представляет некоторую внутреннюю функцию в рабочей области. Требуется две структуры в качестве входных параметров, location
и state
, и возвращает двойное.
Указатели на функцию отображены как @makeCoefficient/coefficientFunction
в Командном окне. Отобразить формулу указателя на функцию coeffs.f
в символьной форме используйте coeffs.f('show')
.
symCoeffs
— Коэффициенты УЧП в символьной формеКоэффициенты УЧП в символьной форме, возвращенной как структура символьных выражений.
diff
| laplacian
| pdeCoefficientsToDouble
| syms
| specifyCoefficients
(Partial Differential Equation Toolbox)
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.