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

2. Если это тип 2, то в зависимости от условий местности возможны два варианта: 2а и 2б. В варианте 2а применяется параллельный перенос переходной кривой вдоль оси дороги до тех пор, пока мгновенный центр, соответствующий последней точке клотоиды, не окажется на биссектрисе угла поворота, после чего можно применить трассирование типа Б. Вторую переходную кривую трассируем аналогично.

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

3 Если это тип 3, то он сводится к варианту 2а; вместо гладкого сопряжения конечного мгновенного

радиуса клотоиды с биссектрисой угла поворота рассматриваем его сопряжение с соответствующим радиусом дуги, применяемой в качестве круговой вставки.

4. Если это тип 4, то он сводится к варианту 1б; вместо гладкого сопряжения конечного мгновенного радиуса клотоиды с биссектрисой угла поворота рассматриваем его сопряжение с соответствующим радиусом дуги, применяемой в качестве круговой вставки.

В приведенном алгоритме в качестве переходной кривой использовалась клотоида. Методики, применяемые в настоящее время при трассировании криволинейных участков переходными кривыми других типов (сплайновыми) также не предусматривают проверки гладкости сопряжения переходной кривой с кривой постоянного радиуса. Предложенный алгоритм построения гладкого клотоидного сопряжения позволяет получить до 6 % снижения количества изменений скоростного режима при прохождении криволинейного участка транспортным средством.

АЛГОРИТМИЧЕСКОЕ И ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ СИМВОЛЬНЫХ

ВЫЧИСЛЕНИЙ ДЛЯ ЛОГИЧЕСКОГО ДИФФЕРЕНЦИАЛЬНОГО И ИНТЕГРАЛЬНОГО ИСЧИСЛЕНИЙ

А.В. Чернов, к.т.н.

Логическое дифференциальное и интегральное исчисления являются направлениями современной дискретной математики и находят свое применение в задачах динамического анализа и синтеза дискретных цифровых структур. Основным понятием логического дифференциального исчисления является производная булевой функции, представление о которой в виде булевой разности было получено еще в работах [1,2]. Булева производная по некоторым своим свойствам является аналогом производной в классическом дифференциальном исчислении. Заметим, что идеи об определении булевой производной вряд ли могли бы появиться без известной алгебраической нормальной формы и представления логической функции в виде полинома Жегалкина [3]. Развитие дифференциального исчисления в области дискретной математической логики происходило в нескольких направлениях [4], и к настоящему времени в этой области достигнуто немало результатов. Тем не менее, на наш взгляд, недостаточно исследованными остаются две важных нерешенных задачи: задача о символьных (нечисленных) аналитических преобразованиях логических функций в стиле компьютерных алгебр в об-

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

В данной работе обозначено решение поставленных задач, для чего авторами разработано алгоритмическое обеспечение и выполнена программная реализация алгоритмов.

Программные системы символьных вычислений открыли новые широкие возможности для поддержки теоретических и прикладных научных исследований. На протяжении почти четырех последних десятилетий компьютерные алгебры, начиная с системы MASCYMA, совершенствуются, приобретают улучшенные функциональные возможности. В их числе такие известные реализации, как MAXIMA, AXIOM, GAP, DERIVE, SINGULAR, NUMPI, OCTAVE, PARI/GP, YASIMCA, YACAS, и алгебраические возможности пакетов MAPLE, MATHCAD, MATLAB, R и прочих менее распространенных программных продуктов. Несмотря на такое разнообразие систем и предлагаемых ими символьных преобразо-

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

Обратимся к задаче символьного дифференцирования логических функций. Представляемый метод основан на нахождении частных булевых производных для полностью определенной логической функции. Алгоритм построен для производных ЭР/дх,; его модификация для нахождения ЭР / дх! весьма незначительная. В алгоритме используется код Грея, но его построение не вызывает особых трудностей и подробно не обсуждается.

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

На входе алгоритма имеется булева функция Цх^...^) от п двоичных переменных.

1. Формируется код Грея для п переменных С(2п х (п +1)) и в столбец п +1 записываются

значения исходной булевой функции Г при соответствующих наборах аргументов.

2. Выбирается переменная х!, ! = 1,...,п , относительно которой будет выполняться операция символьного дифференцирования.

3. Формируется пустая матрица Б(2п), в которую затем записываются элементы в соответствии со следующими правилами.

4. В цикле повторений в последнем столбце матрицы С следует найти наборы из двух соседних элементов, то есть тех, у которых вес Хэм-минга равен 1.

4.1. Если в сгруппированном наборе имеется одна 1 и один 0, также х! = 1 и значение булевой функции Г = 1, то такой набор считается сменой полярности булевой производной функции Г (в связи с ее известным свойством).

