Алгоритмы арифметических операций для воспроизведения многомерных функций

М.И.Ледовской

АЛГОРИТМЫ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ ДЛЯ ВОСПРОИЗВЕДЕНИЯ МНОГОМЕРНЫХ ФУНКЦИЙ

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

В двумерном случае задача может сводиться к формированию траектории, которая задается неявно в виде функции/{х,у)=0, где х и у - независимые аргументы. Если искомая траектория аппроксимируется ломаной кривой, проходящей через узлы координатной сетки, то точность приближения достигается путем уменьшения приращений аргументов Ух и Уу (рис.1).

Рис.1. Процесс аппроксимации траектории

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

Vxf = f(x +Vx,y)- f(x,y),

V yf = f

V x+ yf = f(x +Vx, y + Vy )— f(x, y),

где Vxf и Vyf — координатные приращения, Vx+f — диагональное приращение. Данные приращения позволяют оценить крутизну функции f(x,y) по трем направлениям и тем самым выбрать направление рабочего шага.

Из (1) следует, что в текущем шаге вычисляются три значения функции f(x,y), из которых только одно становится рабочим, а два других являются вспомогательными. При увеличении количества независимых аргументов объем вспомогательных вычислений существенно возрастает. Данное обстоятельство приводит к завышенным требованиям к производительности микропроцессорной системы, на которую возлагается формирование траектории.

Между тем способ вычисления приращений по формулам (1) имеет недостаток, который заключается в следующем. В случае малых значений Ух и Уу приращения У/, У/ и Ух+/ вычисляемые как разности близких значений функции /(х,у), получаются малоразрядными, т.е. с нулевыми старшими разрядами. Отсюда следует, что время, которое расходует микропроцессор на получение старших заведомо нулевых разрядов приращений, является непроизводительным.

Отмеченный недостаток устраняется в другом способе вычисления приращений многомерных функций [1]. Его суть заключается в том, что приращения функции по пространственным координатам определяются в результате вычисления аналогичных приращений во всех арифметических операциях, входящих в данную функцию. Для обоснования такого подхода применительно к рассматриваемой задаче определим граф функции /(х,у) в виде 0=0{Б,К}, где £ - множество арифметических операций, представляющих собой вершины графа, Я - множество дуг (переменных), отображающих информационные связи между вершинами.

Кроме того, введем в рассмотрение пространственный дельта-оператор У, обеспечивающий вычисление приращений функции ^х,у):

Vx V ^

V/ = V у /= V у/

Vx+ у _ V x+ у/_

Нетрудно показать, что применение оператора V к функции /(х,у) эквивалентно воздействию его на граф 0{Б,К}, причем

VО = 'VG{S,R} = G{VS,VR} .

Из (3) видно, что граф приращений VG легко образуется из графа функции G путем простого переобозначения дуг и вершин. Кроме того, граф VО предписывает

применение оператора V ко всем арифметическим операциям £ графа G, находящимся в его вершинах, и к переменным Я, образующим информационные связи между вершинами. Следовательно, для нахождения приращений V, Vyf и Vx+yf необходимо вычислить аналогичные приращения во всех арифметических операциях функции /(х,у).

Следуя методике, изложенной в [1] , получим алгоритмы арифметических операций на основе приращений по пространственным координатам. Обозначим

через і номер текущего шага. Тогда применение оператора V к арифметической операции сложения (вычитания) = /р ±/д приводит к алгоритму вида

^хїкі = ^хїрі ±Vх!ф>

Vу/кі = ^у/рі ±Vу/ді’

Vx+ уїкі = V х+ у/рі ± Vx+ у їді’

где/к,/г и- промежуточные переменные функции/(.х,у).

Особенность рассматриваемых алгоритмов заключается в том, что рабочие значения промежуточных переменных вычисляются с учетом управляющего век-

тора, который задает тип /'-го шага (координатный или диагональный). В частности, значение функции / определяется по формуле

= !к

где их, иу/ - компоненты управляющего вектора Ум,:

УМ = [мх1>му1] =

[1,0 ] - координатный шаг по х;

[0,1]- координатнышшагпо у;

[1,1 ] - диагональнышшаг.

