Метод продолжения по параметру
Решение "хороших" нелинейных уравнений и систем типа тех, которые были рассмотрены в предыдущих разделах этой главы, представляет собой несложную, с вычислительной точки зрения, задачу. В реальных инженерных и научных расчетах очень распространена более сложная проблема: решение не одного уравнения (или системы), а целой серии уравнений, зависящих от некоторого параметра (или нескольких параметров). Для таких задач существуют очень эффективные методы, которые называются методами продолжения. Эти методы непосредственно не встроены в Mathcad, но могут быть легко запрограммированы с помощью уже рассмотренных нами средств. Будем далее говорить об одном уравнении, имея в виду, что всегда возможно обобщение результатов на случай системы уравнений.
Пусть имеется уравнение f (а,х)=0, зависящее не только от неизвестного х, но и от параметра а. Требуется определить зависимость его корня х от параметра а, т. е. х(а). Простой пример такой задачи был приведен в предыдущем разделе в листинге 8.18. Тогда нам повезло, и решение в общем виде было найдено с помощью символьных вычислений. Рассмотрим еще один, чуть более сложный пример, аналитическое решение которого также заранее известно, но с которым символьный процессор, тем не менее, не справляется. Обобщим задачу, добавив зависимость от параметра а следующим образом:
sin(ax)
=
0
, (
1
)
Аналитическое решение этого уравнения находится из соотношения ах =Npi, где N=0.1.2,…, т е. имеется бесконечное количество (для каждого N) семейств решений xN=Npi/a. Несколько из семейств для N=1.2.3 показаны на рис. 8.10 тремя сплошными кривыми. Кроме того, следует иметь в виду, что для N=0, т. е. х=0, решением является прямая, совпадающая с осью х. Заметим (листинг 8.19), что символьный процессор Mathcad выдает в качестве решения только эту серию х=0.
Листинг 8.19. Символьное решение уравнения sin (а-х)=0:
Забудем на время, что аналитическое решение известно, и подойдем к уравнению (1) как к любой другой новой задаче. Решим его методом секущих, применяя для этого встроенную функцию root. Самый простой, но далеко не лучший способ иллюстрируется листингом 8.20. Корень уравнения (1) требуется определить численно для каждого значения параметра а. Для этого первые две строки листинга создают ранжированную переменную 1, с помощью которой определяется вектор значений параметра а" для которых будут производиться расчеты. Его элементы пробегают значения от 0.010 до 0.025 с шагом 0.0005 (эти числа взяты ради примера, Вы можете поэкспериментировать с другими значениями). Последняя строка листинга присваивает элементам еще одного вектора у вычисленные с помощью функции root значения корней уравнения (1) для каждого ах. Но, для того чтобы функция root заработала, необходимо предварительно задать начальное приближение к решению, что сделано в третьей строке листинга. Ключевой момент метода, примененного в листинге 8.20, заключается в том, что одно и то же начальное значение х=300 использовано для всех ах.
Рис. 8.10. Решение уравнения sin(ax) =0 (см. листинг 8.21)
Листинг 8.20. Один из способов численного решения:
Результат расчетов у± показан на том же рис. 8.10 точками, причем самая левая точка отвечает начальному значению у0=300. Обратите внимание, что, по мере увеличения а, кривая корней уравнения сначала идет по семейству решений у=я/а, а потом (в районе а"0.17) "перепрыгивает" на другое семейство у=2-я/а. С вычислительной точки зрения такая ситуация чаще всего крайне неблагоприятна, поскольку хотелось бы отыскать непрерывное семейство решений. Скачки зависимости у (а) могут вводить пользователя в заблуждение, вовсе скрывая от него существование семейства решений.
Почему же происходят эти скачки с одного семейства решений на другое? Конечно, причина кроется в выборе начального значения для вычисления каждого из корней. Линия начальных значений у=зоо обозначена на рис. 8.10 в виде пунктирной горизонтальной прямой. Для a0=o.oi, и вообще для нескольких первых а1 начальное значение у=зоо находится ближе всего к нижнему семейству решений у=я/а. Поэтому неудивительно, что численный метод находит именно эти корни. В правой части графика на рис. 8.10 к линии начальных значений ближе второе семейство решений у=2-я/а, к ним-то и приводит численный метод.