4.2. В ячейки матрицы Б, которые соответствуют индексам элементов найденного набора матрицы С, записывается некоторый заранее определяемый ключевой символ, например, знак « V ».

4.3. Повторяются шаги 4.1 и 4.2.

5. Выполняется символьная запись булевой производной путем сопоставления значения параметров булевой функции, записанной в матрицу О, и оставшихся наборов по следующему правилу. В каждом наборе для любого помеченного знаком «V » элемента матрицы С выбираются переменные исходной булевой функции Г, имеющие зна-

чение 1, которые затем включаются термами в выражение булевой функции, причем значение х! в терм не вносится.

Пример. Пусть Цх1 ,х2 ,х3) = х1 х3 V х1 х4 V Vх1х2 х3.

Формирование матриц алгоритма для дР/дхх

показано в таблице.

Таблица

С Б Термы символьного представления частной производной дР/дх1

х4 х3 х2 х1 Г

0 0 0 0 0 +

0 0 0 1 0

0 0 1 1 1

0 0 1 0 1

0 1 1 0 1

0 1 1 1 1

0 1 0 1 0 +

0 1 0 0 0 +

1 1 0 0 1 + х4х3 х2

1 1 0 1 1 + х4х3 х2

1 1 1 1 0

1 1 1 0 1

1 0 1 0 1

1 0 1 1 0

1 0 0 1 0

1 0 0 0 1 + х4 х3 х2

Результат символьного вычисления частной

булевой производной по переменной х! по примеру: _ _ _

дР/ дх, х4х3 х2 х4х3 х2 х4 х3 х2

Целесообразно рассмотреть одну из возможных конструкций неопределенного интеграла, отмечая особо, что многовариантная природа логических функций обусловливает необходимость осторожного подхода к вопросу формирования конструкции интеграла булевой функции в части равенства или эквивалентности реализующих его формул. При исследовании учитывались результаты практически единственной существующей в этой области работы [5], в которой интеграл булевой функции Г от п переменных введен следующим образом:

г=х

дГ дГ -

—ах, ах, дх, д х,

Доопределим это понятие. Очевидно, что (1) не является логической переключательной функцией. Обозначим «А » и «V » операторы логического переключения булевой функции из состояния 0 в состояние 1 и из состояния 1 в состояние 0 соответственно. Тогда полная конструкция неопределенного булева интеграла будет записываться в виде:

= х3 х4 V Vх2 х3

! =1

Af = X

i=1

n

=X

i =1

n

Vf = X

' f A df A

—Axi +^=A xi oxi дх,

—Дх1 + дх, дх,

£ Ух,+^ V ^

дх, д х,

-Vxi + ^=Дх,

дх, д х,

- - \ 1 1 у

Часть таблицы истинности логической функции содержит результат 1, а остальная часть дает в результате 0, поэтому целесообразно ввести неопределенные интегралы «результирующие 1» и «результирующие 0» в виде

I ^ = ¿^х + ,

1=1 дх, д х,

Io(f) = X

df л" df .

—dxi + dxi ох, д х,

Полный неопределенный булев интеграл существует тогда, когда найдутся независимые друг от друга дискретные функции а и р, имеющие не

менее

n реализаций, чтобы dy = X(aidxi +Pidxi),

