Гурский Д., Турбина Е. - Вычисления в MathCad 12 (1077322), страница 61
Текст из файла (страница 61)
верхнюю частькривой на рис. 8.4). Важно отметить то, что а и b вполне могут оказаться больше TOL,так как разность двух последних приближений и расстояние от них до корня прямоникак не связаны. Если алгоритм сходится медленно (по причине своей неэффективности или «неудобности» функции), то расстояние между точками двух последнихприближений может быть весьма малым даже тогда, когда они находятся еще оченьдалеко от корня.8.1.
Решение уравнений * 2 6 5Наиболее достоверным ответ будет, если работу численного алгоритма контролировать с учетом обоих критериев. При этом последнее приближение будет локализовано в прямоугольной области, образующейся на пересечении соответствующих критериям бесконечных вертикальной и горизонтальной областей (см. рис. 8.4).В случае функции root критерием сходимости к корню является только величина функции в точке приближения. То, насколько отличаются два последних приближения, неучитывается. Такой подход увеличивает скорость работы численных алгоритмов, однако снижает надежность получаемого результата. Мы же, реализуя применяемые rootчисленные алгоритмы, будем учитывать оба критерия.Изменить величину TOL можно либо с помощью окна, открываемого командой Tools • Worksheet Options (Инструменты • Параметры документа), либо выполнив соответствующее присваивание непосредственно слева или сверху функции численногорешения.
Присвоить TOL можно совершенно любое значение. По умолчанию TOL равняется 10 3. Однако в случае функции root наибольшим корректным (при стандартныхнастройках отображения результата) значением TOL является 10~5. Это ограничениесвязано с тем, что стандартное значение T0L=10 3 может обеспечить точность определения корня до третьего знака после запятой далеко не всегда (в этом численные методы решения уравнений отличаются от используемых в Mathcad численных методовинтегрирования, ошибка которых всегда меньше TOL). Теоретически наиболее высокуюточность дает значение TOL, равное 10~16.
Однако нижней границей для TOL в случаефункции root является 10 12-10 13. Делать TOL меньше нет смысла, так как ошибки округления компьютерной арифметики и погрешности при расчете значений трансцендентных функций все равно не дадут достигнуть предельной возможной точности —вплоть до 16 знака мантиссы. Также, если TOL очень мала, резко повышается вероятность того, что численный алгоритм не сойдется к решению.Величина TOL должна задаваться исходя из того, насколько в абсолютном выражении приближение может отличаться от истинного значения корня. Например, еслирешение нужно получить с точностью до 0.00001, TOL должен быть меньшим или равным 10~5. Впрочем, это правило не очень строгое. Обычно точность решения на 2-3 порядка превышает T0L Но в случае функций, изменяющихся в области корня существенно медленнее, чем у(х)=х, точность решения может оказаться ниже TOL. Этоособенно характерно, если используется метод секущих или Мюллера.
Поэтому, обращаясь к соответствующим методам, нужно обязательно строить график и анализировать поведение функции в области пересечения с осью X. Если она изменяется медленнее,чем у(х)=х, та для того, чтобы с высокой надежностью получить результат с абсолютной погрешностью, не превышающей 10"", TOL следует задать на несколько порядковменьшим, чем ЮЛ Если же функция изменяется быстро, то очень точное решениеможно получить и при невысоком TDL Также о скорости изменения функции можносудить по абсолютному значению производной в окрестности точки корня.
Если онобольше 1, то функция изменяется быстрее, чем у(х)-х, если меньше — функция изменяется медленно. В случае очень медленно изменяющихся функций нужно применятьметоды интервалов локализации корня, а не метод секущих. Если же использоватьметоды локализации корня невозможно (к примеру, корню соответствует касание кривойфункции оси X, а не ее пересечение), численному методу решения уравнений стоитпредпочесть графический. Впрочем, есть очень хороший прием, позволяющий улучшить результаты работы численных методов в случае медленно изменяющихся в области корня функций. Он заключается в замене функции f(x) на g(x), которая получается делением f(x) на ее производную:266 *Глава 8.
Решение уравнений и систем уравненийg(x) =dx~Функция g(x) будет иметь нули там же, где и f(x). Однако там, где f(x) изменяетсяочень медленно, g(x) будет изменяться быстрее. Наоборот, там, где f(x) изменяетсябыстро, g(x) будет изменяться медленнее. Переход от f(x) к g(x) чем-то напоминаетнормирование: функция подгоняется под некий средний уровень.В отдельных случаях выражение уравнения можно улучшить тождественными преобразованиями. Например, если левая часть уравнения соответствует чрезвычайно медленно изменяющейся показательной функции, то стоит произвести логарифмирование.
Полученная логарифмическая функция будет иметь нули там же, где и исходнаяпоказательная, однако изменяться она будет гораздо быстрее (см. пример 8.11).Описанные приемы улучшения медленно изменяющейся функции особенно действенны при поиске ее нулей методом секущих (или Мюллера). Без их применения найденное решение может отстоять от точки корня на расстояние, значительно превышающееTOL. По сравнению с методом секущих (Мюллера), методы интервалов локализациикорня чувствительны к виду функции в меньшей степени. Однако рассматриваемыеприемы позволяют увеличить и их эффективность (см. пример 8.11).Пример 8.11.
Поиск нулей медленно изменяющейся функцииПусть стоит задача найти нули следующей функции при положительных х:f ( x ) : = x ~ X - 0.000001По графику определяем, что на интересующем промежутке функция имеет только один нульрасположенный в окрестности точки х=7. Находим его:root(f(x),x,5,10) = 7.0657934747539093Чтобы получить результат более точно, перейдем от функции f(x) к g(x), которая получаетсяделением f(x) на ее производную:g(x) := f(x) + —dxft»root(g(x),x,5,10) = 7.0657967283224243Еще лучшую точность можно получить, прологарифмировав входящие в f(x) выражения:Щх) :=-х-1п(х) + 6-1п(Ю)root(lft»,x,5,10)= 7.0657967282996212Чтобы определить, насколько каждый из полученных корней точен, найдем решение уравненияаналитически:- х . .- 6X - 10solve ,x1п(2) + 1п(5)simplifyW(6-ln(2) + 6-ln(5))Найденное решение содержит W — функцию Ламберта.
Определить ее точное значение нельзя,однако можно получить ее сколь угодно точную приближенную величину, задействовав оператор float. Найдем значение корня с точностью до 40 знаков мантиссы:W(6-ln(2) + 6-ln(5))float,40-» 7.0657967282996206110601025646646026900908.1. Решение уравнений* 267Итак, ответ, выданный системой при поиске нуля для ^модифицированной f(x), точен до пятого знака после запятой. Переход от f(x) к g(x) увеличил точность на пятьзнаков. Наиболее же результативным оказалось логарифмирование.
Полученный приэтом ответ точен до 15-го (!) знака.Очевидно, что входить в ответ «ненадежные» знаки не должны. Однако как определить, какие знаки лишние, если уровень погрешности зависит не только от TOL, но и отвида функции и прочих факторов? Алгоритм решения этой проблемы следующий: чтобы убедиться, что в рамках выбранной точности решение найдено верно, нужно округлить результат до нужного знака, а затем уменьшить TOL на 1 -2 порядка.
Если при этомответ изменится, значит, он был получен с погрешностью. Также нужно попробоватьизменить начальные приближения. Если при этом ответ поменяется, то можно бытьуверенным, что в нем имеется серьезная неточность, обусловленная, скорее всего,слишком низкой скоростью изменения функции в районе точки корня.Пример 8.12. Степень влияния TOL на точность численного решенияуравнений в случае методов интервалов локализации корняЗадача: найти первый положительный корень уравнения cos(2x+l) 3 =0.Задаем на основании уравнения функцию:f(x):=cos(2x+l)Значение первого положительного корня очевидно. На него мы будем ориентироваться, определяя точность выдаваемых системой ответов.л1=0.28539816339744842TOL=0,1.
Ответ точен до 1-го знака после запятой.TOL-= l(f1root f(x),x,O,2I= 0.228536607221123JTOL-0,0001. Ответ точен до 4-го знака после запятой.TOL:=l(f4rootfl»,x,0,-j = 0.285323404126252TOL=0,000000000000001. Ответ точен до 15-го знака после запятой.TOL:= 10~ 1 5root] f(x),x,0,- | = 0.285398163397448V2)Чтобы эффективно использовать функцию root, нужно знать основные идеи применяемых ею численных методов.
При задании в качестве начального приближения интервала локализации корня, решение ищется с помощью метода Риддера (Ridder). Еслиданному методу не удается найти корень, используется метод Брента (Brent). И методРиддера, и метод Брента относятся к одному и тому же типу методов численного решения уравнений — методам интервалов локализации корня. Родоначальником этойгруппы методов является метод Больцано деления пополам (бисекции).