Журнал вычислительной математики и математической физики, 2020, T. 60, № 4, стр. 652-662

Оптимизация конечно-разностной схемы для численного решения уравнения гельмгольца

В. И. Костин 1*, С. А. Соловьев 1

1 ИНГГ СО РАН
630090 Новосибирск, пр-т Акад. Коптюга, 3, Россия

* E-mail: KostinVI@ipgg.sbras.ru

Поступила в редакцию 14.11.2019
После доработки 14.11.2019
Принята к публикации 16.12.2019

Полный текст (PDF)

Аннотация

В настоящей работе мы предлагаем метод оптимизации разностной схемы для численного решения уравнения Гельмгольца, который применим при любых отношениях шагов сетки. В интересном для практических применений интервале значений параметра ’число точек на длину волны’ дисперсионная ошибка оптимальной схемы сравнима с ошибкой известных в литературе схем повышенного порядка аппроксимации. Библ. 13. Фиг. 11. Табл. 2.

Ключевые слова: уравнение Гельмгольца, конечно-разностные схемы, численная дисперсия, оптимизация.

1. ВВЕДЕНИЕ

Развитие методов численного моделирования акустических волновых полей мотивируется их приложениями в задачах обращения (см. [1]–[4]). Обратные задачи часто формулируются как поиск минимума функционала, который замеряет уклонение значений смоделированного волнового поля от зарегистрированных данных в приемниках. “Смоделированное волновое поле” означает результат расчета прямой задачи для заданной модели (скорости звука в среде). Модель является основным аргументом функционала, и способ решения обратной задачи по сути представляет собой отыскание значения аргумента, доставляющего функционалу минимальное значение. Эффективность алгоритма обращения напрямую зависит от производительности и эффективности алгоритмов решения прямой задачи, которое требуется на каждом шаге итерационного процесса минимизации.

В данной работе моделирование волновых полей рассматривается в частотной области. Для аппроксимации дифференциальных уравнений выбран метод конечных разностей на эквидистантных сетках. Таким образом, прямая задача представляется системой линейных уравнений с разреженной матрицей коэффициентов. В трехмерных задачах порядок матрицы огромен, и это обстоятельство зачастую играет решающую роль. Порядок матрицы напрямую зависит от шагов разностной сетки, использованием разных шагов вдоль различных осей иногда удается уменьшить размер матрицы, снизив тем самым вычислительные затраты.

Другая сторона того же самого вопроса – это точность получаемого решения прямой задачи. В качестве соответствующей метрики мы используем величину дисперсионной ошибки. Эта метрика, вычисляемая для случая однородной среды, с определенными предостережениями применима и для неоднородных сред, если параметр ppw (число точек на длину волны) рассматривается в определенном интервале значений. Тривиальным способом уменьшения дисперсионной ошибки является использование более мелких шагов разностной сетки, но такой путь может оказаться неприемлемым в силу непомерных затрат.

Для уменьшения дисперсионной ошибки мы используем подход, описанный в [5] (см. также [6]). Трехмерное уравнение Гельмгольца аппроксимируется на 27-точечном шаблоне, полученном путем комбинации нескольких стандартных шаблонов. Существенно, что аппроксимация значения функции вне оператора дифференцирования также происходит на всем шаблоне. Таким образом, получается пяти-параметрическое семейство разностных схем. Значения параметров можно подобрать так, что в интересном для приложений диапазоне значений ppw дисперсионная ошибка полученной схемы второго порядка оказывается значительно лучше, чем для стандартной схемы. Полученная таким образом оптимизированная разностная схема по своей структуре и свойствам близка к схемам повышенного порядка аппроксимации (см. [7]–[10]), но наш подход выгодно отличается своей регулярностью – коэффициенты получаются в результате работы алгоритма оптимизации.

Для решения задачи оптимизации мы комбинируем классический градиентный метод и симплекс-метод (см. [11], [12]), не требующий вычисления производных. Целевая функция ожидаемо многоэкстремальна. Для повышения надежности результата в процесс встроена рандомизация.

2. 27-ТОЧЕЧНЫЙ ШАБЛОН ДЛЯ УРАВНЕНИЯ ГЕЛЬМГОЛЬЦА

Рассмотрим трехмерное уравнение Гельмгольца в однородной среде

(2.1)
$Lu = \Delta u + \frac{{{{\omega }^{2}}}}{{{{c}^{2}}}}u = f(x).$
Здесь $u(x,y,z)$ – неизвестная функция, $\Delta = \tfrac{{{{\partial }^{2}}}}{{\partial {{x}^{2}}}} + \tfrac{{{{\partial }^{2}}}}{{\partial {{y}^{2}}}} + \tfrac{{{{\partial }^{2}}}}{{\partial {{z}^{2}}}}$ – оператор Лапласа, $\omega $ – угловая частота, $c$ – (постоянная) скорость звука, $f(x)$ – функция источника (она исключается из дальнейших рассмотрений).

Введем в рассмотрение эквидистантную разностную сетку с шагами ${{h}_{1}},\;{{h}_{2}},\;{{h}_{3}}$. Узлами этой сетки являются точки с координатами $({{x}_{i}},{{y}_{j}},{{z}_{k}})$, пропорциональными соответствующим шагам сетки ${{x}_{i}} = i{{h}_{1}},$ ${{y}_{j}} = j{{h}_{2}},$ ${{z}_{k}} = k{{h}_{3}}$ с целыми коэффициентами $i,j,k$; значения $u({{x}_{i}},{{y}_{j}},{{z}_{k}})$ неизвестной функции в узлах сетки обозначаются ${{u}_{{ijk}}}$. Для конечно-разностной аппроксимации оператора $L$ уравнения (2.1) мы используем оператор ${{L}^{{(h)}}} = {{\Delta }^{{(h)}}} + \tfrac{{{{\omega }^{2}}}}{{{{c}^{2}}}}{{M}^{{(h)}}}$, где