в таком случае можно утверждать, что Щ) = | dY, если df = d7 . Необходимым условием существования неопределенного булева интеграла можно считать 11 • 10 (О = 0.

Теперь на основе алгоритма 1 нахождения частных производных и выражений (2) и (3) можно предложить алгоритм символьного вычисления булева интеграла.

Алгоритм 2. Символьное вычисление булева интеграла.

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

2. Сформировать матрицу I (2п х(п +1)), заполнив столбцы 1, ...п по принципу кода Грея.

3. Заполнить столбец п +1 матрицы I символом 1, если вычисление по (2) дает в результате 1.

4. Заполнить столбец п +1 матрицы I символом 0, если вычисление по (3) дает в результате 1.

5. Заполнить единицами все ячейки столбца п +1 матрицы I, если расстояние Хэмминга соседней с ними ячейке равно 1.

6. Выполнить символьную запись термов булева интеграла, аналогично п. 5 алгоритма 1, причем между термами использовать знак «+».

7. После группировки всех слагаемых, входящих в частную производную по переменной,

выражение заключить в скобки и применить обозначение дифференциала по переменной.

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

I(f) = (х2 х3 + х3 х4 )dx1 + (х3 х4 )dx1 + +(х1 х3х4 )dx2 + (x1 )dx3 + (х1х2х4 )dx3 + +(х1 х2 + х1х3 )dx4 .

Алгоритмы 1 и 2 были реализованы в системе программирования Visual Studio.Net с применением языка программирования C#. Программный комплекс имеет структуру классов, показанную на рисунке 1, которая отображена в виде иерархической диаграммы классов использования, то есть класс, вызывающий методы других, находится выше по диаграмме, а предоставляющий методы -ниже.

Класс WorkWithVariables предназначен для формирования массивов переменных, определения их числа, и в зависимости от результатов он позволяет обновлять таблицы истинности класса BoolAnalis и форму ввода данных. Методы класса DrawLogicalSxema, предназначенные для работы с интерфейсом пользователя, позволяют отобразить полученный результат в символьном виде и в виде модели контактной логической схемы. Методы класса ResolveDifferential предоставляют функции определения выражения производной по n переменным и позволяют получить значение производной при заданных значениях переменных. Класс Resolvelntegral, который использует методы класса ResolveDifferential, позволяет определить и минимизировать значения Integral_0 и Integral_1. Класс BoolAnalis содержит функции, основной за-

Рис. 1. Диаграмма классов программной реализации алгоритмов

¡=1

i=i

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

Интерфейс программы и результаты исполнения показаны на рисунках 2 и 3.

В разработанной программе для синтаксического распознавания строковых выражений использовался вычислительно эффективный метод рекурсивного спуска, модифицированный следующим образом. Основной идеей модификации является «зашивание» правил грамматики непосредственно в управляющие конструкции распознавателя. Идеи нисходящего разбора, принятые в КЦ1)-грамматиках, в нем полностью сохраняются: происходит последовательный просмотр входной строки слева направо; очередной символ входной строки является основанием для выбора одной из правых частей правил группы при замене текущего нетерминального символа; терминальные символы входной строки и правой части правила взаимно уничтожаются; обнаружение нетерминального символа в правой части рекурсивно повторяет этот же процесс.

В методе рекурсивного спуска идеи претерпевают такие изменения: каждому нетерминальному символу соответствует отдельная вычислительная подпрограмма, распознающая, выбирающая и закрывающая одну из правых частей правила, имеющего в левой части этот нетерминальный символ (то есть для каждой группы правил пишется свой распознаватель); во входной строке имеется указатель (индекс) на текущий закрываемый символ. Этот символ и является основанием для выбора необходимой правой части правила. Сам выбор встроен в распознаватель в виде алгоритмических конструкций языков программирования if и switch. Правила выбора базируются на построении множеств выбирающих символов, как это принято в LL(1)-грамматике; просмотр выбранной части реализован в тексте процедуры-распознавателя путем сравнения ожидаемого символа правой части и текущего символа входной строки; если в правой части ожидается терминальный символ и он совпадает с очередным символом входной строки, то символ во входной

JJIJ.II1I.1IJ U.LI, ^JEJJL

Булева фунншя Модель летче&яй сумщ

^ , ' . г1-, . - , -

медель тс |

РйСчиГйГыфОяЭбО&уЮ | ^рдизгатшра] |

Попеременной

F

Вырежете лраявовней

| dF/a<I=p<FKlJ'fZ(i'.W |

НоДаЛьППС | Значение лроювооюЯ в течхе;

I

Рис. 2. Интерфейс окна символьного и численного вычислений булевой производной

Булввзфушшя Модель логическая

- , , г

Модель ПЛС |

тщгэ1_ &

Модель ПЛС | ДцОбжЙ^и» ' _

I: -(и ' У-Л  МадальПЛС |

Рис. 3. Интерфейс окна символьного вычисления булева интеграла

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

Список литературы

1 Reddy, S.M. Easily Testable Realizations for Logic Functions // IEEE Trans. Computers. Vol. 21, no. 11, Nov., 1972.

2 Muller, D.E. Application of Boolean algebra to switching circuits design and to error detection // IRE Trans. Electron. Comp. Vol. EC-3, 1954., р. 6-12.

3 Жегалкин И.И. О технике вычислений предложений в символической логике. // Матем. сб. - 1927. - № 34. - С. 9-28.

4 Янушкевич С., Бохманн Д., Станкович Р., Тошич Ж., Шмерко В. Логическое дифференциальное исчисление: достижения, тенденции и приложения. // Автоматика и телемеханика. - 2000. - № 6. - С. 155-170.

5 Tucker, J.H. Tapia, M.A. Bennett, A.W. Boolean Integral Calculus for Digital Systems // IEEE Trans. On Comp., vol. 34, issue 1, Jan. 1985, p. 78-81.

x2

x4

xJ

дЗ *4

Уважаемые подписчики!

В каталоге подписных изданий Агентства «Роспечать» индекс международного журнала

«Программные продукты и системы»

70799