Математические задачи в пакете MathCAD 12

         

Глава 5.2.1. Системы уравнений: функция Find



Рассмотрим решение системы N нелинейных уравнений с м неизвестными

Здесь f1(x1, ..., хM), ..., fN (x1, ..., XM) — некоторые скалярные функции от скалярных переменных x1,x2, ..., хM и, возможно, от еще каких-либо переменных. Уравнений может быть как больше, так и меньше числа переменных. Заметим, что систему (5.4) можно формально переписать в виде

f(x)=0, (5.5)

где х — вектор, составленный из переменных x1,x2, ... ,хM, a f (х) — соответствующая векторная функция.



Вычислительный блок Given /Find

Для численного решения систем уравнений применяется тот же самый вычислительный блок, что и для символьных вычислений (см. разд. 5.1.1). Повторимся, что он состоит из ключевого слова Given, самой системы уравнений, записанной при помощи логических операторов панели Boolean (Булевы операторы), а также встроенной функции Find. Find(x1, ... ,хM) — встроенная функция для решения системы алгебраических уравнений и неравенств относительно переменных x1,...,xM. Значение функции Find представляет собой вектор, составленный из решений по каждой переменной.

ПРИМЕЧАНИЕ 1

Встроенная функция Find использует в качестве численного алгоритма один из градиентных методов (см. разд. 5.3). Этот факт налагает некоторые ограничения на уравнения системы, которые должны быть достаточно гладкими функциями своих аргументов.



ПРИМЕЧАНИЕ 2

При численных расчетах может быть найден только один из корней уравнения, в отличие от символьных вычислений, которые позволяют определить все имеющиеся корни.



Применение численного нахождения корней отличается от символьного двумя обстоятельствами:

  •  вместо оператора символьного вывода после функции Find следует использовать оператор численного вывода (знак равенства);
  •  перед вычислительным блоком Given/Find должны быть заданы начальные значения (guess value) для всех неизвестных, т. е. всем переменным x1, ... ,хM, относительно которых решается уравнение, следует предварительно присвоить некоторые численные значения, с которых и будет начинаться поиск корня. Таким образом, присвоение начального значения требует априорной информации о примерном местонахождении корня и связано с проблемой локализации корней, упомянутой в начале разд. 5.2.


ПРИМЕЧАНИЕ

Помните также о том, что, в отличие от символьного, для численного процессора необходимо задать числовые значения всех параметров, входящих в уравнение.



Одно уравнение с одним неизвестным

Рассмотрим в качестве примера (листинг 5.8) одно уравнение с одним неизвестным, которое уже решалось нами аналитически (см. листинги 5.1 и 5.2). Уравнение имеет три корня, как видно из графика, приведенного на рис. 5.4. Обратите внимание, что перед ключевым словом Given переменной х присваивается некоторое значение х=1. В остальном применение функции Find для решения уравнения не отличается от символьных расчетов.

Листинг 5.8. Численное решение кубического уравнения с начальным значением x=1



Рис. 5.4. Графическая иллюстрация решения кубического уравнения


Как уже отмечалось выше, результатом численного решения алгебраического уравнения является один его корень. Для того чтобы отыскать остальные корни, необходимо повторно решить уравнение, взяв для переменной х другие начальные значения. Например, если присвоить ей в начале листинга значение х=-1, то численным процессором будет выдан в качестве результата другой корень х=0 (листинг 5.9). Такая работа программы Mathcad связана с особенностями применяемых численных алгоритмов (см. разд. 5.3). Для численного определения всех корней уравнения следует применять специальные приемы, например, сканирование по неизвестным (см. разд. 5.2.4).

Листинг 5.9. Численное решение кубического уравнения с начальным значением x=-1 сходится к другому корню x=0

Системы уравнений

