Приближенное решение алгебраических уравнений
Градиентные численные методы решения задач отделения корней уравнений и поиска экстремума функций очень близки. Поэтому, в частности, пользователь может тем же самым образом, с помощью контекстного меню, выбирать конкретный метод приближенного решения для функций Minimize и Maximize. Применительно к нелинейным уравнениям основная идея градиентных алгоритмов была приведена в разд. 5.3.2. Основным отличием в случае задач минимизации является критерий правильности решения (прекращения итераций): если при решении уравнений критерием служит близость нулю невязки системы уравнений, то при минимизации критерий заключается в схождении итераций к минимальным значениям исследуемой функции.
Близость рассмотренных задач связана также с тем, что иногда приходится заменять проблему решения нелинейных уравнений задачей поиска экстремума функции многих переменных. Например, когда невозможно найти решение с помощью функции Find, можно попытаться потребовать вместо точного выполнения уравнений условий минимизировать их невязку. Чтобы не нужно было реализовывать данную схему вручную (вместо встроенной функции Find использовать соответствующую постановку задачи для функции Minimize), разработчики Mathcad предусмотрели дополнительную встроенную функцию Minerr. Она применяется аналогично функции Find (см. разд. 5.1. Т), в частности, имеет тот же самый набор параметров и должна находиться в пределах вычислительного блока:
- x1: = C1… хM: = CM – начальные значения для неизвестных.
- Given – ключевое слово.
- Система алгебраических уравнений и неравенств, записанная логическими операторами.
- Minerr (x1,…,хM) – приближенное решение системы относительно переменных x1,…,хM, минимизирующее невязку системы уравнений.
Примечание 1
В функции Minerr реализованы те же самые алгоритмы, что и в функции Find, иным является только условие завершения работы численного метода (как в случае функций Minimize и Maximize).
Примечание 2
Согласно своему математическому смыслу, функция Minerr может применяться для построения регрессии серии данных по закону, заданному пользователем (см. главу 13).
Пример использования функции Minerr показан в листинге 6.9. Как видно, достаточно заменить в вычислительном блоке имя функции на Minerr, чтобы вместо точного (конечно, с поправкой на погрешность порядка TOL) получить приближенное решение уравнения, заданного после ключевого слова Given.
Листинг 6.9. Приближенное численное решение уравнения, имеющего корень (x=0, y=0):
Листинг 6.9 демонстрирует приближенное решение уравнения kx2 +y2 =0, которое при любом значении коэффициента k имеет единственный точный корень (х=0,у=0). Тем не менее при попытке решить его функцией Find для больших k, порядка принятых в листинге (рис. 6.5), происходит генерация ошибки "No solution was found" (Решение не найдено). Это связано с иным поведением функции f (x,y)=kx2 +y2 вблизи ее корня по сравнению с функциями, поиск корней которых был разобран в предыдущей главе (см. рис. 5.1).
В отличие от них, f (х,у) не пересекает плоскость f (х,у)=0, а лишь касается ее (рис. 6.5) в точке (х=0,у=0). Поэтому и найти корень изложенными в предыдущем разделе градиентными методами намного сложнее, поскольку вблизи корня производные f (х,у) близки к нулю, и итерации, строящиеся по градиентному принципу, могут уводить предполагаемое решение далеко от корня.
Ситуация еще более ухудшается, если наряду с корнем типа касания (как на рис. 6.5) имеются (возможно, весьма удаленные) корни типа пересечения. Тогда попытка решить уравнение или систему уравнений с помощью функции Find может приводить к нахождению корня второго типа, даже если начальное приближение было взято очень близко к первому. Поэтому если вы предполагаете, что система уравнений имеет корень типа касания, намного предпочтительнее использовать функцию Minerr, тем более что всегда есть возможность проконтролировать невязку уравнений простой подстановкой полученного решения в исходную систему уравнений.
Рис. 6.5. Поиск минимума и попытка нахождения корня функции f (x, у) =kx2 +y2