Алгебраические уравнения > Продолжение по параметру  

Методы продолжения

Решение отдельных нелинейных уравнений и систем типа представляет собой несложную, с вычислительной точки зрения, задачу. В реальных инженерных и научных расчетах очень распространена более сложная проблема: решение не одного уравнения (или системы), а целой серии уравнений, зависящих от некоторого параметра (или нескольких параметров). Для таких задач существует очень эффективные методы, которые называются методами продолжения. Будем далее говорить об одном уравнении, имея в виду, что всегда возможно обобщение результатов на случай системы уравнений.
Пусть имеется уравнение f(a,x)=0, зависящее не только от неизвестного x, но и от параметра a. Рассмотрим конкретный пример, аналитическое решение которого заранее известно и зависимость уравнения от параметра a в котором записывается следующим образом:
sin(ax)=0.
Аналитическое решение этого уравнения находится из соотношения ax =Np, где N=0,1,2,…, т. е. имеется бесконечное количество (для каждого N) семейств решений xN=Np/a. Несколько из семейств для N=1,2,3 показаны на рис.1 тремя сплошными кривыми. Кроме того, следует иметь в виду, что для N=0, т. е. x=0, решением является прямая, совпадающая с осью X. 

Рис.1. Решение уравнения sin(ax)=0 с нулевой итерацией x0=300 для всех значений параметра а

Забудем на время, что аналитическое решение известно, и подойдем к уравнению (1) как к любой другой новой задаче. Решим его, к примеру, при помощи алгоритма секущих. Корень уравнения требуется определить численно для каждого значения параметра a, ради определенности, в диапазоне значений от 0.010 до 0.025 с шагом 0.0005 (эти числа взяты ради примера, Вы можете поэкспериментировать с другими значениями). Чтобы алгоритм  заработал, необходимо предварительно задать начальное приближение к решению, например, одно и то же начальное значение x=300 для всех a. 

Результат расчетов показан на том же рис.1 точками, причем самая левая точка отвечает начальному значению x0=300. Обратите внимание, что, по мере увеличения a, кривая корней уравнения сначала идет по семейству решений x=p/a, а потом (в районе a~0.17) "перепрыгивает" на другое семейство x=2p/a. С вычислительной точки зрения такая ситуация, чаще всего, крайне неблагоприятна, поскольку хотелось бы отыскать непрерывное семейство решений. Скачки зависимости x(a) могут вводить пользователя в заблуждение, вовсе скрывая от него существование семейства решений при a>0.17. 
Почему же происходят эти скачки с одного семейства решений на другое? Конечно, причина кроется в выборе начального значения для вычисления каждого из корней. Линия начальных значений x0=300 обозначена на рис.1 в виде пунктирной горизонтальной прямой. Для a=0.01, и вообще для нескольких первых a начальное значение x=300 находится ближе всего к нижнему семейству решений y=p/a. Поэтому неудивительно, что численный метод находит именно эти корни. В правой части графика на рис.1 к линии начальных значений ближе второе семейство решений y=2p/a, к ним то и приводит численный метод.
Приведенные соображения диктуют очень простой рецепт избавления от скачков и нахождения одного из семейств непрерывных решений. Для этого требуется при поиске каждого (i+1)-го корня взять начальное значение, по возможности близкое к отыскиваемому семейству. Неплохим вариантом будет выбор приближения в виде предыдущего i-го корня, который был найден для прошлого значения параметра ai.  Результат вычислений, приведенный на рис.2, разительно отличается от предыдущего. Как видно, столь малое изменение идеологии применения численного метода привело к определению непрерывного семейства корней. 


Рис.2. Решение уравнения sin(ax)=0 методом продолжения для x0=300
Чтобы найти другое семейство решений, нужно взять соответствующее первое начальное значение, например, 600. Если взять его ближе к третьему семейству решений (например, 900), то оно и будет найдено численным алгоритмом, и т. д. 

Мы привели основную идею и наиболее простой из возможных способов реализации метода продолжения по параметру. Безусловно, Вы можете предложить иные как математические, так и программистские решения этой проблемы. В частности, для выбора очередного начального приближения к корню можно использовать результат экстраполяции уже найденной зависимости x(a), придумать более сложные алгоритмы для ветвящихся семейств решений и т. д.