Приведем еще один пример численного решения алгебраических уравнений, обратившись на этот раз к системе двух уравнений, которая также уже исследовалась нами при помощи символьного процессора. Система имеет два решения, показанные графически на рис. 5.2 и найденные аналитически в листинге 5.7 (см. разд 5.1.3). Листинг 5.10, демонстрирующий численное решение рассматриваемой системы, начинается с присвоения неизвестным начальных значений х=10,у=10. После этого следует ключевое слово Given и два логических оператора, выражающих рассматриваемую систему уравнений. В результате (последняя строка листинга) Mathcad находит один из корней х=1,у=0, причем первый элемент вектора решения есть первый аргумент функции Find, а второй элемент — ее второй аргумент. Поскольку решение производится численным методом, оно выдается с некоторой погрешностью, не превышающей встроенной константы CTOL. Если задать в первой строке листинга другие начальные значения, расположенные ближе к другому корню, например, х=0,у=0, то найден в итоге будет другой корень х=-0.5,у=-0.75.

ПРИМЕЧАНИЕ 1

На самом деле в вычислительном блоке используются обе системные константы Mathcad, связанные с заданием погрешности: TOL и CTOL. Константа CTOL ограничивает невязку, т. е. задает точность выполнения уравнений, введенных после ключевого слова Given. Например, если CTOL=0.001, то уравнение х=10 будет считаться выполненным и при х=10.001, и при х=9.999. Другая константа TOL определяет условие прекращения итераций численным алгоритмом (см. разд. 5.4). Значение CTOL может быть задано пользователем так же, как и TOL, например, CTOL=0.01. По умолчанию принято, что CTOL= =TOL=0.001, но вы по желанию можете переопределить их.



ПРИМЕЧАНИЕ 2

Часто бывает очень полезным проверить точность решения уравнений "вручную", подставив найденные вычислительным процессором корни в исходные уравнения и оценив значение их невязок.



Листинг 5.10. Численное решение системы алгебраических уравнений

Если предпринять попытку решить несовместную систему, в частности, в рассматриваемом примере добавить еще одно уравнение, то Mathcad выдаст сообщение об ошибке, гласящее, что ни одного решения не найдено, и предложение попробовать поменять начальные значения или значение погрешности.

Особую осторожность следует соблюдать при решении систем с числом неизвестных большим, чем число уравнений. Например, можно удалить одно из двух уравнений из рассмотренной нами задачи, попытавшись решить оставшееся единственное уравнение с двумя неизвестными х и у (листинг 5.11). В такой постановке задача имеет бесконечное множество корней: для любого х и, соответственно, у=х2-1 условие, определяющее единственное уравнение, выполнено. Однако даже если корней бесконечно много, численный метод будет производить расчеты только до тех пор, пока логические выражения в вычислительном блоке не будут выполнены (конечно, в пределах погрешности). После этого итерации будут остановлены и выдано решение. В результате будет найдена всего одна пара значений (х,у), обнаруженная первой, как это показано в последней строке листинга 5.11.

ПРИМЕЧАНИЕ

Для того чтобы найти все решения рассматриваемой задачи, можно обратиться к возможностям символьного процессора Mathcad. Достаточно в последней строке листинга заменить знак равенства на оператор символьного вывода, и в качестве ответа будет выдано семейство решений х и х2-1.



Листинг 5.11. Численное решение уравнения, имеющего бесконечное множество корней, приводит к одному из них

Системы уравнений и неравенств

Пока мы рассматривали примеры систем уравнений, число которых было таким же, как и число неизвестных, что встречается наиболее часто. Но число уравнений и неизвестных может и не совпадать. Более того, в вычислительный блок можно добавить дополнительные условия в виде неравенств. Например, введение ограничения на поиск только отрицательных значений х в рассмотренный выше листинг 5.10 приведет к нахождению другого решения, как это показано в листинге 5.12.

Обратите внимание, что, несмотря на те же начальные значения, что и в листинге 5.10, в листинге 5.12 мы получили другой корень системы уравнений. Это произошло именно благодаря введению дополнительного неравенства, которое определено в блоке Given в предпоследней строке листинга 5. 12.

Листинг 5.12. Численное решение системы алгебраических уравнений и неравенств


Содержание раздела