Вектор Ум, вырабатывается на /-ом шаге с помощью приращений У/ , У/

и Ух+/ функции /(х,у) и является общим для всех выполняемых операций. Заметим, что использование управляющего вектора в вычислительных операциях

предложено ранее в работах [2,3], посвященных воспроизведению многомерных функций на цифровых интегрирующих машинах.

Для операции умножения/ = алгоритм на основе приращений по пространственным координатам имеет следующий вид:

У'х!к = 1р(1-1 )Ух!д1 + (' Ад(, -1) + Ух/дг )Уxfpi,

Уу~к = /р

Ух+ у/кг = /р(,-1Ух+ у/д, + (/д(,-1) + Ух+ у/д, )Ух+ у/р,.

Приращения У/ У у/к,, У х+ у/к, подвергаются округлению в соответствии с

алгоритмом, полученным в [1]. Особенность алгоритма заключается в том, что все приращения округляются с учетом общего остатка е/.1, полученного на предыдущем шаге:

У х/к, = Р(У х~кх + е,-1 )>

У у/к, = Р

У х+ у А, = Р(У х+ у1ш + е, -1 )’

где Р(-) - функция, обеспечивающая выделение округленного приращения.

Новый остаток е/, как и рабочее значение /, формируется в соответствии с управляющим вектором Ум,:

ех, = К(У хТкл + е,-1 ),

еу, = К

е(х+у ) = Н-(У х+ у~кх + е,-1 ), е( = (мх&му )ех, + (мх&му )ех( + (мх & му )е(х+ у ) ,

где ех, еу/ - координатные остатки, е (х+у)/ - диагональный остаток; К(-) - функция, обеспечивающая выделение остатка.

В случае операции деления / = // оператор У следует применить к соотношению / = // + г, как это показано в [1], где г - неразделенный остаток дели-

мого fp. В результате можно получить следующий алгоритм на основе приращений по пространственным координатам:

V'xfki = ()i —1 + V xfpi — fki *V xfqi ) div (fq(i—1) + V'xfqi )>

Vyfki =

V x+ yfki = (ri —1 + V x+ yfpi — fki * Vx+ yfqi )di (fq(i—1) + V x+ yfqi )>

где div — оператор получения частного. Из (10) видно, что приращения Vxfri, Vfki и

V+f формируются с использованием общего остатка делимого ri-1, полученного на предыдущем шаге.

Новый остаток ri, как и остаток ei в операции умножения, определяется с учетом управляющего вектором Vui:

rxi = (ri—1 + Vxfpi — fki *Vxfqi )mod (fq(i—1) + Vxfqi )> ryi = (ri—1 + Vyfpi — fki * Vyfqi )mod (fq(i—1) + Vyfqi ), r( x+ y ) = ()i—1 + V x+ y fpi fki *Vx+ yfqi )mod (fq(i—1) + V x+ yfqi )> ri = (uxi & uyi frxi + (uxi & uyi )ryi + (uxi & uyi ))(x+ y ) >

где rxi, ryi — координатные остатки, r(x+y)i — диагональный остаток; mod — оператор получения остатка.

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

Рассмотрим отвлеченную операцию целочисленного деления z=y/x, где соотношение между делимым y и делителем x таково, что получаемое частное z является малоразрядным. Пусть делимое является двойным словом y=2nYj+Y2, где Yj - старшее слово, Y2 - младшее. Предположим, что делитель x «нормализован», т.е. приведен к виду x=2n+X2. Тогда делитель может изменяться в интервале 2n<x<2n+1. Заметим, что «нормализация» делителя вызывает необходимость соответствующей корректировки делимого.

На рис.2 в качестве примера показано расположение делимого и делителя в регистрах микропроцессора Intel 8086 при сделанных выше предположениях. Старший бит делителя размещен в бите переноса CF регистра флагов микропроцессора.

2

n-1

-1

Y1

Y2

CF

X,

X

X

Рис.2. Расположение делимого и делителя в регистрах микропроцессора

Поставим задачу свести операцию деления к операции умножения на малоразрядную величину, которая может выполняться ускоренно. С этой целью воспользуемся формулой линейной интерполяции и применим ее к дроби 2=у/х. Поскольку частное ъ зависит от делимого у линейно, то можно рассматривать интерполирование функции 2=2(х), где х является аргументом, а у - параметром, который с целью сокращения записи опущен. Тогда по формуле линейной интерполяции имеем [4]:

г

где х0 - опорное значение аргумента; к - шаг по этому аргументу (рис.3).

Рис.3. Линейная интерполяция функции 2

Выберем такие значения х0 и к, которые обеспечивают максимальную простоту формулы (12): х0=к=2п. В результате образуется единственный интервал интерполяции, равный интервалу делителя 2п<х<2п+1. Причем величины, входящие в формулу (12), принимают следующие значения:

2(хо)= 2-пу=¥і+2-пЇ2, 2(хо+к)=2-1(Ті+2-п¥2) , (х-хо)=Х2.

Поэтому из (12) получаем

= 2-п (у-2~1Х2У1)-2~2п~1Х2У2

Пренебрегая величиной 2'2п'1Х2У2<2'1, из (14) находим

2 = 2-п

Наличие в формуле (15) коэффициента 2~п приводит к появлению дробных разрядов, что требует округления результата до целого значения. С целью уменьшения инструментальной погрешности воспользуемся способом округления по /. Тогда получим искомый алгоритм в окончательном виде:

2 = РпП-1[у - 2~1Х2У1 + 2п-1 \ ,

где Р,2п-1[]2 - функция, которая обозначает выделение старшего слова из 2п-разрядного аргумента. Данная операция обеспечивает учет коэффициента 2-п.

Алгоритм (16) обладает инструментальной погрешностью, которая подчиняется оценке у<2']. Такая оценка становится возможной благодаря способу округления по /.

Заметим, что вследствие указанного выше соотношения между делимым у и делителем х, множитель У] в алгоритме (16) является малоразрядным. Таким образом, алгоритм (16) позволяет свести операцию целочисленного деления к ускоренному умножению на малоразрядную величину.

Оценим методическую погрешность алгоритма (16). Для этого воспользуемся приближенным выражением погрешности формулы (12) [4]:

е

где а(2 - вторая производная частного г по аргументу х. Методическая погрешность е(х) принимает максимальное значение в точке х0+к/2 (рис.3). Так как в нашем случае х0=И=2п, то нетрудно показать, что етах=2'(п+33у/],5 или етах »2-3У]/],5.

Найдем допустимое значение Уь исходя из баланса инструментальной и методической погрешностей алгоритма (16). При этом потребуем, чтобы етах<утах. Тогда, учитывая приведенную выше оценку у < 2-], получаем У] < 6. Последнее условие накладывает ограничение на разрядность частного г. Так как старшее слово делителя х представлено одним битом Х]=] (рис.2), то допустимая разрядность частного составляет 3 двоичных разряда.

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

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Ледовской М.И. Алгоритмы микропроцессорных систем для решения задач оптимального управления // Компьютерные технологии в инженерной и управленческой деятельности. - Таганрог.: ТРТУ, 1999. - С.84-100.

2. Каляев А.В., Золотовский В.Е., Ледовской М.И. Воспроизведение функциональных зависимостей многих переменных на цифровых интегрирующих машинах. // Управляющие системы и машины. 1976. №1. - С.74-78.

3. Золотовский В.Е., Ледовской М.И. Цифровой интегратор для воспроизведения многомерных функций. Авт. свид. СССР, №519736. 1976.

4. Бахвалов НС. Численные методы. Анализ, алгебра, обыкновенные дифференциальные уравнения. - М.: Наука, 1973. - 631с.

С.И. Клевцов, Е.В.Удод

ПРОСТРАНСТВЕННАЯ ПЛОСКОСТНАЯ МОДЕЛЬ ГРАДУИРОВОЧНОЙ ХАРАКТЕРИСТИКИ ИНТЕЛЛЕКТУАЛЬНОГО ДАТЧИКА ДАВЛЕНИЯ

Снижение погрешности измерения физической величины в интеллектуальном датчике давления базируется на использовании специализированных пространственных моделей его градуировочной характеристики, адаптированных к особенностям поведения функции преобразования определенного типа чувствительного элемента (ЧЭ), группы элементов одного типа и даже конкретного ЧЭ,