exponenta event banner

pdeCoefficientsToDouble

Преобразовать символьные коэффициенты PDE в double формат

Описание

пример

coeffs = pdeCoefficientsToDouble(symCoeffs) преобразует символические объекты структуры; symCoeffs в числа с двойной точностью. Выходные данные представляют собой структуру coeffs который затем можно использовать для определения коэффициентов модели PDE путем вызова specifyCoefficients в дифференциальном уравнении в частных производных Toolbox™.

Структура coeffs содержит коэффициенты m, d, c, a, и f для системы PDE с формой

m∂2u∂t2+d∂u∂t−∇ · (c ⊗∇ u) +au=f

которые могут быть решены в инструментарии PDE. Дополнительные сведения см. в разделе Уравнения, которые можно решить с помощью панели инструментов PDE (панель инструментов дифференциальных уравнений в частных производных).

Примеры

свернуть все

Создание символьного PDE, представляющего лапласиан переменной u(x,y).

syms u(x,y) f
pdeeq = laplacian(u,[x y]) == f
pdeeq(x, y) = 

2x2 u(x,y)+2y2 u(x,y)=fdiff(u(x, y), x, 2) + diff(u(x, y), y, 2) == f

Извлеките коэффициенты PDE в виде символьных выражений и отобразите их значения.

symCoeffs = pdeCoefficients(pdeeq,u,'Symbolic',true);
structfun(@disp,symCoeffs)
0sym(0)
0sym(0)

(-100-1)[-sym(1), sym(0); sym(0), -sym(1)]

ff
0sym(0)

pdeCoefficients преобразует символьный PDE в скалярное уравнение PDE вида

m∂2u∂t2+d∂u∂t-∇⋅ (c∇u) + au = f,

и извлечь коэффициенты a, c, m, d, и f в структуру symCoeffs.

Выберите значение для f. С тех пор symCoeffs символьные объекты, использование pdeCoefficientsToDouble для преобразования коэффициентов в double тип данных. Коэффициенты с double типы данных являются допустимыми входными данными для specifyCoefficients в панели инструментов PDE.

symCoeffs = subs(symCoeffs,f,-3);
coeffs = pdeCoefficientsToDouble(symCoeffs)
coeffs = struct with fields:
    a: 0
    c: [4x1 double]
    m: 0
    d: 0
    f: -3

Решите систему из двух PDE второго порядка. Вы можете решить систему PDE, извлекая коэффициенты PDE символически с помощью pdeCoefficients, преобразование коэффициентов в числа с двойной точностью с помощью pdeCoefficientsToDoubleи определение коэффициентов в модели PDE с использованием specifyCoefficients.

Система ПДЭ представляет собой прогиб зажатой конструкционной пластины при равномерной нагрузке давлением. Система PDE с зависимыми переменными u1 и u2 задается

- ∇2u1+u2=0,

- D∇2u2=p,

где D - жесткость пластины при изгибе,

D = Eh312 (1-start2),

и E - модуль упругости, start- отношение Пуассона, h - толщина пластины, u1 - поперечное отклонение пластины, p - нагрузка давления.

Создайте модель 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);

Укажите значения физических параметров системы. Пусть внешнее давление p является символьной переменной 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)
0sym(0)

(0100)[sym(0), sym(1); sym(0), sym(0)]

(100001000025000273000025000273)[sym(1), sym(0), sym(0), sym(0); sym(0), sym(1), sym(0), sym(0); sym(0), sym(0), sym(25000/273), sym(0); sym(0), sym(0), sym(0), sym(25000/273)]

(0pres)[sym(0); pres]

0sym(0)

Заменить значение на 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'

Figure contains an axes. The axes with title Transverse Deflection contains 12 objects of type patch, line.

Найдите поперечное отклонение в центре пластины.

wMax = min(u(1:numNodes,1))
wMax = -0.2763

Сравните результат с отклонением в центре пластины, вычисленным аналитически.

pres = 2;
wMax = -.0138*pres*len^4/(E*h_thick^3)
wMax = -0.2760

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

свернуть все

Коэффициенты PDE в символической форме, указанные как структура символических выражений.

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

свернуть все

Коэффициенты PDE в двойной точности, возвращаемые как структура чисел двойной точности.

См. также

| | | | (Панель инструментов дифференциального уравнения в частных производных)

Представлен в R2021a