Численные методы в среде символьной математики. Программирование и решение задач: Учебно-методическое пособие, страница 18

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

Declare Þ Algebra State Þ Input…:| Output…:| Simplification…:

Для моделирования вычислений с плавающей точкой нужно определить специальную функцию. В данном методическом материале для определения (программирования) функций будут использоваться операторы пакета DERIVE версий 4.02 под Windows.

Вычисления с плавающей точкой

С помощью операторного блока Ini для операций с плавающей точкой будем устанавливать точность вычислений (25 разрядов) в режиме ‘»’ (Approximate), которая должна быть заведомо большей, чем точность представления мантиссы (6 разрядов), максимальное число разрядов обрабатываемых данных º=25 и относительную погрешность «=0.000001.

Для перехода к числу с плавающей точкой необходимо оценить порядок исходного числа, сдвинуть его на число разрядов, равное порядку, ограничить разрядность дробной части до погрешности « с применением правильного округления и, наконец, восстановить порядок числа. Перечисленные действия реализуются следующими операторами:

     „                               -6†

#1: Ini:=…PrecisionDigits:=25,º:=25,«:=10  ‡

#2: Ifp(N,V):=IF(FLOOR(ABS(N)/10^V™1)’1,V™1+1,-V™1)

#3: Pp(N):=MAX(ITERATES([V™1+1,Ifp(N,V)],V,[0,0],º)`™2)

#4: Ifn(N,V):=IF(FLOOR(ABS(N)·10^V™1)’1,V™1+1,-V™1)

#5: Pn(N):=MIN(ITERATES([V™1+1,Ifn(N,V)],V,[0,0],º)`™2)

#6: p(N):=IF(¦N¦>1,Pp(N),Pn(N))

#7: Zn(N):=10^p(N)·«·FLOOR(N/(10^p(N)·«)+1/2)

Оператор #3 вычисляет порядок Pp(N) числа N, которое больше или равно единице. Для этого оператором ITERATES() в первой компоненте вектора V формируется натуральный ряд целых чисел от 0 до º , а во второй – модуль числа N, который, делится на соответствующую степень десяти, понижая порядок целой части. Строка с #2 контролирует понижение этого порядка, записывая во вторую компоненту вектора V очередное целое со знаком ‘+’, пока целая часть не нуль, и со знаком ‘-’ , когда целая часть станет равной нулю. Функция MAX() в операторе #3 выделяет из множества вторых компонент вектора V максимальное целое число, которое и является положительным порядком. Аналогично происходит и выделение функцией MIN() отрицательного порядка в строчках с номерами 4 и5.

Оператор #6 оба процесса выделения порядка объединяет в единый.

Последняя строчка восстанавливает порядок числа, ограничивает разрядность дробной части и выполняет округление. Исполняемым оператором является функция Zn(N), в которой аргумент N есть выражение, значение которого представляется в форме с плавающей точкой и шестью правильно округленными значащими разрядами. Например, пусть определены два операнда a и b:

a:=-12.9456789                                                       Zn(a) Þ -12.9457

b:=-0.123456789                                                     Zn(b) Þ -0.123457

a·b Þ1.5982319484190521 Zn(a·b)Þ 1.59823

Zn(a)·Zn(b)Þ1.5982372849Zn(Zn(a)·Zn(b))Þ1.59824

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

Решение задачи

Рекуррентные формулы для построения двух векторов X(n),Y(n) с (n+1)-й компонентой, которые учитывают внесение дополнительной погрешности (1+«), представим следующими процедурами: