Решение алгебраических уравнений и систем
или
Ван Гог в среде
Mathcad

В. Очков

http://twt.mpei.ac.ru/ochkov

ochkov@twt.mpei.ac.ru

Cначала о терминах статьи:

Рис. 1. Поиск корней уравнения средствами символьной математики Mathcad

Рис. 2. Численный поиск корня уравнения

Рис. 2a. Численный поиск корня уравнения с помощью слайдера Mathcad 2001

Рис. 2b. Численный поиск корня уравнения с помощью слайдера Mathcad 2001

Рис. 3. «Рисунок» корней двухаргументной функции root

Рис. 3a. «Рисунок» корней функции Find при одном неизвестном

Рис. 4. «Рисунок» корней четырехаргументной функции root

Рис. 5. Численный поиск корней системы двух нелинейных алгебраических уравнений

Рис. 5a. Выставление первого приближения с помощью слайдера Mathcad

Рис. 5a. Численный поиск действительных и мнимых корней системы алгебраических уравнений, записанных в векторном виде

Рис. 6. «Картинка» численного поиска корней системы двух нелинейных алгебраических уравнений (Mathcad 2000)

Рис. 6a. «Картинка» численного поиска корней системы двух нелинейных алгебраических уравнений (Mathcad 2001i + график самой системы)

Mathcad-программа

Рис. 7. Винсент Ван Гог «Пейзаж в Овере после дождя»

Рис. 6a. Выбор метода поиска корней системы алгебраических уравнений

Рис. 7а. Картинка «Метод сопряженных градиентов»

Рис. 7в. Картинка «Квазиметод Ньютона»

Рис. 6b. «Картинка» численного поиска корней системы двух нелинейных алгебраических уравнений при увеличении точности расчетов

Дивертисмент:

Рис. D1. Аналитический поиск корней системы двух нелинейных алгебраических уравнений

Рис. D2. Решение задачи из рассказа А.П. Чехова «Репетитор»: в системе уравнений одноименные, но разноцветные переменные

 

Одна из типичных задач, решаемых в среде Mathcad, – это поиск корней алгебраических уравнений и их систем[2]: нахождение значений неизвестных (неизвестного в случае одного уравнения), при которых уравнения превращаются в тождества. В среде Mathcad есть широкий набор инструментов (команд меню, функций и операторов) для численного, аналитического и графического решения этой задачи.

Основные особенности численного[3] поиска корней нелинейных[4] алгебраических уравнений и систем такие:

1.      Определяется один корень из многих существующих. Какой именно корень будет найден – зависит главным образом от первого приближения к решению (guess values), который должен задать сам пользователь. Можно задать несколько приближений вектором. В этом случае Mathcad выдаст несколько корней.

2.      Ищется не корень уравнения или системы, а значение неизвестного (неизвестных), при котором отклонение правых и левых частей уравнений (невязка) не превышает наперед заданного числа. В среде Mathcad по умолчанию оно равно 10-3 (значения системных переменных TOL и CTOL[5]).

3.      Работа функций root и Find (а именно эти функции встроены в Mathcad для решения заглавной задачи статьи) имеет некий вероятностный и в каком-то смысле непредсказуемый характер, что отличает их от других встроенных функций Mathcad. Функция sin, например, всегда выдает «предсказуемый» ответ: каждому элементу множества «аргумент функции» соответствует вполне определенный элемент множества «значение функции». По отношению же к функциям root и Find такой четкости нет: эти функции могут возвратить совсем не то, что от них ожидают, или вообще аварийно прервать свою работу, попросив пользователя изменить некоторые параметры поиска и повторить расчет. Функция Find полностью контекстно зависима: значение, которое она возвращает, зависит не только и не сколько от значений ее аргументов, а от того, что возле нее (функции Find) записано. Это можно рассматривать как некое нарушение принципа функциональной зависимости, лежащего в основе математики.

Отметим также и особенности аналитического и графического поиска корней в среде Mathcad.

При аналитическом поиске[6] система Mathcad пытается найти все корни с абсолютной (аналитической) точностью. Из-за этого решение даже простейшей задачи часто заканчивается неудачей (см. рис. 1).

Search of roots of the equation by means of symbolical mathematics Mathcad/Maple

Рис. 1. Поиск корней уравнения средствами символьной математики Mathcad (не 14 вервия; Mathcad 14 >>>)

