Метод продолжения по параметру
Приведенные соображения диктуют очень простой рецепт избавления от скачков и нахождения одного из семейств непрерывных решений. Для этого требуется при поиске каждого (i+D-го корня взять начальное значение, по возможности близкое к отыскиваемому семейству. Неплохим вариантом будет выбор приближения в виде предыдущего 1-го корня, который был найден для прошлого значения параметра аг. Возможный вариант воплощения этого метода, называемого продолжением по параметру, приведен в листинге 8.21. В нем функция root применена внутри функции пользователя f uo,a), определенной в самом начале листинга с помощью средств программирования. Назначение функции f uo,a) заключается в том, что она выдает значение корня для заданного значения параметра а и начального приближения к решению хо. В остальном, смысл листинга 8.21 повторяет предыдущий, за исключением того, что задается явно (в его предпоследней строке) только начальное значение y0=300 только для поиска уг. Для всех последующих точек, как следует из последней строки листинга, взято начальное значение, равное предыдущему корню У!.
Листинг 8.21. Решение уравнения sin(ax)=0 методом продолжения по параметру:
Результат вычислений, приведенный на рис. 8.11, разительно отличается от предыдущего. Как видно, столь малое изменение идеологии применения численного метода привело к определению непрерывного семейства корней. Отметим, что получить результат рис. 8.10 (без продолжения по параметру) в терминах введенной нами функции f (х0,а) можно, изменив ее первый аргумент в последней строке листинга 8.21 на константу: f oodaj.
Рис. 8.11. Решение уравнения sin(a-x)=0 методом продолжения для у0=300 (листинг 8.21)
Чтобы найти другое семейство решений, нужно взять соответствующее первое начальное значение у0, например у0=600. Результат действия листинга 8.21 для этого случая показан на рис. 8.12. Если взять у0 ближе к третьему семейству решений (например у0=300), то оно и будет найдено вычислительным процессором Mathcad, и т. д.
С помощью метода продолжения можно решать и соответствующие задачи оптимизации, зависящие от параметра. Идеология в этом случае остается точно такой же, но вместо функций решения нелинейных уравнений root или Find вам следует применить одну из функций поиска экстремума Minerr, Maximize или Minimize.
Мы привели основную идею и один из возможных способов реализации метода продолжения по параметру. Безусловно, Вы можете предложить иные как математические, так и программистские решения этой проблемы. В частности, для выбора очередного начального приближения к корню можно использовать результат экстраполяции уже найденной зависимости х(а), придумать более сложные алгоритмы для ветвящихся сем решений и т. д.
Рис. 8.12. Решение уравнения sin (ах) =0 методом продолжения по параметру для у0=600