Гурский Д., Турбина Е. - Вычисления в MathCad 12 (1077322), страница 72
Текст из файла (страница 72)
Например, для системы22 ,х + у =1х- 6у = 0начальные приближения (и количество решений) действительно можно найти по декартовому графику, так как каждое из уравнений может быть представлено кривой8.2. Решение систем уравнений •> 3 1 1на плоскости (окружностью и параболой).
Точки пересечения этих кривых — это и естьрешения системы (рис. 8.10).Рис. 8.10. Определение начальных приближений для численного метода решения системыуравнений с помощью графикаНо далеко не всегда можно представить каждое уравнение системы в виде функциональной зависимости одной переменной от остальных. В большинстве случаев разделение переменных невозможно. При этом единственный универсальный способ прикинуть приближения для системы из двух уравнений — это построить поверхности,представив каждое уравнение как функцию двух переменных. Однако точно определить приближения по трехмерному графику довольно сложно (это можно сделать лишьочень и очень приблизительно). А если в системе 3 или 4 неизвестные? При этом, естественно, никаких графиков построить нельзя.
В этом случае приближения нужно братьтакие, чтобы они были близки к ожидаемому результату. Поиск же всех решений системы уравнений с помощью численного метода — это довольно сложная и трудоемкаязадача. Обычно с ней справляются, решая систему для целой области приближений.Впрочем, если в системе только два уравнения, то очень часто приближения все жеможно определить весьма точно. Для этого нужно построить график, на котором будутотображены кривые, получаемые при пересечении соответствующих уравнениям поверхностей плоскостью X0Y.
Чтобы нарисовать такие кривые, нужно так преобразовать функции, чтобы они принимали только два значения: одно, когда функция больше 0, и второе, когда она меньше 0. Затем на основании этих функций следует построитьконтурный график (рис. 8.11).Если окажется, что Mathcad не сможет найти решения при данных приближениях, попробуйте сменить их на другие. Вполне вероятна такая ситуация, что корни существуют, однако численный метод, «подбираясь» к ним, «попал в капкан» разрыва или экстремума. При этом дальнейшее вычисление приближений окажется невозможным.Также довольно распространенной ошибкой является попытка поиска комплексныхкорней при действительных приближениях. Чтобы найти мнимые корни, приближения также должны быть мнимыми.Между численными методами, используемыми для решения одного уравнения и систем уравнений, нет принципиальных различий.
Следовательно, основным параметром,определяющим точность решения, является порог, при достижении которого функциясчитается равной нулю. Как вы помните, при использовании функции root этому порогусоответствовала системная переменная TOL. Ту же роль исполняет данная переменнаяи при решении систем уравнений. Уменьшая TOL, вы увеличиваете точность, однакопри этом возрастает время расчета и чувствительность к виду функции.
Минимальное312 •Глава 8. Решение уравнений и систем уравнений73значение TOL — 10~' , стандартное — 10~ . Стоит воздержаться от «профилактического»назначения TOL минимального значения. Дело в том, что количество итераций, которыеможет совершить численный метод, ограничено ввиду накопления ошибки. Поэтомупри очень малом значении TOL имеется вероятность, что алгоритм просто не доберетсядо корня, исчерпав лимит на количество итераций. Величина TOL должна задаватьсяисходя из того, сколько знаков в ответе действительно значимо. В большинстве случаев T0L=10~3 обеспечивает вполне приемлемую точность.22fl.x,y) := if(x + y sin(y) - 15 > О,1,о)z(x,y) := if(sin(j0 + cos(y) - 0.5 > 0,1,0)Рис.
8 . 1 1 . Линии нулевого уровня для системы x 2 +y 2 sin(y)=15 и sin(x)+sin(y)=0.5При решении линейных уравнений в блоке Given-Find TOL не оказывает влияния на точность результата.В Mathcad реализовано несколько алгоритмов численного решения систем уравнений.Если алгоритм, используемый по умолчанию, не справится с задачей, можно попытаться сменить его на другой.
Для этого щелкните правой кнопкой мыши на тексте функции find. При этом откроется контекстное меню, в котором среди стандартных командимеются три пункта, определяющие тип используемого метода.• Пункт AutoSelect (Автоматический выбор). Численный алгоритм и его настройкибудут определены автоматически.
Если система линейная, то будет использовансоответствующий метод. Если она нелинейная, то сначала будет осуществлена попытка найти решения методом сопряженных градиентов. Если она окажется неудачной, то будет задействован метод Левенберга. Если и он окажется неэффективным, то система применит квазиньютоновский метод. Чаще всего нет никакогосмысла менять пункт AutoSelect на какой-то другой, так как при его активностиMathcad самостоятельно будет пытаться найти решения всеми доступными способами.
Сменить его стоит лишь, если вы хотите применить тонкие настройки или жеполучить решение каким-то конкретным способом.8.2. Решение систем уравнений • 3 1 3•Пункт Linear (Линейный) отвечает за реализацию итеративного метода (симплексметод) решения системы линейных уравнений. Обычно Mathcad самостоятельноотносит систему уравнений к той или иной группе, поэтому специально настраивать этот параметр нет необходимости.
Более подробно вопрос о решении СЛАУбыл рассмотрен ранее.• При подведении курсора к строке МопИпеаготкроется всплывающее меню, содержащее ссылки на три различных численных метода решения систем уравнений: сопряженных градиентов (Conjugate gradient), Левенберга (Levenberg-Marquardt), квазиньютоновский (Quasi-Newton). Вдаваться в подробности каждого из них мы не будемпо одной простой причине: очень трудно предсказать, какой из методов окажетсяэффективнее для данной системы уравнений. Чаще всего их эффективность оказывается близка, поэтому гораздо более принципиальное значение имеет правильныйвыбор начальных приближений и точности.Чтобы сравнить эффективность встроенных в Mathcad численных методов, решимсистему уравнений с заведомо известными корнями и сопоставим точности полученных результатов.Пример 8 .
3 1 . Точность решения системы уравнений различными методамиВыберем систему так, чтобы ее корни были равны, например, (1,2, 3). Решать ее будем при стандартной точности (TOL=10~3):х := Оу:=0z:=0Given222х + у + z = 14Метод сопряженных градиентов:x-y-z = 6х + у + z = 6-6find(x,y,z) --2.03226304051896 х10.-62.35318717667354 х Ю-7-3.20924135155387 х ЮМетод Левенберга:0.000000000000000find (х, у, z) --2.88657986402541x101.77635683940025x10"151 5Квазиньютоновский метод:-4.06755012072324x10find(x,y,z) -4.76041154673368x10-6.92861425233282x10-7у314 •Глава 8. Решение уравнений и систем уравненийПроверка показала более высокую эффективность метода Левенберга. Впрочем, этонеудивительно, ведь в системе Mathcad он считается основным.
Но и остальные алгоритмы показали неплохой результат. В общем же случае (ввиду того что на практике,как правило, суперточности и не требуется) нет разницы, какой из методов использовать, и прибегать к их смене стоит только в случае, если алгоритм, установленный поумолчанию, не смог найти решения. Если же система содержит много сложных уравнений и корни необходимо определить максимально точно, стоит сменить режимAutoSelect на режим Nonlinear/Levenberg-Marquardt.В описываемом всплывающем меню, помимо выбора самого численного метода решения систем уравнений, можно настроить некоторые параметры его работы. Сделать этоможно в специальном окне Advanced Options (Дополнительные параметры).
Здесь имеется пять строк, в которых находятся по два переключателя, ответственных за ту илииную настройку (рис. 8.12).[>я«а!«е estimation:Г fo<v-..ari >•V/амЫе «limation••' linger,! Г QujdubcLine* /амЫ« checkГ yeif? NoГ Yes<"• NoMufetariEvolutaaty:'"•';ty.;;•.3;:-Iff••':'•:•';/•:; ; |. ' . / • ' - > .:/i ; ;'Рис. 8.12. Окно тонких настроек функции findВ первой строке (Derivative Estimation) можно настроить тип аппроксимации производной:либо центральной (Central), либо правой (Forward) конечной разностью. По умолчанию производная вычисляется по трехточечной симметричной схеме: это хотя и несколько болеемедленно, зато дает лучшие результаты.
Так, при замене в методе сопряженных градиентов центральной схемы на правую двухточечную рассмотренная выше система решенане была, хотя при использовании параметра Central корни были найдены легко и с большой точностью. Поэтому не стоит менять схему вычисления производной, даже есликорни не были найдены: это почти наверняка приведет лишь к худшим результатам.Во второй строке можно определить тип аппроксимации функции: либо касательной(Tangent), либо параболой (Quadratic). Квадратичная аппроксимация более точная, нои более чувствительная к виду функции. Поэтому, дабы избежать лишних ошибок, поумолчанию определено использование касательных.
Но если решение найдено не было,можно попробовать использовать квадратичное приближение.Строка Linear Variable Check отвечает за проверку линейности вашей функции относительно переменных. Это может помочь сэкономить время за счет того, что частные производные будут приняты на первом шаге за константы и не будут вычисляться прикаждой итерации. Впрочем, задачи, для которых этот параметр может быть полезен,крайне специфичны и редки, поэтому менять установки в этой строке не стоит.Строка Multistart интересна только в том случае, если в блоке Given используется не функция find, а функции Maximize и Minimize (они служат для определения минимума и максимума функции). При активации данного параметра система будет пытаться найтиглобальный экстремум, а не ограничится поиском ближайшего локального экстремума.8.2.
Решение систем уравнений• 315Настройка Evolutionary может помочь найти решения в случае функций с многочисленными экстремумами, точками и областями недифференцируемости. Используемыеблоком Given-Find градиентные методы очень чувствительны к виду функции, поэтомустоль важно правильно выбирать начальное приближение. Модификация же, активируемая настройкой Evolutionary, позволяет значительно снизить данную чувствительность. Также она помогает найти из нескольких решений оптимальное, даже если онорасположено далеко от точки начального приближения.Настройки окна Advanced Options работают только для метода сопряженных градиентов и квазиньютоновского метода.
На алгоритм метода Левенберга они никак не влияют.Нельзя не упомянуть о еще одной очень полезной возможности блока Given-Find: в состав системы могут входить не только уравнения, но и неравенства (в которых можноиспользовать любые логические операторы). В некоторых случаях это может помочьограничить количество решений, и тем самым облегчить поиск нужного.Пример 8.32. Решение системы уравнений при наличии ограниченийна величины корнейх:=1у:=1Givenх2-2У= 8х3 + у 3 = 27X должен лежать в пределах от -10 до 10, у не должен быть равен 1:- 1 0 < х < Юл у Ф 1'2.972^Ограничения на величину корней не должны соблюдаться абсолютно точно.