(2.2)
$\begin{gathered} {{\Delta }^{{(h)}}} = {{\gamma }_{1}}{{\Delta }^{{(1,h)}}} + {{\gamma }_{2}}{{\Delta }^{{(2,h)}}} + {{\gamma }_{3}}{{\Delta }^{{(3,h)}}}, \\ {{M}^{{(h)}}} = {{w}_{1}}{{M}^{{(1,h)}}} + {{w}_{2}}{{M}^{{(2,h)}}} + {{w}_{3}}{{M}^{{(3,h)}}} + {{w}_{4}}{{M}^{{(4,h)}}}. \\ \end{gathered} $
Здесь ${{\Delta }^{{(1)}}}$, ${{\Delta }^{{(2)}}}$, ${{\Delta }^{{(3)}}}$ представляют собой аппроксимации оператора Лапласа разностными операторами с шаблонами, проиллюстрированными на фиг. 1. Там изображены три варианта шаблона для аппроксимации со вторым порядком второй производной ${{u}_{{zz}}}$ в центральной точке $(i,j,k)$ параллелепипеда: (1) иллюстрирует классическое трехточечное разностное отношение; на шаблоне (2) среднее арифметическое трехточечных отношений вдоль центральных линий граней; шаблон (3) использует ту же самую идею, но трехточечные разности берутся вдоль ребер. Скалярные весовые множители ${{\gamma }_{1}},{{\gamma }_{2}},{{\gamma }_{3}}$ подчинены условию ${{\gamma }_{1}} + {{\gamma }_{2}} + {{\gamma }_{3}} = 1$. Отметим, что положительность весов формально не требуется. Три варианта шаблонов для аппроксимации частной производной ${{u}_{{xx}}}$ и три варианта для ${{u}_{{yy}}}$ получаются аналогично.

Фиг. 1.

Шаблоны для разностной аппроксимации второй производной ${{u}_{{zz}}}$ в центральной точке шаблона (белый шар на (2) и (3)).

Операторы ${{M}^{{(j,h)}}}$ представляют собой взятие среднего арифметического значений сеточной функции в точках, представленных черными шарами на соответствующих рисунках фиг. 2. Таким образом, в отличие от фиг. 1, шаблоны фиг. 2 полные. Подобно множителям ${{\gamma }_{j}}$ веса ${{w}_{j}}$ подчинены условию ${{w}_{1}} + {{w}_{2}} + {{w}_{3}} + {{w}_{4}} = 1$ и также не обязаны быть положительными.

Фиг. 2.

Шаблоны операторов $M_{j}^{{(h)}}$ (вторая строка в формуле (2.2)). Усреднения производятся по узлам, обозначенным черными шарами. Белый шар обозначает центр шаблона и не участвует в усреднениях.

Все рассмотренные шаблоны на фиг. 1 и 2 не выходят за пределы 27-точечного параллелепипеда. Соответственно шаблон оператора ${{L}^{{(h)}}}$ также получается 27-точечным.

3. ДИСПЕРСИОННАЯ ОШИБКА

Для дальнейшего нам понадобятся выражения для символов операторов, определяемых шаблонами фиг. 1 и фиг. 2. Для их получения мы действуем соответствующим разностным оператором на сеточную плоскую волну

