Научная электронная библиотека


Решение систем уравнений MathCAD осуществляет численными методами. При этом должно быть задано некоторое начальное приближение для тех переменных, значение которых необходимо найти. Основываясь на этих начальных данных, MathCAD будет последовательно уточнять решение до тех пор, пока не подберет наиболее точные значения. Проблемы возникают, когда нелинейная система имеет несколько решений. За один раз MathCAD находит только одно решение, которое обычно более близко к заданному начальному приближению. Поэтому в таких случаях необходимо решать систему несколько раз с различными начальными приближениями.
Решающий блок состоит из нескольких компонент, следующих на листе в строго определенном порядке:
1.2.1. Начальное приближение (присваивание начальных значений переменным).
1.2.2. Директива Given, которую необходимо набрать с клавиатуры.
1.2.3. Уравнения, которые необходимо решить. Уравнения вводятся в обычной математической форме, но вместо простого знака равенства «=» используется оператор логического равенства (вводится путем нажатия Ctrl- =).
1.2.4. Обращение к функции Find. Аргументами функции являются имена переменных, относительно которых решается система. Функция возвращает вектор значений, где первый элемент соответствует первой переменной в списке аргументов, второй элемент – второй переменной и так далее.
Пример. Решим систему нелинейных уравнений:

Данная система имеет два решения. Найдем одно из них (рис. 11) с начальным приближением x = 0; y = 0.
Последняя запись – вектор (–1; –2) есть значение, которое вернула функция Find, то есть одно из решений системы. Найти второе решение можно, если взять другое начальное приближение x = 2; y = 2. Тогда функция Find вернет вектор (2; 4).

Начиная с MathCAD 2000 существует возможность одновременно найти несколько решений. Для этого система уравнений и начальные приближения должны быть переписаны в векторной форме (рис. 12). Каждая переменная будет вектором, содержащим столько компонент, сколько решений находится. В системе изменения коснутся преимущественно членов с перемножением переменных. Допустим, что в уравнении присутствует выражение x*x. Если x = (x1; x2) – вектор, то x∙x = x1∙x1 + x2∙x2. Нам же необходим результат поэлементного перемножения (x1∙x1; x2∙x2). Для этого существует специальная операция, записываемая как .

Рис. 11. Решение системы в MathCAD

Рис. 12. Пример одновременного поиска нескольких решений
Изменения коснулись и части получения результата. В данном случае функция Find вернет вектор из двух элементов, которые мы обозначили как X и Y. Каждый из этих элементов есть вектор значений x или y для решений. Соответственно первое решение – (–1; –2); второе решение – (2; 4).
Аналитическое решение линейных и нелинейных систем уравнений
Данное решение используется для получения решений в общем виде. Обычно при этом система уравнений записывается только с использованием буквенных обозначений переменных, без конкретных чисел. Для получения аналитического решения (рис. 13, 14) используется оператор аналитического вычисления «→» вместо оператора числового вычисления «=».

Рис. 13. Пример аналитического решения нелинейной системы

Рис. 14. Пример аналитического решения линейной системы
Следует обратить внимание, что здесь при решении системы нелинейных уравнений в блоке Given-Find уже нет необходимости указывать начальные приближения, поскольку решение идет не численными, а символьными методами (используется ядро математической системы Maple).
Решение нелинейных уравнений и систем уравнений в пакете MathCAD
Вычисление корней численными методами включает два основных этапа:
· отделение корней;
· уточнение корней до заданной точности.
Рассмотрим эти два этапа подробно.
Отделение корней нелинейного уравнения
Учитывая легкость построения графиков функций в MathCAD , в дальнейшем будет использоваться графический метод отделения корней.
Пример. Дано алгебраическое уравнение
Определить интервалы локализации корней этого уравнения.