На рис. 1 показан аналитический (символьный[7]) поиск корней y уравнений sin(x)/= 0 и sin(x) = 0. Хотя у этих уравнений корней бесчисленное множество[8], в первом случае вместо корня выдается сообщение об ошибке[9] «No solution was found», а у более простого второго уравнение sin(x) = 0 символьная математика Mathcad находит единственный корень х = 0.

Графика Mathcad в основном используется для верификации (проверки) правильности решения и/или для уточнения данных для первого приближения при численном поиске корней. На рис. 1рис. 2, см. ниже), к примеру, показан график функции sin(x)/x, который на отрезке –10, 10 шесть раз (рис. 1) пересекает ось x, но на котором, тем не менее, «сломалась» символьная математика Mathcad.

Встроенная в Mathcad функция root ищет корень уравнения[10] численными методами. Начиная с Mathcad 2000, функция root может иметь не только два аргумента (используется комбинация методов Ньютона и секущих), но и четыре аргумента (метод половинного деления). В этом случае корень ищется не в близи точки начального приближения («двухаргументный» вариант функции root), а в интервале значений неизвестного, задаваемого двумя дополнительными аргументами. Работа функции root с уравнением sin(x)/= 0 показана на рис. 2, рис. 2a и рис. 2b.

Numerical search of a root of the equation

Рис. 2. Численный поиск корня уравнения

Рис. 2a. Численный поиск корня уравнения с помощью слайдера Mathcad 2001

Рис. 2b. Численный поиск корня уравнения с помощью слайдера Mathcad 2001

Но в статье графика Mathcad будет задействована не в совсем обычном аспекте – для визуализации функций, возвращающих корни уравнений и систем и имеющих в качестве аргументов значение первого приближения. Здесь открываются новые возможности не только для анализа тех или иных численных методов, реализованных в Mathcad, но и для…художественного творчества.

На рис. 3 и рис. 4 показано, какие корни уравнения sin(x)/= 0 возвращает функция root в зависимости от значений первого приближения.

"Picture" of roots of function root at two arguments

Рис. 3. «Рисунок» корней двухаргументной функции root

График на рис. 3 – это некий «портрет» метода Ньютона-секущих, суть которого такова. Через две точки (одна из которых – это первое приближение, а вторая отступает вправо от нового на расстояние TOL) проводится секущая, пересечение которой с осью х дает точку второго приближения. Но предварительно проверяется, чему рано значение функции в точке первого приближения: если оно меньше TOL, то задача считается решенной. Если нет – итерации продолжаются: секущие проводятся через новые пары точек. Только при первом приближении проводится не секущая, а фактически касательная (метод Ньютона).

Отсюда становится понятным график на рис. 3: когда значение х по модулю не превышает значение системной переменной TOL (10-3), то корень находится за одну итерацию (см. центр рис. 3), а если превышает, то за несколько итераций. При этом предугадать, какой именно корень будет найден, довольно трудно: значения корней разбросали в широком диапазоне (см. левый и правый край рис. 3).

Для поиска корня уравнения можно использовать также функцию Find, записывая перед ней не систему, а одиночное уравнение (рис. 3а).

“Picture” of roots of function Find at one unknown

Рис. 3a. «Рисунок» корней функции Find при одном неизвестном

В этом случае (рис. 3а) характер точек первого приближения вблизи критических точек[11] будет вполне предсказуем: функция Find базируется не различных модификациях градиентных методов (см. ниже) – решение «скатывается» либо влево, либо вправо. Одно плохо – функция Find работает на порядок медленнее функции root.

"Picture" of roots of the function root with 4 arguments

Рис. 4. «Рисунок» корней четырехаргументной функции root

Функция root, возвращающая корень уравнения sin(x)/x = 0 методом половинного деления, как отмечено ранее, имеет не один, а два аргумента. Следовательно, ее визуализация требует уже не линии (рис. 3 и рис. 3а), а плоскости (рис. 4). Кроме того, при формировании функции Rt использовался оператор обработки ошибок: когда функция root не может выдать корень, то функция Rt возвращает значение 23 (число, больше чем 7p – максимальный корень на плоскости а – в). Это значение на рис. 4 «окрашено» в белый цвет, корни же имеют «топографическую» окраску: маленькие значения корней (-7×p) – синий цвет (глубины океана), а большие (7×p) – коричневый (вершины гор). Промежуточные корни «окрашены» в промежуточные цвета (голубой, зеленый, желтый). Все это вместе похоже на мозаичный мраморный пол или картину в стиле кубистов[12].

