Извлечь коэффициенты дифференциального уравнения в частных производных
извлекает коэффициенты дифференциального уравнения в частных производных (PDE) в виде структуры чисел двойной точности и дескрипторов функций, которые могут использоваться в качестве входных данных coeffs = pdeCoefficients(pdeeq,u)specifyCoefficients функция в дифференциальном уравнении Toolbox™ в частных производных.
pdeeq - скалярный PDE или PDE-система в символьной форме, которая является функцией u. pdeCoefficients функция преобразует pdeeq в систему уравнений вида
+au=f
и возвращает структуру coeffs который содержит коэффициенты m, d, c, a, и f. Дополнительные сведения см. в разделе Уравнения, которые можно решить с помощью панели инструментов PDE (панель инструментов дифференциальных уравнений в частных производных).
Если pdeCoefficients не может преобразовать PDE в форму расхождения выше, затем он выдает предупреждающее сообщение и записывает все оставшиеся градиенты в f коэффициент. Панель инструментов PDE не сможет решить этот тип PDE.
Создание символьного PDE, представляющего лапласиан переменной u(x,y).
syms u(x,y)
pdeeq = laplacian(u,[x y]) == -3pdeeq(x, y) =
Извлеките коэффициенты PDE.
coeffs = pdeCoefficients(pdeeq,u)
coeffs = struct with fields:
a: 0
c: [4x1 double]
m: 0
d: 0
f: -3
pdeCoefficients преобразует символьный PDE в скалярное уравнение PDE вида
au = f
и извлекает коэффициенты m, d, c, a, и f в структуру coeffs. Для 2-D систем уравнений, c - тензор с элементами. Для получения дополнительной информации см. c Коэффициент для specifyCoefficients (Частичный Отличительный Комплект инструментов Уравнения). В этом случае 1, поэтому коэффициентc является вектором строки 4 на 1, который представляет c, c, c, и c.
coeffs.c
ans = 4×1
-1
0
0
-1
Решите 2-D однородное уравнение Лапласа в области, ограниченной единичной окружностью. Используйте 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);
Примените граничное условие Дирихле x4 + y4 ко всем ребрам 4 которые образуют окружность.
applyBoundaryCondition(model,'dirichlet','Edge',1:4,'u',@(region,state) region.x.^4 + region.y.^4);
Создайте сетку по умолчанию для геометрии.
generateMesh(model);
Решите PDE и постройте график решения.
results = solvepde(model);
pdeplot(model,'XYData',results.NodalSolution)
f КоэффициентРешите уравнение 2-го Пуассона в области, ограниченной кругом единицы. Форма расхождения PDE имеет непостоянную f коэффициент. Можно решить PDE, извлекая коэффициенты с помощью 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);
Примените граничное условие Дирихле = 0 на всех 4 кромках, образующих окружность.
applyBoundaryCondition(model,'dirichlet','Edge',1:4,'u',0);
Создайте сетку по умолчанию для геометрии.
generateMesh(model);
Решите проблему PDE. Постройте график узлового решения с помощью опции 'XYData' в pdeplot функция.
results = solvepde(model);
pdeplot(model,'XYData',results.NodalSolution)
Постройте график градиента решения в узловых местах с помощью опции 'FlowData'.
pdeplot(model,'FlowData',[results.XGradients results.YGradients])
Создайте PDE без формы расхождения.
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 не удается преобразовать PDE в форму расхождения
au = f,
он выдает предупреждающее сообщение, но по-прежнему выдает выходные данные.
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'. Все оставшиеся градиенты в PDE записываются в f коэффициент.
coeffs.c('show')ans =
coeffs.f('show')ans =
Поскольку PDE не имеет формы расхождения, требуемой для панели инструментов PDE, панель инструментов не сможет решить эту PDE.
Решите зависящее от времени волновое уравнение в области, ограниченной единичной окружностью. Волновое уравнение представляет собой PDE со скалярной функцией y), которая зависит от времени t и координат x и y.
Создайте модель PDE и включите геометрию.
model = createpde(1); geometryFromEdges(model,@circleg);
Создайте символьный PDE, представляющий волновое уравнение.
syms u(t,x,y)
pdeeq = diff(u,t,t) - laplacian(u,[x y])pdeeq(t, x, y) =
Извлеките коэффициенты PDE.
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);
Примените граничное условие Дирихле = 0 на всех 4 кромках, образующих окружность.
applyBoundaryCondition(model,'dirichlet','Edge',1:4,'u',0);
Создайте сетку по умолчанию для геометрии.
generateMesh(model);
Найдите решения зависящего от времени PDE в диапазоне времени от 0 с до 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

Решите систему из двух PDE второго порядка. Вы можете решить систему PDE, извлекая коэффициенты PDE символически с помощью pdeCoefficients, преобразование коэффициентов в числа с двойной точностью с помощью pdeCoefficientsToDoubleи определение коэффициентов в модели PDE с использованием specifyCoefficients.
Система ПДЭ представляет собой прогиб зажатой конструкционной пластины при равномерной нагрузке давлением. Система PDE с зависимыми переменными и задается
∇2u1+u2=0,
D∇2u2=p,
где - жесткость пластины при изгибе,
1-start2),
и - модуль упругости, - отношение Пуассона, - толщина пластины, - поперечное отклонение пластины, - нагрузка давления.
Создайте модель 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Объявите систему PDE как систему символьных уравнений. Извлеките коэффициенты PDE и верните их в символической форме.
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 тип данных, который делает их действительными входными данными для панели инструментов PDE.
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 для модели 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]);
Укажите размер сетки геометрии и создайте сетку для модели 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 - PDE в символической формеPDE в символьной форме, определяемой как символьное уравнение, выражение или символьный вектор.
u - Переменная PDEПеременная PDE, заданная как символическая функция. u должна быть стационарной или зависящей от времени переменной в двух или трех измерениях. Например, создайте переменную u используя один из следующих операторов:
syms u(x,y)
syms u(t,x,y)
syms u(x,y,z)
syms u(t,x,y,z)
coeffs - Коэффициенты PDEКоэффициенты PDE, возвращаемые как структура чисел с двойной точностью и дескрипторов функций, как требуется specifyCoefficients функция. Поля структуры: a, c, m, d, и f. Для получения подробной информации о интерпретации коэффициентов в формате, требуемом для панели инструментов PDE, см.:
c Коэффициент для specifyCoefficients (Частичный Отличительный Комплект инструментов Уравнения)
m, d, или Коэффициент для specifyCoefficients (Частичный Отличительный Комплект инструментов Уравнения)
f Коэффициент для specifyCoefficients (Частичный Отличительный Комплект инструментов Уравнения)
Любой коэффициент может быть числом с двойной точностью или дескриптором функции. Например, коэффициент coeffs.f может быть дескриптором функции, который представляет некоторую внутреннюю функцию в рабочей области. В качестве входных аргументов используются две структуры: location и stateи возвращает двойное значение.
Дескрипторы функций отображаются как @makeCoefficient/coefficientFunction в окне команд. Отображение формулы дескриптора функции coeffs.f в символической форме, использовать coeffs.f('show').
symCoeffs - Коэффициенты PDE в символической формеКоэффициенты PDE в символической форме, возвращаемые как структура символических выражений.
diff | laplacian | pdeCoefficientsToDouble | syms | specifyCoefficients (Панель инструментов дифференциального уравнения в частных производных)
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.