Пример. Дано алгебраическое уравнение
Определить интервалы локализации корней этого уравнения.
На рисунке приведен график функции , построенный в MathCAD . Видно, что в качестве интервала изоляции можно принять интервал . Однако уравнение имеет три корня. Следовательно, можно сделать вывод о наличии еще двух комплексных корней. ¨

Уточнение корней нелинейного уравнения
Для уточнения корня используются специальные вычислительные методы такие, как метод деления отрезка пополам, метод хорд, метод касательных (метод Ньютона) и многие другие.
Функция root . В MathCAD для уточнения корней любого нелинейного уравнения (не обязательно только алгебраического) введена функция root , которая может иметь два или четыре аргумента, т.е. или , где – имя функции или арифметическое выражение, соответствующее решаемому нелинейному уравнению, – скалярная переменная, относительно которой решается уравнение, – границы интервала локализации корня.
Пример. Используя функцию , найти все три корня уравнения , включая и два комплексных.

Заметим, что для вычисления всех трех корней использовался прием понижения порядка алгебраического уравнения, рассмотренный в п. 8.1.1. ¨
Функция root с двумя аргументами требует задания (до обращения к функции) переменной начального значения корня из интервала локализации.
Пример 8.1.5. Используя функцию root , вычислить изменения корня нелинейного уравнения при изменении коэффициента а от 1 до 10 с шагом 1.
Функция polyroots . Для вычисления всех корней алгебраического уравнения порядка (не выше 5) рекомендуется использовать функцию polyroots . Обращение к этой функции имеет вид polyroots (v) , где v – вектор, состоящий из n +1 проекций, равных коэффициентам алгебраического уравнения, т.е. . Эта функция не требует проведения процедуры локализации корней.
Пример. Используя функцию polyroots , найти все три корня уравнения , включая и два комплексных

Блок Given . При уточнении корня нелинейного уравнения можно использовать специальный вычислительный блок Given , имеющий следующую структуру:
Решаемое уравнение задается в виде равенства, в котором используется «жирный» знак равно, вводимый с палитры Логический .
Ограничения содержат равенства или неравенства, которым должен удовлетворять искомый корень.
Функция Find уточняет корень уравнения, вызов этой функции имеет вид Find ( x ), где x – переменная, по которой уточняется корень. Если корня уравнения на заданном интервале не существует, то следует вызвать функцию Minerr ( x ), которая возвращает приближенное значение корня.
Для выбора алгоритма уточнения корня необходимо щелкнуть правой кнопкой мыши на имени функции Find ( x ) и в появившемся контекстном меню (см. рисунок) выбрать подходящий алгоритм.

Аналогично можно задать алгоритм решения и для функции Minerr ( x ).
Использование численных методов в функциях Find ( x ), Minerr ( x ) требует перед блоком Given задать начальные значения переменным, по которым осуществляется поиск корней уравнения.
Пример. Используя блок Given , вычислите корень уравнения в интервале отделения .