$u_{{ijk}}^{{(pw)}} = {{e}^{{\sqrt { - 1} ({{\xi }_{1}}i{{h}_{1}} + {{\xi }_{2}}j{{h}_{2}} + {{\xi }_{3}}k{{h}_{3}})}}}.$
Для шаблонов, изображенных на фиг. 1, получим
$\begin{gathered} {{S}_{{{{\Delta }^{{(1,h)}}}}}}(\xi ;p) = - \frac{4}{{{{h}^{2}}}}\left( {\frac{{si{{n}^{2}}\pi p{{s}_{1}}\tfrac{{{{\xi }_{1}}}}{{{\text{|}}\xi {\text{|}}}}}}{{s_{1}^{2}}} + \frac{{si{{n}^{2}}\pi p{{s}_{2}}\tfrac{{{{\xi }_{2}}}}{{{\text{|}}\xi {\text{|}}}}}}{{s_{2}^{2}}} + \frac{{si{{n}^{2}}\pi p{{s}_{3}}\tfrac{{{{\xi }_{3}}}}{{{\text{|}}\xi {\text{|}}}}}}{{s_{3}^{2}}}} \right), \\ {{S}_{{{{\Delta }^{{(2,h)}}}}}}(\xi ;p) = - \frac{4}{{{{h}^{2}}}}\left( {\frac{{si{{n}^{2}}\pi p{{s}_{1}}\tfrac{{{{\xi }_{1}}}}{{{\text{|}}\xi {\text{|}}}}}}{{s_{1}^{2}}}\frac{{cos2\pi p{{s}_{3}}\tfrac{{{{\xi }_{3}}}}{{{\text{|}}\xi {\text{|}}}} + cos2\pi p{{s}_{2}}\tfrac{{{{\xi }_{2}}}}{{{\text{|}}\xi {\text{|}}}}}}{2}} \right. + \frac{{si{{n}^{2}}\pi p{{s}_{2}}\tfrac{{{{\xi }_{2}}}}{{{\text{|}}\xi {\text{|}}}}}}{{s_{2}^{2}}} \times \\ \end{gathered} $
(3.1)
$\begin{gathered} \, \times \;\frac{{cos2\pi p{{s}_{1}}\tfrac{{{{\xi }_{1}}}}{{{\text{|}}\xi {\text{|}}}} + cos2\pi p{{s}_{3}}\tfrac{{{{\xi }_{3}}}}{{{\text{|}}\xi {\text{|}}}}}}{2}\left. { + \frac{{si{{n}^{2}}\pi p{{s}_{3}}\tfrac{{{{\xi }_{3}}}}{{{\text{|}}\xi {\text{|}}}}}}{{s_{3}^{2}}}\frac{{cos2\pi p{{s}_{1}}\tfrac{{{{\xi }_{1}}}}{{{\text{|}}\xi {\text{|}}}} + cos2\pi p{{s}_{2}}\tfrac{{{{\xi }_{2}}}}{{{\text{|}}\xi {\text{|}}}}}}{2}} \right), \\ \\ \end{gathered} $
$\begin{gathered} {{S}_{{{{\Delta }^{{(3,h)}}}}}}(\xi ;p) = - \frac{4}{{{{h}^{2}}}}\left( {\frac{1}{{s_{1}^{2}}}si{{n}^{2}}\pi p{{s}_{1}}\frac{{{{\xi }_{1}}}}{{{\text{|}}\xi {\text{|}}}}cos2\pi p{{s}_{2}}\frac{{{{\xi }_{2}}}}{{{\text{|}}\xi {\text{|}}}}cos2\pi p{{s}_{3}}\frac{{{{\xi }_{3}}}}{{{\text{|}}\xi {\text{|}}}}} \right. + \frac{1}{{s_{2}^{2}}}si{{n}^{2}}\pi p{{s}_{2}}\frac{{{{\xi }_{2}}}}{{{\text{|}}\xi {\text{|}}}}\; \times \\ \, \times cos2\pi p{{s}_{1}}\frac{{{{\xi }_{1}}}}{{{\text{|}}\xi {\text{|}}}}cos2\pi p{{s}_{3}}\frac{{{{\xi }_{3}}}}{{{\text{|}}\xi {\text{|}}}}\left. { + \frac{1}{{s_{3}^{2}}}si{{n}^{2}}\pi p{{s}_{3}}\frac{{{{\xi }_{3}}}}{{{\text{|}}\xi {\text{|}}}}cos2\pi p{{s}_{1}}\frac{{{{\xi }_{1}}}}{{{\text{|}}\xi {\text{|}}}}cos2\pi p{{s}_{2}}\frac{{{{\xi }_{2}}}}{{{\text{|}}\xi {\text{|}}}}} \right). \\ \end{gathered} $
В этих формулах $\xi = \mathop {\left( {{{\xi }_{1}},{{\xi }_{2}},{{\xi }_{3}}} \right)}\nolimits^t $, ${\text{|}}\xi {\text{|}} = \sqrt {\xi _{1}^{2} + \xi _{2}^{2} + \xi _{3}^{2}} $, символ ${{S}_{{{{\Delta }^{{(j,h)}}}}}}(\xi ;p)$ оператора ${{\Delta }^{{(j,h)}}}$, $j = 1,2,3$, связан с ним следующим соотношением
${{\Delta }^{{(j,h)}}}{{u}^{{(pw)}}} = {{S}_{{{{\Delta }^{{(j,h)}}}}}}(\xi ;p){{u}^{{(pw)}}}.$
В обозначениях символов явно прописана зависимость от параметра $p$, смысл которого объяснен ниже. Кроме того, использованы обозначения
$h = max({{h}_{1}},{{h}_{2}},{{h}_{3}}),\quad {{s}_{1}} = \frac{{{{h}_{1}}}}{h},\quad {{s}_{2}} = \frac{{{{h}_{2}}}}{h},\quad {{s}_{3}} = \frac{{{{h}_{3}}}}{h}.$
С учетом тождества $\tfrac{\omega }{{c{\text{|}}\xi {\text{|}}}} = 1$ выражения ${\text{|}}\xi {\text{|}}h$ приведены к виду ${\text{|}}\xi {\text{|}}h = 2\pi p$, где $p = 1{\text{/}}G$, а $G$ – это число точек на длину волны вдоль направления, определяемого наибольшим шагом сетки. Символ оператора ${{\Delta }^{{(h)}}} = {{\gamma }_{1}}{{\Delta }^{{(1,h)}}} + {{\gamma }_{2}}{{\Delta }^{{(2,h)}}} + {{\gamma }_{3}}{{\Delta }^{{(3,h)}}}$ есть линейная комбинация
${{S}_{{{{\Delta }^{{(h)}}}}}}(\xi ;p;\gamma ) = {{\gamma }_{1}}S_{\Delta }^{{(1)}}(\xi ;p) + {{\gamma }_{2}}S_{\Delta }^{{(2)}}(\xi ;p) + {{\gamma }_{3}}S_{\Delta }^{{(3)}}(\xi ;p)$
символов (3.1). Здесь $\gamma $ обозначает векторный параметр с компонентами ${{\gamma }_{1}},\;{{\gamma }_{2}},\;{{\gamma }_{3}}$.

Символ оператора ${{M}^{{(h)}}}$ является линейной комбинацией

