Компьютер для операций с функциями

 Компьютер для операций с математическими функциями (в отличие от обычного компьютера) оперирует с функциями на аппаратном уровне (то есть без программирования этих операций).

История

Вычислительная машина для операций с функциями была предложена и разработана Карцевым в 1967 году. В число операций этой вычислительной машины входили сложение, вычитание и умножение функций, сравнение функций, аналогичные операции над функцией и числом, отыскание максимума функций, вычисление неопределенного интеграла, вычисление определенного интеграла от производной двух функций, сдвиг функции по абсциссе и т. д. По архитектуре эта вычислительная машина являлась (пользуясь современной терминологией) векторным процессором. В ней использовался тот факт, что многие из этих операций могут быть истолкованы как известные операции над векторами: сложение и вычитание функций — как сложение и вычитание векторов, вычисление определенного интеграла от производной двух функций — как вычисление скалярного произведения двух векторов, сдвиг функций по абсциссе — как поворот вектора относительно осей координат и т. д. В 1966 году Хмельник предложил метод кодирования функций , то есть представления функции единым (для функции в целом) позиционным кодом. При этом указанные операции с функциями выполняются как уникальные машинные операции с такими кодами на единственном арифметическом устройстве

Позиционные коды функций одного аргумента

Основная идея

Позиционный код целого числа AA представляет собой запись цифр αα этого числа в некоторой позиционной системе счисления, имеющую вид A=α0α1αkαnA=α0α1αkαn Такой код можно назвать линейным. В отличие от него позиционный код функции F(x)F(x) одного аргумента xx имеет вид F(x)=(    α22α2k α11α12α1kα00α01α02α0k)F(x)=   α00  α11α01α22α2kα12α1kα02α0k то есть является плоским и треугольным, поскольку цифры в нем образуют треугольник.\\ Указанному позиционному коду целого числа соответствует сумма вида A=nk=0αkρkA=nk=0αkρk,. где ρρ — основание данной системы счисления. Указанному позиционному коду функции одного аргумента соответствует двойная сумма вида F(x)=nk=0km=0αmkRkykm(1y)mF(x)=nk=0km=0αmkRkykm(1y)m, где RR — целое положительное число, количество значений цифры αα, yy — определенная функция аргумента xx.\\ Сложение позиционных кодов чисел связано с передачей переноса в старший разряд по схеме αkαk+1αkαk+1. Сложение позиционных кодов функций одного аргумента также связано с передачей переноса по схеме (  αk+1,m+1  αk,mαk+1,m)   αk,mαk+1,m+1 αk+1,m. При этом один и тот же перенос передается одновременно в два старших разряда.

R-е треугольные коды

Треугольный код называется R-м (и обозначается как TKRTKR), если числа αmkαmk принимают значения из множества DR={r1,r1+1,,1,0,1,,r21,r2},DR={r1,r1+1,,1,0,1,,r21,r2}, где r1,r20r1,r20 и R=r1+r2+1R=r1+r2+1. Например, треугольный код является троичным TK3TK3, если αmk(1,0,1)αmk(1,0,1), и — четверичным TK4TK4, если αmk(2,1,0,1)αmk(2,1,0,1).\\ Для R-х треугольных кодов справедливы следующие равенства: \{begin\{pmatrix\} \{ \{ \& 0 \{\{ \{ \{nearrow \& \{ \{\{ aR \{longrightarrow \& 0 \{end\{pmatrix\}=\{begin\{pmatrix\} \{ \{ \& a \{\{ \{ \{nearrow \& \{ \{\{ 0 \{longrightarrow \& a \{end\{pmatrix\}, \{begin\{pmatrix\} \{ \{ \& a \{\{ \{ \{nearrow \& \{ \{\{ 0 \{longrightarrow \& 0 \{end\{pmatrix\}=\{begin\{pmatrix\} \{ \{ \& 0 \{\{ \{ \{nearrow \& \{ \{\{ aR \{longrightarrow \& -a \{end\{pmatrix\}, \{begin\{pmatrix\} \{ \{ \& 0 \{\{ \{ \{nearrow \& \{ \{\{ 0 \{longrightarrow \& a \{end\{pmatrix\}=\{begin\{pmatrix\} \{ \{ \& -a \{\{ \{ \{nearrow \& \{ \{\{ aR \{longrightarrow \& 0 \{end\{pmatrix\}, где a — любое число. Существует TKRTKR любого целого действительного числа. В частности, TKR(α)=αTKR(α)=α. Также существует TKRTKR любой функции вида ykyk. В частности, TKR(y2)=(0 0 1)TKR(y2)=(0 0 1).
agraphОдноразрядное сложение в R-х треугольных кодах состоит в том, что

  • в данном (mk)(mk)-разряде определяется сумма SmkSmk слагаемых разрядов αmk, βmkαmk, βmk и двух переносов pm,k1, pm1,k1pm,k1, pm1,k1, поступивших в данный разряд слева, то есть
Smk=αmk+βmk+pm,k1+pm1,k1Smk=αmk+βmk+pm,k1+pm1,k1,

  • эта сумма представляется в виде Smk=σmk+RpmkSmk=σmk+Rpmk, где σmkDRσmkDR,
  • σmkσmk записывается в (mk)(mk)-разряд суммарного кода, а перенос pmkpmk из данного разряда передается в (m,k+1)(m,k+1)-разряд и (m+1,k+1)(m+1,k+1)-разряд.
Эта процедура описывается (как и при одноразрядном сложении чисел) таблицей одноразрядного сложения, где должны присутствовать все значения слагаемых αmkDRαmkDR и βmkDRβmkDR и все значения переносов, возникающих при разложении суммы Smk=σmk+RpmkSmk=σmk+Rpmk. Такая таблица может быть синтезирована при R>2.R>2.\\ Ниже приведена таблица одноразрядного сложения при R=3R=3:

agraphСложение и вычитание R-х треугольных кодов состоит (как и в позиционных кодах чисел) в последовательно выполняемых одноразрядных операциях. При этом одноразрядные операции во всех разрядах каждого столбца выполняются одновременно.
agraphУмножение R-х треугольных кодов. Умножение некоторого кода TKRTKR на (mk)(mk)-разряд другого кода TKRTK′′R заключается в (mk)(mk)-сдвиге кода TKRTKR, то есть сдвиге его на k столбцов влево и на m строк вверх. Умножение кодов TKRTKR и TKRTK′′R заключается в последовательных (mk)(mk)-сдвигах кода TKRTKR и сложениях сдвинутого кода TKRTKR с частичным произведением (как и в позиционных кодах чисел).
agraphДифференцирование R-х треугольных кодов. Производная функции F(x)F(x), определенной выше, F(x)x=yxF(x)yF(x)x=yxF(x)y. Поэтому дифференцирование треугольных кодов функции F(x)F(x) заключается в определении треугольного кода частной производной F(x)yF(x)y и умножении его на известный треугольный код производной yxyx. Определение треугольного кода частной производной F(x)yF(x)y основано на соотношении x(  0 0αmk000)=(  (km)αmk 0(k2m)αmk00(m)αmk)x  0 000αmk0=  0 00(km)αmk(k2m)αmk(m)αmk. Способ дифференцирования заключается в организации переносов из mk-разряда в (m+1,k)-разряд и в (m-1,k)-разряд, а их суммирование в данном разряде производится аналогично одноразрядному сложению.
agraphКодирование и декодирование R-х треугольных кодов. Функция, представленная рядом вида F(x)=nk=0AkykF(x)=nk=0Akyk, с целыми коэффициентами AkAk, может быть представлена R-м треугольным кодом, так как эти коэффициенты и функции ykyk имеют R-е треугольные коды (о чем сказано в начале раздела). С другой стороны, R-й треугольный код может быть представлен указанным рядом, так как любое слагаемое αmkRkyk(1y)mαmkRkyk(1y)m в позиционном разложении функции (соответствующем этому коду) может быть представлено таким же рядом.
agraphУкорочение R-х треугольных кодов. Так называется операция уменьшения числа ненулевых столбцов. Необходимость укорочения возникает при возникновении переносов за разрядную сетку. Укорочение заключается в делении на параметр R. При этом все коэффициенты представимого кодом ряда уменьшаются в R раз, а дробные части этих коэффициентов отбрасываются. Исчезает также старший член ряда. Такое сокращение допустимо, если известно, что ряды функций являются сходящимися. Укорочение состоит в последовательно выполняемых одноразрядных операциях деления на параметр R. При этом одноразрядные операции во всех разрядах каждой строки выполняются одновременно, а переносы из младшей строки отбрасываются.

Масштабный коэффициент

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

Позиционные коды функций многих аргументов

Позиционный код функции двух аргументов изображен на рис. 1. Ему соответствует тройная сумма вида F(x,v)=nk=0km1=0km2=0αm1,m2,kRkykm1(1y)m1zkm2(1z)m2F(x,v)=nk=0km1=0km2=0αm1,m2,kRkykm1(1y)m1zkm2(1z)m2, где RR — целое положительное число, количество значений цифры αm1,m2,kαm1,m2,k, а y(x),z(v)y(x),z(v) — определенные функции аргументов x,vx,v соответственно. На рис. 1 узлы соответствуют цифрам αm1,m2,kαm1,m2,k, а в кружках показаны значения индексов m1,m2,km1,m2,k соответствующей цифры. Позиционный код функции двух аргументов называется пирамидальным. Позиционный код называется R-м (и обозначается как PKRPKR), если числа αm1,m2,kαm1,m2,k принимают значения из множества DRDR. При сложении кодов PKRPKR перенос распространяется в четыре разряда и поэтому R7R7. Позиционному коду функции нескольких аргументов соответствует сумма вида F(x1,,xi,,xa)=nk=0km1=0kma=0(αm1,,ma,kRkai=1(ykmii(1yi)mi))F(x1,,xi,,xa)=nk=0km1=0kma=0(αm1,,ma,kRkai=1(ykmii(1yi)mi)), где RR — целое положительное число, количество значений цифры αm1,,ma,kαm1,,ma,k, а yi(xi)yi(xi) — определенные функции аргументов xixi. Позиционный код функции нескольких аргументов называется гиперпирамидальным. На рис. 2 показан для примера позиционный гиперпирамидальный код функции трех аргументов. В нем узлы соответствуют цифрам αm1,m2,m3,kαm1,m2,m3,k, а в кружках показаны значения индексов m1,m2,m3,km1,m2,m3,k соответствующей цифры. Позиционный гиперпирамидальный код называется R-м (и обозначается как GPKRGPKR), если числа αm1,,ma,kαm1,,ma,k принимают значения из множества DRDR. При сложении кодов GPKRGPKR перенос распространяется в a-мерный куб, содержащий 2a2a разрядов и поэтому R(2a11)R(2a11).