(Не рекомендуемый), Решают нелинейную эллиптическую задачу УЧП
pdenonlin
не рекомендуется. Использование solvepde
вместо этого.
решает нелинейный УЧПu
= pdenonlin(model
,c
,a
,f
)
с геометрией граничные условия и конечный элемент сцепляются в model
, и коэффициенты c
A
, и f
. В этом контексте, “нелинейном”, означает некоторый коэффициент в c
A
, или f
зависит от решения u
или его градиент. Если УЧП является системой уравнений (model.PDESystemSize
> 1), затем pdenonlin
решает систему уравнений
, для любых предыдущих аргументов, изменяет процесс решения с u
= pdenonlin(___,Name,Value
)Name
Значение
пары.
Решите минимальную поверхностную задачу. Поскольку эта проблема имеет нелинейный c
коэффициент, используйте pdenonlin
решить его.
Создайте модель и включайте круговую геометрию с помощью встроенного circleg
функция.
model = createpde; geometryFromEdges(model,@circleg);
Установите коэффициенты.
a = 0;
f = 0;
c = '1./sqrt(1+ux.^2+uy.^2)';
Установите граничное условие Дирихле со значением .
boundaryfun = @(region,state)region.x.^2; applyBoundaryCondition(model,'edge',1:model.Geometry.NumEdges,... 'u',boundaryfun,'Vectorized','on');
Сгенерируйте mesh и решите задачу.
generateMesh(model,'GeometricOrder','linear','Hmax',0.1); u = pdenonlin(model,c,a,f); pdeplot(model,'XYData',u,'ZData',u)
Решите минимальную поверхностную задачу с помощью устаревшего подхода для создания граничных условий и геометрии.
Создайте геометрию с помощью встроенного circleg
функция. Постройте геометрию, чтобы видеть метки ребра.
g = @circleg; pdegplot(g,'EdgeLabels','on') axis equal
Создайте граничные условия Дирихле со значением .Create следующий файл и сохраняют его на вашем пути MATLAB.
function [qmatrix,gmatrix,hmatrix,rmatrix] = pdex2bound(p,e,u,time)
ne = size(e,2); % number of edges qmatrix = zeros(1,ne); gmatrix = qmatrix; hmatrix = zeros(1,2*ne); rmatrix = hmatrix;
for k = 1:ne x1 = p(1,e(1,k)); % x at first point in segment x2 = p(1,e(2,k)); % x at second point in segment xm = (x1 + x2)/2; % x at segment midpoint y1 = p(2,e(1,k)); % y at first point in segment y2 = p(2,e(2,k)); % y at second point in segment ym = (y1 + y2)/2; % y at segment midpoint switch e(5,k) case {1,2,3,4} hmatrix(k) = 1; hmatrix(k+ne) = 1; rmatrix(k) = x1^2; rmatrix(k+ne) = x2^2; end end
Установите коэффициенты и граничные условия.
a = 0;
f = 0;
c = '1./sqrt(1+ux.^2+uy.^2)';
b = @pdex2bound;
Сгенерируйте mesh и решите задачу.
[p,e,t] = initmesh(g,'Hmax',0.1); u = pdenonlin(b,p,e,t,c,a,f); pdeplot(p,e,t,'XYData',u,'ZData',u)
Решите нелинейную 3-D задачу с нетривиальной геометрией.
Импортируйте геометрию из BracketWithHole.stl
файл. Постройте геометрию и столкнитесь с метками.
model = createpde(); importGeometry(model,'BracketWithHole.stl'); figure pdegplot(model,'FaceLabels','on','FaceAlpha',0.5) view(30,30) title('Bracket with Face Labels')
figure pdegplot(model,'FaceLabels','on','FaceAlpha',0.5) view(-134,-32) title('Bracket with Face Labels, Rear View')
Установите граничное условие Дирихле со значением 1000 на задней стороне, которая является поверхностью 4. Установите большие поверхности 1 и 7, и также круговую поверхность 11, чтобы иметь Неймановы граничные условия со значением g = -10
. Не делайте условий границы множества на других поверхностях. Те поверхности значение по умолчанию к Неймановым граничным условиям со значением g = 0
.
applyBoundaryCondition(model,'Face',4,'u',1000); applyBoundaryCondition(model,'Face',[1,7,11],'g',-10);
Установите c
коэффициент к 1, f
к 0,1, и a
к нелинейному значению '0.1 + 0.001*u.^2'
.
c = 1;
f = 0.1;
a = '0.1 + 0.001*u.^2';
Сгенерируйте mesh и решите УЧП. Запустите с исходного предположения u0 = 1000
, который совпадает со значением, вы устанавливаете на поверхности 4. Включите Report
опция, чтобы наблюдать сходимость во время решения.
generateMesh(model); u = pdenonlin(model,c,a,f,'U0',1000,'Report','on');
Iteration Residual Step size Jacobian: full 0 7.2059e-01 1 1.3755e-01 1.0000000 2 4.0800e-02 1.0000000 3 1.1343e-02 1.0000000 4 2.2740e-03 1.0000000 5 1.7779e-04 1.0000000 6 1.4223e-06 1.0000000
Постройте решение на контуре геометрии.
pdeplot3D(model,'ColorMapData',u)
model
— Модель PDEPDEModel
объектМодель PDE в виде PDEModel
объект.
Пример: model = createpde
c
— Коэффициент УЧПКоэффициент УЧП в виде скаляра, матрицы, вектора символов, символьного массива, строкового скаляра, представляет в виде строки вектор или коэффициентную функцию. c
представляет коэффициент c в скалярном УЧП
или в системе УЧП
Пример: 'cosh(x+y.^2)'
Типы данных: double |
char
| string
| function_handle
Поддержка комплексного числа: Да
a
— Коэффициент УЧПКоэффициент УЧП в виде скаляра, матрицы, вектора символов, символьного массива, строкового скаляра, представляет в виде строки вектор или коэффициентную функцию. a
представляет коэффициент a в скалярном УЧП
или в системе УЧП
Пример: 2*eye(3)
Типы данных: double |
char
| string
| function_handle
Поддержка комплексного числа: Да
f
— Коэффициент УЧПКоэффициент УЧП в виде скаляра, матрицы, вектора символов, символьного массива, строкового скаляра, представляет в виде строки вектор или коэффициентную функцию. f
представляет коэффициент f в скалярном УЧП
или в системе УЧП
Пример: char('sin(x)';'cos(y)';'tan(z)')
Типы данных: double |
char
| string
| function_handle
Поддержка комплексного числа: Да
b
Граничные условияГраничные условия в виде граничной матрицы или массива данных граничных условий. Передайте массив данных граничных условий как указатель на функцию или как имя файла. Граничная матрица обычно является экспортом из приложения PDE Modeler.
Пример: b = 'circleb1'
, b = "circleb1"
, или b = @circleb1
Типы данных: double |
char
| string
| function_handle
p
— Поймайте в сети точкиПоймайте в сети точки в виде 2 Np
матрица точек, где Np
число точек в mesh. Для описания (p
E
T
) матрицы, смотрите Данные о Mesh, когда [p, e, t] Утраивается.
Как правило, вы используете p
E
, и t
данные, экспортированные из приложения PDE Modeler или сгенерированные initmesh
или refinemesh
.
Пример: [p,e,t] = initmesh(gd)
Типы данных: double
e
— Поймайте в сети ребраПоймайте в сети ребра в виде 7
- Ne
матрица ребер, где Ne
количество ребер в mesh. Для описания (p
E
T
) матрицы, смотрите Данные о Mesh, когда [p, e, t] Утраивается.
Как правило, вы используете p
E
, и t
данные, экспортированные из приложения PDE Modeler или сгенерированные initmesh
или refinemesh
.
Пример: [p,e,t] = initmesh(gd)
Типы данных: double
t
— Поймайте в сети треугольникиПоймайте в сети треугольники в виде 4
- Nt
матрица треугольников, где Nt
количество треугольников в mesh. Для описания (p
E
T
) матрицы, смотрите Данные о Mesh, когда [p, e, t] Утраивается.
Как правило, вы используете p
E
, и t
данные, экспортированные из приложения PDE Modeler или сгенерированные initmesh
или refinemesh
.
Пример: [p,e,t] = initmesh(gd)
Типы данных: double
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'Jacobian','full'
'Jacobian'
— Приближение якобиана'full'
(3-D значение по умолчанию) | 'fixed'
(2D значение по умолчанию) | 'lumped'
Приближение якобиана в виде 'full'
, 'fixed'
, или 'lumped'
.
'full'
средняя численная оценка полного якобиана на основе разреженной версии numjac
функция. 3-D геометрия использует только 'full'
, любая другая спецификация дает к ошибке.
'fixed'
задает матрицу итерации фиксированной точки, где якобиан аппроксимирован матрицей жесткости. Это - 2D значение по умолчанию геометрии.
'lumped'
задает “смешанное” приближение как описано в Нелинейных уравнениях. Это приближение основано на числовом дифференцировании коэффициентов.
Пример: u = pdenonlin(model,c,a,f,'Jacobian','full')
Типы данных: char |
string
'U0'
— Начальное предположение решенияНачальное предположение решения в виде скаляра, вектора из символов или вектора из чисел. Скаляр задает постоянное начальное условие или для скаляра или для системы УЧП.
Для систем уравнений N и mesh с Np
узлы, дайте вектор-столбец с N *Np
компоненты. Узлами является любой model.Mesh.Nodes
, или p
данные из initmesh
или meshToPet
. Смотрите данные о mesh, когда [p, e, t] утраивается.
Первый Np
элементы содержат значения 1 компонента, где значение элемента k
соответствует узлу p(k)
. Следующий Np
точки содержат значения 2 компонента и т.д. Может быть удобно сначала представлять начальные условия u0
как Np
- N
матрица, где первый столбец содержит записи для 1 компонента, второй столбец, содержит записи для 2 компонента и т.д. Итоговым представлением начальных условий является u0(:)
.
Пример: u = pdenonlin(model,c,a,f,'U0','x.^2-y.^2')
Типы данных: double |
char
| string
Поддержка комплексного числа: Да
'Tol'
— Остаточный размер при завершенииОстаточный размер при завершении в виде положительной скалярной величины. pdenonlin
выполняет итерации, пока остаточный размер не меньше 'Tol'
.
Пример: u = pdenonlin(model,c,a,f,'Tol',1e-6)
Типы данных: double
'MaxIter'
— Максимальное количество итераций Ньютона Гаусса
(значение по умолчанию) | положительное целое числоМаксимальное количество итераций Ньютона Гаусса в виде положительного целого числа.
Пример: u = pdenonlin(model,c,a,f,'MaxIter',12)
Типы данных: double
'MinStep'
— Минимальное затухание поискового направления
(значение по умолчанию) | положительная скалярная величинаМинимальное затухание поискового направления в виде положительной скалярной величины.
Пример: u = pdenonlin(model,c,a,f,'MinStep',1e-3)
Типы данных: double
'Report'
— Распечатайте информацию о сходимости'off'
(значение по умолчанию) | 'on'
Распечатайте информацию о сходимости в виде 'off'
или 'on'
.
Пример: u = pdenonlin(model,c,a,f,'Report','on')
Типы данных: char |
string
'Norm'
— Норма невязкиInf
(значение по умолчанию) | p значение для нормы LP | 'energy'
Норма невязки в виде p
значение для нормы LP, или как 'energy'
P
может быть любое положительное действительное значение, Inf
, или -Inf
. p
норма векторного v
sum(abs(v)^p)^(1/p)
. Смотрите norm
.
Пример: u = pdenonlin(model,c,a,f,'Norm',2)
Типы данных: double |
char
| string
u
— Решение для УЧПРешение для УЧП, возвращенное как вектор.
Если УЧП является скаляром, означая только одно уравнение, то u
вектор-столбец, представляющий решение u в каждом узле в mesh. u(i)
решение в i
столбец th model.Mesh.Nodes
или i
столбец th p
.
Если УЧП является системой N> 1 уравнение, то u
вектор-столбец с N *Np
элементы, где Np
количество узлов в mesh. Первый Np
элементы u
представляйте решение уравнения 1, затем следующий Np
элементы представляют решение уравнения 2 и т.д.
Чтобы получить решение в произвольной точке в геометрии, используйте pdeInterpolant
.
Чтобы построить решение, использовать pdeplot
для 2D геометрии, или см. 3-D Графики Решения и Градиента с MATLAB® Functions.
res
— Норма остаточных значений шага НьютонаНорма остаточных значений шага Ньютона, возвращенных как скаляр. Для получения информации об алгоритме смотрите Нелинейные уравнения.
Если итерация Ньютона не сходится, pdenonlin
отображает сообщение об ошибке Too many iterations
или Stepsize too small
.
Если исходное предположение производит матрицы, содержащие NaN
или Inf
элементы, pdenonlin
отображает сообщение об ошибке Unsuitable initial guess U0 (default: U0 = 0)
.
Если у вас есть очень маленькие коэффициенты или очень небольшие геометрические размерности, pdenonlin
может не сходиться или может сходиться к неправильному решению. Если так, можно иногда получать лучшие результаты путем масштабирования коэффициентов или размерностей геометрии, чтобы быть порядка один.
Основная идея состоит в том, чтобы использовать итерации Ньютона Гаусса, чтобы решить нелинейные уравнения. Скажите, что вы пытаетесь решить уравнение
r (u) = – ∇ · (c (u) ∇u) + a (u) u - f (u) = 0.
В установке FEM вы решаете слабую форму r (u) = 0. Установите, как обычно,
где x представляет 2D или 3-D точку. Затем умножьте уравнение на произвольную тестовую функцию ϕi, объединяйтесь на области Ω и используйте формулу Грина и граничные условия, чтобы получить
который должен содержать для всех индексов i.
Вектор невязок ρ (U) может быть легко вычислен как
ρ (U) = (K + M + Q) U – (F + G)
где матрицы K, M, Q и векторы F и G производятся путем сборки проблемы
– ∇ · (c (U) ∇u) + a (U) u = f (U).
Примите, что у вас есть предположение U (n) решения. Если U (n) достаточно близок к точному решению, улучшенное приближение, U (n +1) получен путем решения линеаризовавшей задачи
где положительное число. (Не необходимо, чтобы ρ (U) = 0 имел решение, даже если ρ (u) = 0 имеет.) В этом случае итерация Ньютона Гаусса имеет тенденцию быть минимизатором невязки, т.е. решением minU .
Это известно это за достаточно маленький
и
называется направлением спуска для , где 2-норма L. Итерация
где ≤ 1 выбран как можно больше таким образом, что шаг имеет разумный спуск.
Метод Ньютона Гаусса локален, и сходимость гарантируют только, когда U (0) достаточно близок к решению. В общем случае первое предположение может найтись вне области сходимости. Чтобы улучшить сходимость от плохих исходных предположений, стратегия затухания реализована для выбора α, поиск линии Армиджо-Голдстайна. Это выбирает самый большой коэффициент демпфирования α из последовательности 1, 1/2, 1/4... таким образом, что следующее неравенство содержит:
который гарантирует сокращение нормы невязки по крайней мере 1 – /2. Каждый шаг алгоритма поиска линии требует оценки невязки .
Важный момент этой стратегии - это, когда U (n) приближается к решению, затем →1 и таким образом повышения ставки сходимости. Если существует решение ρ (U) = 0, схема в конечном счете восстанавливает квадратичный уровень сходимости стандарта итерация Ньютона.
Тесно связанный с предыдущей проблемой выбор исходного предположения U (0). По умолчанию решатель устанавливает U (0) и затем собирает матрицы FEM K и F и вычисляет
U (1) = K –1F
Ослабленная итерация Ньютона Гаусса затем начата с U (1), который должен быть лучшим предположением, чем U (0). Если граничные условия не зависят от решения u, то U (1) удовлетворяет им, даже если U (0) не делает. Кроме того, если уравнение линейно, то U (1) является точным решением FEM, и решатель не вводит цикл Ньютона Гаусса.
Существуют ситуации, где U (0) = 0 не имеет никакого смысла, или сходимость невозможна.
В некоторых ситуациях у вас может уже быть хорошее приближение, и нелинейный решатель может быть начат с него, избежав медленного режима сходимости. Эта идея используется в адаптивном генераторе mesh. Это вычисляет решение на mesh, оценивает ошибку и может совершенствовать определенные треугольники. interpolant очень хорошее начальное приближение для решения на усовершенствованной mesh.
В целом точный якобиан
не доступно. Приближение Jn конечными разностями следующим образом является дорогим, но выполнимым. i th столбец Jn может быть аппроксимирован
который подразумевает сборку матриц FEM для треугольников, содержащих узел решетки i. Очень простое приближение к Jn, который дает итерацию фиксированной точки, также возможно следующие. По существу, для данного U (n), вычислите матрицы FEM K и F и установите
U (n +1) = K –1F .
Это эквивалентно аппроксимации якобиана с матрицей жесткости. Действительно, начиная с ρ (U (n)) = KU (n) – F, помещая Jn = выражения K
Во многих случаях уровень сходимости является медленным, но стоимость каждой итерации является дешевой.
Partial Differential Equation Toolbox™ нелинейный решатель также предусматривает компромисс между этими двумя экстремальными значениями. Чтобы вычислить производную отображения U →KU, продолжите можно следующим образом. Термин a был не использован для ясности, но появляется снова в конечном результате.
Первый интегральный срок является не чем иным как Ki,j.
Второй срок “смешан”, т.е. заменен диагональной матрицей, которая содержит суммы строки. С тех пор Σjϕj = 1, второй срок аппроксимирован
который является i th компонент K (c') U, где K (c') является матрицей жесткости, сопоставленной с коэффициентом ∂c / ∂ u, а не c. То же обоснование может быть применено к производной отображения U →MU. Производная отображения U → –F точно
который является большой матрицей, сопоставленной с коэффициентом ∂f / ∂ u. Таким образом якобиан остаточного ρ (U) аппроксимирован
где дифференцирование относительно u, K и M определяют жесткость и большие матрицы, и их индексы определяют коэффициенты, относительно которых они собраны. В каждой итерации Ньютона Гаусса нелинейный решатель собирает матрицы, соответствующие уравнениям
и затем производит аппроксимированный якобиан. Дифференцирования коэффициентов сделаны численно.
В общей установке эллиптических систем граничные условия добавлены к матрице жесткости, чтобы сформировать полную линейную систему:
где коэффициенты и может зависеть от решения . “Смешанный” подход аппроксимирует производное отображение невязки
Нелинейность граничных условий и зависимости коэффициентов на производных правильно не линеаризуются этой схемой. Когда такая нелинейность сильна, схема уменьшает до итерации фиксировать-точки и может сходиться медленно или нисколько. Когда граничные условия линейны, они не влияют на свойства сходимости схем итерации. В Неймановом случае они невидимы (H является пустой матрицей), и в случае Дирихле они просто утверждают, что невязка является нулем на соответствующих граничных точках.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.