Создайте адаптивную 2D mesh и решите УЧП
Эта страница описывает устаревший рабочий процесс. Новые возможности не могут быть совместимы с устаревшим рабочим процессом. В рекомендуемом рабочем процессе смотрите generateMesh
для генерации mesh и solvepde
для решения для УЧП.
[
генерирует адаптивный u
,p
,e
,t
] = adaptmesh(g
,b
,c
,a
,f
)[p,e,t]
сцепитесь и возвращает решение u
для эллиптической 2D проблемы УЧП
для (x, y) ∊ Ω, или эллиптическая системная проблема УЧП
с проблемной геометрией и граничными условиями, данными g
и b
. Mesh описана p
E
, и t
матрицы.
После завершения функция выпускает одно из этих сообщений:
Adaption completed
. (Это означает что Tripick
функция возвратила нулевые треугольники, чтобы совершенствовать.)
Maximum number of triangles obtained
.
Maximum number of refinement passes obtained
.
Решите уравнение Лапласа по круговому сектору, с граничными условиями Дирихле u = because(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
Совершенствуйте mesh еще раз. Максимальная абсолютная погрешность для запутывающей универсальной формы все еще больше для запутывающего адаптивного.
[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
. Для получения дополнительной информации о функции геометрии, смотрите Параметрическую Функцию для 2D Создания Геометрии.
Функция геометрии должна возвратить тот же результат для тех же входных параметров в каждом вызове функции. Таким образом это не должно содержать функции и выражения, спроектированные, чтобы возвратить множество результатов, таких как генераторы случайных чисел.
Типы данных: double |
char
| string
| function_handle
b
Граничные условияГраничные условия в виде граничной матрицы или массива данных граничных условий. Передайте массив данных граничных условий как указатель на функцию или как имя файла. Как правило, вы экспортируете граничную матрицу из приложения PDE Modeler.
Пример: b = 'circleb1'
, b = "circleb1"
, или b = @circleb1
Типы данных: double |
char
| string
| function_handle
c
— Коэффициент УЧПКоэффициент УЧП в виде скаляра, матрицы, вектора символов, символьного массива, строкового скаляра, представляет в виде строки вектор или коэффициентную функцию. c
представляет коэффициент c в скалярном УЧП
или в системе УЧП
Коэффициенты c
A
, и f
может зависеть от решения u
если вы используете нелинейный решатель путем устанавливания значения 'Nonlin'
к 'on'
. Коэффициенты не могут быть функциями времени t
.
Пример: 'cosh(x+y.^2)'
Типы данных: double |
char
| string
| function_handle
a
— Коэффициент УЧПКоэффициент УЧП в виде скаляра, матрицы, вектора символов, символьного массива, строкового скаляра, представляет в виде строки вектор или коэффициентную функцию. a
представляет коэффициент a в скалярном УЧП
или в системе УЧП
Коэффициенты c
A
, и f
может зависеть от решения u
если вы используете нелинейный решатель путем устанавливания значения 'Nonlin'
к 'on'
. Коэффициенты не могут быть функциями времени t
.
Пример: 2*eye(3)
Типы данных: double |
char
| string
| function_handle
f
— Коэффициент УЧПКоэффициент УЧП в виде скаляра, матрицы, вектора символов, символьного массива, строкового скаляра, представляет в виде строки вектор или коэффициентную функцию. f
представляет коэффициент f в скалярном УЧП
или в системе УЧП
Коэффициенты 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. pdeadworst
треугольный метод выбора использует его в качестве своего wlevel
аргумент. 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
. p
норма векторного v
sum(abs(v)^p)^(1/p)
. Функция передает этот аргумент pdenonlin
, который использует его в качестве исходного предположения в его 'Norm'
аргумент.
Типы данных: double |
char
| string
'MesherVersion'
— Алгоритм для генерации начальной mesh'preR2013a'
(значение по умолчанию) | 'R2013a'
Алгоритм для генерации начальной mesh в виде разделенной запятой пары, состоящей из 'MesherVersion'
и любой 'R2013a'
или 'preR2013a'
. 'R2013a'
алгоритм запускается быстрее и может триангулировать больше конфигураций, чем 'preR2013a'
алгоритм. Оба алгоритма используют Триангуляцию Делоне.
Типы данных: char |
string
u
— Решение для УЧПРешение для УЧП, возвращенное как вектор.
Если УЧП является скаляром, означая, что это имеет только одно уравнение, то u
вектор-столбец, представляющий решение u в каждом узле в mesh.
Если УЧП является системой N> 1 уравнение, то u
вектор-столбец с N*Np
элементы, где Np
количество узлов в mesh. Первый Np
элементы u
представляйте решение уравнения 1, следующего Np
элементы представляют решение уравнения 2 и так далее.
p
— Поймайте в сети точкиNp
матрицаПоймайте в сети точки, возвращенные как 2 Np
матрица. Np
число точек (узлы) в mesh. Столбец k
из p
состоит из x - координата точки k
в p(1,k)
и y - координата точки k
в p(2,k)
. Для получения дополнительной информации смотрите Данные о Mesh, когда [p, e, t] Утраивается.
e
— Поймайте в сети ребраNe
матрицаПоймайте в сети ребра, возвращенные как 7 Ne
матрица. Ne
количество ребер в mesh. Ребро является парой точек в p
содержа контур между субдоменами, или содержащий внешнюю границу. Для получения дополнительной информации смотрите Данные о Mesh, когда [p, e, t] Утраивается.
t
— Поймайте в сети элементыNt
матрицаПоймайте в сети элементы, возвращенные как 4 Nt
матрица. Nt
количество треугольников в mesh.
t(i,k)
, с i
в пределах от 1 через end-1
, содержите индексы к угловым точкам элемента k
. Для получения дополнительной информации смотрите Данные о Mesh, в то время как [p, e, t] Утраивается. Последняя строка, t(end,k)
, содержит количества субдомена элементов.
Partial Differential Equation Toolbox™ обеспечивает refinemesh
функция для глобальной переменной, универсальная форма поймала в сети улучшение для 2D конфигураций. Это делит каждый треугольник на четыре подобных треугольника путем создания новых углов в середине сторон, корректировки для кривых контуров. Можно оценить точность числового решения путем сравнения результатов последовательности последовательно усовершенствованных сеток. Если решение является гладким достаточно, более точные результаты могут быть получены экстраполяцией.
Решения уравнений часто имеют геометрические функции, такие как локализованные сильные градиенты. Примером технической важности в эластичности является концентрация напряжения, происходящая в повторно используемых углах, таких как MATLAB L-образная мембрана. В таких случаях более эффективно совершенствовать mesh выборочно. Выбор, который основан на оценках ошибок в вычисленных решениях, называется адаптивным улучшением mesh.
Адаптивное улучшение генерирует последовательность решений на последовательно более прекрасных сетках при каждом выборе этапа и совершенствовании тех элементов, которые, как оценивается, способствуют больше всего ошибке. Процесс stops34, когда максимальное количество элементов превышено, когда каждый треугольник вносит меньше, чем предварительно установленный допуск, или когда предел итерации достигнут. Можно обеспечить начальную mesh или позволить adaptmesh
вызвать initmesh
автоматически. Вы также выбираете параметры критериев выбора и завершения. Три компонента алгоритма являются ошибочной функцией индикатора (вычисляет оценку ошибочного вклада элемента), установка для очистки mesh (выбирает и подразделяет элементы), и критерии завершения.
Адаптация является процессом обратной связи. Это легко применяется к большей области значений проблем, чем те, для которых был адаптирован ее проект. Оценки, критерии выбора, и так далее должны быть оптимальными для предоставления самого точного решения в фиксированных затратах или самого низкого вычислительного усилия для заданной точности. Такие результаты были доказаны только для проблем модели, но обычно, equidistribution эвристика была найдена почти оптимальной. Размеры элемента должны быть выбраны так, чтобы каждый элемент внес то же самое в ошибку. Теория адаптивных схем использует априорные границы для решений в терминах исходной функции f. Для неэллиптических проблем не могут существовать такие границы, в то время как схема улучшения все еще четко определена и работает.
Ошибочная функция индикатора, используемая в программном обеспечении, является поэлементной оценкой вклада, на основе [1] и [2]. Для уравнения Пуассона –Δu = f на Ω, следующей ошибочной оценке для FEM-решения uh содержит в 2-норме L :
где h = h (x) является локальным размером mesh, и
Заключенное в фигурные скобки количество является скачком в производной по нормали v через ребро τ, h τ является длиной ребра τ, и сумма работает на основе Ei, набора всех внутренних ребер триангуляции. Коэффициенты α и β независимы от триангуляции. Связанный превращен в поэлементную ошибочную функцию индикатора E (K) для элемента K путем подведения итогов вкладов от его ребер.
Общая форма ошибочного индикатора функционирует для эллиптического уравнения
– ∇ · (c ∇u) + au = f | (1) |
где модуль, нормальный из ребра, τ и заключенный в фигурные скобки термин являются скачком в движении через ребро элемента. L 2 нормы вычисляется по элементу K. pdejmps
функция вычисляет этот ошибочный индикатор.
Улучшение mesh Partial Differential Equation Toolbox приспособлено к эллиптическим проблемам. Для точности и плохо создания условий, такие проблемы требуют, чтобы элементы не отклонились слишком много от того, чтобы быть равносторонним. Таким образом, даже в чрезвычайно одномерных функциях решения, таких как пограничные слои, метод улучшения должен гарантировать треугольники разумной формы.
Когда элемент усовершенствован, новые узлы появляются на его midsides, и если соседний треугольник не усовершенствован похожим способом, это, как говорят, имеет висящие узлы. Итоговая триангуляция не должна иметь никаких узлов зависания, и они удалены путем разделения соседних треугольников. Чтобы избежать дальнейшего ухудшения треугольного качества в последовательных поколениях, "самая длинная схема" деления пополам ребра используется в [3], в котором всегда разделяется самая длинная сторона треугольника, каждый раз, когда любая из сторон имеет висящие узлы. Это гарантирует, что никакой угол не еще меньше, чем половина самого маленького угла исходной триангуляции.
Существует два критериев выбора. Один, pdeadworst
, совершенствовал все элементы со значением ошибочного индикатора, больше, чем половина худшего из любого элемента. Другой, pdeadgsc
, совершенствовал все элементы со значением индикатора, превышающим заданный безразмерный допуск. Сравнение с допуском правильно масштабируется относительно области, размера решения, и так далее.
Для сглаженных решений ошибка equidistribution может быть достигнута pdeadgsc
выбор, если максимальное количество элементов является достаточно большим. pdeadworst
адаптация только завершает работу, когда максимальное количество элементов было превышено или когда предел итерации достигнут. Этот режим является естественным, когда решение показывает сингулярность. Ошибочный индикатор элементов рядом с сингулярностью никогда не может исчезать, независимо от размера элемента, делая equidistribution невозможный.
[1] Джонсон, C. Числовое решение дифференциальных уравнений с частными производными методом конечных элементов. Лунд, Швеция: Studentlitteratur, 1987.
[2] Джонсон, C. и К. Эрикссон. Адаптивные методы конечных элементов для Параболических проблем I: Линейная проблема Модели. SIAM J. Numer. Анальный, 28, (1991), стр 43–77.
[3] Розенберг, I.G., и Ф. Стенджер. Нижняя граница на углах треугольников, созданных путем деления пополам самой длинной стороны. Математика Расчета. Vol 29, Номер 10, 1975, стр 390–395.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.