(3.2)
${{S}_{{{{M}^{{(h)}}}}}}(\xi ;p;w) = {{w}_{1}}{{S}_{{{{M}^{{(1,h)}}}}}}(\xi ;p) + {{w}_{2}}{{S}_{{{{M}^{{(2,h)}}}}}}(\xi ;p) + {{w}_{3}}{{S}_{{{{M}^{{(3,h)}}}}}}(\xi ;p) + {{w}_{4}}{{S}_{{{{M}^{{(4,h)}}}}}}(\xi ;p)$
символов
$\begin{gathered} {{S}_{{{{M}^{{(1,h)}}}}}}(\xi ;p) = 1, \\ {{S}_{{{{M}^{{(2,h)}}}}}}(\xi ;p) = \frac{1}{3}\left( {cos2\pi p{{s}_{1}}\frac{{{{\xi }_{1}}}}{{{\text{|}}\xi {\text{|}}}} + cos2\pi p{{s}_{2}}\frac{{{{\xi }_{2}}}}{{{\text{|}}\xi {\text{|}}}} + cos2\pi p{{s}_{3}}\frac{{{{\xi }_{3}}}}{{{\text{|}}\xi {\text{|}}}}} \right), \\ {{S}_{{{{M}^{{(3,h)}}}}}}(\xi ;p) = \frac{1}{3}\left( {cos2\pi p{{s}_{3}}\frac{{{{\xi }_{3}}}}{{{\text{|}}\xi {\text{|}}}}cos2\pi p{{s}_{1}}\frac{{{{\xi }_{1}}}}{{{\text{|}}\xi {\text{|}}}} + cos2\pi p{{s}_{2}}\frac{{{{\xi }_{2}}}}{{{\text{|}}\xi {\text{|}}}}cos2\pi p{{s}_{3}}\frac{{{{\xi }_{3}}}}{{{\text{|}}\xi {\text{|}}}}} \right.\left. { + cos2\pi p{{s}_{1}}\frac{{{{\xi }_{1}}}}{{{\text{|}}\xi {\text{|}}}}cos2\pi p{{s}_{2}}\frac{{{{\xi }_{2}}}}{{{\text{|}}\xi {\text{|}}}}} \right), \\ {{S}_{{{{M}^{{(4,h)}}}}}}(\xi ;p) = cos2\pi p{{s}_{1}}\frac{{{{\xi }_{1}}}}{{{\text{|}}\xi {\text{|}}}}cos2\pi p{{s}_{2}}\frac{{{{\xi }_{2}}}}{{{\text{|}}\xi {\text{|}}}}cos2\pi p{{s}_{3}}\frac{{{{\xi }_{3}}}}{{{\text{|}}\xi {\text{|}}}}. \\ \end{gathered} $
В выражении ${{S}_{{{{M}^{{(h)}}}}}}(\xi ;p;w)$ (см. (3.2)) параметр $w$ обозначает вектор с компонентами ${{w}_{1}}$, ${{w}_{2}}$, ${{w}_{3}}$, ${{w}_{4}}$.

Дисперсионное соотношение для оператора ${{L}^{{(h)}}}$ принимает вид

(3.3)
${{S}_{{{{\Delta }^{h}}}}}(\xi ;p;\gamma ) + \frac{{{{\omega }^{2}}}}{{{{c}^{2}}}}{{S}_{{{{M}^{{(h)}}}}}}(\xi ;p;w) = 0.$
Если параметры $\omega ,\;c,\;\xi $ конечно-разностной плоской волны подчинены соотношению (3.3), то отношение $\tfrac{\omega }{{{\text{|}}\xi {\text{|}}}}$ имеет смысл скорости ${{c}_{{num}}}$ распространения конечно-разностной волны. Соответственно выражение $\tfrac{\omega }{{c{\text{|}}\xi {\text{|}}}}$ представляет собой дисперсию скорости конечно-разностной волны, а разность $\tfrac{\omega }{{c{\text{|}}\xi {\text{|}}}} - 1$ можно назвать дисперсионной ошибкой. Для плоской волны, распространяющейся в направлении вектора $\xi $, формула для дисперсионной ошибки принимает вид

(3.4)
$e(\xi ;p;\gamma ;w) = \frac{1}{{\pi p}}\sqrt {\frac{{{{\gamma }_{1}}{{S}_{{{{\Delta }^{{(1,h)}}}}}} + {{\gamma }_{2}}{{S}_{{{{\Delta }^{{(2,h)}}}}}} + {{\gamma }_{3}}{{S}_{{{{\Delta }^{{(3,h)}}}}}}}}{{{{w}_{1}}{{S}_{{{{M}^{{(1,h)}}}}}} + {{w}_{2}}{{S}_{{{{M}^{{(2,h)}}}}}} + {{w}_{3}}{{S}_{{{{M}^{{(3,h)}}}}}} + {{w}_{4}}{{S}_{{{{M}^{{(4,h)}}}}}}}}} - 1.$

Формула (3.4) дает выражение для дисперсионной ошибки плоской волны, распространяющейся в направлении вектора $\xi $ и для выбранного значения параметра $p$. Используем равномерную метрику по параметрам $p$, $\xi $ для того, чтобы получить функцию

(3.5)
Оптимальные значения весов отыскиваются как решение задачи

(3.6)

В [5] вместо (3.5) используется функция

$F({{\gamma }_{1}},{{\gamma }_{2}},{{\gamma }_{3}},{{w}_{1}},{{w}_{2}},{{w}_{3}},{{w}_{4}}) = \int\limits_{{{p}_{{{\text{min}}}}}}^{{{p}_{{{\text{max}}}}}} {dp\iint\limits_{|\xi | = 1} {{\text{|}}e(\xi ;p;\gamma ;w){{{\text{|}}}^{2}}dS}} .$
Определенным преимуществом такого подхода является гладкость функции $F$ и, как следствие, возможность использования классических методов оптимизации. В частности, градиент $F$ можно вычислить, дифференцируя интеграл по параметрам. Мы предпочитаем иметь дело с функцией $J$.

4. ВЫЧИСЛЕНИЕ ФУНКЦИИ $J(\gamma ,w)$

Графики дисперсионной ошибки, как функции сферических углов $\phi ,\;\theta $, параметризующих сферу ${\text{|}}\xi {\text{|}} = 1$, изображены на фиг. 3 для двух наборов весовых параметров. Видно, что дисперсионная ошибка кусочно-гладкая, имеет множество локальных максимумов и при значениях весов, близких к оптимальным, гладкость функции ухудшается.

Фиг. 3.

