Решение нелинейных уравнений и систем
Пусть имеется одно уравнение с неизвестным x
f(x)=0, (1)
где f(x) – некоторая функция. Требуется найти корни уравнения, т.е. все значения x, которые обращают уравнение в верное равенство.
Иногда с помощью символьного процессора удается аналитически вычислить значение корней. Для этого
- Введите выражение f(x).
- Выделите переменную, относительно которой будет решаться уравнение.
- Выберите в меню Symbolics(Символика) пунктVariable| Solve (Переменная| Решить).
Однако в большинстве случаев аналитически решать уравнение не удается, и необходимо привлекать численные методы. Как правило, отыскание корней численными методами связано с несколькими задачами
- Исследование существования корней, определение их количества и примерного расположения.
- Собственно определение корней с заданной погрешностью (TOL).
Последнее означает, что необходимо найти значения x0, при которых |f(x0)|<TOL. Почти все встроенные функции системы Mathcad, предназначенные для решения нелинейных алгебраических уравнений, нацелены на решение второй задачи, т.е. предполагают, что корни уравнения уже приблизительно локализованы.
Для решения уравнения (1) Mathcad имеет встроенную функцию root, которая реализует алгоритм секущих и может включать два или четыре аргумента
root(f(x),x)или root(f(x), x, a, b)
где f(x)– скалярная функция, которую можно задать в виде выражения; x – скалярная переменная, относительно которой решается уравнение; a, b – границы интервала, внутри которого происходит поиск корня.
Использование типа функции root(f(x),x) с двумя аргументами требует задания начального значения переменной x, т.е. нужно предварительно присвоить x некоторое значение. Поиск корня будет производиться вблизи этого значения. Это требует априорной информации о примерной локализации корня.
Часто удобнее (и надежнее) задавать не начальное приближение к корню, а интервал [a,b], внутри которого находится искомый корень. В этом случае следует использовать функцию root(f(x), x, a, b) с четырьмя аргументами. Следует помнить, что при этом значения f(a) и f(b) должны иметь разный знак.
Если функция f(x) является полиномомстепениn , то все корни можно найти, используя встроенную функцию polyroots(v), где – вектор, составленный из коэффициентов полинома. Первым в векторе v должен быть свободный член, вторым – коэффициент при x1 и т.д. Последним n+1 элементом вектора v должен быть коэффициент при xn. Результатом действия функции polyroots является вектор, составленный из n корней рассматриваемого полинома.
Следует помнить, что любой полином степениn имеет с учетом кратности ровно n корней, среди которых могут быть и комплексные.
Рассмотрим теперь решение системы n нелинейных уравнений с m неизвестными
(2)
Здесь , … – некоторые скалярные функции от скалярных переменных . Уравнений может быть как больше, так и меньше числа неизвестных. Система может включать и неравенства.
Для решения систем в Mathcad имеется специальный вычислительный блок, состоящий из трех частей, идущих последовательно друг за другом
- Given – ключевое слово.
- Система, записанная логическими операторами в виде равенств и, возможно, неравенств.
- Find(x1, …, xm) – встроенная функция для решения системы относительно переменных x1, …, xm.
Блок Given/ Find использует для поиска решения итерационные методы, поэтому, как и для функции root, требуется до ключевого слова Given задать начальные значения для всех переменных. Вставлять логические операторы следует пользуясь панелью инструментов Boolean (Логические операторы).
Значение функции Find это вектор, составленный из решения по каждой переменной, так что число элементов вектора равно числу аргументов функции Find.
В качестве теста полезно проверить точность решения уравнений, вычислив значения образующих систему функций при найденных значениях корней.
Вычислительным блоком с функцией Find можно найти и корень уравнения с одним неизвестным. Единственным отличием будет скалярный, а не векторный тип результата, возвращаемого функцией Find.
В Mathcad вычислительным блоком Given/ Find система нелинейных уравнений (2) может быть представлена и решена в векторном виде
f(x)=0,
где – вектор, составленный из переменных, а f(x) – соответствующая векторная функция.
В отличие от функции root, Find реализует итерационные градиентные численные методы, в которых последовательные приближения вычисляются с применением производных. Вычислительный блок использует системную константу CTOL в качестве меры погрешности выполнения уравнений, введенных после ключевого слова Given.
Mathcad предлагает три различных вида градиентных методов. Чтобы изменить численный метод
- Щелкните правой кнопкой мыши на названии функции Find.
- Наведите указатель мыши на пункт Nonlinear (Нелинейный) в контекстном меню.
- В появившемся подменю выберите один из предлагаемых методов: Conjugate Gradient (Сопряженных градиентов), Quasi-Newton (Квазиньютоновский) или Levenberg-Marquardt (Левенберг).
Чтобы вернуть автоматический выбор численного метода, в контекстном меню нужно выбрать пункт Autoselect (Автоматический выбор). Помимо выбора самого метода, имеется возможность устанавливать некоторые его параметры. Для этого нужно вызвать с помощью того же контекстного меню диалоговое окно Advanced Options (Дополнительные параметры) в пункте Nonlinear (Нелинейный).
Некоторые уравнения удается решить символьно с использованием блока Given/ Find. В этом случае присваивать неизвестным начальные значения не нужно, а после функции Find нужно ввести знак символьных вычислений → (стрелку) вместо знака = (равно). Символьные вычисления могут производиться и над уравнениями, в которые, помимо неизвестных, входят параметры.
Задачу определения корней системы уравнений можно свести к задаче поиска экстремума функции многих переменных. В этом случае вместо требования точного выполнения уравнений минимизируется их невязка. Для этого в вычислительном блоке вместо функции Find используется функция Minerr, имеющая тот же набор параметров. При помощи этой функции можно решать и несовместные системы (т.е. не имеющие корней). В последнем случае численный алгоритм выдаст в качестве результата значения переменных, наилучшим образом удовлетворяющих уравнениям.
Вычислительный блок Given | Minerr задается следующим образом
- Начальные значения для неизвестных.
- Ключевое слово Given.
- Система, записанная логическими операторами в виде равенств и неравенств.
- Minerr(x1, …, xm) – приближенное решение системы относительно переменных x1, …, xm, минимизирующее невязку.
В функции Minerr реализованы те же алгоритмы, что и в функции Find, иным является только условие завершения работы численного алгоритма. Следует иметь в виду, что функция находит локальный минимум, а не глобальный, т.е. могут найтись другие решения, для которых невязка меньше.
Аппроксимация функций