Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Разложение функции синуса в ряд

Поиск

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

В случае синуса задача решается весьма просто:

,

Таким образом, отнимая некоторое число, кратное , мы сводим задачу нахождения синуса произвольного угла к задаче нахождения угла, лежащего между - /2 и /2.

На практике уменьшение аргумента не производится последовательным вычитанием. Вместо этого первоначальный угол делится на , причем деление организовано так, что частное получается целым. Остаток от деления будет определять собой некоторый угол, заключенный между 0 и . Если остаток больше /2, то еще одно вычитание дает угол между - /2 и /2. Целое частное от деления исходного угла на используется для того, чтобы определить, следует ли изменить знак окончательного результата (при нечетном частном).

Практическая часть

Алгоритм расчета функции синуса

В данной работе используется арифметика c фиксированной запятой, следовательно, требуется, чтобы все числа были представлены по абсолютному значению меньше единицы.

Для преставления функции синуса воспользуемся формулами приведения и двойного угла:

(1)

для случая, когда аргумент лежит в интервале и

(2)

для случая, когда аргумент лежит в интервале .

Рассмотрение двух случаев обусловлено тем, что невозможно использовать лишь одно соотношение (1), так как при расчетах будут возникать числа большие единицы.

В итоговых формулах расчета функции синуса (1) и (2) присутствует умножение на 2, которое будет заменено на сложение величины самой с собой.

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

Для представления формул (1) и (2) в виде общего ряда используем стандартный ряд Тейлора для синуса в диапазоне ≤ x ≤ :

 

 

Для аргумента синуса равного разложение в ряд Тейлора будет иметь следующий вид:

Далее, общий ряд для вычисления функции sin(x) по формуле (1):

(3)

Разложение в ряд Тейлора для аргумента синуса, равного , будет иметь следующий вид:

И общий ряд для вычисления sin(x) по формуле (2):

 

(4)

 

 

Будем рассматривать два случая:

1. В вычислительной машине реализована функция умножения. Алгоритм вычисления показан на Схеме 2.

2. В вычислительной машине не реализована функция умножения. При этом алгоритм процедуры умножения реализован отдельно и показан на Схеме 1. Алгоритм вычисления показан на Схеме 3.

 


 

begin
x, y
m:=0, res:=0  
m=n
да
нет
Сдвиг res на 1 разряд вправо
res:=res+x
end
m-й разряд y = 1
нет
да
Сдвиг res на 1 разряд вправо  
m:=m+1
Схема 1. Блок-схема процедуры умножения
n – разрядность сетки  

a:=x
res:=a0  
res:=res+b  
b:=a1*a
xpow:=a*a  
end
res:=res+b
b:=a2*xpow  
xpow:=xpow*a
b:=a3*xpow
xpow:=xpow*a  
res:=res-b
b:=a4*xpow  
xpow:=xpow*a  
res:=res+b  
b:=a5*xpow  
res:=res+b  
Схема 2. Функция умножения в вычислительной машине реализована  
begin
a > 0
Да
Нет
res:=a0  
res:=res+b  
b:=a1*a
xpow:=a*a  
end
res:=res-b
b:=a2*xpow  
xpow:=xpow*a
b:=a3*xpow
xpow:=xpow*a  
res:=res-b
b:=a4*xpow  
xpow:=xpow*a  
res:=res-b  
b:=a5*xpow  
res:=res+b  
Схема 2. Функция умножения в вычислительной машине реализована  
a:=x
begin
a > 0
Да
Нет
Схема 3. Функция умножения в вычислительной машине не реализована  
res:=a0  
res:=res+b  
b:=mult(a1, a)
xpow:=mult(a, a)  
end
res:=res+b
b:=mult(a2*xpow)  
xpow:=mult(xpow, a)  
b:=mult(a3*xpow)  
xpow:=mult(xpow, a)    
res:=res-b
b:=mult(a4*xpow)  
xpow:=mult(xpow, a)
res:=res+b  
b:=mult(a5*xpow)  
res:=res+b  
res:=a0  
res:=res+b  
b:=mult(a1, a)
xpow:=mult(a, a)  
end
res:=res-b
b:=mult(a2*xpow)  
xpow:=mult(xpow, a)  
b:=mult(a3*xpow)  
xpow:=mult(xpow, a)    
res:=res-b
b:=mult(a4*xpow)  
xpow:=mult(xpow, a)
res:=res-b  
b:=mult(a5*xpow)  
res:=res+b  

Оценка погрешностей



Поделиться:


Последнее изменение этой страницы: 2016-07-16; просмотров: 544; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.22.42.99 (0.008 с.)