Дисперсионная ошибка при $p = 0.2$ как функция сферических углов $\theta ,\phi $. (а) – классическая 7-точечная аппроксимация $\gamma = (1,0,0),$ $w = (1,0,0,0).$ (б) – схема для весов $\gamma = (0.6558,0.2945,0.0497),$ $w = (0.5756,0.1874,0.3588, - 0.1219).$

Разрывы производных дисперсионной ошибки происходят в тех точках, где она равна нулю. Поэтому такого рода особенности не должны мешать поиску максимумов (3.5) градиентным методом.

Чтобы избежать громоздких выкладок по вычислению частных производных функции (3.4) аналитически, мы считаем их численно. Для этого организуем процесс вычисления последовательности разностных отношений на уменьшающихся приращениях аргументов до стабилизации значений этих отношений. Очевидной платой за это является несущественное увеличение времени счета.

При применении градиентных методов, имея направление градиента, нужно еще определить величину шага. На текущем значении шага мы вычисляем следующую точку и значение целевой функции в ней. Если значение целевой функции оказалось меньше, чем в текущей точке, новая точка не принимается, длина шага делится пополам и процесс повторяется с уменьшающимися шагами до тех пор, пока не получится найти большее значение или шаг не станет совсем маленьким, и будет найдена стационарная точка. Если же значение оказалось больше, то точка принимается, текущий шаг удваивается, в новой точке вычисляется градиент и процесс повторяется. Удвоение шага предусмотрено для того, чтобы в результате каких-то не очень удачных шагов не случилось так, что процесс идет с очень мелким шагом. Для того, чтобы не выйти за границы области по $p$, в случае если $p$-компонента вектора перемещения велика, мы укорачиваем длину шага так, чтобы не слишком сильно приблизиться к границе. Следует также учесть периодичность функции дисперсионной ошибки от сферических углов, добиваясь того, что точка всегда находится на основной карте $0 \leqslant \theta \leqslant \pi ,$ $0 \leqslant \phi < 2\pi $.

Градиентный метод оптимизации останавливается в точках локальных максимумов. Для поиска глобального максимума, который требуется в (3.5), мы применяем рандомизацию. Мы $K$ раз стартуем градиентный метод, используя в качестве стартовых точек случайно выбранные точки. Для получения надежных результатов значение $K$ должно быть достаточно большим. Экспериментально выяснено, что $K = 20$ – недостаточно, $K = 80$ – уже достаточно. При малых значениях $K$ решение задачи минимизации по весам $\gamma ,w$ получается нестабильным.

5. СИМПЛЕКС-МЕТОД

Для удобства читателя в этом разделе мы кратко излагаем элементы алгоритма безградиентной минимизации из [12], впервые предложенного в [11].

Рассматривается задача минимизации без ограничений вещественно-значной непрерывной функции $f({\mathbf{x}}),\;{\mathbf{x}} \in {{R}^{n}}$. Решение задачи осуществляется путем построения невырожденных симплексов, сходящихся к точке локального минимума. На $k$-м шаге симплекс ${{\Delta }_{k}}$ задан своим $n + 1$ вершинами ${\mathbf{x}}_{1}^{{(k)}},{\mathbf{x}}_{2}^{{(k)}}, \ldots ,{\mathbf{x}}_{{n + 1}}^{{(k)}}$.

Каждый шаг начинается с упорядочивания вершин ${{\Delta }_{k}}$ так, чтобы

(5.1)
$f_{1}^{{(k)}} \leqslant f_{2}^{{(k)}} \leqslant \cdots \leqslant f_{n}^{{(k)}} \leqslant f_{{n + 1}}^{{(k)}}.$
Здесь $f_{j}^{{(k)}},\;1 \leqslant j \leqslant n + 1,$ обозначает $f({\mathbf{x}}_{j}^{{(k)}})$. Вершина ${\mathbf{x}}_{1}^{{(k)}}$ называется лучшей вершиной, вершина ${\mathbf{x}}_{{n + 1}}^{{(k)}}$худшей вершиной, вершина ${\mathbf{x}}_{n}^{{(k)}}$следующей за худшей. Подобным образом, значение $f_{{n + 1}}^{{(k)}}$ называется худшим значением функции, и т.п. Результатом $k$-го шага будет симплекс ${{\Delta }_{{k + 1}}}$, который соотносится с симплексом ${{\Delta }_{k}}$ одним из двух способов:

${{\Delta }_{{k + 1}}}$ и ${{\Delta }_{k}}$ имеют общую грань, образованную $n$ общими вершинами ${\mathbf{x}}_{1}^{{(k)}},{\mathbf{x}}_{2}^{k}, \ldots ,{\mathbf{x}}_{n}^{{(k)}}$;

${{\Delta }_{{k + 1}}}$ и ${{\Delta }_{k}}$ имеют одну общую вершину ${\mathbf{x}}_{1}^{{(k)}}$ (лучшая вершина в ${{\Delta }_{k}}$).

Оригинальный критерий остановки процесса, предлагаемый авторами, выглядит так

(5.2)
$\sqrt {\frac{{\sum\limits_{i = 1}^n {\mathop {\left[ {f({{{\mathbf{x}}}_{i}}) - f({\mathbf{\bar {x}}})} \right]}\nolimits^2 } }}{n}} < \eta ,$
где ${\mathbf{\bar {x}}} = \sum\nolimits_{i = 1}^n \,{{{\mathbf{x}}}_{i}}{\text{/}}n$ – центр $(n - 1)$-мерной грани симплекса. Мы дополняем его еще тремя условиями – в нашем варианте вычисления продолжаются, пока выполняются следующие четыре условия.

1. Среднеквадратичное уклонение значений функции в точках симплекса превышает установленный порог (см. (5.2)).

