Гурский Д., Турбина Е. - Вычисления в MathCad 12 (1077322), страница 18
Текст из файла (страница 18)
Кстати, в универсальных языках программирования при делении 0 на 0 получается неопределенная числовая величина, обозначаемаяобычно как NaN. В Mathcad же такой величины нет (вернее, есть, но она используетсянемного в другом контексте).При проведении расчета символьно отношение 0/0 вызывает ошибку.2.3.3. Особенности реализации математических функцийИспользуя в численных расчетах математические функции, важно иметь представление о том, как они реализуются на компьютере. Дело в том, что ввиду особенностей,лежащих в основе задания математических функций, возвращаемые ими значения далеко не всегда являются истинными.
Если этого не учитывать, то можно допуститьошибку, найти которую будет очень и очень сложно.Основные арифметические операции над числами с плавающей точкой, такие как сложение, умножение или деление, поддерживаются компьютером на аппаратном уровне.То есть их проделывает процессор напрямую. Поэтому скорость выполнения подобныхопераций может быть крайне высокой. Такие же операции, как вычисление синуса72•:• Глава 2. Вычисления и типы данныхили логарифма, аппаратно не поддерживаются. Причина этого не в том, что реализовать необходимый для этого алгоритм «в железе» невозможно. Нет, это вполне осуществимая задача (более того, основная аксиома микроэлектроники говорит, что аппаратноможно реализовать любой алгоритм). Просто вводить в процессор соответствующийэлемент не имеет смысла, так как создать математические функции очень просто программно, используя только лишь аппаратно поддерживаемые арифметические операции.В основе реализации таких невыразимых в общем случае через арифметические операции (они называются трансцендентными) математических функций, как экспонента, арктангенс или логарифм, лежит одна чрезвычайно важная идея, доказываемаяв математическом анализе.
Ее суть сводится к тому, что функция, при соблюдении некоторых ограничений, может быть заменена в окрестности данной точки на степеннойряд. Степенной ряд представляет собой сумму вида аО-х°+ al-x1 + а2-х2 + ...+ an-х", гдеаО, al, a2 ... an — некоторые коэффициенты. Нахождение для функции приближающего ее ряда называется разложением в степенной ряд. Чем больше будет найдено членов разложения, тем точнее будет приближена функция. Также точность приближениязависит от того, насколько далеко располагается данная точка от той, для которой разложение было проведено.Например, для синуса степенной ряд в точке разложения а=0 имеет вид (12 членовразложения, 6 из них равны 0):1 31 51 71 9111 Л / 1 3 \х +хх +хх +О1х IVJ6120504036288039916800Зная, в какой ряд разлагается функция, написать на основании него алгоритм дляопределения ее значений не составляет никакого труда.
Единственное, нужно правильно оценить, сколько следует взять членов разложения, чтобы точность приближениябыла достаточной. Для этого существуют специальные формулы, приводить которыев этой главе будет излишним (соответствующий пример имеется в гл. 12).Итак, математические функции вычисляются с помощью приближенного ряда. Точность таких вычислений равна в идеале точности представления чисел. Это означает,что в 14-15 знаке мантиссы ошибка будет почти наверняка. Конечно, это не важнов подавляющем большинстве случаев. Но иногда и эта ошибка может стать фатальной.Прежде всего, это касается точек разрывов и нулей функций.
Например, для любогошкольника очевидно, что sin(n-7i) при целых п равен 0. В Mathcad же при проведениирасчета численно равенство sin(n-rc)=0 почти наверняка не будет соблюдаться. То жесамое можно сказать о значении любой функции практически в любой точке: точнымдо 17 знака мантиссы оно не будет.Существуют и другие техники для приближенного вычисления математических функций. Так, все тригонометрические функции рассчитываются на основании тангенса,значение которого находят посредством разложения в цепную дробь. Данная дробьсходится быстрее соответствующего ряда Тейлора.. _. ,sinix) = 1-х2.3.4.
Формат вывода численного результатаПри стандартных установках численный ответ отображается только до третьего знакапосле запятой. Это связано как с тем, что на практике, как правило, более высокой точности и не требуется, так и с тем, что многие численные алгоритмы (например, решения уравнений) при обычных настройках работают именно с такой погрешностью.2.3.
Проведение расчета численно*73Точность же расчета численных значений алгебраических выражений или встроенныхфункций (а также их сочетаний) постоянна при любых величинах системных переменных и составляет 17 знаков после запятой. Поэтому при желании вы можете получитьи более точное, нежели при стандартных настройках, значение вашей переменной илифункции. Для этого установите курсор на текст ответа и выполните двойной щелчокмышью. При этом откроется вкладка Number Format (Формат числа) окна Result Format(Формат результата). В окошке параметра Number of decimal places (Количество десятичных позиций) данной вкладки определите, с точностью до какого знака после запятой (от 0 до 17) должен быть отображен результат.Кстати, открыть окно Result Format можно и с помощью соответствующей командыменю Format.
Причем между изменениями вида результата этими двумя способамиимеется существенное различие: в первом случае изменения коснутся одной лишь формулы, во втором — всего документа.Пример 2.10. Отображение численного результата с различной точностьюsin - ] = 0.342sinf - |sinl - ) = 0.34202sinf - I = 0.3420201433256Обратите внимание на то, что менее точный результат получается в Mathcad не простым отбрасыванием лишних десятичных знаков, а исходя из строгих математическихправил округления.По умолчанию незначащие десятичные нули в численных результатах не отображаются.
Однако, установив флажок Show trailing zeros (Показывать незначащие нули) на рассматриваемой вкладке, вы сделаете их видимыми.Пример 2 . 1 1 . Отображение незначащих нулей при различной точности- = 0.25000000004—\-гг. ( я5Ш= 2.000000000000-UОтображение больших чисел в десятичной форме не слишком удобно. Поэтому на практике обычно используется вид числа с порядком. При установках, принятых в Mathcadпо умолчанию, в такой форме отображается любое число, если модуль порядка соответствующего ему числа с плавающей точкой превышает три. Например:351500 = 1.5х 100.000015 = 1.5 х Ю "При необходимости величину показателя степени, при превышении которой числобудет отображаться с порядком, можно уменьшить или увеличить.
Чтобы это сделать,следует ввести требуемую величину порога в окошко параметра Exponential Threshold(Порог экспоненты). Очевидно, что значение это должно лежать между 0 и 15.Помимо обычной принятой в математике формы, числа с показателем степени могутбыть отображены и в так называемом инженерном формате. Особенностью его является то, что показатель степени всегда отображается числом, кратным 3. Если такая74• Глава 2. Вычисления и типы данныхформа представления числа для вас более привычна, то вам следует задействовать параметр Show exponents in engineering format (Показывать экспоненту в инженерном формате).Пример 2.12. Отображение числа в инженерном формате31000 = 1х10100000 =100x10310000 = 10x1031000000 = 1x106В Mathcad существует несколько типов представления численного результата.
Выбрать наиболее подходящий из них вы можете в списке Format (Формат) рассматриваемой вкладки Number Format.Всего имеется пять форматов численного результата.• General (Основной). Формат, выбранный по умолчанию. Позволяет произвольным образом определять количество отображаемых десятичных знаков (Number ofdecimal places), порядковый порог (Exponential threshold), визуализацию незначащихнулей (Show trailing zeros). Все примеры, которые были приведены нами ранее, отображались именно в этом формате.• Decimal (Десятичный). Результат отображается только в виде десятичной дроби.Десятичная часть числа контролируется параметром Number of decimal places (Количество десятичных позиций).
Если полученный результат имеет целую часть, длиннее 15 знаков, все числа, лежащие в нем после 15 позиции, будут заменены нулями.Пример 2.13. Представление результата в десятичном форматеGeneralDecimal= -9.365х Ю4= 1 х 10~г =-93648.0473- =0.00110001000• Scientific (Научный). Число отображается только со степенью таким образом, чтобы целая часть мантиссы состояла из одного символа. Количество десятичных знаков и отображение незначащих нулей результата определяется пользователем.