(Не рекомендуемый), Решают нелинейную эллиптическую проблему УЧП
pdenonlin не рекомендуется. Используйте solvepde вместо этого.
u = pdenonlin(model,c,a,f)u = pdenonlin(b,p,e,t,c,a,f)u = pdenonlin(___,Name,Value)[u,res]
= pdenonlin(___) решает нелинейный УЧПu = pdenonlin(model,c,a,f)
с геометрией граничные условия и конечный элемент сцепляются в model и коэффициентах c, a и f. В этом контексте, “нелинейном”, означает некоторый коэффициент в c, a, или f зависит от решения u или его градиент. Если УЧП является системой уравнений (model.PDESystemSize > 1), то pdenonlin решает систему уравнений
, для любых предыдущих аргументов, изменяет процесс решения с u = pdenonlin(___,Name,Value)Name, парами Value.
Решите минимальную поверхностную проблему. Поскольку эта проблема имеет нелинейный коэффициент 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') view(30,30) title('Bracket with Face Labels')

figure pdegplot(model,'FaceLabels','on') 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.0799e-02 1.0000000 3 1.1344e-02 1.0000000 4 2.2741e-03 1.0000000 5 1.7768e-04 1.0000000 6 1.4230e-06 1.0000000
Постройте решение на контуре геометрии.
pdeplot3D(model,'ColorMapData',u)
model — PDEPDEModelМодель PDE, заданная как объект PDEModel.
Пример: model = createpde
c Коэффициент УЧПКоэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, представляет в виде строки скаляр, вектор строки или коэффициентную функцию. c представляет коэффициент c в скалярном УЧП
или в системе УЧП
Вы можете specifyc в различных способах, детализированных в c Коэффициенте для Систем. См. также Задают Скалярные Коэффициенты УЧП в символьной Форме, Задают 2D Скалярные Коэффициенты в Функциональной Форме и Задают 3-D Коэффициенты УЧП в Функциональной Форме.
Пример: 'cosh(x+y.^2)'
Типы данных: double | char | string | function_handle
Поддержка комплексного числа: Да
a Коэффициент УЧПКоэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, представляет в виде строки скаляр, вектор строки или коэффициентную функцию. a представляет коэффициент a в скалярном УЧП
или в системе УЧП
Вы можете specifya в различных способах, детализированных в a или d Коэффициенте для Систем. См. также Задают Скалярные Коэффициенты УЧП в символьной Форме, Задают 2D Скалярные Коэффициенты в Функциональной Форме и Задают 3-D Коэффициенты УЧП в Функциональной Форме.
Пример: 2*eye(3)
Типы данных: double | char | string | function_handle
Поддержка комплексного числа: Да
f Коэффициент УЧПКоэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, представляет в виде строки скаляр, вектор строки или коэффициентную функцию. f представляет коэффициент f в скалярном УЧП
или в системе УЧП
Вы можете specifyf в различных способах, детализированных в f Коэффициенте для Систем. См. также Задают Скалярные Коэффициенты УЧП в символьной Форме, Задают 2D Скалярные Коэффициенты в Функциональной Форме и Задают 3-D Коэффициенты УЧП в Функциональной Форме.
Пример: char('sin(x)';'cos(y)';'tan(z)')
Типы данных: double | char | string | function_handle
Поддержка комплексного числа: Да
b Граничные условияГраничные условия, заданные как граничная матрица или массив данных граничных условий. Передайте массив данных граничных условий как указатель на функцию или как имя файла.
Граничная матрица обычно является экспортом из приложения PDE Modeler. Для получения дополнительной информации структуры этой матрицы, смотрите Граничную матрицу для 2D Геометрии.
Массив данных граничных условий является файлом, который вы записываете в синтаксисе, заданном в Граничных условиях путем Записи Функций.
Пример: b = 'circleb1', b = "circleb1" или b = @circleb1
Типы данных: double | char | string | function_handle
p Поймайте в сети точкиПоймайте в сети точки, заданные как 2 Np матрицей точек, где Np является числом точек в mesh. Для описания (p, e, t) матрицы, смотрите Данные о Mesh.
Как правило, вы используете p, e и данные t, экспортированные из приложения PDE Modeler или сгенерированные initmesh или refinemesh.
Пример: [p,e,t] = initmesh(gd)
Типы данных: double
e Поймайте в сети ребраПоймайте в сети ребра, заданные как 7-by-Ne матрица ребер, где Ne является количеством ребер в mesh. Для описания (p, e, t) матрицы, смотрите Данные о Mesh.
Как правило, вы используете p, e и данные t, экспортированные из приложения PDE Modeler или сгенерированные initmesh или refinemesh.
Пример: [p,e,t] = initmesh(gd)
Типы данных: double
t Поймайте в сети треугольникиПоймайте в сети треугольники, заданные как 4-by-Nt матрица треугольников, где Nt является количеством треугольников в mesh. Для описания (p, e, t) матрицы, смотрите Данные о Mesh.
Как правило, вы используете p, e и данные t, экспортированные из приложения PDE Modeler или сгенерированные initmesh или refinemesh.
Пример: [p,e,t] = initmesh(gd)
Типы данных: double
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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 запишите символьный массив со строками N, где каждая строка имеет синтаксис, Задают Скалярные Коэффициенты УЧП в символьной Форме.
Для систем уравнений N и mesh с узлами Np, дают вектор-столбец с N *Np компоненты. Узлами является или model.Mesh.Nodes или данные p из initmesh или meshToPet. Смотрите Данные о Mesh.
Первые элементы Np содержат значения 1 компонента, где значение элемента k соответствует узлу p(k). Следующие точки Np содержат значения 2 компонента и т.д. Может быть удобно сначала представлять начальные условия u0 как Np-by-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' — Максимальное количество итераций Ньютона Гаусса25 (значение по умолчанию) | положительное целое числоМаксимальное количество итераций Ньютона Гаусса, заданных как положительное целое число.
Пример: u = pdenonlin(model,c,a,f,'MaxIter',12)
Типы данных: double
'MinStep' — Минимальное затухание поискового направления1/2^16 (значение по умолчанию) | положительная скалярная величинаМинимальное затухание поискового направления, заданного как положительная скалярная величина.
Пример: 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
норма Норма невязки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 Решения и Их Градиенты.
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. | (1) |
В установке FEM вы решаете слабую форму r (u) = 0. Установите, как обычно,
где x представляет 2D или 3-D точку. Затем умножьте уравнение на произвольную тестовую функцию ϕi, объединяйтесь на области Ω и используйте формулу Грина и граничные условия, чтобы получить
который должен содержать для всех индексов i.
Вектор невязок ρ (U) может быть легко вычислен как
| ρ (U) = (K + M + Q) U – (F + G) | (2) |
где матрицы K, M, Q и векторы F и G производятся путем сборки проблемы
| – ∇ · (c (U) ∇u) + a (U) u = f (U). | (3) |
Примите, что у вас есть предположение 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 | (4) |
Ослабленная итерация Ньютона Гаусса затем запускается с 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 . | (5) |
Это эквивалентно приближению якобиана с матрицей жесткости. Действительно, начиная с ρ (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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.