2. Отношение объема текущего симплекса к объему исходного симплекса превышает установленный порог.

3. Обусловленность матрицы, определяемой ребрами симплекса, выходящими из худшей вершины, не превышает установленный порог.

4. Число сделанных шагов не превосходит некоторого предела.

Точки, в которых симплекс-метод останавливается по нарушению первого условия, претендуют на то, чтобы быть стационарными точками функции $f({\mathbf{x}})$ (локальными минимумами). Для того, чтобы приблизиться к глобальному минимуму в процесс минимизации, мы включаем рандомизацию. Вновь найденная стационарная точка получает небольшое случайное возмущение, и процесс вновь стартует с новой начальной точки. После следующей остановки нужно сравнить значение целевой функции в новой стационарной точке с предыдущим значением.

Несмотря на огромную популярность симплекс-метода, его сходимость может вызывать нарекания (см., например, [13]).

5.1. Один шаг алгоритма Нелдера–Мида

В описании алгоритма используются несколько скалярных параметров $\rho ,\;\chi ,\;\gamma ,\;\sigma $. Универсальные рекомендованные (авторами) значения этих параметров:

$\rho = 1,\quad \chi = 2,\quad \gamma = 0.5,\quad \sigma = 0.5.$
Ниже в описаниях индекс $k$, обозначающий номер шага процесса, опущен. Как уже упоминалось выше, упорядочение вершин (5.1) предваряет работу с каждым симплексом.

Основная операция, которая проделывается с каждым вновь построенным симплексом после упорядочивания его вершин, – это операция отражения наихудшей вершины. Под этим имеется в виду построение точки ${{{\mathbf{x}}}_{r}}$ по следующей формуле:

${{{\mathbf{x}}}_{r}} = {\mathbf{\bar {x}}} + \rho ({\mathbf{\bar {x}}} - {{{\mathbf{x}}}_{{n + 1}}}) = (1 + \rho ){\mathbf{\bar {x}}} - \rho {{{\mathbf{x}}}_{{n + 1}}}.$
Здесь ${\mathbf{\bar {x}}} = \sum\nolimits_{i = 1}^n \,{{{\mathbf{x}}}_{i}}{\text{/}}n$ – центр грани, противоположной наихудшей вершине. Точка ${{{\mathbf{x}}}_{r}}$ называется отражением точки ${{{\mathbf{x}}}_{{n + 1}}}$ относительно центра ${\mathbf{\bar {x}}}$ с коэффициентом отражения $\rho > 0$. Значение целевой функции в точке ${{{\mathbf{x}}}_{r}}$ обозначается через ${{f}_{r}}$. В зависимости от соотношений между ${{f}_{r}}$ и ${{f}_{1}}$, ${{f}_{n}}$, ${{f}_{{n + 1}}}$ последующий симплекс получается из предыдущего в результате операций отражения, расширения, сокращения или сжатия, описываемых ниже. Эти операции проиллюстрированы на фиг. 4–8, на которых текущий симплекс изображен пунктиром.

Фиг. 4.

Отражение.

Фиг. 5.

Расширение.

Фиг. 6.

Внешнее сокращение.

Фиг. 7.

Внутреннее сокращение.

Фиг. 8.

Сжатие.

1. ${{f}_{1}} \leqslant {{f}_{r}} < {{f}_{n}}$.

Новый симплекс строится на точках ${{{\mathbf{x}}}_{1}},{{{\mathbf{x}}}_{2}}, \ldots ,{{{\mathbf{x}}}_{n}}$ и ${{{\mathbf{x}}}_{r}}$ (см. фиг. 4). Иначе говоря, точка ${{{\mathbf{x}}}_{r}}$ замещает точку ${{{\mathbf{x}}}_{{n + 1}}}$. Операция называется отражением.

2. ${{f}_{r}} < {{f}_{1}}$.

Вычислим точку ${{{\mathbf{x}}}_{e}}$ по формуле

${{{\mathbf{x}}}_{e}} = {\mathbf{\bar {x}}} + \chi ({{{\mathbf{x}}}_{r}} - {\mathbf{\bar {x}}}) = (1 + \rho \chi ){\mathbf{\bar {x}}} - \rho \chi {{{\mathbf{x}}}_{{n + 1}}},$
в которой коэффициент расширения $\chi > 1$ (см. фиг. 5) и значение ${{f}_{e}}$ целевой функции в ней. Если оказалось, что ${{f}_{e}} < {{f}_{r}}$, точка ${{{\mathbf{x}}}_{e}}$ замещает ${{{\mathbf{x}}}_{{n + 1}}}$ (операция расширение, см. фиг. 5). Иначе (${{f}_{e}} \geqslant {{f}_{r}}$) точка ${{{\mathbf{x}}}_{r}}$ замещает ${{{\mathbf{x}}}_{{n + 1}}}$ (см. фиг. 4).

3. ${{f}_{n}} \leqslant {{f}_{r}} < {{f}_{{n + 1}}}$.

Вычислить

${{{\mathbf{x}}}_{c}} = {\mathbf{\bar {x}}} + \gamma ({{{\mathbf{x}}}_{r}} - {\mathbf{\bar {x}}}) = {\mathbf{\bar {x}}} + \gamma \rho ({\mathbf{\bar {x}}} - {{{\mathbf{x}}}_{{n + 1}}}) = (1 + \rho \gamma ){\mathbf{\bar {x}}} - \rho \gamma {{{\mathbf{x}}}_{{n + 1}}}$
и ${{f}_{c}} = f({{{\mathbf{x}}}_{c}})$. Если ${{f}_{c}} \leqslant {{f}_{r}}$, точка ${{{\mathbf{x}}}_{c}}$ замещает ${{{\mathbf{x}}}_{{n + 1}}}$ (операция внешнее сокращение, см. фиг. 6). Иначе идти на шаг 5.