Решение систем уравнений
В зависимости от того, какие функции входят в систему уравнений, можно выделить два класса систем:
· алгебраические системы уравнений;
· трансцендентные системы уравнений.
Среди алгебраических систем уравнений особое место занимают системы линейных алгебраических уравнений (СЛАУ).
Системы линейных алгебраических уравнений
Системой линейных алгебраических уравнений (СЛАУ) называется система вида:
В матричном виде систему можно записать как
где – матрица размерности , – вектор с проекциями.
Для вычисления решения СЛАУ следует использовать функцию lsolve , обращение к которой имеет вид: lsolve (А, b ), где А – матрица системы, – вектор правой части.
Решение систем нелинейных уравнений
MathCAD дает возможность находить решение системы уравнений численными методами, при этом максимальное число уравнений в MathCAD 2001 i доведено до 200.
Для решения системы уравнений необходимо выполнить следующие этапы.
Задание начального приближения для всех неизвестных, входящих в систему уравнений. При небольшом числе неизвестных этот этап можно выполнить графически, как показано в примере.
Пример. Дана система уравнений:
Определить начальные приближения для решений этой системы.
Видно, что система имеет два решения: для первого решения в качестве начального приближения может быть принята точка (-2, 2), а для второго решения – точка (5, 20). ¨
Вычисление решения системы уравнений с заданной точностью . Для этого используется уже известный вычислительный блок Given .
Функция Find вычисляет решение системы уравнений с заданной точностью, и вызов этой функции имеет вид Find ( x ), где x – список переменных, по которым ищется решение. Начальные значения этим переменным задаются в блоке < Начальные условия >. Число аргументов функции должно быть равно числу неизвестных.
Следующие выражения недопустимы внутри блока решения:
· ограничения со знаком ¹ ;
· дискретная переменная или выражения, содержащие дискретную переменную в любой форме;
· блоки решения уравнений не могут быть вложены друг в друга, каждый блок может иметь только одно ключевое слово Given и имя функции Find (или Minerr ).
Пример. Используя блок Given , вычислить все решения системы предыдущего примера. Выполнить проверку найденных решений.
Пример. Используя функцию , вычислите решение системы уравнений
MathCAD — это просто! Часть 4. Системы линейных алгебраических уравнений