Для численного решения систем алгебраических уравнений как было уже отмечено выше, предназначена встроенная в Mathcad функция Find, работающая в паре с ключевым словом Given.

Numerical search of roots of system of two nonlinear algebraic equations

Рис. 5. Численный поиск корней системы двух нелинейных алгебраических уравнений

На рис. 5 показана работа функции Find по решению системы двух нелинейных алгебраических уравнений: функция Find возвращает тот или иной корень[13] в зависимости от значения первого приближения. Показано также, что при «неудачном» первом приближении (на рис. 5 это, к примеру, начало координат) работа функции Find прерывается сообщением об ошибке и призывом к пользователю изменить параметры поиска: первое приближение, значение системных переменных TOL и/или CTOL. Помочь выставить первое приближение к решению системы может слайдер (ползунок) Mathcad – см. рис. 5a.

Рис. 5a. Выставление первого приближения с помощью слайдера Mathcad

Если первое приближение включает комплексные числа, то функция Find может вернуть комплексный (мнимый) корень – см. рис. 5a, где наша система записана в векторном виде, когда неизвестные системы являются не отдельными скалярными переменными (x, y, z etc), а элементами вектора x (x0, x1, x2 etc):

Численный поиск действительных и мнимых корней системы алгебраических уравнений, записанных в векторном виде

Рис. 5a. Численный поиск действительных и мнимых корней системы алгебраических уравнений, записанных в векторном виде

Но вернемся к четырем действительным корням системы. На рис. 6 поверхность x-y, раскрашена в четыре цвета в зависимости от того, какой корень из четырех существующих (см. рис. 5) был найден при первом приближении, взятом в данной «цветовой» области. «Белые пятна» на рис. 6 – это области, поиск корней из которых был прерван сообщением об ошибке.

"Picture" of roots of the function Find

Рис. 6. «Картинка» численного поиска корней системы двух нелинейных алгебраических уравнений (Mathcad 2000)

Рис. 6z. «Картинка» численного поиска корней системы двух нелинейных алгебраических уравнений (Mathcad 2001i + график самой системы)

Mathcad-программа

Когда автор показал рис. 6 человеку, разбирающемуся в изобразительном искусстве, то он сказал, что это… «Пейзаж в Овере после дождя» Винсента Ван Гога («Landscape at Auveres after the rein» by Vincent Van Gogh). Правда, этот «искусствовед» не успел надеть свои очки, а рис. 6 был показан ему издали. Но при более детальном сравнении была отмечена схожесть цветовой гаммы и «фактуры» (полосы грядок) рисунков. Так ли это – пусть читатель решит сам, сравнив рис. 6 и рис. 7.

«Landscape at Auveres after the rein» by Vincent Van Gogh

Рис. 7. Винсент Ван Гог «Пейзаж в Овере после дождя»

Но оставим в стороне «эстетическую сторону» рис. 6 и рис. 4[14] и поговорим о практических делах.

В среде Mathcad реализованы три метода решения систем алгебраических уравнений: метод Левенберга-Маркворта (Levenberg-Marquardt), метод сопряженных градиентов (Conjugate Gradient) и квазиметод Ньютона (Quasi-Newton – см. рис. 6a, где показано локальное меню, появляющееся после нажатия правой кнопки мыши на слове Find).

Выбор метода поиска корней системы алгебраических уравнений

Рис. 6a. Выбор метода поиска корней системы алгебраических уравнений

Так вот, рис. 6 – это «портрет» первого метода (он был выбран системой Mathcad автоматически для решения нашей системы самим пакетом Mathcad – см. позицию AutoSelect на рис. 6a), а рис 7a и рис. 7b –это «иллюстрации» двух других методов: Conjugate Gradient (рис 7a) и Quasi-Newton (рис. 7b).

Рис. 7а. Картинка «Метод сопряженных градиентов»