4. ${{f}_{r}} \geqslant {{f}_{{n + 1}}}$.

Вычислить точку

${{{\mathbf{x}}}_{{cc}}} = {\mathbf{\bar {x}}} - \gamma ({\mathbf{\bar {x}}} - {{{\mathbf{x}}}_{{n + 1}}}) = (1 - \gamma ){\mathbf{\bar {x}}} + \gamma {{{\mathbf{x}}}_{{n + 1}}}$
и значение ${{f}_{{cc}}} = f({{{\mathbf{x}}}_{{cc}}})$. Если ${{f}_{{cc}}} < {{f}_{{n + 1}}}$, точка ${{{\mathbf{x}}}_{{cc}}}$ замещает ${{{\mathbf{x}}}_{{n + 1}}}$ (операция внутреннее сокращение, см. фиг. 7). Иначе идти на шаг 5.

5. Операция сжатие.

Вычислить точки ${{{\mathbf{v}}}_{i}} = \sigma ({{{\mathbf{x}}}_{i}} - {{{\mathbf{x}}}_{1}}),i = 2,3, \ldots ,n + 1$ (см. фиг. 8) и значения $f({{{\mathbf{v}}}_{i}})$ целевой функции в них. Неупорядоченный набор вершин нового симплекса – это точки ${{{\mathbf{x}}}_{1}},{{{\mathbf{v}}}_{2}}, \ldots ,{{{\mathbf{v}}}_{{n + 1}}}$.

6. ЧИСЛЕННЫЕ ПРИМЕРЫ

В нашем первом примере все шаги сетки одинаковы, интервал по $p$ от 0.01 до 0.2, что соответствует условию “пять и более точек на длину волны”. Стартовое значение весовых параметров $\gamma = (0.6401,0.3285,0.0314)$, $w = (0.5365,0.3276,0.2051, - 0.0692)$, дисперсионная ошибка в стартовой точке равна $1.67 \times {{10}^{{ - 3}}}$.

В процесс вычисления $J(\gamma ,w)$ мы включали рандомизацию, 80 раз ($K = 80$) стартуя градиентную максимизацию (по параметру $p$ и направлениям распространения плоской волны) дисперсионной ошибки. Включая рандомизацию в процесс минимизации $J(\gamma ,w)$, мы пять раз запускали симплекс-метод для того, чтобы минимизировать функцию $J(\gamma ,w)$. Как это описано в конце раздела, в качестве новой стартовой точки выбиралось некоторое случайное возмущение полученной стационарной точки. Результаты оптимизации представлены в пяти столбцах табл. 1. Значения в этой таблице приведены только с 8 значащими цифрами, но заметим, что в реальности весовые коэффициенты из разных столбцов совпадают с точностью до 16 знаков, значения целевой функции – с 10 знаками. Число шагов симплекс метода от стартовой до стационарной точки приведено в строке ${{n}_{{iter}}}$. В последней строке таблицы расположен номер критерия, по которому был остановлен симплекс метод. Во всех столбцах там располагается число 1, иначе говоря, процесс остановился в стационарной точке.

Таблица 1.  

Результаты минимизации $J$ с рандомизацией, $K = 80$

  1 2 3 4 5
${{\gamma }_{1}}$ 6.3762816e–01 6.3762816e–01 6.3762816e–01 6.3762816e–01 6.3762816e–01
${{\gamma }_{2}}$ 3.4050224e–01 3.4050224e–01 3.4050224e–01 3.4050224e–01 3.4050224e–01
${{\gamma }_{3}}$ 2.1869605e–02 2.1869605e–02 2.1869605e–02 2.1869605e–02 2.1869605e–02
${{w}_{1}}$ 5.2994692e–01 5.2994692e–01 5.2994692e–01 5.2994692e–01 5.2994692e–01
${{w}_{2}}$ 3.3065015e–01 3.3065015e–01 3.3065015e–01 3.3065015e–01 3.3065015e–01
${{w}_{2}}$ 2.1411544e–01 2.1411544e–01 2.1411544e–01 2.1411544e–01 2.1411544e–01
${{w}_{4}}$ –7.4712516e–02 –7.4712516e–02 –7.4712516e–02 –7.4712516e–02 –7.4712516e–02
$J$ 9.8063059e–04 9.8063059e–04 9.8063059e–04 9.8063059e–04 9.8063059e–04
${{n}_{{iter}}}$ 40 40 40 40 40
cond 1 1 1 1 1

На фиг. 9 изображены 100 кривых дисперсионной ошибки в зависимости от параметра $p$, соответствующих 100 случайным векторам распространения плоских волн. Ошибка вычислялась для оптимизированной разностной схемы с весами из табл. 1. Легко видеть, что для разностных сеток с числом точек на длину волны, равным пяти и больше, дисперсионная ошибка не превосходит 0.1%.

Фиг. 9.

Кривые дисперсионной ошибки для 100 случайных направлений распространения плоской волны. Значения весовых параметров взяты из табл. 1.

Наш второй численный пример касается разностной сетки с отношением шагов $1:3:5$. мы стартовали оптимизацию с классической семиточечной схемы $\gamma = (1,0,0),w = (1,0,0,0)$, используя $K = 100$. Как и раньше, полученная точка выбиралась в качестве стартовой для следующего шага. Можно вновь заметить стабилизацию результатов.

Кривые дисперсионной ошибки в зависимости от параметра $p$ для оптимизированной разностной схемы с весами из пятого столбца табл. 2 представлены на фиг. 10. Кривые построены для 100 случайно сгенерированных направлений распространения плоской волны. Как следует из фиг. 10, для разностных сеток с числом точек на длину волны, равным пяти и больше, дисперсионная ошибка не превосходит 0.1%.

