Создайте адаптивный 2 -D mesh и решите УЧП
Эта страница описывает устаревший рабочий процесс. Новые возможности могут быть несовместимы с устаревшим рабочим процессом. В рекомендуемом рабочем процессе см. generateMesh
для генерации сетки и solvepde
для решения УЧП.
[
генерирует адаптивный u
,p
,e
,t
] = adaptmesh(g
,b
,c
,a
,f
)[p,e,t]
mesh и возвращает решение u
для эллиптической 2-D УЧП задачи
для (x, y ) ∊
с заданной геометрией и граничными условиями, заданными g
и b
. Mesh описывается как p
, e
, и t
матрицы.
После завершения функция выдает одно из следующих сообщений:
Adaption completed
. (Это означает, что Tripick
функция вернула нулевые треугольники для уточнения.)
Maximum number of triangles obtained
.
Maximum number of refinement passes obtained
.
Решить уравнение Лапласа по сектору круга с граничными условиями Дирихле u = cos (2/3atan2 (y, x)) вдоль дуги и u = 0 вдоль прямых линий и сравнить полученное решение с точным решением. Установите опции так, чтобы adaptmesh
уточняет треугольники с использованием критерия наихудшей ошибки, пока не получит mesh с по крайней мере 500 треугольниками.
c45 = cos(pi/4); L1 = [2 -c45 0 c45 0 1 0 0 0 0]'; L2 = [2 -c45 0 -c45 0 1 0 0 0 0]'; C1 = [1 -c45 c45 -c45 -c45 1 0 0 0 1]'; C2 = [1 c45 c45 -c45 c45 1 0 0 0 1]'; C3 = [1 c45 -c45 c45 c45 1 0 0 0 1]'; g = [L1 L2 C1 C2 C3]; [u,p,e,t] = adaptmesh(g,'cirsb',1,0,0,'Maxt',500,... 'Tripick','pdeadworst','Ngen',Inf);
Number of triangles: 204 Number of triangles: 208 Number of triangles: 217 Number of triangles: 230 Number of triangles: 265 Number of triangles: 274 Number of triangles: 332 Number of triangles: 347 Number of triangles: 460 Number of triangles: 477 Number of triangles: 699 Maximum number of triangles obtained.
Найдите максимальную абсолютную ошибку.
x = p(1,:); y = p(2,:); exact = ((x.^2 + y.^2).^(1/3).*cos(2/3*atan2(y,x)))'; max(abs(u - exact))
ans = 0.0028
Найдите количество треугольников.
size(t,2)
ans = 699
Постройте график mesh.
pdemesh(p,e,t)
Проверьте, сколько уточнений вам нужно с помощью равномерного треугольного mesh.
[p,e,t] = initmesh(g);
[p,e,t] = refinemesh(g,p,e,t);
u = assempde('cirsb',p,e,t,1,0,0);
x = p(1,:);
y = p(2,:);
exact = ((x.^2 + y.^2).^(1/3).*cos(2/3*atan2(y,x)))';
max(abs(u - exact))
ans = 0.0116
Найдите количество треугольников в этом случае.
size(t,2)
ans = 816
Уточните сетку еще раз. Максимальная абсолютная ошибка для равномерного создания сетки все еще больше, чем для адаптивного создания сетки.
[p,e,t] = refinemesh(g,p,e,t);
u = assempde('cirsb',p,e,t,1,0,0);
x = p(1,:);
y = p(2,:);
exact = ((x.^2 + y.^2).^(1/3).*cos(2/3*atan2(y,x)))';
max(abs(u - exact))
ans = 0.0075
Найдите количество треугольников в этом случае.
size(t,2)
ans = 3264
Постройте график mesh.
pdemesh(p,e,t)
Равномерное уточнение с большим количеством треугольников приводит к большей ошибке. Как правило, задача с регулярным решением имеет ошибка. Однако это решение сингулярно, поскольку в источник.
g
- Описание геометрииОписание геометрии, заданное как разложенная геометрическая матрица, геометрическая функция или указатель на геометрическую функцию. Для получения дополнительной информации о разложенной геометрической матрице см. decsg
. Для получения дополнительной информации о функции геометрии смотрите Параметризованная функция для создания 2-D геометрии.
Геометрическая функция должна возвращать тот же результат для тех же входных параметров в каждом вызове функции. Таким образом, он не должен содержать функций и выражений, предназначенных для возврата различных результатов, таких как генераторы случайных чисел.
Типы данных: double
| char
| string
| function_handle
b
- Граничные условияГраничные условия, заданные как краевая матрица или файл контура. Передайте файл границы как указатель на функцию или как имя файла. Как правило, вы экспортируете краевую матрицу из приложения PDE Modeler.
Пример: b = 'circleb1'
, b = "circleb1"
, или b = @circleb1
Типы данных: double
| char
| string
| function_handle
c
- коэффициент УЧПКоэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, строковый скаляр, строковый вектор или функция коэффициента. c
представляет коэффициент c в скалярном УЧП
или в системе PDE
Коэффициенты c
, a
, и f
может зависеть от решения u
если вы используете нелинейный решатель путем установки значения 'Nonlin'
на 'on'
. Коэффициенты не могут быть функциями времени t
.
Пример: 'cosh(x+y.^2)'
Типы данных: double
| char
| string
| function_handle
a
- коэффициент УЧПКоэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, строковый скаляр, строковый вектор или функция коэффициента. a
представляет коэффициент a в скалярном УЧП
или в системе PDE
Коэффициенты c
, a
, и f
может зависеть от решения u
если вы используете нелинейный решатель путем установки значения 'Nonlin'
на 'on'
. Коэффициенты не могут быть функциями времени t
.
Пример: 2*eye(3)
Типы данных: double
| char
| string
| function_handle
f
- коэффициент УЧПКоэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, строковый скаляр, строковый вектор или функция коэффициента. f
представляет коэффициент f в скалярном УЧП
или в системе PDE
Коэффициенты c
, a
, и f
может зависеть от решения u
если вы используете нелинейный решатель путем установки значения 'Nonlin'
на 'on'
. Коэффициенты не могут быть функцией времени t
.
Пример: char('sin(x)';'cos(y)';'tan(z)')
Типы данных: double
| char
| string
| function_handle
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
[u,p,e,t] = adaptmesh(g,'cirsb',1,0,0,'Maxt',500,'Tripick','pdeadworst','Ngen',Inf)
'Maxt'
- Максимальное количество новых треугольниковInf
(по умолчанию) | положительное целое числоМаксимальное количество новых треугольников, заданное как разделенная разделенными запятой парами, состоящая из 'Maxt'
и положительное целое число.
Типы данных: double
'Ngen'
- Максимальное количество поколений треугольниковМаксимальное количество поколений треугольников, заданное как разделенная разделенными запятой парами, состоящая из 'Ngen'
и положительное целое число.
Типы данных: double
'Mesh'
- Начальный meshinitmesh
(по умолчанию) | [p,e,t]
meshНачальный mesh, заданная как разделенная разделенными запятой парами, состоящая из 'Mesh'
и сетку mesh, заданную как [p,e,t]
тройки. По умолчанию функция использует mesh, сгенерированную initmesh
функция.
Типы данных: double
'Tripick'
- Метод выбора треугольникаpdeadworst
(по умолчанию) | MATLAB® функцияМетод выбора треугольника, заданный как разделенная разделенными запятой парами, состоящая из 'Tripick'
и функцию MATLAB. По умолчанию функция использует индексы треугольников, возвращаемых pdeadworst
функция.
Учитывая оценку ошибки, вычисленную функцией pdejmps
метод выбора треугольника определяет треугольники, которые будут уточняться при следующем генерации треугольника. Функция вызывается с помощью аргументов p
, t
, cc
, aa
, ff
, u
, errf
, и Par
.
p
и t
представляют текущее поколение треугольников.
cc
, aa
, и ff
являются текущими коэффициентами для задачи УЧП, развернутыми до средних точек треугольника.
u
- текущее решение.
errf
- вычисленная оценка ошибки.
Par
является необязательным аргументом adaptmesh
.
Матрицы cc
, aa
, ff
, и errf
все имеют N t столбцов, где N t - текущее количество треугольников. Количество строк в cc
, aa
, и ff
точно такие же, как входные параметры c
, a
, и f
. errf
имеет по одной строке для каждого уравнения в системе. Два стандартных метода выбора треугольника pdeadworst
и pdeadgsc
.
pdeadworst
определяет треугольники, где errf
превышает часть наихудшего значения. Значение дроби по умолчанию является 0,5. Вы можете изменить его, задав Par
значение аргумента при вызове adaptmesh
.
pdeadgsc
выбирает треугольники с помощью критерия относительной погрешности.
Типы данных: double
'Par'
- Функциональный параметр для метода выбора треугольникаПараметр функции для метода выбора треугольника, заданный как разделенная разделенными запятой парами, состоящая из 'Par'
и число от 0 до 1. The pdeadworst
метод выбора треугольника использует его как wlevel
аргумент. The pdeadgsc
метод выбора треугольника использует его как tol
аргумент.
Типы данных: double
'Rmethod'
- Метод рафинирования треугольника'longest'
(по умолчанию) | 'regular'
Метод уточнения треугольника, заданный как разделенная разделенными запятой парами, состоящая из 'Rmethod'
и любой из них 'longest'
или 'regular'
. Для получения дополнительной информации о методе уточнения см. refinemesh
.
Типы данных: char
| string
'Nonlin'
- Переключение для использования нелинейного решателя'off'
(по умолчанию) | 'on'
Переключитесь, чтобы использовать нелинейный решатель, заданный как разделенная разделенными запятой парами, состоящая из 'Nonlin'
и 'on'
или 'off'
.
Типы данных: char
| string
'Toln'
- Нелинейный допуск1e-4
(по умолчанию) | положительное числоНелинейный допуск, заданный как разделенная разделенными запятой парами, состоящая из 'Toln'
и положительное число. Функция передает этот аргумент в pdenonlin
, который итератируется до тех пор, пока величина невязки не станет меньше Toln
.
Типы данных: double
'Init'
- Нелинейное начальное значениеНелинейное начальное значение, заданное как разделенная разделенными запятой парами, состоящая из 'Init'
и скаляр, вектор символов или вектор чисел. Функция передает этот аргумент в pdenonlin
, который использует его как начальное предположение в своей 'U0'
аргумент.
Типы данных: double
'Jac'
- Нелинейное вычисление якобиана'fixed'
(по умолчанию) | 'lumped'
| 'full'
Нелинейные Вычисления Якобиана, заданные как разделенная запятой пара, состоящие из 'Jac'
и любой из них 'fixed'
, 'lumped'
, или 'full'
. Функция передает этот аргумент в pdenonlin
, который использует его как начальное предположение в своей 'Jacobian'
аргумент.
Типы данных: char
| string
'Norm'
- Нелинейная норма невязки решателяInf
(по умолчанию) | значение p для Lp нормаНелинейная норма невязки решателя, заданная как разделенная разделенными запятой парами, состоящая из 'Norm'
и p
значение для Lp норма. p
может быть любым положительным вещественным значением, Inf
, или -Inf
. The p
норма векторного v
является sum(abs(v)^p)^(1/p)
. Функция передает этот аргумент в pdenonlin
, который использует его как начальное предположение в своей 'Norm'
аргумент.
Типы данных: double
| char
| string
'MesherVersion'
- Алгоритм генерации начального mesh'preR2013a'
(по умолчанию) | 'R2013a'
Алгоритм генерации начального mesh, заданный как разделенная разделенными запятой парами, состоящая из 'MesherVersion'
и любой из них 'R2013a'
или 'preR2013a'
. The 'R2013a'
алгоритм запускается быстрее, и может триангулировать больше геометрий, чем 'preR2013a'
алгоритм. Оба алгоритма используют триангуляцию Делоне.
Типы данных: char
| string
u
- решение УЧПРешение, возвращенный как вектор.
Если УЧП скаляром, что означает, что он имеет только одно уравнение, то u
является вектором-столбцом, представляющей u решения в каждом узле mesh.
Если УЧП является системой N > 1 уравнений, то u
- вектор-столбец с N*Np
элементы, где Np
- число узлов в mesh. Первый Np
элементы u
представляют решение уравнения 1, следующего Np
элементы представляют решение уравнения 2 и так далее.
p
- MeshNp
матрицаMesh очков, возвращенные как 2-by- Np
матрица. Np
- число точек (узлов) в mesh. Столбец k
от p
состоит из x -координата точки k
в p(1,k)
и y - координата точки k
в p(2,k)
. Для получения дополнительной информации смотрите Данные как [p, e, t] Triples.
e
- Кромки сеткиNe
матрицаMesh ребер, возвращается как 7-бай- Ne
матрица. Ne
- количество ребер в mesh. Ребро является парой точек в p
содержащая контур между поддоменами или содержащая внешний контур. Для получения дополнительной информации смотрите Данные как [p, e, t] Triples.
t
- Элементы сеткиNt
матрицаЭлементы сетки, возвращенные как 4-бай- Nt
матрица. Nt
- количество треугольников в mesh.
The t(i,k)
, с i
в диапазоне от 1 до end-1
, содержат индексы к угловым точкам элемента k
. Для получения дополнительной информации смотрите Данные как [p, e, t] Triples. Последняя строка, t(end,k)
, содержит номера поддоменов элементов.
Partial Differential Equation Toolbox™ обеспечивает refinemesh
функция для глобального, равномерного уточнения сетки для 2-D геометрий. Он разделяет каждый треугольник на четыре одинаковых треугольника, создавая новые углы на средних сторонах, настраивая для изогнутых контуров. Можно оценить точность численного решения путем сравнения результатов из последовательности последовательно уточненных сеток. Если решение достаточно гладкое, более точные результаты могут быть получены экстраполяцией.
Решения уравнений часто имеют геометрические функции, такие как локализованные сильные градиенты. Примером инженерной важности в эластичности является концентрация напряжения, происходящая в повторяющихся углах, таких как L-образная мембрана MATLAB. В таких случаях более эффективным является избирательное уточнение mesh. Выбор, который основан на оценках ошибок в вычисленных решениях, называется адаптивным уточнением сетки.
Адаптивное уточнение генерирует последовательность решений на последовательно более мелких сетках, на каждом этапе выбирая и уточняя те элементы, которые, как считается, вносят наибольший вклад в ошибку. Остановки процесса 34, когда максимальное количество элементов превышено, когда каждый треугольник вносит меньше, чем заданный допуск, или когда достигается предел итерации. Можно предоставить начальный mesh разрешить adaptmesh
звонить initmesh
автоматически. Вы также выбираете параметры критериев выбора и прекращения. Три компонента алгоритма являются функцией индикации ошибки (вычисляет оценку вклада ошибки элемента), mesh refiner (выбирает и подразделяет элементы) и критериями завершения.
Адаптация является процессом обратной связи. Он легко применяется к большей области значений задач, чем те, для которых был адаптирован его проект. Оценки, критерии выбора и так далее должны быть оптимальными для предоставления наиболее точного решения при фиксированных затратах или самых низких вычислительных усилиях для заданной точности. Такие результаты были доказаны только для задач модели, но в целом эвристика равнораспределения была найдена почти оптимальной. Размеры элемента должны быть выбраны так, чтобы каждый элемент вносил одинаковый вклад в ошибку. Теория адаптивных схем использует априорные границы для решений в терминах f исходной функции. Для неэллиптических задач такие ограничения могут не существовать, в то время как схема уточнения все еще четко задана и работает.
Функция индикатора ошибки, используемая в программном обеспечении, является элементарной оценкой вклада, основанной на [1] и [2]. Для уравнения-Δ <reservedrangesplaceholder3> Пуассона = f на Ω, следующая оценка ошибки для FEM-решения uh держится в L 2-норме:
где h = h (x) - локальный размер сетки, и
Окруженное количество - переход в нормальной производной v через ребро τ, <reservedrangesplaceholder8> <reservedrangesplaceholder7> длина ребра τ, и сумма переезжает Ei, набор всех внутренних ребер триангуляции. Коэффициенты α и β не зависят от триангуляции. Эта граница превращается в элементарную функцию индикатора ошибки E (K) для K элемента путем суммирования вкладов с его ребер.
Общая форма функции индикатора ошибки для эллиптического уравнения
– ∇ · (c <reservedrangesplaceholder2>) + au = f | (1) |
является
где - модуль нормаль ребра τ и термин с скобками является переходом потока через ребро элемента. Норма L 2 вычисляется по K элемента. pdejmps
функция вычисляет этот индикатор ошибки.
Уточнение mesh Partial Differential Equation Toolbox ориентировано на эллиптические задачи. Для обеспечения точности и плохих условий такие проблемы требуют, чтобы элементы не слишком сильно отклонялись от равновесия. Таким образом, даже при по существу одномерных функциях решения, таких как граничные слои, метод уточнения должен гарантировать треугольники разумной формы.
Когда элемент доработан, новые узлы появляются на его средних сторонах, и если соседний треугольник не уточнен подобным образом, это, как говорят, имеет висячие узлы. Окончательная триангуляция должна не иметь висящих узлов, и они удаляются путем разделения соседних треугольников. Чтобы избежать дальнейшего ухудшения качества треугольника в последующих поколениях, схема «самого длинного ребра бисекции» используется в [3], в котором самая длинная сторона треугольника всегда разделена, всякий раз, когда любая из сторон имеет висячие узлы. Это гарантирует, что ни один угол никогда не будет меньше половины наименьшего угла исходной триангуляции.
Существует два критерия выбора. Один, pdeadworst
, уточняет все элементы со значением индикатора ошибки, больше половины худшего из любого элемента. Другой, pdeadgsc
, уточняет все элементы со значением индикатора, превышающим заданный безразмерный допуск. Сравнение с допуском правильно масштабируется относительно области, размера решения и так далее.
Для гладких решений равнораспределение ошибок может быть достигнуто pdeadgsc
выбор, если максимальное количество элементов достаточно велико. pdeadworst
адаптация прекращается только тогда, когда превышено максимальное количество элементов или достигнут предел итерации. Этот режим является естественным, когда решение показывает особенности. Индикатор ошибки элементов рядом с особенностью может никогда не исчезнуть, независимо от размера элемента, делая равнораспределение невозможным.
[1] Джонсон, С. Численное решение дифференциальных уравнений с частными производными методом конечного элемента. Лунд, Швеция: Studentlitteratur, 1987.
[2] Johnson, C. and K. Eriksson. Адаптивные методы конечных элементов для параболических задач I: задача линейной модели. SIAM J. Numer. Anal, 28, (1991), pp. 43-77.
[3] Розенберг, И. Г., и Ф. Штенгер. Нижняя граница углов треугольников, построенных путем срезания самой длинной стороны. Математика расчетов. Том 29, Номер 10, 1975, стр. 390-395.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.