Рис. 7в. Картинка «Квазиметод Ньютона» («Чистый» метод Ньютона на MAShttp://twt.mpei.ac.ru/MAS/Worksheets/Newton_2.mcd)

Несложно оценить относительную площадь белых пятен на рис. 6, рис 7a и рис. 7b и дать некую количественную оценку методов решения систем нелинейных алгебраических уравнений, реализованных в Mathcad[15]. Вот как, например, будет выглядеть рис. 6, если повысить точность расчетов – изменить значения системных переменных TOL и CTOL с 10-3 (умолчание) на 10-15 (рис. 6b).

«Картинка» численного поиска корней системы двух нелинейных алгебраических уравнений при увеличении точности расчетов

Рис. 6b. «Картинка» численного поиска корней системы двух нелинейных алгебраических уравнений при увеличении точности расчетов

А сами же рисунки (рис. 6, рис 7a и рис. 7b) составляют некий триптих (три «живописных» полотна, объединенных одной темой), который можно использовать не только для оценки качества тех или иных методов поиска корней, но и для… эстетического наслаждения. Автор предлагает читателям подобрать другие уравнения системы с иной «картинкой» корней. В «картинку» на рис. 6 свою «красоту» привнесла лемниската («увитая цветами») Бернулли. Но в математике еще есть много других «красивых» кривых, которые могут передать свою «красоту» рисункам, подобным тому, какой показан на рис. 6.

Дивертисмент:

Рис. D1. Аналитический поиск корней системы двух нелинейных алгебраических уравнений

Рис. D2. Решение задачи из рассказа А.П. Чехова «Репетитор»: в системе уравнений одноименные, но разноцветные переменные

Рис. D3. Решение задачи о размерах подводной лодки в среде будущей версии Mathcad



[1] Более правильно говорить не о корне функции, а о нуле функции. Но… см. статью.

[2] А к этому сводится решение многих математических, физических, химических и прочих предметных задач, когда необходимо, например, свести к равновесию какой-либо баланс и т.д.

[3] Функции численного решения этой задачи входят в состав Решателя (Solver), в разработке которого принимала участие фирма Frontline Systems, Inc (www.frontsys.com). Эта же фирма поставила Решатель и для другой популярной расчетной среды – для электронных таблиц Excel.

[4] Системы линейных алгебраических уравнений – это особая тема, которой в этой статье мы касаться не будем. Отметим только то, что линейные уравнения и системы – это частный случай нелинейности: линейную задачу вполне возможно решать «нелинейными» инструментами, хотя это, честно говоря, «забивание гвоздей микроскопом». В среде Mathcad есть особые инструменты для решения систем линейных уравнений, записанных в матричной форме (функция lsolve, например).

[5] В среде Mathcad до восьмой версии была одна системная переменная TOL (TOLerance – терпимость, снисходительность к погрешности). Затем эта переменная распалась на две TOL и СTOL. Теперь TOL «отвечает» за работу функций root, Find, Minimize, Maximize и MinErr, а СTOL – за ограничения (Constrains).

[6] В Mathcad встроено ядро символьной математики из пакета Maple MKM (MathSoft Kernel Maple – ©1994 Waterloo Maple Softwarewww.waterloomaple.com).

[7] В среде Mathcad меню, хранящее команды символьной (аналитической) математики, называется Symbolic, а в среде StudyWorks («школьная», укороченная версия Mathcad) – Algebra. Символьная математика – это калька с английского, которая довольно точно отображает суть данного современного компьютерного инструмента: машина оперирует не числами (численная математика), а символами (и конечно, числами тоже).

[8] У функции sin(x)/x на один корень меньше, чем у функции sin (x).

[9] Один студент автора сказал, что Mathcad «подавился» слишком большим количеством корней.

[10] Функция root имеет в качестве первого своего аргумента не уравнение, а выражение; возвращает же функция root значение своего второго аргумента, при котором значение выражения по модулю не превышает значения системной переменной TOL (по умолчанию 10-3). Функцию root, честно говоря, следовало бы назвать не root (корень), а zero (нуль). Отсюда и путаница в терминологии, которую мы отметили в самой первой сноске статьи.

[11] Вблизи точек «водораздела», точек, где производная равна нулю.

[12] Мы «подбираемся» ко второй половине названия статьи.

[13] А всего их двадцать четыре. Их легко найти средствами символьной математики Mathcad (см. рис. D1). На рис. 5 показаны, естественно, только действительные корни системы. Методика построения графика (сканирование) описана в статье «История одного шедевра» – http://twt/ochkov/Lace/Lace.htm.

[14] Мой «искусствовед» сказал что рис. 4 годится для пола в ванной комнате, где принимает душ создатель функции root.

[15] Тут можно упомянуть и о скоростных характеристиках этих методов: на создание рис. 6 ушло 20 сек, а рис 7a и рис. 7b – 137 сек.