pdeCoefficientsToDouble

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

Описание

пример

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

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

m2ut2+dut·(cu)+au=f

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

Примеры

свернуть все

Создайте символьный УЧП, который представляет Laplacian переменной 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

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

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 преобразует символическое УЧП в скалярное уравнение УЧП вида

m2ut2+dut-(cu)+au=f,

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

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

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

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

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

-2u1+u2=0,

-D2u2=p,

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

D=Eh312(1-ν2),

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

Создайте модель УЧП для системы двух уравнений.

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

Объявите УЧП систему как системные символьные уравнения. Извлечь коэффициенты УЧП и вернуть их в символьной форме.

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 Toolbox.

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]

Задайте коэффициенты УЧП для модели УЧП.

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 для модели УЧП.

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

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

свернуть все

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

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

свернуть все

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

Введенный в R2021a