EssayAI
Блог
Блог
Математика и алгоритмы

Метод стрельбы для краевой задачи: алгоритм и пример

7 мая 2026Время чтения: 8 минут
#метод стрельбы#краевая задача#задача Коши#метод секущих#численные методы
Метод стрельбы для краевой задачи: алгоритм и пример

Метод стрельбы для краевой задачи - это приём, который сводит двухточечную краевую задачу к серии задач Коши. Идея в названии: мы «стреляем» из левого конца отрезка с некоторым углом (недостающим начальным условием), смотрим, куда снаряд прилетел на правом конце, и корректируем прицел, пока траектория не попадёт в заданную мишень. Так задача с условиями на двух концах превращается в задачу с условиями только в одной точке плюс уравнение на пристрелочный параметр. Ниже разберём, как формализовать «прицел», как считать невязку, чем брать корень - секущими или методом Ньютона - и где метод стрельбы начинает буксовать.

Постановка краевой задачи

Рассмотрим обыкновенное дифференциальное уравнение второго порядка на отрезке [a,b][a, b]:

y=f(x,y,y),y(a)=α,y(b)=β.y'' = f(x, y, y'), \qquad y(a) = \alpha, \quad y(b) = \beta.

В отличие от задачи Коши, где оба условия (yy и yy') заданы в одной точке, здесь по одному условию на каждом конце. Прямо интегрировать вперёд нельзя: в точке x=ax = a мы знаем y(a)=αy(a) = \alpha, но не знаем y(a)y'(a). Именно недостающий наклон y(a)y'(a) и становится тем параметром, которым мы «целимся». Двухточечные условия типичны для физических задач равновесия: прогиб балки, закреплённой на двух опорах, стационарное распределение температуры в стержне с заданными температурами на концах, форма провисающей нити.

Сведение к задаче Коши

Введём пристрелочный параметр ss - гипотетическое значение производной в левом конце: y(a)=sy'(a) = s. Теперь у нас полный набор начальных данных в одной точке:

y=f(x,y,y),y(a)=α,y(a)=s.y'' = f(x, y, y'), \qquad y(a) = \alpha, \quad y'(a) = s.

Это уже задача Коши, и её можно проинтегрировать любым одношаговым методом - Эйлера, Рунге-Кутты 4 порядка - от aa до bb. Уравнение второго порядка предварительно сводят к системе двух уравнений первого порядка заменой u=yu = y': получаем y=uy' = u, u=f(x,y,u)u' = f(x, y, u). Результат интегрирования зависит от выбранного ss, поэтому значение на правом конце естественно записать как функцию параметра: y(b)=y(b;s)y(b) = y(b; s). Цель метода стрельбы - подобрать такой ss, чтобы выполнилось второе краевое условие y(b;s)=βy(b; s) = \beta.

Tool: подбор пристрелочного параметра

Подбирать наклон ss вручную - это интегрировать задачу Коши заново при каждой пробной «стрельбе» и следить за невязкой: занятие точное, но утомительное. Опишите ниже своё уравнение и краевые условия, выберите метод подбора корня - и получите разбор: как свести к задаче Коши, как устроена функция невязки и как итерации сходятся к нужному ss.

Функция невязки и уравнение на параметр

Определим функцию невязки (residual) как отклонение полученного правого значения от целевого:

F(s)=y(b;s)β.F(s) = y(b; s) - \beta.

Краевая задача решена тогда и только тогда, когда F(s)=0F(s) = 0. Тем самым метод стрельбы свёл двухточечную задачу к скалярному нелинейному уравнению на один параметр. Каждое вычисление F(s)F(s) - это один полный «выстрел»: одно численное интегрирование задачи Коши от aa до bb. Дальше задача чисто алгебраическая: найти корень F(s)=0F(s) = 0. Чем меньше «выстрелов» потребует решатель корня, тем дешевле метод, ведь каждый вызов FF недёшев.

Думайте про $F(s)$ как про чёрный ящик «наклон на входе - промах на выходе». Внутренности (метод интегрирования, шаг $h$) на логику подбора корня не влияют - меняется только точность вычисления $F$.

Линейная задача: точное попадание за два выстрела

Если уравнение линейно, y=p(x)y+q(x)y+r(x)y'' = p(x) y' + q(x) y + r(x), то y(b;s)y(b; s) - линейная функция параметра ss, а значит и F(s)F(s) линейна. Через две точки прямая определяется однозначно, поэтому достаточно ровно двух пробных выстрелов s0s_0 и s1s_1 - а нужный корень получается линейной интерполяцией:

s=s0+(s1s0)βy(b;s0)y(b;s1)y(b;s0).s^* = s_0 + (s_1 - s_0)\,\frac{\beta - y(b; s_0)}{y(b; s_1) - y(b; s_0)}.

Третий выстрел с параметром ss^* попадёт в мишень с точностью самого метода интегрирования - никаких дальнейших итераций не нужно. Это резко отличает линейный случай от нелинейного: для линейной краевой задачи метод стрельбы конечен. Альтернатива для линейных задач - сразу строить разностную систему, не интегрируя; об этом подробно в статье про метод конечных разностей для уравнений.

Нелинейный случай: секущие и метод Ньютона

Если правая часть ff нелинейна по yy или yy', функция F(s)F(s) тоже нелинейна, и одной интерполяции мало - нужен итерационный поиск корня. Два рабочих варианта:

Метод секущих. Берём два стартовых наклона s0,s1s_0, s_1 и обновляем параметр по формуле секущей, не вычисляя производную:

sk+1=skF(sk)sksk1F(sk)F(sk1).s_{k+1} = s_k - F(s_k)\,\frac{s_k - s_{k-1}}{F(s_k) - F(s_{k-1})}.

Каждая итерация стоит один выстрел (значение FF с прошлого шага переиспользуется). Сходимость сверхлинейная (порядок 1,618\approx 1{,}618) - обычно достаточно 4–6 итераций.

Метод Ньютона. Если уметь считать производную F(s)=y(b;s)/sF'(s) = \partial y(b; s)/\partial s, шаг записывается как sk+1=skF(sk)/F(sk)s_{k+1} = s_k - F(s_k)/F'(s_k). Производную F(s)F'(s) получают, интегрируя рядом с основной так называемую вариационную задачу - систему на чувствительность решения к ss. Это удваивает стоимость выстрела, зато даёт квадратичную сходимость. На практике метод секущих чаще выигрывает: вариационную систему выписывать не нужно, а лишняя итерация дешевле лишнего интегрирования.

Многократная стрельба для устойчивости

У простого (одиночного) метода стрельбы есть ахиллесова пята: если решение задачи Коši растёт экспоненциально (а у краевых задач с большими коэффициентами это норма), то малая ошибка в ss раздувается к правому концу. Невязка F(s)F(s) становится гигантской и численно неустойчивой - «снаряд» улетает в бесконечность задолго до мишени. Лекарство - многократная стрельба (multiple shooting): отрезок [a,b][a, b] делят на подотрезки, на каждом стреляют независимо со своими параметрами, а на стыках добавляют условия непрерывности решения. Получается система уравнений на все пристрелочные параметры сразу, которую решают методом Ньютона. Экспоненциальный рост ограничен длиной короткого подотрезка, и устойчивость восстанавливается ценой большей системы.

Выбор стартовых параметров и шага

Качество стартовых s0,s1s_0, s_1 определяет, сойдётся ли итерация и куда. Полезные ориентиры:

  • Если ожидаемое решение примерно линейно, оцените наклон секущей между концами: s0(βα)/(ba)s_0 \approx (\beta - \alpha)/(b - a).
  • Возьмите s1s_1 заметно отличным от s0s_0, чтобы знаки F(s0)F(s_0) и F(s1)F(s_1) по возможности различались - тогда корень заведомо между ними.
  • Шаг интегрирования hh задавайте достаточно мелким: ошибка в F(s)F(s) не должна превышать требуемую точность по β\beta, иначе итерации «застрянут» на численном шуме.

Частые ошибки

  • Путают пристрелочный параметр с самим решением. ss - это лишь y(a)y'(a), недостающее начальное условие, а не ответ. Ответ - вся траектория y(x)y(x) при найденном ss^*.
  • Используют метод Ньютона/секущих для линейной задачи. Если уравнение линейно, корень F(s)=0F(s) = 0 находится точной интерполяцией за два выстрела; итерации тут - лишняя работа.
  • Игнорируют экспоненциальную неустойчивость. На длинном отрезке с растущими решениями одиночная стрельба расходится. Признак - F(s)F(s) скачет на много порядков при малом изменении ss; нужна многократная стрельба.
  • Берут слишком грубый шаг интегрирования. Шум в F(s)F(s) из-за большого hh маскирует настоящий корень: итерации перестают сходиться к нужной точности.
  • Стартуют с совпадающих s0=s1s_0 = s_1 в методе секущих. Знаменатель F(s1)F(s0)F(s_1) - F(s_0) обнуляется - деление на ноль; стартовые наклоны обязаны различаться.

FAQ

Чем метод стрельбы отличается от метода конечных разностей? Стрельба сводит краевую задачу к задаче Коши и подбирает начальный наклон, интегрируя уравнение вперёд. Конечные разности сразу заменяют производные разностями на всей сетке и решают одну алгебраическую систему, не интегрируя. Стрельба проще в реализации, но менее устойчива на длинных отрезках.

Сколько выстрелов нужно? Для линейной задачи - ровно два пробных плюс один финальный: корень F(s)=0F(s)=0 находится точной интерполяцией. Для нелинейной - обычно 4–6 итераций метода секущих до нужной точности.

Что делать, если метод стрельбы расходится? Чаще всего причина - экспоненциальный рост решения задачи Коши. Помогает многократная стрельба: разбить отрезок на части, стрелять на каждой и сшить решения условиями непрерывности, решая общую систему методом Ньютона.

Коротко

Метод стрельбы для краевой задачи превращает двухточечную задачу y=f(x,y,y)y'' = f(x, y, y'), y(a)=αy(a)=\alpha, y(b)=βy(b)=\beta в задачу Коши с недостающим начальным наклоном y(a)=sy'(a) = s. Невязка F(s)=y(b;s)βF(s) = y(b; s) - \beta обращается в ноль при правильном прицеле; для линейной задачи корень находится точной интерполяцией за два выстрела, для нелинейной - методом секущих или Ньютона. На длинных отрезках с экспоненциально растущими решениями одиночная стрельба неустойчива, и её заменяет многократная стрельба со сшивкой решений на подотрезках. Это делает метод стрельбы наглядным и часто самым быстрым способом решить краевую задачу, если она не слишком жёсткая.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также