Итак, мы с вами продолжаем изучать MathCAD — самую дружелюбную к пользователю математическую среду из существующих в настоящее время. Пока мы занимались тем, что изучали способы решения уравнений — трансцендентных и алгебраических, и теперь вы знаете, как их решать с помощью MathCAD’а в общем виде или численно. Как вы могли убедиться из материала третьей части, численное решение уравнений — не такая простая задача, как может показаться с первого взгляда, однако и не такая сложная, если построить график уравнения. Но просто уравнения — это, согласитесь, довольно скучно, потому что в жизни, как правило, уравнения по одиночке не встречаются. Поэтому сегодня мы перейдем к более сложной, а значит, и более интересной, теме — попробуем решать системы уравнений. Я сказал «попробуем»? Простите, пожалуйста — я, наверное, оговорился. Конечно, не попробуем, а научимся — потому что благодаря MathCAD’у можно быть уверенным в том, что подобные попытки увенчаются успехом. Готовы? Ну что же, тогда вперед.
Решение систем с помощью функции lsolve
Системы уравнений многие просто-таки ненавидят еще со школы — прямо как русскую литературу. Что ж, школа может привить отвращение ко многим вещам, которые без нее могли бы оказаться гораздо более интересными. Как и любая обязаловка, она убивает романтику изучения чего-то нового. Но теперь, когда вас никто не заставляет изучать решение систем уравнений, вы можете взглянуть на них с совершенно новой для себя стороны. И поможет в этом, конечно же, MathCAD.
Для обозначения систем линейных алгебраических уравнений у математиков есть своя аббревиатура — СЛАУ. Ее используют намного чаще, чем полное название, что, в общем-то, вполне естественно — эта аббревиатура и произносима легко, и не перекрывается с другими математическими аббревиатурами. Так что и мы с вами тоже будем ее применять. СЛАУ называется система уравнений следующего вида:
k11x1 + k12x2 + … + k1nxn + l1 = 0
k12x1 + k22x2 + … + k2nxn + l2 = 0
…
kn1x1 + kn2x2 + … + knnxn + ln = 0
Здесь kij и li — какие-то числовые константы, называемые, соответственно, коэффициентами и свободными членами уравнений, а xj — переменные. Такие уравнения обычно записывают также с помощью матриц:
KX + L = 0
Здесь K — матрица (kij), составленная из коэффициентов при переменных величинах, где i — номер строки матрицы, а j — номер столбца. X и L — это, соответственно, векторы, составленные из переменных и свободных членов. Собственно, при решении СЛАУ с помощью MathCAD мы будем записывать СЛАУ именно в таком виде, потому что решение СЛАУ в MathCAD реализовано именно с помощью матричных методов. Возможно, вы что-нибудь слышали о методах решения СЛАУ Гаусса и Крамера, но даже если и нет, ничего страшного в этом нет — MathCAD тем и удобен, что с его помощью можно решать уравнения, не задумываясь над тем, каким именно алгоритмом пользуется математическая система при их решении.
Итак, для начала давайте посмотрим, каким именно образом в MathCAD’е нужно задавать матрицы. Для этого на панели инструментов Matrix нажмите кнопку Matrix or Vector, а в появившемся окне задайте количество столбцов и строк в матрице. Мы с вами попробуем решать для начала СЛАУ из четырех уравнений, и, соответственно, нам нужна будет матрица размером четыре на четыре элемента. Только, поскольку мы будем присваивать значение, записанное в этой матрице, переменной, обозначающей матрицу коэффициентов, то сначала лучше записать «K_: (max-width: 440px) 100vw, 545px» src=kg81602b.jpg>
Ну, а после знака равенства MathCAD нам уже нарисует результат.
С помощью функции lsolve можно получать и аналитические решения СЛАУ. Давайте попробуем заменить одно из чисел в матрице коэффициентов на букву — например, «а». Функция lsolve сразу выдаст ошибку, но не нужно этого пугаться — нужно просто заменить знак равенства на стрелку (ее можно найти на панели инструментов Symbolic или же записать комбинацией клавиш Ctrl + .). Дело в том, что знак «равно» в MathCAD’е используется для численных вычислений, а стрелка — для символьных, то есть при решении систем уравнений в общем виде нужно применять именно стрелку.
Решение с помощью solve
В общем-то, решать такую систему можно было бы и используя уже знакомый нам с вами оператор solve. Для этого достаточно записать уравнения в виде матрицы, а затем применить к ней оператор solve точно так же, как если бы мы с вами решали не целую систему, а всего лишь одно- единственное уравнение. «Записать уравнения в виде матрицы» в данном случае означает не запись матричного уравнения KX + L = 0, а просто запись в каждой строке одностолбцовой матрицы (т.е. вектор-столбца) одного уравнения из системы. Напомню на всякий случай, что оператор solve находится на панели Symbolic, а для записи знака равенства нужно использовать не просто клавишу » (max-width: 440px) 100vw, 545px» src=kg81602d.jpg>
Решение СЛАУ с помощью solve поначалу кажется не таким уж привлекательным, однако, по сути, оно ничем не отличается от использования функции lsolve. Например, если вы замените какой-нибудь из числовых коэффициентов в одном из уравнений на букву, чтобы получить аналитическое решение, solve справится с этим точно так же быстро и хорошо, как и функция lsolve. Так что, в общем-то, выбор при решении СЛАУ в пользу функции lsolve или в пользу оператора solve — дело скорее вкуса, причем вкуса в плане записи самой системы уравнений, а не оператора или функции, у которых, в общем-то, даже названия очень и очень похожи. Пожалуй, один из немногих случаев, когда все же предпочтительнее использовать именно оператор solve — это когда уравнений у нас больше, чем неизвестных, содержащихся в них. В этом случае матрица системы будет выглядеть не так, как хотелось бы, а вот с solve все будет нормально. Даже если решение найти не удастся, solve любезно об этом сообщит. Аналогичным образом можно попытаться решить СЛАУ и в том случае, когда соотношение между уравнениями и неизвестными, напротив, не в пользу уравнений (правда, как говорится, не с разгромным счетом, а то решение заведомо найти не удастся). Но даже в случае, когда мы пытаемся решить систему с тремя уравнениями и четырьмя неизвестными, оставив после solve только две из них, у нас это далеко не всегда может получиться — в этом вы можете убедиться воочию.
Численное решение СЛАУ
Что ж, давайте теперь посмотрим, как решать СЛАУ с использованием численных методов их решения. Это тоже вовсе не так сложно, как может с самого начала показаться, поскольку MathCAD имеет в своем арсенале ряд средств и на этот случай. Как и в случае с одиночными уравнениями, сначала нужно задать начальное приближение (на то оно и начальное, чтобы задавать его сначала). Только, поскольку переменная у нас теперь не одна, а их несколько, то и начальное приближение необходимо будет задать для каждой из них. В тех случаях, когда переменных в СЛАУ много, это будет совсем не просто. После того, как вы задали начальные приближения для каждой из нужных переменных, запишите сами уравнения — только сделайте это так, чтобы их и начальные приближения разделяло специальное слово «Given» (оно, конечно же, в рабочей области MathCAD’а должно быть записано безо всяких кавычек). После того, как вы записали начальные приближения, слово «Given» и сами уравнения, можно смело воспользоваться функцией find, которая найдет точные значения решений системы. Поскольку в СЛАУ каждая из переменных в итоге будет иметь только одно значение, над подбором максимально точного начального приближения можно особо и не страдать — в конечном итоге в случае СЛАУ оно скорее просто формальность, нежели реальная необходимость, и, как вы сами имели возможность убедиться, есть методы, которые прекрасно решают СЛАУ и без него.
Теперь, когда вы знаете уже столько разных способов решения СЛАУ, вполне логично было бы задаться вопросом: а какой из них лучше при прочих равных условиях? В литературе, как правило, рекомендуется использовать функции lsolve или find, дающие точность до 15 знаков после запятой — однако на самом деле, учитывая тот факт, что такая точность бывает нужна не так уж часто, данным советом можно пренебречь, потому что точность решения системы намного больше зависит от нее самой, нежели от используемого метода ее решения в MathCAD’е. Так что используйте пока что смело тот, который показался вам наиболее удобным, а о погрешностях при решении СЛАУ мы с вами еще поговорим, но только, пожалуй, немного попозже.
SF, spaceflyer@tut.by
Компьютерная газета. Статья была опубликована в номере 16 за 2008 год в рубрике soft
5.2.1. Системы уравнений: функция Find MathCAD 12 руководство
Здесь f1(x1, . хM), . fN (x1, . XM) — некоторые скалярные функции от скалярных переменных x1,x2, . хM и, возможно, от еще каких-либо переменных. Уравнений может быть как больше, так и меньше числа переменных. Заметим, что систему (5.4) можно формально переписать в виде
где х — вектор, составленный из переменных x1,x2, . ,хM, a f (х) — соответствующая векторная функция.
Вычислительный блок Given /Find
Для численного решения систем уравнений применяется тот же самый вычислительный блок, что и для символьных вычислений (см. разд. 5.1.1). Повторимся, что он состоит из ключевого слова Given , самой системы уравнений, записанной при помощи логических операторов панели Boolean (Булевы операторы), а также встроенной функции Find. Find(x1, . ,хM) — встроенная функция для решения системы алгебраических уравнений и неравенств относительно переменных x1. xM . Значение функции Find представляет собой вектор, составленный из решений по каждой переменной.
Встроенная функция Find использует в качестве численного алгоритма один из градиентных методов (см. разд. 5.3). Этот факт налагает некоторые ограничения на уравнения системы, которые должны быть достаточно гладкими функциями своих аргументов.
При численных расчетах может быть найден только один из корней уравнения, в отличие от символьных вычислений, которые позволяют определить все имеющиеся корни.
Применение численного нахождения корней отличается от символьного двумя обстоятельствами:
- вместо оператора символьного вывода после функции 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.
На самом деле в вычислительном блоке используются обе системные константы 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 , но вы по желанию можете переопределить их.
Часто бывает очень полезным проверить точность решения уравнений «вручную», подставив найденные вычислительным процессором корни в исходные уравнения и оценив значение их невязок.
Листинг 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. Численное решение системы алгебраических уравнений и неравенств