Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Faz_Kursach_Inna.docx
Скачиваний:
19
Добавлен:
18.09.2019
Размер:
805.52 Кб
Скачать

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

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

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

(1)

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

(2)

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

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

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

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

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

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

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

(3)

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

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

(4)

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

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

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

Оценка погрешностей Погрешность входного параметра

Вычисление тригонометрической функции синус происходит на интервале значений аргумента (-π/2, π/2). При этом ошибка датчиков равна 0.005, ошибка АЦП должна быть хотя бы на порядок меньше ошибки датчиков, поэтому возьмем равной 0.0005.

Ошибка входного параметра складывается из ошибки датчика и ошибки АЦП:

; , тогда:

Найдем величину максимальной неустранимой ошибки по следующей формуле:

Возьмем производную от общего ряда (3):

Максимальный аргумент равен , подставив который в предыдущее выражение получим:

Вычислим необходимую разрядность АЦП – :

Отсюда .

Погрешность метода

Необходимо определить количество членов ряда, при которых ошибка разложения в ряд не будет превышать максимальную неустранимую ошибку, равную

Ряд Тейлора имеет бесконечное количество членов, поэтому, отбросив несколько членов общего ряда (3) по очереди, мы внесем ошибку ограничения. Для всякого знакопеременного сходящегося ряда эта ошибка ограничения по модулю меньше первого отброшенного члена.

Таким образом, ищем наименьшую ошибку, удовлетворяющую условию:

учитывая, что максимально возможный аргумент:

Заметим, что после шестой степени условие начинает выполняться постоянно, поэтому первым отбрасываемым членом будет

Тогда можно ограничиться первыми пятью членами общего ряда (3):

(5)

с погрешностью разложения:

Аналогично определяется количество используемых членов для общего ряда (4), учитывая, что максимально возможный аргумент: :

(6)

Общая ошибка для ряда

Положим, что:

погрешность представления аргумента,

погрешность представления коэффициентов,

ошибка округления.

Исходные величины a1, a2, a3, a4, a5 имеют абсолютные ошибки округления , где n - разрядность сетки. При выполнении операций перемножения появляются ошибки округления (округление происходит путем занесения в n+1 разряд 1). При выполнении операций сложения и вычитания ошибок округления не возникает, т.к. мы используем машину с фиксированной запятой.

Тогда:

Конечный ряд для вычисления функции синуса (5) может быть записан в общем виде как

,

где a1…a5 – определенные ранее константы.

Общую ошибку для ряда запишем следующим образом:

Запишем ошибки для отдельных операций:

Тогда конечное уравнение относительно с подставленными a1…a5 примет вид:

Решив его при , найдем разрядность сетки .

Теперь, зная разрядную сетку, уточним абсолютную ошибку округления коэффициентов:

Зная n, вычислим абсолютные ошибки в вычислениях:

= 0.0007440600245

=

Вычисление суммарной ошибки машины

Суммарная ошибка нашей машины:

0.00000185537834

0.004635002636

Архитектура машины

Наша машина может вычислять значения синуса в диапазоне .

К такому решению мы прибегли в связи с тем, что наша машина с фиксированной запятой, и она работает только со значениями аргументов, лежащими в диапазоне [-1;1] (так же данное решение позволяет снизить ошибку, связанную с разложением в ряд при большом значении аргумента). Но и при таком решении при углах больше аргумент будет больше единицы, поэтому на вход машины мы подаем не сам x, а x/2.

Для того чтобы избежать переполнений в вычислениях при x > , вычисления производим по формуле:

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

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

Аргумент x поступает в машину с коэффициентом масштабирования .

Все константы преобразуем в двоичный 13-и разрядный код. Все данные в двоичном представлении (13 знаков после запятой).

В машине с инструкцией умножения используется 4 регистра, а в машине с заменой инструкции умножения, сдвигом и сложением - 7.

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

Регистры r3, Res, x, y – рабочие регистры. В них находится один из операндов команды, либо источник, либо адресат.

Регистры r1, r2, r4 – регистры данных. Эти регистры выполняют две функции:

  • Хранят содержимое адресованного регистра данных, если ЦПУ осуществляет цикл чтения;

  • Хранят данные, которые ЦПУ собирается записать в адресованный регистр данных (цикл записи).

Система команд

Для случая, когда в машине реализована функция умножения:

Input

x

- ввод параметров в машину

Mul

r1,r2(C)

- умножить значение регистра r1 на значение регистра r2 (константу) и поместить результат в регистр r1.

Add

r1, r2(C)

- сложить значение регистра r1 и значение регистра r2 (константу) и поместить результат в регистр r1

Sub

r1, r2

- вычесть из значения в регистре r1 значение регистра r2, поместить результат в регистр r1

In

r1,[a]

- чтение данных из ячейки памяти в регистр r1

Out

[a],r1

- запись из регистра r1 в ячейку памяти

Mov

r1 [a], [a](C, r2)

- взять значение из ячейки памяти с адресом [a] (константу, значение регистра r2) и поместить результат в регистр r1 (в ячейку памяти с адресом [a]).

IfbZero

r1

- если значение регистра r1 меньше нуля, то пропустить следующую команду

Call

Label

- перейти к метке label.

Return

- возврат к следующей строке после команды Call

Begin

- начало программы

End

- конец программы

Для случая, когда в машине функция умножения не реализована:

Input

x

- ввод параметров в машину

Mul

r1,r2(C)

- умножить значение регистра r1 на значение регистра r2 (константу) и поместить результат в регистр r1.

Add

r1, r2(C)

- сложить значение регистра r1 и значение регистра r2 (константу) и поместить результат в регистр r1

Sub

r1, r2

- вычесть из значения в регистре r1 значение регистра r2, поместить результат в регистр r1

In

r1,[a]

- чтение данных из ячейки памяти в регистр r1

Out

[a],r1

- запись из регистра r1 в ячейку памяти

Mov

r1 [a], [a](C, r2)

- взять значение из ячейки памяти с адресом [a] (константу, значение регистра r2) и поместить результат в регистр r1 (в ячейку памяти с адресом [a]).

Shr

r, C

- сдвинуть значение регистра r на С бит вправо.

IfbZero

r1

- если значение регистра r1 меньше нуля, то пропустить следующую команду

Skp

r, s

- проверяет s – й бит регистра r, если он равен 1, то переходим на следующую строчку, иначе – следующую строчку пропускаем

Dec

r

- вычесть из значения регистра r единицу и поместить в регистр r.

Call

Label

- перейти к метке label.

Return

- возврат к следующей строке после команды Call

Begin

- начало программы

End

- конец программы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]