8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 16 17 18 19 20 21 22 ... 177

действительным числом, выдается с небольшой мнимой частью. Ее появление — результат погрешности вычислений, и, естественно, ее присутствие в ответе делает его математически некорректным. Чтобы избавиться от такой случайной мнимой части, следует уменьшить величину порога нуля для комплексных чисел Complex threshold рассматриваемой вкладки. По умолчанию Данный параметр равен 10, что на пять порядков меньше порога нуля для действительных чисел. Это означает, что в том случае, если отношение действительной части к мнимой превысит 1010, в качестве ответа будет отображена только действительная. И, наоборот, если это отношение окажется меньшим по модулю, чем 10 ,", на лист будет выведена только мнимая часть. Максимальное значение Complex threshold также меньше, чем Zero threshold, и составляет 63. Примеры округления комплексных чисел:

10+ !0"l0-l=1010~10+10i=10i

Если не знать особенностей представления чисел на компьютере, то возможны очень интересные -«сюрпризы». Например, попробуем вычислить значения двух алгебраически идентичных выражений и посмотрим, совпадут ли результаты:

Цх) * —=-- g(x) := *(л/хП - fx)

\/х+ 1 + \jx

rtSOOO)- g(5000) = 4.mxl0~ 11ft500000)-g{500000)= 3.72бхЮ-9

Результаты расчетов по двум идентичным формулам различаются, пусть и незначительно. А это означает, что если бы мы пытались установить факт равенства этих выражений, то вывод был бы сделан неверно.

Причиной появления ошибок, подобных описанной, является то, что числа сохраняются с ограниченной точностью. Конечно, 15-17 знаков мантиссы - это более нежели достаточно для большинства расчетов. Но в некоторых случаях ошибки округления способны накапливаться, искажая результат весьма значительно. Например, в следующем примере показано, что путь, которым осуществляется вычисление, в случае численных расчетов влияет на результат (что связано с разной погрешностью разных операций):

1000000

V 0.00001234=12.3399999997527 о = I

0.00001234-1000000 = 12.3400000000000 Даже более значительные ошибки, чем при суммировании и умножении, возникают при проведении таких арифметических операций, как деление и, особенно, извлечение корня. Кстати, чем ближе число, с которым проводится та или иная арифметическая операция, к крайним значениям численного промежутка, значениями в пределах которого может оперировать компьютер, тем относительная ошибка вычислений выше.

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


sin(1OOOOT() = -4.856xlO 13co»-10000lj = J .954x10 11

tan-1000lj = 1.013xl012cotT0,°)"«-4,466xl05

Из приведенных примеров можно сделать вывод, что в подавляющем большинстве случаев уровень доверия к численному результату не может включать все 15-17 цифр мантиссы. Однако и ниже 10-го знака точность опускается редко. Поэтому наиболее корректным будет использовать округленные ответы приблизительно таких порядков (впрочем, используемые па практике значения чаще всего округляются до 3-го знака — при этом все вычислительные ошибки Mathcad становятся практически незаметными) Если же вас интересует результат предельно высокой точности, для проведения вычислений нужно использовать не численный, а символьный расчет. Если же расчет можно осуществить только численно, то сгладить погрешности можно, уменьшив порог нуля (впрочем, данный подход применим далеко не всегда).

Иногда при расчетах возникает ситуация деления на нуль. При численных расчетах оперировать понятием «бесконечность» невозможно, поэтому система выдаст сообщение об ошибке. Чтобы оперировать выражениями, в которые входит бесконечность (или при вычислении которых бесконечность получается), расчет следует проводить символьна

Самой большой странностью численной арифметики в Mathcad является то, что при делении 0 на 0 в результате получается 0:

О - . rin(x)Л

- = 0 Дх):»- КО) = О

Ох

То, что 0/0 не равно какому-то конечному числу — это аксиома. Если же признать, что О можно разделить на 0, то можно будет с легкостью доказать, например, что 1 равно 2 (попробуйте это сделать). Трудно сказать, что заставило разработчиков ввести в систему столь необычную особенность, но помнить о ней нужно, так как она может стать причиной трудноуловимой ошибки. Кстати, в универсальных языках программирования при делении 0 на 0 получается неопределенная числовая величина, обозначаемая обычно как NaN. В Mathcad же такой величины нет (вернее, есть, но она используется немного в другом контексте).

При проведении расчета символьно отношение 0/0 вызывает ошибку.

2.3.3. Особенности реализации математических функций

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

Основные арифметические операции над числами с плавающей точкой, такие как сложение, умножение или деление, поддерживаются компьютером на аппаратном уровне. То есть их проделывает процессор напрямую, Потому скорость выполнения подобных операций может быть крайне высокой. Такие же операции, как вычисление синуса


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

В основе реализации таких невыразимых в общем случае через арифметические операции (они называются трансцендентными) математических функций, как экспонента, арктангенс или логарифм, лежит одна чрезвычайно важная идея, доказываемая в математическом анализе. Ее суть сводится к тому, что функция, при соблюдении некоторых ограничений, может быть заменена в окрестности данной точки на стеленной ряд. Степенной ряд представляет собой сумму вида af>x°+ al-x1 + a2xJ +...+ anx", где аО, al. а2 ... an — некоторые коэффициенты. Нахождение для функции приближающего ее ряда называется разложением в степенной ряд. Чем больше будет найдено членов разложения, тем точнее будет приближена функция. Также точность приближения зависит оттого, насколько далеко располагается дан н ая точка от той, для которой разложение было проведено.

Например, для синуса степенной ряд в точке разложения а-0 имеет вид (12 членов разложения. 6 из них равны 0):

, . . , I 3 IS 17 1 91 li пП2\

sin(x) = t х---х +--х---х +--х--X +Olx 1

б 120 5 040 362880 3 9916800v

Зная, в какой ряд разлагается функция, написать на основании него алгоритм для определения ее значений не составляет никакого труда Единственное, нужно правильно оценить, сколько следует взять членов разложения, чтобы точность приближения была достаточной. Для этого существуют специальные формулы, пртэодить которые в этой главе будет излишним (соответствующий пример имеется в гл. 12).

Итак, математические функции вычисляются с помощью приближенного ряда. Точность таких вычислений равна в идеале точности представления чисел. Это означает, что в 14-15 знаке мантиссы ошибка будет почти наверняка. Конечно, это не важно в подавляющем большинстве случаев. Но иногда н эта ошибка может стать фатальной. Прежде всего, это касается точек разрывов и нулей функций. Например, для любого школьника очевидно, что sin(n-n) при целых п равен 0. В Mathcad же при проведении расчета численно равенство ain(n-n)-0 почти наверняка не будет соблюдаться. То же самое можно сказать о значении любой функции практически в любой точке: точным до 17 знака мантиссы оно не будет.

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

2.3.4, Формат вывода численного результата

При стандартных установках численный ответ отображается только до третьего знака после запятой. Это связано как с тем, что на практике, как правило, более высокой точности и не требуется, так н с тем, что многие численные ал горитмы (например, решения уравнений) при обычных настройках работают именно с такой погрешностью.



0 ... 16 17 18 19 20 21 22 ... 177