Таблица 2.  

Стартовая точка $\gamma = (0,0,1),$ $w = (0,0,1,0)$, отношения шагов $1:3:5$, $K = 100$

  1 2 3 4 5
${{\gamma }_{1}}$ 1.0552907e 00 1.0402967e 00 1.0438812e 00 1.0438812e 00 1.0438812e 00
${{\gamma }_{2}}$ –4.8852983e–01 –4.5898080e–01 –4.6373782e–01 –4.6373782e–01 –4.6373782e–01
${{\gamma }_{3}}$ 4.3323910e–01 4.1868406e–01 4.1985659e–01 4.1985659e–01 4.1985659e–01
${{w}_{1}}$ 8.7931759e–01 8.7677602e–01 8.7668815e–01 8.7668815e–01 8.7668815e–01
${{w}_{2}}$ –5.7656463e–01 –5.7666694e–01 –5.7621443e–01 –5.7621443e–01 –5.7621443e–01
${{w}_{3}}$ 9.8042282e–01 9.8834169e–01 9.8769345e–01 9.8769345e–01 9.8769345e–01
${{w}_{4}}$ 2.8317579e–01 –2.8845077e–01 –2.8816716e–01 –2.8816716e–01 –2.8816716e–01
$J$ 1.0040185e–03 9.7661384e–04 9.7658910e–04 9.7658910e–04 9.7658910e–04
${{n}_{{iter}}}$ 39 45 41 39 39
cond 1 1 1 1 1
Фиг. 10.

Шаги по пространству относятся как $1:3:5$. Кривые дисперсионной ошибки для 100 случайных направлений распространения плоской волны. Значения весовых параметров взяты из последнего столбца табл. 2.

Кроме численной дисперсии, в решениях разностного уравнения также присутствует явление анизотропии, проиллюстрированное на фиг. 11. Дисперсионная ошибка оптимизированной схемы представлена в виде трехмерной поверхности, гомеоморфной сфере. Для ее получения соответствующий радиус-вектор был умножен на множитель $1 + a \cdot d$, где $d$ – дисперсионная ошибка в заданном направлении, $a$ – коэффициент растяжения. Для сравнения приведена также единичная сфера. Точки пересечения поверхности со сферой определяют направления с нулевой дисперсионной ошибкой, точки снаружи сферы соответствуют направлениям, для которых скорость распространения разностной плоской волны превышает истинную скорость звука. Соответственно точки внутри сферы относятся к направлениям, вдоль которых плоские разностные волны распространяются со скоростью, меньшей чем истинная скорость звука.

Фиг. 11.

Трехмерное представление дисперсионной ошибки. Шаги по пространству относятся как $1:3:5$. Значения весовых параметров взяты из последнего столбца табл. 2. Поверхность пересекается с единичной сферой, также изображенной на рисунке. Коэффициент растяжения $a = 300$.

Список литературы

  1. Pratt R.G., Worthington M.H. Inverse theory applied to multi-source cross-hole tomography. part 1: Acoustic wave-equation method // Geophys. Prospect. 1990. V. 38. № 3. P. 287–310.

  2. Virieux J., Operto S., Ben-Hadj-Ali H., Brosssier R., Etienne V., Sourber F., Giraud L., Haidar A. Seismic wave modeling for seismic imaging // The Leading Edge 2009. V. 28. P. 538–544.

  3. Belonosov M., Tcheverda V., Neklyudov D., Kostin V., Dmitriev M. 3D elastic frequency-domain iterative solver for full-waveform inversion // SEG Technical Program Expanded Abstracts 2016. Society of Exploration Geophysicists. P. 3825–3829.

  4. Bakulin A., Dmitriev M., Kostin V., Solovyev S. Benchmarking 3D time- and frequency-domain solvers for FWI applications for different cluster sizes and variable number of sources // SEG Technical Program Expanded Abstracts 2018. Society of Exploration Geophysicists. P. 3888–3892.

  5. Solovyev S., Vishnevsky D., Liu H. Multifrontal hierarchically semi-separable solver for 3D Helmholtz problem using 27-point finite-difference scheme // 77th EAGE Conference and Exhibition 2015.

  6. Jo C.-H., Shin C., Suh J.H. An optimal 9-point, finite-difference, frequency-space, 2-D scalar wave extrapolator // Geophysics. 1996. V. 61. № 2. P. 529–537.

  7. Singer I., Turkel E. High-order finite difference methods for the helmholtz equation // Comp. Method Appl. M. 1998. V. 163. № 1–4. P. 343–358.

  8. Nabavi M., Siddiqui K., Dargahi J. A new 9-point sixth-order accurate compact finite-difference method for the helmholtz equation // J. Sound Vib. 2007. V. 307. № 3–5. P. 972–982.

  9. Turkel E., Gordon D., Gordon R., Tsynkov S. Compact 2D and 3D sixth order schemes for the Helmholtz equation with variable wave number // J. Comp. Phys. 2013. V. 232. № 1. P. 272–287.

  10. Stolk C.C. A dispersion minimizing scheme for the 3-D Helmholtz equation based on ray theory // J. Comp. Phys. 2016. V. 314. P. 618–646.

  11. Nelder J.A., Mead R. A simplex method for function minimization // Comput. J. 1965. V. 7. № 4. P. 308–313.

  12. Lagarias J.C., Reeds J.A., Wright M.H., Wright P.E. Convergence properties of the Nelder–Mead simplex method in low dimensions // SIAM J. Optimiz. 1998. V. 9. № 1. P. 112–147.

  13. McKinnon K.I.M. Convergence of the Nelder–Mead simplex method to a nonstationary point // SIAM J. Optimiz. 1998. V. 9. № 1. P. 148–158.

Дополнительные материалы отсутствуют.