Текст
                    В. А. КОЩЕЕВ
АВТОМАТИЗАЦИЯ
СТАТИСТИЧЕСКОГО
АНАЛИЗА
ДАННЫХ
ПАКЕТЫ
ПРИКЛАДНЫХ
ПРОГРАММ
МОСКВА ’’ПАУКА”
ГЛАВНАЯ РЕДАКЦИЯ
ФИЗИКО-МАТЕМАТИЧЕС КОЙ ЛИТЕРАТУРЫ
19 8 8


ББК 32.973-01 К76. УДК 519.688 : 519.23 Кощеев В.А. Автоматизация статистического анализа дан¬ ных: пакеты прикладных программ. — М.: Наука. Гл. ред. физ.- мат. лит., 1988. - 232 с. Вопросы автоматизации статистического анализа данных с помощью паке¬ тов прикладных программ (ППП) рассматриваются с двух позиций. Для пользователя-непрограммиста описаны ’’внешние” характеристики паке¬ тов: назначение, способ управления, метод хранения данных и многие дру¬ гие. Приведены сведения о 26 отечественных и зарубежных ППП. Для разработ¬ чиков пакетов рассмотрен вид языка управления, хранение данных, конт¬ роль за действиями пользователя, способ тестирования и другие вопросы, возникающие при проектировании ППП. Дано формальное описание произ¬ вольного пакета программ. Подробно описан пакет АСТА, основанный на алгоритмах книги ’Алго¬ ритмы и программы восстановления зависимостей” под редакцией В.Н. Бан¬ ника (М.: Наука, 1984). Для специалистов в области вычислительной техники, разработчиков па¬ кетов программ, а также инженеров и научны^ работников, применяющих ЭВМ для статистического анализа данных. Табл. 5. Ил. 43. Библиогр. 67 назв. Рецензент доктор технических наук А. А. Дорофеюк 1504000000-051 053 (02)-88 166-88 ISBN 5-02-013894-0 ©Издательство ’’Наука” Главная редакция физико-математической литературы, 1988 К
ОГЛАВЛЕНИЕ Предисловие • 6 Глава I. Взаимоотношения человека и ЭВМ на разных стадиях развития программного обеспечения 9 § 1. Примитивные прикладные программы 9 §2. Сложные прикладные программы 12 § 3. Библиотеки прикладных программ 15 § 4. Пакеты прикладных программ 18 Глава II. Характеристики пакетов прикладных программ 21 §1. Назначение пакета прикладных программ 22 § 2. Управление пакетом программ 24 § 3. Конструкция пакета программ 28 § 4. Прочие характеристики 30 Глава III. Пакет прикладных статистических программ АСТА 34 §1. Назначение и возможности пакета 34 § 2. Управление пакетом 37 § 3. Структура данных 41 § 4. Язык управления пакетом 42 §5. Коды, управляющие вводом данных 46 Глава IV. Операции ввода, формирования и преобразования данных, реализо¬ ванные в пакете АСТА * 51 § 1 - Ввод данных 51 §2. Операции печати, коррекции и записи массивов в базу данных. ... 56 § 3. Операции формирования, преобразования, разбиения на части и объединения массивов данных 62 Глава V. Операции статистической обработки данных, реализованные в пакете АСТА 73 § 1. ('оставление описаний работ для статистической обработки дан¬ ных , 73 § 2. Элементарные операции статистической обработки данных 76 § 3. Распознавание образов 86 § 4. Восстановление регрессии . . 92 § 5. Интерпретация результатов косвенных экспериментов, кластер- анализ. восстановление плотности вероятности 104 1* 3
Глава If. Многоэтапная обработка данных с помощью программ пакета АСТА 109 § 1. Ввод и печать исходных данных 109 §2. Первоначальная статистическая обработка данных 111 §3. Операции распознавания образов и восстановления регрессии . ... 114 Глава VII. Запуск и эксплуатация пакета АСТА 116 § 1. Инициализация пакета и базы данных 116 §2. Режимы работы пакета 117 § 3. Изменение системной информации 119 §4. Обязанности администратора базы данных 120 §5. Идентификаторы видов системной информации 121 §6. Идентификаторы служебных операций 127 § 7. Примеры описаний работ системного программиста и администра¬ тора базы данных 128 Глава VIII. Подключение новых модулей к пакету АСТА 131 § 1. Массив описаний модуля 131 § 2. Массив параметров входных и выходных массивов модуля 137 §3. Обработка массивов данных по частям 138 § 4. Структура исполнительного модуля пакета 140 § 5. Изменение системной информации и отладка исполнительного модуля 147 Глава IX. Модульная структура пакета АСТА 148 § 1. Система управления пакетом 148 § 2. Алгоритмы блоков ВМ1, ВМ2, ВМЗ 150 § 3. Структура раздела оперативной памяти 1’52. § 4. Системные модули пакета J5' Глава X. Проектирование системного наполнения пакетов программ. Соз¬ дание алгоритмов 157 § 1. Цель проектирования 158 § 2. Управление пакетом 160 §3. Предложение ’’операция” 162 § 4. Предложение ’’данные” 166 § 5. Описание работы 169 §6. Условный оператор 171 § 7. Режимы работы с пакетом и хранение данных 173 § 8. Полнота набора программ и контроль за действиями пользователя 176 § 9. Контроль за действиями системного программиста 179 § 10. Универсальность системного наполнения 182 Глава XI. Проектирование системного наполнения пакетов программ. Этап программирования 184 § 1. Этапы проектирования пакета программ 184 §2. Модульная структура пакета программ 185 § 3. Программирование и тестирование пакета программ 188 § 4. Передача данных в пакете 190 Глава XII. Формальное описание пакетов программ 195 § 1. Модель программы 195 § 2. Модель пакета программ 199 § 3. Функционирование пакета программ 204 §4. Семейства массивов данных 210 4
§ 5 Пакеты программ класса КВ 212 § Пакеты программ класса IIВ 215 §7 Пакеты программ класса ВВ 217 Приложение. Краткое описание некоторых пакетов программ для статисти¬ ческой обработки данных 220 Список литературы 225 Предметный указатель 228
ПРЕДИСЛОВИЕ В этой книге речь пойдет о пакетах прикладных статистических прог¬ рамм. В настоящее время пакеты программ считаются основным сред¬ ством автоматизации статистического анализа данных. Количество соз¬ данных пакетов уже достигло нескольких сотен, но поток сообщений о все новых пакетах не иссякает и, вероятно, будет возрастать еще неко¬ торое время. Этот факт объясняется, во-первых, большим количеством статистических методов, которые могут быть запрограммированы, во- вторых, разнообразием сервиса, которым могут быть снабжены статисти¬ ческие программы, и, в-третьих, многочисленностью вариантов програм¬ мной реализации пакета, разнообразием ЭВМ и операционных систем. По мере того как происходит насыщение острого спроса на пакеты, все большее внимание уделяется их качеству: корректности и разно¬ образию статистических методов, качеству программирования и удобст¬ ву эксплуатации. Если первые пакеты (так же, как и первые програм¬ мы) создавались по принципу ’’программируем первый пришедший в голову вариант”, то разработка современных пакетов состоит, как пра¬ вило, из трех этапов: системного анализа, системного проектирования и собственно программирования. На первых двух этапах делается попытка исследовать задачу, для ре¬ шения которой создается пакет, в общем виде и очертить множество воз¬ можных конструкций пакета. Затем среди полученного множества выби¬ рается вариант, близкий в смысле заданных критериев к оптимальному и удовлетворяющий заданным ограничениям (стоимость, время, затрачен¬ ное на создание пакета, ограничения на рабочие характеристики и т.п.). Несмотря на то, что на практике точный оптимум найти, как правило, невозможно, такой подход приводит к сокращению количества плохо обос¬ нованных конструкторских решений, особенно на начальных стадиях проектирования пакета. В этой книге описаны все этапы создания пакета прикладных статисти¬ ческих программ. Основное внимание уделяется конструированию сис¬ темного наполнения пакета (управляющей части). Функциональное на¬ полнение пакета (исполнительная часть, в том числе модули статистичес¬ кой обработки данных) рассматривается только в качестве объекта уп¬ равления. Книга состоит (условно) из трех частей: 1) главы 1 и II; 2) главы III- IX; 3) главы X - XII. 6
В первой части даны общие сведения о современных пакетах приклад¬ ных программ и перечислены основные характеристики пакетов. Вто¬ рая часть посвящена пакету прикладных статистических программ АСТА. В пакет АСТА входят функциональные модули, описанные в книге ’’Ал¬ горитмы и программы восстановления зависимостей” (под ред. В.Н. Вап- ника. - М-: Наука, 1984). Особенность модулей статистической обработ¬ ки пакета АСТА - учет ограниченности выборки, с помощью которой вос¬ станавливается зависимость. Первые две части окажутся полезными тем читателям, которые не зна¬ комы с программированием, но испытывают потребность использовать ЭВМ в качестве своего рабочего инструмента. В третьей части анализируются возможные варианты конструкции пакетов прикладных программ. Эта часть заинтересует пользователей, имеющих опыт работы с пакетами, и разработчиков программного обес¬ печения. Поясним содержание отдельных глав книги. В главе I прослежен проис¬ ходящий в настоящее время процесс постепенного ’’приближения” ЭВМ к пользователю-непрограммисту. Отдельные этапы этого процесса пояс¬ нены на простых примерах. В главе II перечислены характеристики паке¬ тов, позволяющие ориентироваться во множестве современных приклад¬ ных программых средств. В главах III - IX описан пакет прикладных статистических программ АСТА. В главе III даны общие сведения о пакете, включая синтаксис язы¬ ка управления пакетом. В главах IV, V и VI описана работа с пакетом пользователя-непрограммиста. Приведены краткие описания операций формирования и преобразования данных, операций статистической обра¬ ботки данных и операций с базой данных пакета. Изложение сопровожда¬ ется большим количеством примеров. В главам VII, VIII и IX содержатся сведения о системной части пакета, необходимые системному программи¬ сту для запуска, тестирования и эксплуатации пакета, а также для под¬ ключения новых модулей. Особое внимание уделено обеспечению безопас¬ ности хранения информации в специализированной базе данных пакета. В главах X и XI обсуждаются проблемы, с которыми сталкиваются разработчики пакетов прикладных программ и приводятся варианты воз¬ можных решений этих проблем. Некоторые варианты решений общеизвест¬ ны, другие известны менее широко, и поэтому рассматриваются более подробно. Описаны этапы проектирования, программирования и тестиро¬ вания пакета. Особую роль в третьей части книги играет глава XII, в кото¬ рой сделана попытка дать формальное описание пакета программ. Один из основных результатов построенной теории состоит в выявлении структу-, ры множеств массивов данных, которые образуются в процессе работы с пакетом. Полученное в главе XII формальное описание оказалось полезным при проектировании системного наполнения пакета АСТА, в частности, Для создания алгоритмов автоматического поиска входной информации модулей в условиях, когда в базе данных пакета хранится несколько версий одноименных массивов информации. В конце главы рассмотрены ТРИ класса пакетов, являющиеся частными случаями общей модели, и описан процесс автоматического поиска входных данных в пакетах каждо- го из этих трех классов. Другие варианты формальных описаний, которые 7
могут быть использованы при проектировании пакетов программ, можно найти, например, у Дж. Питерсона (Питерсон Дж. Теория сетей Петри и моделирование систем. - М.: Мир, 1984). Краткие сведения о 26 отечественных и зарубежных пакетах программ для статистического анализа данных приведены в Приложении. Автору приятно выразить глубокую благодарность В.Н. Вапнику за поддержку на всех стадиях работы, Т.Г. Глазковой за постоянное вни¬ мание и помощь, В.В. Трутневу, И.Б. Мучнику, Н.А. Абрамовой и рецен¬ зенту книги А. А. Дорофеюку за ценное обсуждение содержания и формы книги. Умозрительные соображения, изложенные в книге, нельзя было бы проверить на практике без помощи начальника ЭВМ ЕС-1022 и ЕС-1045 Н.П. Попова и других сотрудников ВЦ. Модули функционального наполнения пакета АСТА разрабатывали Т.Г. Глазкова, В.А. Кощеев, А.И. Михальский, С.М. Куликов, А.К. Артемь¬ ев, А.Р. Стефанюк и другие математики и программисты. В.А. Кощеев
ГЛАВА I ВЗАИМООТНОШЕНИЯ ЧЕЛОВЕКА И ЭВМ НА РАЗНЫХ СТАДИЯХ РАЗВИТИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ Цель этой главы - ввести читателя в круг пробле1М, обсуждаемых в дан¬ ной книге: каким образом современная ЭВМ может быть сделана доступ¬ ной широкому кругу специалистов разного профиля, не обладающих знаниями об устройстве ЭВМ и не владеющих языками программирования, какие при этом возникают трудности и каковы успехи, достигнутые в этой области в настоящее время. Начнем с того, что проследим историю взаимоотношений пользователя- непрограммиста и ЭВМ на протяжении последних двух-трех десятилетий. Словом ’’пользователь” (неудачный перевод английского слова user) принято обозначать лицо, использующее ЭВМ, или, более конкретно, опреде¬ ленную программу или систему программ, для решения прикладных задач. По степени компетентности в вопросах вычислительной техники и прог¬ раммирования пользователи могут быть разделены на следующие классы: 1) пользователи-непрограммисты: 2) пользователи-программисты; 3) пользователи-разработчики программного обеспечения. В этой книге слово ’’пользователь” будет всегда обозначать пользова¬ теля-непрограммиста, обладающего самыми поверхностными знаниями о программировании и об устройстве ЭВМ. Период активного использования ЭВМ насчитывает всего несколько десятилетий, но гем не менее на пройденном за это время пути уже можно выделить несколько стадий. В разных странах (и даже в разных коллек¬ тивах пользователей одной страны) эти стадии были пройдены не одно¬ временно, поэтому временные границы стадий можно обозначить лишь приблизительно: 1) примитивные прикладные программы (до начала 60-х годов) ; 2) сложные прикладные программы (с конца 60-х годов); 3) библиотеки прикладных программ (с начала 70-х годов) ; 4) пакеты прикладных программ (с конца 70-х годов) . Расмотрим характерные черты каждой из перечисленных стадий. § 1. ПРИМИТИВНЫЕ ПРИКЛАДНЫЕ ПРОГРАММЫ На начальной стадии применения ЭВМ пользователь представлял вычис¬ лительную машину в виде большого арифмометра, который может быст¬ ро выполнять арифметические вычисления с большим количеством чисел и с высокой точностью. На газетных фотографиях можно было увидеть 9
пульты управления с бесконечными рядами тумблеров, а в кино - пос¬ мотреть, как мигают сотни и тысячи лампочек и выползает бумажная лен¬ та с бесконечными колонками чисел. Воодушевленный увиденным, пользователь приходил в вычислительный центр со своими данными и узнавал, что его задача не может быть решена сразу же, а нужно сначала написать программу. В этой программе должно быть подробно объяснено, каким образом нужно обработать данные поль¬ зователя. Если пользователь спрашивал, как написать такое объяснение, ему отвечали, что программы пишутся на языке, который понимает ЭВМ, и показывали текст какой-либо программы, например: ООО 0017 0000 1777 000 0000 0000 1776 201 1776 2432 1776 054 1777 1002 1005 и т.д. Убедившись, что писать программу ему еще рано, пользователь шел к прог¬ раммисту и объяснял, как нужно обработать принесенные им данные. Проходило несколько недель (или месяцев), и долгожданные результаты вручались пользователю: ’’ЭВМ решила вашу задачу за столько-то секунд (или минут)”. Те впечатления, которые пользователь получал от длитель¬ ного общения с программистом и от работы с написанной программой, в основном сводились к следующему: 1) составление программы заняло необъяснимо большое количество времени; 2) несмотря на то, что программист заявил, что программа готова, поль¬ зователь получал неправильные результаты до тех пор, пока программист не исправил еще десяток-другой ошибок в своей программе; 3) подготавливать входные данные для программы нужно весьма хит¬ роумным и странным способом, сделать это без ошибок практически невозможно; 4) результаты решения печатаются в зашифрованном виде: например, число 12 может быть напечатано в виде ”+++02120000000000”; 5) программу нельзя использовать для решения задач, которые хоть немного отличаются от той задачи, которая была объяснена программис¬ ту; просьбы немного подкорректировать программу встречают резкий отпор: ”Да вы что! Для этого мне нужно переделать всю программу!”; 6) при работе с программой нужна нечеловеческая аккуратность: при малейшей ошибке пользователя программа выдает дикие результаты. Все эти претензии были совершенно справедливы, но исправить поло¬ жение не позволял низкий уровень развития вычислительной техники, теории и практики программирования, характерный для стадии при¬ митивных программ. Для того чтобы продемонстрировать те трудности, с которыми стал¬ кивался программист, пытавшийся учесть все пожелания пользователя, рассмотрим пример. Не будем заставлять читателя разбирать примеры из математики, а вообразим некоторое бытовое программируемое устрой¬ ство, например стиральную машину или робота для приготовления пищи. 10
взять сосуд объемом 0,5 литра, налить 250 г молока, поставить на плитку мощностью 500 ватт, довести до кипения, всыпать 25 г манной крупы, уменьшить нагрев до 250 ватт, варить 8 минут, добавить 10 г сахара, добавить 1 г соли, выключить плитку, программу отдаем пользователю. Через некоторое время возвращается и говорит, что он разочарован в программе: Упрощая до предела ситуацию, предположим, что робот может исполь¬ зовать три сосуда (кастрюльки) объемом 0,5, 1,0 и 1,5 литра. Теперь про¬ нумеруем продукты питания: 1) соль; 2) сахар; 3) молоко; 4) манная крупа и т.д. Пусть робот умеет выполнять следующие команды: 1) взять сосуд С емкостью V литров; 2) поместить G грамм продукта F в сосуд С; 3) поставить сосуд С на нагревательный элемент мощностью W ватт; 4) довести содержимое сосуда С до кипения; 5) ждать М минут. В этом случае программа для приготовления одной порции манной каши может быть записана в следующем виде (справа от каждой коман¬ ды даны пояснения): 0105 02 250 03 03 500 04 02 25 04 03 250 05 08 02 10 02 02 01 01 03 000 Написанную пользователь ему понадобилось две порции, и пока машина готовила вторую, первая уже остыла. Ему хотелось бы иметь программу для одновременного при¬ готовления заданного числа порций. Переделываем программу. Для этого понадобятся еще две команды: 6) узнать, сколько нужно порций, и запомнить в ячейке Л; 7) если содержимое ячейки А равно числу N, то выполнить команду К. Возникает вопрос: каким сосудом воспользоваться? Проще всего всегда брать самый большой, но это не изящно. Запишем так: 06 01 01 05 07 01 2 01 07 01 3 01 07 01 4 01 Нужно не забыть предупредить пользователя, чтобы он не заказывал более четырех порций, гак как нет соответствующей посуды. Теперь вставляем в программу команды, умножающие количество продуктов, заданное для одной порции, на число из ячейки 01, и готовую программу отдаем поль¬ зователю. На следующий день появляется взволнованный пользователь и заяв¬ ляет: ”В вашей программе есть чудовищная ошибка’ Пока я задаю одну, Две, три, четыре порции, она выбирает правильную посуду, при четырех порциях самую большую. Но стоит мне задать пять порций, как она снова выбирает самую маленькую кастрюльку!”. Отвечаем, что поведение программы в тех условиях, на которые она не Рассчитана, непредсказуемо, и добавляем в программу команду ’’если 11 заказанное количество порций запомнить в ячейке 01, взять сосуд объемом 0,5 литра, если заказано 2 порции, берем сосуд объемом 1 литр, если заказано 3 или 4 порции, берем сосуд объемом 1,5 литра.
число из ячейки 01 больше 4, то напечатать сообщение: заказано слишком много порций, работа не выполняется”. Немного подумав, добавляем еще команду: ’’если число из ячейки 01 меньше 1, то напечатать сообщение: заказано слишком мало порций, работа не выполняется”. Отдаем исправ¬ ленную программу пользователю. Ясно, что этот диалог программиста и пользователя может продолжать¬ ся неопределенно долго и потребовать от обеих сторон большого терпения. Таким образом, недостатки программ той поры объяснялись тем, что программисту (а через него - и пользователю) были навязаны правила общения с ЭВМ, удобные для машины, ио чуждые человеку. Переход к следующему уровню взаимоотношений пользователя с ЭВМ стал возможен только тогда, когда появилось достаточное количество программистов, овладевших в совершенстве этими чуждыми человеку правилами. § 2. СЛОЖНЫЕ ПРИКЛАДНЫЕ ПРОГРАММЫ Начало следующей стадии во взаимоотношениях пользователя и ЭВМ связано с появлением алгоритмических языков. Использование алгоритми¬ ческого языка позволило программисту писать программы быстрее и де¬ лать при этом меньше ошибок, так как текст программы, написанной на таком языке, прочитать и понять намного легче, чем текст, состоящий только из цифр. В это время стали появляться программы, которые уже нельзя было назвать примитивными. Такая программа могла работать в нескольких режимах, например решать задачи нескольких сходных типов. Выбором режима пользователь управлял с помощью набора входных параметров. Предусматривалась защита от ошибочных действий пользователя. Разраба¬ тывались менее жесткие правила для подготовки входных данных. Было обнаружено, что ЭВМ может работать не только с числами, но и с текстами. Результаты работы программы стали печататься в виде таблиц с заголовка¬ ми и пояснениями. Появились пользователи, которые освоили программирование на алго¬ ритмических языках и уже могли составлять для себя довольно сложные программы. Но тем не менее основные трудности не были преодолены: 1) на создание сложной программы уходили месяцы; 2) в готовых программах всегда находили ошибки; 3) большинство пользователей по-прежнему не могло обходиться без услуг программистов. Прежде чем объяснить причины такого положения дел, вернемся к при¬ меру с кулинарным роботом. Сначала запишем текст первого варианта программы, приведенной в предыдущем параграфе, на алгоритмическом языке: ВЗЯТЬ СОСУД 0.5 Л; ПОМЕСТИТЬ 250 Г ПРОДУКТА 3: НАГРЕВ 500 ВТ; ДОВЕСТИ ДО КИГППИЯ: ПОМЕСТИТЬ 25 Г ПРОДУКТА 4; НАГРЕВ 250 ВТ; 12
ПРОДОЛЖАТЬ 8 МИН; ПОМЕСТИТЬ К) Г ПРОДУКТА 2; ПОМЕСТИТЬ 1 Г ПРОДУКТА Г, НАГРЕВ О ВТ. Откажемся от дальнейших переделок этой программы, неудачно заду¬ манной с самого начала, выбросим ее в корзину для мусора и сядем за стол с намерением написать универсальную программу для приготовления обеда, которая осчастливит пользователя. С помощью алгоритмического языка не составит большого труда запрограммировать несколько десятков различных рецептов. Сложность в том, как полученные куски (называемые модулями) объединить так, чтобы пользователь смог заказывать одновременное приготовление любой комбинации блюд из этого списка и даже нужное число порций каждого блюда. Допустим, пользователь задает приготовление только одного блюда. В этом случае объединить модули легко, гак как они должны работать независимо друг от друга. Если же пользователь задаст одновременное приготовление двух или более блюд, то специальная часть программы должна позаботиться о том, чтобы одновременно работающие модули не мешали друг другу. В част¬ ности, чтобы два блюда (или две различные их компоненты) не приготовля¬ лись в одном и том же сосуде и, наоборот, чтобы две одинаковые компо¬ ненты двух разных блюд приготовлялись в одном и том же сосуде (для экономии посуды). Кроме того, нужно учесть, что количество посуды и нагревательных элементов ограничено. Поэтому необходимо, чтобы программа выбирала правильную последовательность приготовления компонент блюд. Для этого сначала придется найти математическое решение этой задачи, а потом запрограммировать его. Предположим, что описанная программа составлена. Как убедиться, что она работает правильно? Ошибки могут скрываться, во-первых, в модулях, описывающих приготовление отдельных блюд, и, во-вторых, в той части программы, кото¬ рая определяет правильную последовательность приготовления компонент и правильный выбор посуды. Ошибки первого типа (например, вместо соли указан сахар) легко найги, задав приготовление каждого блюда из списка и попробовав его на вкус. Ошибки второго типа (например, если задано одновременное приго¬ товление блюда № 26 и блюда № 43, то эти блюда из-за ошибки в программе приготовляются в одной и той же посуде) этим методрм выявить не Удастся, так как пришлось бы приготовить очень большое количество обе¬ дов (полное число различных вариантов обедов из двух блюд равно 50 X 49 = 2450, полное число всех возможных вариантов обедов, со¬ стоящих из одного, двух, трех, ..., пятидесяти блюд равно 2ь0 — 1, т.с. примерно 1015). Допустим, что для проверки программы будет написана другая про¬ грамма для обычной ЭВМ, с помощью которой можно смоделировать все JQ15 вариантов работы кулинарной программы. Сколько машин- 13
ного времени понадобится для проверки? Если один вариант бу¬ дет состоять из 1000 операций, а быстродействие ЭВМ - 1000 000 операций в секунду, то время работы моделирующей программы будет равно 1000 • 1015/1 000 000 = Ю12, т.е. приблизительно 3000 лет. Остается одно: отобрать некоторое реальное количество тестовых ва¬ риантов и проверить их ”в натуре” или на модели. Поскольку не будет полной уверенности в том, что в программе не осталось ошибок, придется предусмотреть самопроверки. Пусть перед тем как взять какой-либо сосуд для приготовления очередного блюда, программа определяет, не занят ли он. Если окажется, что сосуд занят, то это значит, что была неправильно выбрана последовательность приготовления компонент, т.е. что в програм¬ ме есть ошибка. Пусть в этом случае программа отказывается от приготов¬ ления того блюда, которое потребовало уже занятую посуду. Это причинит некоторое неудобство пользователю, но зато позволит избежать появления на столе ’’гибридных” блюд. Итак, программа, в которой учтены все пожелания требовательного пользователя (которые он по просьбе программиста сформулировал в пись¬ менном виде) и предусмотрено все, что счел необходимым предусмотреть старательный программист, написана, проверена на некотором числе тесто¬ вых примеров и вручена пользователю. Программист уверен, что на этот раз ему удалось осчастливить пользо¬ вателя, но он ошибается. Через некоторое время пользователь может появиться и заявить, что, несмотря на отдельные достоинства, программа имеет много недостатков: 1) скудный набор рецептов (нельзя приготовить в качестве гарнира жареные бананы); 2) количество порций одного блюда ограничено числом 100 (если по¬ надобится 101 порция, то одну порцию придется готовить вручную) ; 3) программа не умеет слегка изменять рецепты в зависимости от на¬ личия продуктов (например, заменить отсутствующие каперсы солеными огурчиками); 4) если в процессе приготовления обеда машина ломается или на корот¬ кое время отключают электроэнергию, то после исправления поломки или включения энергии программа не может продолжать приготовление обеда с прерванного момента, а начинает все сначала; 5) если в одном из сосудов образуется дырка, то программа бу¬ дет продолжать приготовление обеда как ни в чем не бывало, и т.д. и т.д. Рассмотренный пример показывает, что программа, удобная для поль¬ зователя, должна состоять из двух неравных по объему частей: малой части, содержащей описание решения той задачи, для которой написана програм¬ ма, и большой части, содержащей описание разнообразных вспомогатель¬ ных действий, облегчающих работу с программой. Причем в одном вариан¬ те выполнения программы обычно используется только небольшая часть возможностей, заложенных в сервисную часть программы, что делает эту часть незаметной для пользователя, а труд по написанию сервисной части — неблагодарным для программиста. Кроме того, наличие развитой сервисной 14
части существенно усложняет программу и соответственно удлиняет сроки изготовления и ухудшает надежность программы. Дальнейший прогресс в этом направлении оказался возможным благо¬ даря накоплению опыта разработки отдельных программ. § 3. БИБЛИОТЕКИ ПРИКЛАДНЫХ ПРОГРАММ Наступило время, когда усилиями многих программистов были созда¬ ны программы для решения большого количества задач самого разного назначения. Пользователи-непрограммисты получили в свое .распоряжение библиотеки программ. Для того чтобы решить свою задачу на ЭВМ, пользователь должен был выбрать нужную программу из библиотеки, подготовить для нее входные данные согласно инструкции к программе и отдать полученное задание оператору ЭВМ. Если нужная программа имелась в библиотеке, то в этом случае пользователь обходился без помощи программиста. Новые программы, написанные программистами, включались в уже су¬ ществующие библиотеки. Казалось, что как только в библиотеках будет накоплено достаточное количество программ, проблемы пользователей- непрограммистов будут сведены к минимуму. На самом же деле появление больших библиотек прикладных программ породило новые проблемы. Поясним возникшие затруднения, вернувшись к примеру с кулинарным роботом. Итак, следуя духу времени, владелец кулинарной машины приобрел библиотеку программ, содержащую программы приготовления блюд по многочисленным рецептам разных стран и народов. Первое время он был счастлив, но постепенно выяснилось следующее. 1. Разные программы имели разные инструкции по подготовке входных данных. Если для одной программы меню задавалось в виде: ’’блюдо № 1 (5 порций), блюдо № 2 (5 порций), блюдо № 51 (2 порции)”, то для дру¬ гой - в виде: ”по 5 порций блюд № 1,2; 2 порции блюда № 5 1 ”. 2. Разные программы различались сервисными частями. Если одна про¬ грамма позволяла добавлять в меню новые блюда уже после того, как приготовление обеда началось, то другая программа этого не допускала. 3. Нельзя было заказать обед, в котором часть блюд приготовляется по одной программе, а часть - по другой. 4. Приготовление одних и тех же блюд описано во многих программах. Одни и те же сервисные услуги имелись у многих программ. Эго приводило к тому, что в библиотеке приходилось хранить много программ, лишь незначительно отличающихся друг от друга. Таким образом, использование библиотек, содержащих программы, написанные независимо разными группами программистов, затруднялось тем, что программы имели разные инструкции и обладали различными наборами сервисных услуг (необходимо было учитывать особенности каждой программы библиотеки). Кроме того, эти программы трудно было использовать совместно, гак чтобы результаты выполнения одной про¬ граммы учитывались при выполнении другой программы из библио¬ теки. 15
Было ясно, что устранить эти недостатки можно, только проектируя библиотеку программ целиком, программируя модули библиотеки в соот¬ ветствии с едиными принципами. А это уже означало дальнейшее скачко¬ образное повышение сложности создаваемого программного продукта. Успехи, достигнутые к этому временив теоретическом программировании, позволили совершить такой скачок. Прежде чем описывать следующий этап эволюции программных средств, необходимо вкратце остановиться на основных результатах, полученных в теории программирования в 70-е годы и имеющих отношение к теме этой книги. Стимулом, вызвавшим появление этих результатов, явилось осознание того факта, что сложность создаваемых программ (убедиться в правильности которых уже в то время казалось задачей, непосильной для человеческого ума) будет расти и впредь. Те методы исследования сложных объектов, которыми человечество пользовалось до сих пор (изучение частей целого, изучение частных случаев, отделение главного от второсте¬ пенного, вероятностные методы, теория приближений, моделирование и т.д.), казалось, были бессильны перед этими странными и сверхсложными объектами - программами для ЭВМ. Действительно, как убедиться, что какая-то часть программы сделана абсолютно правильно, если выполнение этой части зависит ог комбинации десяти, двадцати или, может быть, ста величин? И ни одной из этих ста зави¬ симостей нельзя пренебречь, иначе программа будет проверена лишь частич¬ но. Понять, как работает небольшая часть программы при одновременном изменении нескольких параметров, можно только для двух или трех пара-, метров (говорят, что в идеальном случае.- до пяти, шести параметров). Если свести сложную зависимость к последовательности простых, то по¬ лучим последовательность астрономической длины. Поэтому остается только два выхода: во-первых, разработать приемы составления программ минимальной (при заданном назначении программы) сложности и, во-вто¬ рых, по возможности автоматизировать проверку правильности программ. Поясним на доступных примерах идеи, лежащие в основе принципов модульного программирования, принципов структурного программирова¬ ния и теории доказательств правильности программ [7, 24, 35, 37]. Принципы модульного программирования предписывают разбивать большую и сложную программу на небольшие части (модули), имеющие по возможности простое функциональное назначение. Смысл этой операции состоит в том, что упрощается проектирование программы (проектирова¬ ние одной большой программы заменяется проектированием нескольких небольших модулей и связей между ними), упрощается составление программы (программирование разных модулей может быть поручено раз¬ ным программистам), упрощается тестирование программы (модули тестируются независимо, затем тестируются связи между модулями) . Современные языки программирования позволяют разбивать большую программу на части самыми различными способами. Естественно, что выигрыш от разбиения программы на модули будет получен только для некоторых вариантов модульной структуры, Хотя алгоритмов поиска опти¬ мальной модульной структуры пока не существует, все же можно сформу¬ лировать некоторые эвристические правила разбиения программы на моду- 16
ди. Например, ’’если о некоторой части программы легко сказать, что она делает, но трудно сказать, как она это делает, то такую часть следует оформить в виде модуля”. Принципы структурного программирования запрещают использовать при написании программы любые комбинации операторов алгоритмического языка, кроме некоторого набора стандартных комбинаций, называемых структурами. Стандартные структуры должны использоваться как при со¬ ставлении текстов модулей, так и при описании связей между ними (составление текстов модулей более высокого уровня). Применение принципов структурного программирования позволяет из¬ бежать излишней сложности текста программы, что в конечном счете приво¬ дит к сокращению времени, затраченного на создание программы, и к повы¬ шению ее надежности. Поясним сказанное на следующем примере. Пусть разрешены только сле¬ дующие структуры предложений русского языка: 1) предложение без прямой речи-, 2) предложение с прямой речью вида предложение без прямой речи-, "предложение без прямой речи". Примерами предложений разрешенной структуры могут служить следую¬ щие предложения, АННА ЗАДУМАЛАСЬ. ПАВЕЛ СКАЗАЛ: ’’ИВАН КУДА-ТО ИДЕТ”. Примером предложения запрещенной структуры является предложение ’’ИВАН, - СКАЗАЛ ПАВЕЛ, - КУДА-ТО ИДЕТ”. Пользуясь разрешенными структурами, можно составлять более слож¬ ные предложения. АННА РАССКАЗЫВАЕТ: ’’ПАВЕЛ МНЕ ГОВОРИТ: ’’ИДУ Я И ДУМАЮ: ”А ЧТО ЕСЛИ СЕЙЧАС ЗАКРИЧАТЬ: ’’ПОЖАР!””””. Сейчас будет приведен пример фразы, содержащей ту же информацию, но составленной с использованием запрещенных структур. ””ИДУ Я И ДУМАЮ, - ПАВЕЛ МНЕ ГОВОРИТ, ”А ЧТО ЕСЛИ СЕЙЧАС ЗАКРИЧАТЬ”””, - РАССКАЗЫВАЕТ АННА, - ’’’’’’’’ПО¬ ЖАР! ” Рассмотренный пример поясняет тот факт, что применение принципов структурного программирования позволяет писать более понятные про¬ граммы, избегая ненужной сложности, хотя и требует от программиста определенной самодисциплины. Теория доказательств правильности программ была задумана как инст¬ румент, с помощью которого можно математически строго доказывать, что в программе нет ошибок. Применяется эта теория следующим образом. Сначала на математическом языке формулируется описание того, что Должна делать программа. Обычно эго описание представляет собой набор равенств и неравенств, связывающих выходные величины с входными. Затем формулируются аналогичные описания для отдельных частей про¬ граммы. После этого с помощью математических описаний тех операторов алгоритмического языка, которые встречаются в программе, по определен¬ ным правилам доказывается, что каждый кусок программы действительно выполняет описанную операцию. И наконец, доказывается соответствие текста всей программы ее описанию. В.А. Кощеев 17
В отличие от общепризнанных в настоящее время принципов модульного и структурного программирования, теория доказательств правильности программ на практике, видимо, еще не используется. Эго объясняется тем, что, во-первых, доказать правильность программы обычно еще труднее, чем написать ее и отладить, и, во-вторых, ошибки в доказательстве правильно¬ сти программы найти гораздо труднее, чем ошибки в программе. Тем не менее знакомство с этой теорией приносит несомненную пользу. Программист, изучивший несколько доказательств правильности про¬ грамм, опубликованных в литературе, приобретает способность непосред¬ ственно усматривать правильность небольших кусков текста программы, которые выходят из-под его пера. Кроме этого, разрабатываемые в настоя¬ щее время на основе теории доказательств правильности программ алгорит¬ мические языки, вероятно, позволят объединить составление программы и формулировку доказательства ее правильности. Закончим на этом краткий обзор успехов теории программирования и рассмотрим следующий этап развития программного обеспечения ЭВМ: стадию пакетов прикладных программ. § 4. ПАКЕТЫ ПРИКЛАДНЫХ ПРОГРАММ Пакетом прикладных программ принято называть программное средство (отдельную многофункциональную программу или библиотеку программ), предназначенное для решения определенного круга задач. Пакеты программ обычно имеют развитую сервисную часть, облегчаю¬ щую управление пакетом, хранение исходных данных и результатов, выпол¬ нение различных вспомогательных операций. Для создания пакета програм¬ мисты объединяются в группы, так как сделать хороший пакет одному про¬ граммисту не по силам. При этом особое значение приобретает обеспечение согласованных действий коллектива программистов: нужно, чтобы каждый из них правильно видел все связи своей части пакета с другими частями. Поясним сказанное на примере. Предположим, что принято решение спроектировать пакет программ для крупной роботизированной фабрики- кухни. Сначала доставляется словесное описание назначения пакета, кото¬ рое может вкратце сводиться к следующему. Проектируемый пакет состоит из шести компонент: а) программы приготовления заданного количества блюд и полуфабри¬ катов по указанным рецептам; б) программы управления базой данных ’’Рецепты”, содержащей много¬ численные кулинарные рецепты: в) программы управления базой данных ’’Кладовые”, содержащей списки продуктов, хранящихся в данный момент на складах, включая ко¬ личество, время поступления, срок хранения и другие параметры; г) программы управления базой данных ’’Оборудование”, содержащей списки кухонной утвари, имеющейся в наличии, и ее характеристики: д) программы управления базой данных ’’Заказы”, содержащей данные о текущей потребности в продукции фабрики; е) вспомогательных программ (составление всякого рода отчетов, связь с поставщиками продуктов и оборудования, с ремонтными организациями, ведение бухгалтерских расчетов и т.п.). 18
Работа программ пакета происходит по следующей схеме. В базу данных ’’Заказы” непрерывно поступают заказы на приготовление блюди полуфаб¬ рикатов. Специальная программа отбирает те заказы, выполнение которых нужно начать в данный момент. Текст заказов анализируется, и из базы дан¬ ных ’’Рецепты” выбираются тексты рецептов, упомянутых в заказах. Рецепты просматриваются и определяется совокупность продуктов, нужная для выполнения заказов. С помощью программ управления базой данных ’’Кладовые” определяется, есть ли нужные продукты на складах в достаточ¬ ном количестве. При необходимости производится корректировка рецеп¬ тов и заказов в разрешенных пределах. Затем планируется оптимальная последовательность операций с учетом имеющегося в наличии и свободного оборудования, гак чтобы выполнение заказа заняло минимально возможное время и себестоимость продукции была минимальна (при заданном качестве). Основные показатели спланиро¬ ванной работы выдаются ответственному лицу, которое дает разрешение на выполнение. После этого в каждый из роботов, выполняющих отдельные технологи¬ ческие операции, вводится нужная программа и процесс выполнения отоб¬ ранных заказов начинается. Параллельно может происходить ввод новых рецептов в базу данных ’’Рецепты”, планирование потребности в продуктах и оборудовании на будущее и другие вспомогательные операции. Подробное словесное описание пакета программ подобной сложности может занимать несколько сот страниц. Поскольку для завершения проекта в разумные сроки понадобится не¬ сколько десятков программистов, а суммарный объем программ может достигнуть нескольких сотен тысяч строк (сто тысяч строк — это четыре книги обычного формата по 500 страниц каждая), то для выполнения всей этой работы понадобится специальный инструмент — пакет программ, авто¬ матизирующий проектирование пакетов прикладных программ (ППП). На вход инструментального пакета подается описание проектируемого ППП, записанное на некотором формальном языке (языке спецификаций). Основное назначение инструментального пакета — хранить последнюю вер¬ сию (и, возможно, несколько предыдущих) описания проектируемого ППП, так чтобы каждый программист мог в любое время получить всю ту информацию о ППП, которая необходима для составления порученной ему части. Все изменения и доработки, которые вносятся в проектируемый пакет в процессе создания, тем самым немедленно доводятся до сведения всех тех участников проекта, которых они касаются. Другой функцией инструментального пакета программ может служить хранение последних вариантов текстов программ, составляемых каждым из программистов, проверка выполнения стандартов на тексты программ и со¬ ставление сводного отчета о ходе выполнения проекта. Кроме этого, инст¬ рументальный пакет может автоматизировать отладку, автономное и ком¬ плексное тестирование программ создаваемого пакета. Ясно, что один и тот же инструментальный пакет может быть использо¬ ван при проектировании разнообразных пакетов прикладных программ. На этом закончим рассмотрение примера и подведем итоги. В данной гла¬ ве было продемонстрировано, что для создания удобного пакета программ, 2* 19
предназначенного для широкого круга пользователей, необходимы значи¬ тельные усилия коллектива программистов, использующих в своей работе последние достижения в области теоретического программирования и имеющих практический опыт участия в больших проектах. Результат этих усилий — пакет прикладных программ — позволяет при¬ менять ЭВМ для своей работы пользователям, обладающим лишь приблизи¬ тельным представлением о ее устройстве. Если для овладения ”с нуля” программированием в машинных кодах требовались месяцы и годы, для овладения программированием на алгоритмических языках — недели и месяцы, то освоить управление современным пакетом прикладных программ можно за несколько часов. Таков один из результатов, достигнутых на современном этапе эволюции программного обеспе¬ чения ЭВМ. В заключение краткого обзора истории взаимоотношений пользователя и ЭВМ сделаем попытку заглянуть в будущее. Опишем следующую стадию этого процесса, которую назовем ’’стадия интеллектуальных языков про¬ граммирования” (первое десятилетие XXI века). Если современный алгоритмический язык позволяет формулировать точ¬ ное описание того, как должна работать программа (т.е. внутреннее устрой¬ ство программы), то интеллектуальный язык программирования (ИЯП) позволит формулировать точное описание того, что должно получиться в ре¬ зультате работы программы (т.е. полное описание связи входов программы с ее выходами). Подобно тому как с помощью алгоритмического языка можно кратко описать бесконечно большое число различных алгоритмов, так с помощью ИЯП будет возможно компактно описать разнообразней¬ шие связи между входами и выходами программы. Если создание программы в настоящее время проходит этапы словесного описания, программирования на каком-либо языке, отладки и тестирова¬ ния, то применение ИЯП позволит ограничиться только тем этапом, который единственно необходим: точным описанием того, что должна сде¬ лать программа. Если в ЭВМ введено такое описание, то интеллектуальный транслятор (программа, которая может комбинировать различные модули так, чтобы в результате получилась программа, соответствующая этому описанию) сформирует текст программы на алгоритмическом языке, кото¬ рый далее обрабатывается обычным способом. Полученная программа мо¬ жет быть в принципе автоматически проверена, поскольку в ЭВМ уже введено точное описание того, что эта программа должна выполнить. Таким образом, произойдет дальнейшее скачкообразное повышение производительности труда программиста. Для того чтобы представить сложность интеллектуального транслятора, рассмотрим (в последний раз) пример из кулинарии. Заменим в книге ре¬ цептов описания приготовления блюд точным описанием того, как они выглядят (включая химический состав). Такая книга поставит в тупик многих хозяек. Однако квалифицированный повар, знающий, какими спо¬ собами достигается тот или иной внешний эффект, без труда сможет приго¬ товить блюдо по его описанию. В то же время человеку, не умеющему готовить, значительно легче описать (хотя бы приблизительно), как выг¬ лядит ю блюдо, которое он пожелал, чем способ, каким его можно приго¬ товить. 20
Таким образом, разработка интеллектуальных языков программирова¬ ния и трансляторов потребует значительных усилий теоретиков и практи¬ ков программирования, но соблазн избавиться от длительной и не дающей полных гарантий отладки слишком велик, чтобы не .попытаться продви¬ нуться в этом направлении. В случае успеха от программиста будет требо¬ ваться только одно: без ошибок описать связь входов и выходов програм¬ мы, что сделать, видимо, на порядок проще, чем без ошибок описать, как эту связь реализовать. Тем самым будет открыт путь к созданию еще более мощных, удобных и эффективных (а значит и более сложных) про¬ граммных средств. ГЛАВА II ХАРАКТЕРИСТИКИ ПАКЕТОВ ПРИКЛАДНЫХ ПРОГРАММ В этой главе описываются реальные пакеты прикладных программ, ис¬ пользуемые в нашей стране и за рубежом в настоящее время. Поскольку привести конкретные описания всех тех пакетов, которые этого заслужи¬ вают, невозможно, охарактеризуем множество существующих пакетов программ, перечислив некоторые их характеристики и в первую очередь те, которые представляют интерес для пользователя с практической точки зрения. Предположим, что читатель, прочитавший первую главу этой книги, ре¬ шил применить в своей работе какой-либо пакет прикладных программ и тем самым облегчить свою работу. С этой целью он направился в библиоте¬ ку с намерением просмотреть описания доступных пакетов и выбрать наиболее подходящий из них. Читателя, впервые просматривающего литературу по пакетам программ, не может не поразить количество всевозможных пакетов программ, библиотек программ, библиотек подпрограмм и отдельных программ, предназначенных для решения прикладных задач в самых разных областях науки и техники. Для неспециалиста по программному обеспечению ЭВМ выбор наиболее подходящего пакета программ может оказаться совсем не простым делом. Между тем, знание параметров пакетов, описанных в этой главе, необходимо для обоснованного выбора пакета прикладных программ. С точки зрения пользователя, характеристики пакетов программ можно разбить на три группы: 1) назначение пакета; 2) оборудование и математическое обеспечение, необходимое для рабо¬ ты с пакетом; 3) характеристики пакетов, по совокупности которых можно судить, насколько удобен пакет в работе. Рассмотрим эти группы характеристик подробнее. 21
§ 1. НАЗНАЧЕНИЕ ПАКЕТА ПРИКЛАДНЫХ ПРОГРАММ Естественно, что, выбирая для себя подходящий пакет программ, пользо¬ ватель в первую очередь обращает внимание на назначение пакетов. Назна¬ чение пакета программ описывается тремя характеристиками: 1) общее назначение пакета: 2) специализация пакета: 3) специфика пакета. Общее назначение определяет класс задач, решаемых с помощью программ пакета. Специализация пакета задает тот подкласс задач из этого класса, для решения которых главным образом и предназначен данный пакет. В состав пакета могут входить некоторые программы для решения задач, не принадлежащих подклассу, определяемому специализацией паке¬ та, но такие программы обычно уступают остальным программам пакета по своим ’’потребительским” качествам. Специфика пакета - это те свойства пакета, которые отличают его ог других пакетов того же общего назначения и специализации. Часто эти свой¬ ства не затрагивают круга решаемых задач, а относятся только к исполь¬ зуемым методам решения или к набору сервисных программ. Перечислим основные области применения советских и зарубежных па¬ кетов прикладных программ. Пакеты, реализующие численные методы решения различных математи¬ ческих задач, применяются во многих областях науки и техники. Специали¬ зациями пакетов этого назначения могут быть, например, решение уравне¬ ний с частными производными или решение уравнений гидродинамики, а спецификой -- повышенная точность вычислений или широкое использова¬ ние графопостроителя для вывода результатов. Пакеты для выполнения аналитических вычислений используются в ос¬ новном в физике и математике. Результатом решения задачи с помощью пакета этого класса служит функция, записанная в аналитическом виде, а не в виде таблицы значений, вычисленных с некоторой погрешностью. Возможная специализация - - расчет траекторий небесных тел и космических аппаратов, специфика — использование полиномов Чебышева. Пакеты для статистического анализа данных применяют для обработки данных, измеренных в результате какого-либо эксперимента, в самых раз¬ личных областях науки и техники. Возможные специализации: элементар¬ ная статистика, восстановление регрессионных зависимостей, случайные процессы. Специфика — малые выборки, печать результатов в виде стан¬ дартных отчетов или статей. Пакеты для обработки данных, полученных на ускорителях элементар¬ ных частиц, предназначены для отбора заданных схем распадов элементар¬ ных частиц среди миллионов событий, зарегистрированных в эксперименте на ускорителе и записанных на магнитную ленту. Пакеты для расчета объемных конфигураций молекул находят примене¬ ние в химии, физике и молекулярной биологии для определения свойств исследуемых или синтезируемых веществ. Пакеты для анализа данных социологических исследований применяются для обработки большого количества анкет, собранных в социологическом эксперименте. Пакеты, моделирующие поведение сложных систем, используются в эко¬ номике, метеорологии, экологии для изучения поведения и прогнозиро- 22
вания соответственно экономических, климатических и экологических факторов. Пакеты для обработки медико-биологических данных. Возможные спе¬ циализации: выделение групп риска, автоматизация профилактических осмотров населения, прогноз активности медицинских препаратов. Информационно-поисковые системы позволяют хранить, изменять и ис¬ пользовать большие объемы сложноорганизованной информации. Автоматизированные системы управления обеспечивают эффективное и оперативное управление разнообразными технологическими про¬ цессами. Пакеты для программирования различных технологических устройств используются в технике для составления программ для станков с числовым управлением, для оптимального лазерного раскроя ткани, монтажа печат¬ ных плат и т.п. Пакеты для автоматизации проектных работ (САПР) используются для ведения проектной документации, в частности, для составления и корректи¬ рования схем, чертежей, эскизов в различных конструкторских органи¬ зациях. Пакеты для обработки текстов и изображений могут быть использованы для автоматического набора текстов в типографиях, для видеомонтажа и мультипликации на телевидении и киностудиях. Пакеты обучающих программ и пакеты-тренажеры применяются для обу¬ чения и оценки уровня знаний школьников, студентов и специалистов, по¬ вышающих квалификацию. Пакеты-тренажеры используются для выработ¬ ки заданных профессиональных навыков. Пакеты программ, предназначенные для развлечения и отдыха. Возмож¬ ные специализации: игры для детей или взрослых, вырабатывающие задан¬ ные качества (быструю реакцию, предприимчивость); программы с по¬ мощью которых можно рисовать на экране цветного дисплея или сочинять музыку, воспроизводимую компьютером. На этом закончим беглый обзор областей применения пакетов программ, цель которого — не столько перечислить всевозможные приложения паке¬ тов, сколько продемонстрировать разнообразие практических задач, решае¬ мых сих помощью. Теперь рассмотрим вопросы, связанные с оборудованием и математиче¬ ским обеспечением, необходмым для работы пакета. После того как пользователь, подбирающий для себя подходящий пакет прикладных программ, выберет все пакеты, которые имеют нужное назна¬ чение, ему следует определить, какие из них могут работать на ЭВМ, к ко¬ торой пользователь имеет доступ. Для этого нужно выяснить следующее: а) типы ЭВМ, для которых разработчики пакета гарантируют работоспо¬ собность программ, и особенно тип инструментальной (или базовой) ЭВМ, т.е. той ЭВМ, на которой был оэлажен пакет; б) объем оперативной памяти ЭВМ, необходимый для работы программ пакета; в) состав периферийных устройств, их типы и характеристики, необходи¬ мые для работы пакета; 23
г) тип и состав операционной системы ЭВМ, под управлением которой должен работать пакет. Если тип ЭВМ пользователя не совпадает с типом инструментальной ЭВМ, или ЭВМ, для которой разработчики гарантируют работоспособность пакета, то запуск пакета либо окажется невозможным, либо может потре¬ бовать значительных усилий ог системного программиста. Минимальный необходимый объем оперативной памяти ЭВМ для боль¬ шинства пакетов лежит в пределах от 32 К до 512 К (объем оперативной или внешней памяти ЭВМ измеряется в байтах и битах: в объеме 1 бит можно хранить только один из двух символов: 1 или 0, ”да” или ’’нет”; один байт состоит из восьми битов; один килобайт равен 1024 байтам; один мегабайт равен 1024 килобайтам; сокращенные обозначения: 1 Кили 1 К байт, 1 М или 1 М байт). Периферийные устройства, необходимые для работы пакета, включают в себя устройства ввода данных и команд пользователя (ввод данных с перфокарт, с магнитных лент, с гибких дисков, с экрана дисплея), устройства вывода результатов (алфавитно-цифровое печатающее устрой¬ ство, алфавитно-цифровой дисплей, .графический дисплей, графопост¬ роитель) и устройства внешней памяти, необходимые для долговременного хранения программ пакета и данных пользователя и для временного хране¬ ния промежуточных результатов (обычно для этой цели используются маг¬ нитные диски и ленты). Важное значение имеет объем внешней памяти ЭВМ: чем больше этот объем, тем, вообще говоря, больший объем данных пользователя может быть обработан. Работа пакета в общем случае может оказаться возможной только при наличии определенного типа стандартной операционной системы ЭВМ (на¬ пример, ДОС или ОС ЕС или СВМ ЕС) и некоторых нестандартных ком¬ понент (например, специальной библиотеки научных подпрограмм или диа¬ логовой системы PRIMUS). § 2. УПРАВЛЕНИЕ ПАКЕТОМ ПРОГРАММ Предположим, что читатель, о котором шла речь в начале предыдущего параграфа, отыскал в библиотеке описания нескольких пакетов, которые имеют нужное назначение и могут работать на ЭВМ пользователя. Тем не менее весьма вероятно, что некоторые из этих пакетов окажутся практи¬ чески бесполезными для данного пользователя. Дело в том, что любой па¬ кет рассчитан на применение в конкретных условиях (лабораторной обста¬ новке). Так, например, пакет может быть рассчитан (явно или неявно) на то, что исходные данные вводятся один раз, корректируются и больше в процессе решения задачи не меняются. Если в конкретных условиях поль¬ зователя обрабатываемые данные накапливаются постепенно и многократ¬ но меняются в процессе решения задачи, то применение этого пакета в та¬ кой обстановке может оказаться чрезвычайно неудобным, хотя и возмож¬ ным в принципе. Определить, окажется ли полезен пакет в лабораторной обстановке поль¬ зователя, можно с помощью характеристик, отнесенных в начале главы к третьей группе. Если характеристики первых двух групп (назначение 24
пакета и оборудование), как правило, приводятся в описаниях пакетов всегда, то из многочисленных свойств третьей группы описания обычно содержат только некоторые, наиболее важные, по мнению разработчиков, характеристики. Причем в описаниях разных пакетов даны разные характе¬ ристики этой группы. Поэтому судить по описанию, насколько пакет удо¬ бен в работе, особенно в ситуации, отличной ог той, в которой пакет приме¬ нялся разработчиком, трудно. В этом случае можно попытаться выяснить у пользователей, уже работавших с пакетом, или у разработчиков, обладает ли пакет нужными свойствами. Характеристики пакетов, по которым пользователь может судить о том, насколько применение пакета удобно в тех или иных условиях, можно раз¬ бить на четыре группы: 1) характеристики способа управления пакетом; 2) характеристики, описывающие качество изготовления пакета; 3) характеристики, описывающие совместимость пакета с другими па¬ кетами; 4) характеристики, описывающие внутреннее устройство пакета. Рассмотрим подробнее характеристики способа управления пакетом: а) режим управления пакетом; б) характеристики языка управления пакетом; в) характеристики управления данными; г) способы обеспечения безопасности хранения данных. Существует два основных режима управления пакетами: пакетный ре¬ жим и диалоговый режим. В пакетном режиме пользователь отдает подго¬ товленное задание оператору ЭВМ и через некоторое время получает результаты выполнения задания. В диалоговом режиме пользователь видит на экране дисплея, как его задание выполняется шаг за шагом, он может вмешаться в этот процесс, меняя текст описания задания нужным образом. Некоторые пакеты могут работать как в пакетном, так и в диалоговом режимах. В пакетном' режиме удобно выполнять последовательности заданий с большим временем счета, не требующие вмешательства пользователей. В диалоговом режиме удобно, наоборот, выполнять задания с малым временем счета, которые нужно изменять в ходе выполнения, например, для исправления ошибок. Описание работы, которую должны выполнить программы пакета (т.е. задание), пользователь составляет на языке управления пакетом (ЯУП). Различные типы языков управления основаны на использовании либо набора ключевых слов, либо фраз естественного языка, либо элементов языка управления заданиями (ЯУЗ или JCL) операционной системы ЭВМ. Приведем в качестве иллюстрации задания для реальных пакетов, напи¬ санные на языках управления перечисленных типов [1,50, 61 ]. Пример 2.1. Задание на входном языке пакета СОРРА-2 (тип язы¬ ка - ключевые слова). Восстанавливается зависимость 40-го признака °т признаков с номерами 36, 37, 38 и 39 массива с именем СВЕРЛА. Пе¬ ред восстановлением выполняется функциональное преобразование зна¬ чений трех признаков. 25
ДАННЫЕ А = СВЕРЛА КЛАССЫ 1 ПРИЗНАКИ 40, 36-39 ТРАНСФОРМАЦИИ 1 = ALOG(X(1)), 2 = ALOG(X(2)), 3 = ALOG(X(3)) ВЫВОД 111 ПРОГРАММЫ REGRES ВСЕ Пример 2.2. Задание на выходном языке пакета MINITAB. Тип языка пакета - фразы английского языка. Вводятся и печатаются значе¬ ния четырех переменных с именами ID, SEX, ED. LEVEL и RESPONSE. Вычисляется зависимость переменной RESPONSE от переменной ED. LEVEL. Полученные невязки и оценки регрессии дописываются к исход¬ ным данным. Печатается график зависимости невязки от оценки регрессии. READ ' MYDATA ' INTO Cl -С4 NAME Cl = 'ID'C2 = 'SEX'C3 = 'ED. LEVEL' & C4 = 'RESPONSE' PRINT C1-C4 HISTOGRAM C2 -C4 REGRESS 'RESPONSE' ON 1 PREDICTOR & 'ED. LEVEL', STORE RESIDUALS & IN C5 AND PREDICTED VALUES & INC6 PLOT C5 VS C6 Пример 2.3. Задание для программы REGRESS пакета ППСА. Тип языка управления - элементы языка управления заданиями и ключевые слова. Восстанавливается регрессия 40-го признака на признаки с номера¬ ми 36, 37, 38 и 39 для массива, записанного в стандартный файл ППСА с именем MYDATA. //REGR JOB MSGLEVEL = (1,1) //STEP 1 EXEC PPSA, PROG = REGRESS, VOL = DV0001, DSN = MYDATA //CONTRL DD* METHOD = 'LRG' VARIABLES =40; 36-39; // Пользователю-непрограммисту проще всего управлять паектом с по¬ мощью языков, использующих ключевые слова и фразы родного языка. Дополнительные удобства при составлении заданий предоставляет набор специальных операторов ЯУП. Языки управления пакетом могут содержать следующие операторы: 1) условный оператор, с помощью которого в задании можно указы¬ вать условия, при наличии которых должна быть выполнена определенная часть задания; 2) оператор цикла, с помощью которого часть задания может быть вы¬ полнена указанное число раз; 3) арифметические операции, задающие выполнение арифметических действий с числовыми данными пользователя; 26
4) матричные операции, задающие выполнение действий с данными пользователя, представленными в виде матриц. Некоторые языки управления позволяют использовать макроопера¬ ции. В этом случае пользователь может записывать задания короче, за¬ меняя определенную последовательность предложений ЯУП (описание некоторой сложной операции) одним предложением, содержащим имя, присвоенное этой последовательности. Для тех пользователей, которым приходится обрабатывать большие объемы данных, особенно важны характеристики управления данными, в частности, способ указания данных, используемых в задании, и набор служебных операций с данными. Используемые данные могут быть указаны следующими способами: а) используемые данные включены в текст задания; б) в тексте задания указано местоположение данных во внешней па¬ мяти ЭВМ (в примере 2.3 - регистрационный номер тома и имя набора данных); в) в тексте задания указано имя каждого используемого массива (см. примеры 2.1 и 2.2); г) в тексте задания указано имя, присвоенное группе массивов, отно¬ сящихся к одному варианту решения задачи (этот метод будет описан в последующих главах) . Первый способ удобен только для данных малого объема. Второй спо¬ соб не подходит для тех пользователей, которых не интересует, на каком устройстве внешней памяти хранятся их данные. Последний способ указа¬ ния данных проще остальных. Возможен еще вариант, когда в задании имена используемых данных не указываются вообще. В этом случае в пакете не предусмотрено сосу¬ ществование нескольких вариантов данных и их совместная обработка. В тех случая, когда в задании необходимо использовать только часть указанного тем или иным способом массива данных, нужно эту часть описать. Некоторые пакеты не позволяют обрабатывать часть введенных дан¬ ных, в других нужная часть может быть задана следующими способами: 1) перечислением порядковых номеров элементов массива (см. приме¬ ры 2.1, 2.2, 2.3); 2) перечислением имен, присвоенных элементам массива (см. при¬ мер 2.2); 3) указанием условия (логической функции), которому должны удов¬ летворять отобранные элементы (способ описан в последующих главах). Набор служебных операций с данными, реализованный в пакете, обычно включает в себя следующие операции: 1) ввод, печать или отображение на экране, коррекция данных; 2) объединение массивов данных; 3) выделение части массива данных; 4) различные функциональные преобразования; 5) упорядочение элементов массива заданным образом; 6) обработка ’’прочерков”, т.е. отсутствующих значений; 7) переименование массивов данных и элементов массивов; 8) хранение, поиск, уничтожение исходных данных, промежуточных дан¬ ных и конечных результатов вычислений; 27
9) печать отчетов, содержащих совокупность сведений о решенной за¬ даче. Особый интерес для пользователя представляют меры, которыми в па¬ кете обеспечивается безопасность хранения данных : 1) периодическое создание копий информации, хранящихся во внешней памяти ЭВМ; 2) рестарт (возобновление) заданий, прерванных из-за сбоя ЭВМ или ошибки оператора ЭВМ; 3) защита от несанкционированного доступа к данным. Создание копий информации выполняется для того, чтобы в случае необходимости можно было заменить утраченную часть данных, храня¬ щихся во внешней памяти ЭВМ, последней копией. Те изменения, которые были внесены в утраченные данные после создания последней копии и до момента утраты, приходится повторять заново, если в пакете не предус¬ мотрено запоминание всех изменений информации, выполненных после создания копии. В последнем случае запомненные изменения вносятся автоматически. Если в пакете не предусмотрен рестарт прерванных заданий, то часть информации, хранящейся во внешней памяти, при прерывании задания может быть испорчена и должна быть восстановлена с помощью последней копии. Если в пакете реализован ручной рестарт, то пользователь получает информацию о том, какие изменения ему следует внести в незакончив- шееся задание, чтобы выполнить его повторно. В этом случае потери ин¬ формации не происходит. Если в пакете реализован автоматический рестарт, то незаконченное задание нужно повторить без каких-либо изменений. Этот вариант наибо¬ лее удобен для пользователя. Защита от несанкционированного доступа необходима при обработке секретной информации и в тех случаях, когда нужно застраховаться от возможного изменения информации, произведенного (по ошибке или умышленно) другим пользователем. При обработке защищенных данных пользователь должен указывать пароль. Перейдем теперь к рассмотрению характеристик, бписывающих внут¬ реннее устройство пакета программ. § 3. КОНСТРУКЦИЯ ПАКЕТА ПРОГРАММ С помощью общего описания конструкции пакета программ также можно судить о том, насколько эффективным окажется применение па¬ кета в заданной конкретной ситуации. Рассмотрим следующие характе¬ ристики: 1) способ управления программами; 2) алгоритмические языки, на которых написаны программы пакета; 3) размещение данных в оперативной памяти ЭВМ; 4) размещение данных во внешней памяти ЭВМ. По способу управления программами пакеты делятся на интегрирован¬ ные системы и неинтегрированные системы. 28
Неинтегрированная система представляет собой совокупность отдельных программ или подпрограмм (библиотеки программ или подпрограмм). Для вызова нужной программы из библиотеки пользователь должен сос¬ тавить задание на языке управления операционной системой ЭВх\1 (см. на¬ пример 2.3 из § 2). Для вызова нужной подпрограммы пользователь должен написать программу на одном из алогритмических языков и вклю¬ чить в него оператор вызова продпрограммы, например CALL SUB007 (XI, Х2, . , XI1). Интегрированная система представляет собой одну программу, состоя¬ щую из многих программных модулей. Для управления интегрированной системой нужно составлять задания на языке управления пакетом (ЯУП). Поскольку ЯУП обычно проще языка управления операционной системы и, тем более, проще алгоритмического языка, то для пользователя-непрог¬ раммиста удобнее применять интегрированные системы. Как интегрированные, так и неинтегрированные системы могут быть системами транслирующими и нетранслирующими. Транслирующие систе¬ мы сначала составляют (на некотором алгоритмическом языке) текст программы, которая должна выполнить задание пользователя. Затем полученный текст преобразуется в последовательность команд ЭВМ (транс¬ лируется) , и сформированная программа выполняется. Нетранслирующая система при обработке задания пользователя опери¬ рует не с фрагментами текстов программ на алгоритическом языке, а с уже оттранслированными модулями пакета. Быстродействие нетрансли¬ рующей системы выше, так как при ее работе не тратится время на транс¬ ляцию программ. Пакеты прикладных программ обычно программируются на алгорит¬ мических языках PL/1, ФОРТРАН, Ассемблер и некоторых других. Паке¬ ты, написанные на проблемноориентированных языках (PL/1, ФОРТРАН), проще модифицировать и переносить с ЭВМ одного типа на ЭВМ другого типа. Метод размещения данных в оперативной памяти ЭВМ, примененый в пакете, определяет те действия, которые пользователь должен выпол¬ нить при изменении объема обрабатываемых данных. Если распределение оперативной памяти для программ пакета фик¬ сировано (т.е. конкретные размеры массивов указаны в текстах прог¬ рамм) и обработка данных по частям не предусмотрена, то при переходе от решения задачи с небольшим объемом обрабатываемых данных к ре¬ шению задачи с большим объемом данных пользователю может понадо¬ биться изменить размеры массивов в текстах программ и заново тран¬ слировать их. Если в пакете предусмотрена обработка данных по частям, то при пе¬ реходе от одной задачи к другой изменять тексты программ не придет¬ ся. Однако если объем обрабатываемой части каким-либо образом фик¬ сирован (например, если обрабатываемая матрица всегда считывается в оперативную память по одной строке), а объема оперативной памяти Достаточно для размещения всей матрицы, то это приведет к снижению быстродействия за счет увеличения времени, израсходованного на считы¬ вание и запись частей. Влияние этого недостатка может быть уменьшено, 29
если в пакете реализован выбор оптимального для каждой задачи объе¬ ма обрабатываемой части данных. Организация хранения данных во внешней памяти ЭВМ важна для тех пользователей, которые предполагают одновременно заниматься решением нескольких задач. Если внешняя память для хранения данных не используется, то каждое задание пользователя должно содержать все необходимые данные, а объем оперативной памяти должен быть достаточен для их хранения. Если внешняя память используется только для хранения исходных данных, то затруднена (или невозможна) совместная обработка резуль¬ татов решения нескольких вариантов одной задачи. Если же во внешней памяти могут храниться исходные данные, про¬ межуточные данные и результаты, то становится возможной многосту¬ пенчатая обработка данных. Структура данных, хранимых во внешней памяти, также имеет большое значение. Если наборы данных представляют собой прямоугольные файлы (пос¬ ледовательности строк одинаковой структуры и длины) , то многие опе¬ рации с этими данными можно выполнить с помощью стандартных прог¬ рамм обслуживания операционной системы ЭВМ. Некоторые пакеты используют файлы более сложной структуры, на¬ пример иерархические, позволяющие осуществлять быстрый’поиск данных и экономное использование объема внешней памяти. Если пакет программ использует архив данных, то пользователь может записать всю информацию о решенной задаче в архив и вернуться к этой задаче, как только возникнет такая необходимость. Если пакет программ использует специализированную базу данных, то для пользователя облегчается хранение и обработка сложно органи¬ зованной информации. § 4. ПРОЧИЕ ХАРАКТЕРИСТИКИ Перечислим остальные характеристики пакетов прикладных программ, важные для пользователя: 1) уровень, на котором выполнена разработка (квалификация разра¬ ботчиков, методика программирования, методика тестирования); 2) качество документации (полнота и понятность описания пакета, простота структуры документации, возможность получения копий); 3) средства оказания помощи пользователю в период обучения работе с пакетом (защита от ошибок, выдача рекомендаций в режиме диалога, учебные примеры, обучающие программы); 4) обязательства разработчиков перед пользователями (консульта¬ ции, запуск пакета, периодическое обновление версии пакета, исправ¬ ление обнаруженных ошибок); 5) способ расширения пакета (подключение новых модулей осущест¬ вляется пользователем, системным программистом, только разработчи¬ ком) ; 6) совместимость пакета с другими пакетами прикладных программ (возможно использование ’’чужих” прямоугольных файлов, файлов слож¬ ной структуры, специализированных или универсальных баз данных): 30
* х J H o < a. co < x a < co X X < cl О Cl U О s r-1 < IO X X i X CD X CO < co s щ i—r О Z < H OtC о 3 3 co Я co z < X < < 3 H и и OU О о о co > О co co > co" co S til X X < cd < X 3 ffl CD 2* U CD U3 Щ £ о >X О X aa X H < cl ы X О 3 so CD X H s; 3 < c m 40 О »o о <~) —< ш X X < 30 co <
Таблица 2.2 НАЗВАНИЕ ПАКЕТА ХАРАКТЕРИСТИКА сч < рц Ри о о ППСА ( ACT А | Г GENSTAT MINITAB ОБЩЕЕ интегрированная система 4- 4- 4- + + ОПИСАНИЕ нетранслирующая система + + + + пакетный режим + 4- + 4- диалоговый режим + -1- язык управления операционной системой ЭВМ + ключевые слова 4- + + + т ЯЗЫК фразы естественного языка + УПРАВЛЕНИЯ условные операторы _ •+ операторы цикла 4- + 4- ариф ме тичес кие в ы р аже1 ш я + + + 4- матричные выражения 4- макрооперации + + + т ИСПОЛЬЗОВАНИЕ ОПЕРАТИВНОЙ размещение весь массив ПАМЯТИ массива по т строк + данных по одной строке + ИСПОЛЬЗОВАНИЕ. ВНЕШНЕЙ ПАМЯТИ прямоугольные файлы + + + 4- файлы сложной структуры архивы 11 специализированные БД + + ОБРАБОТКА ДАННЫХ возможны прочерки сосуще ствованис нескол ьких вариантов данных + сжатие данных + + 4- 4- 4 выделение по номерам + + 4- + подмножеств по именам 4- + 4- + по логическим условиям + ДОБАВЛЕНИЕ НОВЫХ МОДУЛЕЙ ВЫПОЛНЯЕТ только разработчик системный программист пользователь-программист АВТО М АТИ Ч ЕСКИ Й Р ЕСТ APT 32
Таблица 2.2 (окончание) НАЗВАНИЕ ПАКЕТА ХАРАКТЕРИСТИКА СОРРА-2 < О с К АСТА GENSTAT MINITAB SAS элементарная статистика + + + + + + регрессия + + + + + + временные ряды + + + СТАТИСТИКА кластер-анализ + + + + + распознавание образов и дискретный анализ + + + + восстановление плотности вероятности + + планирование эксперимента + + ВСПОМОГА¬ графика на АЦПУ + + + + + + ТЕЛЬНЫЕ преобразования данных + + + + + + ОПЕРАЦИИ генератор отчетов + 7) форма, в которой поставляется пакет (текст программ на исходном языке, загрузочные модули, объектные модули; документация на рас¬ печатках, на магнитной ленте). Совокупность свойств пакетов программ принято изображать в виде таблиц ’’пакеты — характеристики” [60, 67]. Пример такой таблицы для шести реальных пакетов приведен ниже. Знак ” + ”, расположенный на пе¬ ресечении столбца с названием пакета и строки с названием какого-либо свойства, означает, что этот пакет данным свойством обладает. Отсутствие знака ”+’’ означает либо отсутствие данного свойства, либо только то, что автор таблицы не смог ответить на этот вопрос с помощью имевших¬ ся в его расположении описаний. Иногда последние две ситуации обозна¬ чают знаками ” - ” и ”?”. Теперь, после того как было сказано ’’кое-что” о многих пакетах, нуж¬ но сказать ’’почти все” об одном из них. Поэтому следующие семь глав содержат подробное описание пакета прикладных программ АСТА (Алго¬ ритмы Статистического Анализа), предназначенного для решения задач статистического анализа данных. В Приложении помещены краткие опи¬ сания некоторых отечественных и зарубежных пакетов программ, также предназначенных в основном для статистической обработки данных. 3- В.А. Кощеев 33
ГЛАВА III ПАКЕТ ПРИКЛАДНЫХ СТАТИСТИЧЕСКИХ ПРОГРАММ АСТА В главах III — VI описано применение пакета прикладных статистических программ АСТА. В главе III содержится общее описание пакета: назначение и возможности, приемы работы с пакетом, структуры обрабатываемых данных и синтаксис языка управления. В главах IV и V приведены сведения о реализованных в пакете операциях преобразования данных и операциях статистической обработки данных, даны примеры составления простых заданий для программ пакета. Наконец, в VI главе содержатся примеры заданий, описывающих сложную многоступенчатую обработку данных. § 1. НАЗНАЧЕНИЕ И ВОЗМОЖНОСТИ ПАКЕТА Пакет прикладных статистических программ АСТА (Алгоритмы Стати¬ стического Анализа) предназначен для решения задач многомерного стати¬ стического анализа данных в пакетном режиме. Пакет ориентирован на проведение сложных многоэтапных вычислений с решением многих вариан¬ тов одной и той же задачи. В пакете АСТА реализованы разнообразные алгоритмы статистической обработки данных, основанные на методе структурной минимизации сред¬ него риска [2,9]. Суть метода структурной минимизации среднего риска состоит в правильном соотнесении сложности приближающей функции с количеством имеющихся данных. Большое число сервисных программ обеспечивает простое и гибкое управление пакетом. Наличие встроенной базы данных позволяет одновре¬ менно хранить и обрабатывать данные многих пользователей. Применение специального метода поиска входных данных, основанного на построении логической структуры множества массивов данных, возни¬ кающих при работе группы пользователей с пакетом, значительно упрощает описание входной информации. Пакет АСТА предназначен для широкого круга пользователей-непро¬ граммистов. В пакете предусмотрена развитая система синтаксического и логического контроля команд, помогающая пользователю-новичку не совершать непоправимых ошибок. Для применения пакета не нужно знать языки программирования и язык управления операционной системой ЭВМ. В то же время пользователи-про¬ граммисты могут подключать к пакету свои программы и использовать при этом все возможности, предоставляемые управляющей частью пакета. Программы пакета АСТА выполняют следующие статистические опе¬ рации : 1) вычисление элементарных статистических характеристик; 2) восстановление многомерной регрессии; 3) распознавание образов; 4) интерпретация результатов косвенных экспериментов: 5 ) восстановление плотности распределения вероятности; 6) кластер-анализ. Кроме этого, программы пакета выполняют следующие служебные операции: 34
1) ввод и коррекция данных; 2) преобразования данных (линейные преобразования, в частности, переход к главным компонентам; преобразования непрерывных перемен¬ ных в дискретные; преобразования данных, описываемые логическими функциями; выделение части данных; объединение данных и другие); 3) хранение в специализированной базе данных пакета исходных и промежуточных данных, а также результатов статистической обработки; 4) создание архивных магнитных лент и копий базы данных на магнит¬ ных лентах. Решение статистических задач с помощью пакета АСТА обычно происхо¬ дит по следующей схеме. 1. Формулируется задача, интересующая пользователя, и подготавливает¬ ся матрица наблюдений, содержащая выборку реализаций случайного вектора (вектора наблюдений). Матрица наблюдений может иметь ’’прочер¬ ки”, т.е. отсутствующие значения. Подготовленные данные записываются в базу данных и при необходимости коррректируются. 2. Сформулированная задача решается одним или несколькими способа¬ ми. Варианты решения могут различаться выбранным алгоритмом, набором используемых координат вектора наблюдений, набором используемых элементов выборки, группировкой выборки на классы, разбиением исполь¬ зуемой части выборки на обучающую и экзаменационную последователь¬ ность, функциональными преобразованиями матрицы наблюдений и т.п. Результаты решения также могут быть записаны в базу данных. 3. Среди выполненных вариантов решения задачи выбирается один или несколько наилучших. Результаты остальных вариантов уничтожаются. Если задача закончена, то все данных переписываются из базы данных на одну из архивных магнитных лент. Пакет АСТА предназначен для работы многих пользователей в пакетном режиме. Каждый пользователь составляет одно или несколько описаний работ на языке управления пакетом. За один вызов программы АСТА может быть обработано (последовательно) любое количество описаний работ группы пользователей, данные которых хранятся в одной и той же базе данных. Работа нескольких пользователей с пакетом может быть обеспечена Двумя специалистами (не считая персонала, обслуживающего ЭВМ): систем¬ ным программистом и администратором базы данных. Обязанности систем¬ ного программиста: инициализация пакета, настройка в случае необходи¬ мости параметров пакета в зависимости от изменений характера решаемых задач и ресурсов ЭВМ, подключение новых модулей, исправление обнару¬ женных программных ошибок. Обязанности администратора базы данных: инициализация баз данных, периодическое создание копий базы данных на магнитных лентах, выполнение обмена данными между базой данных и архивными магнитными лентами, восстановление базы данных после потери части информации, вызванной сбоем оборудования или др у ги ми причинами (более подробное описание обязанностей системного про¬ граммиста и администратора базы данных содержится в главе VII). Программы пакета могут работать в следующих режимах'. 1 ) рабочий режим или режим пользователя (выполнение операций с синтаксическим и логическим контролем правильности команд); 3* 35
2) режим с блокировкой контроля (режим позволяет опытному пользо¬ вателю выполнять запрещенные последовательности операций, если пользо¬ ватель уверен, что правильно понимает смысл получаемых при этом резуль¬ татов ); 3) режим самоконтроля или режим системного программиста (режим, при котором прослеживаются все изменения массивов данных и печатается информация, представляющая интерес для системного программиста; режим применяется при инициализации пакета, при добавлении новых модулей, при внесении изменений в модули системы управления пакетом, а также при подозрительном поведении программ пакета для поиска возможных программных ошибок). Пакет АСТА может быть настроен на любой объем оперативной памяти ЭВМ в интервале от 160 килобайтов до нескольких мегабайтов. При этом чем больше объем раздела оперативной памяти (ОП), выделенного пакету, тем больше максимальный допустимый размер обрабатываемых матриц наблюдений и тем меньше время счета модулей пакета. Время счета умень¬ шается благодаря сокращению количества операций обмена данными между ОГ1 и базой данных. Время счета перестает уменьшаться с ростом объема ОП, если все обрабатываемые массивы данных помещаются в ОГ1 целиком. Предельно допустимый размер обрабатываемых матриц наблюде¬ ний при объеме раздела ОП 256 К составляет около 2000 реализаций раз¬ мерности 50. Объем базы данных, достаточный для обработки ста .матриц наблюдений размером 1000 X 50, равен 10—30 мегабайтам, при условии, что хранится не более 10 вариантов обработки каждой матрицы. Минимальный набор внешних устройств ЭВМ, используемый при работе пакета, состоит из устройства ввода перфокарт или накопителя на магнит¬ ных лентах или дисплея (ввод описаний работ пользователей), накопителя на магнитных дисках (база данных) и алфавитно-цифрового печатающего уст¬ ройства или дисплея (выдача информационных сообщений системы управле¬ ния пакетом, сообщений об ошибках и результатов обработки данных). Модули пакета АСТА написаны на языке ФОРТРАН IV и отлажены на ЭВМ ЕС-1045 (операционная система ОС ЕС 6.1). Количество исходных модулей — около 200. Общий объем исходных модулей - около 40 000 строк. Описание пакета АСТА состоит из двух частей: руководство пользовате¬ ля (главы III —VI), руководство системного программиста и администра¬ тора базы данных (главы VII — IX). Руководство пользователя в свою очередь состоит из четырех частей: 1 ) основные сведения о пакете (глава III); 2) описание операций формирования и преобразования данных (гла¬ ва IV); 3) описание операций статистической обработки данных (глава V); 4) описание сложных операций обработки данных (глава VI). Для освоения пакета АСТА необходимо прочитать основные сведения о пакете и просмотреть несколько типовых описаний работ. Уяснив принци¬ пы составления описания, пользователь может описать любую работу, которую способны выполнить программы пакета. При составлении работ главы IV — VI можно использовать как справочник. 36
§ 2. УПРАВЛЕНИЕ ПАКЕТОМ В этом параграфе изложим принципы управления пакетом прикладных статистических программ АСТА. Управление пакетом АСТА осуществляется с помощью последователь¬ ности описаний работ, составленных одним или несколькими пользователя¬ ми. Последовательность описаний подается на вход главного модуля пакета. Работы выполняются последовательно, в том порядке, в котором располо¬ жены их описания. Результатом выполненной работы обычно является изменение информации, содержащейся в базе данных (БД) и распечатка АЦПУ. Если во время выполнения задания выяснится, что работа не может быть завершена (из-за ошибок пользователя или по другим причинам), то работа снимается. Снятие работы заключается в том, что все изменения информа¬ ции в БД, выполненные в этой работе до обнаружения ошибки, аннулируют¬ ся, на распечатке АЦПУ появляется сообщение ’’работа снята” с указанием причины и система управления пакетом программ (СУПП) переходит к выполнению следующей работы. Снятие работы не влияет на выполнение остальных работ последователь¬ ности, не использующих те данные, которые должна была изменить снятая работа. Работы, использующие эти данные, будут выполнены так, как будто последовательность описаний не содержала описания снятой работы. Описание работы представляет собой последовательность предложений языка управления пакетом (ЯУП). В ЯУП АСТА определено два типа предложений. С помощью предложений ’’данные” пользователь предъявляет массивы данных (в том числе скаляры). С помощью предложений "опера¬ ция" пользователь указывает алгоритмы обработки данных. Синтаксис предложений ’’данные” и ’’операция” описан в § 4. При составлении описаний работ используются идентификаторы, имена и цифровые коды. Идентификаторы — это последовательность цифр и букв русского и латинского алфавитов, начинающаяся с буквы. Имя - это последовательность любых символов кода ДКОИ. Цифровой код это Целое число в диапазоне от 1 до 32767. Многие идентификаторы имеют две формы: короткую (мнемокод) и длинную (полное название]. Мнемокоды состоят из 1 8 символов, а полные названия — из 9 и более символов. Полные названия часто представ¬ ляют собой последовательности слов русского языка. Мнемокод и полное название идентификатора используются как синонимы. Некоторые идентификаторы имеют структуру ’’корень-суффикс 1 — суффикс 2 - . . Однокоренные идентификаторы присвоены объектам, отличающимся лишь второстепенными свойствами. Идентификаторы, имеющие разные корни, но одинаковые суффиксы, указывают на наличие одних и тех же второстепенных свойств у разных объектов. В мнемокодах корень и суффиксы записываются слитно или через пробел, а в полных названиях — через пробел или через запятую. Предложение ’’данные” составляется для ввода в ЭВМ одного массива Данных и, возможно, идентификаторов подмножеств (например, строк или столбцов матрицы) этого массива. Идентификаторами подмножеств Могут служить имена и. цифровые коды, присваиваемые пользователем. 37
Каждому массиву данных приписывается идентификатор вида инфор¬ мации (мнемокод или полное название). Идентификатор вида информации (ИВИ) однозначно характеризует вид (смысл, назначение) информации, содержащейся в массиве. Все ИВИ зафиксированы в пакете и могут быть изменены только системным программистом. Пользователь указывает ИВИ в предложениях ’’данные”. Для массивов, полученных на выходах программ пакета, ИВИ присваиваются системой управления автоматически. Прим ер 2.1. Следующее предложение ’’данные” задает матрицу наблюдений, содержащую в строках набор реализаций некоторого случайно¬ го вектора. Идентификатор вида этой информации - МАТРИЦА НАБЛЮ¬ ДЕНИЙ. МАТРИЦА НАБЛЮДЕНИЙ = 3.7. 4.5 9.1; •Заданная с помощью этого предложения информация в дальнейшем будет использоваться системой управления пакетом только в качестве матрицы наблюдений. При мер 2.2. В результате выполнения операции ’’для каждого столбца матрицы наблюдений вычислить среднее значение чисел, расположенных в этом столбце” был получен вектор 4,01;5*96;. . . ;8,27, которому система управления присвоила идентификатор вида информации СРЕДНИЕ ЗНА¬ ЧЕНИЯ. В дальнейшем этот числовой вектор будет использоваться только в качестве выборочных средних значений. Выполняя работу, описанную пользователем, СУПП отслеживает логиче¬ ские связи между исходными массивами данных и массивагии, полученны¬ ми в результате выполнения операций. Другими словами, система управле¬ ния строит логическую структуру множества массивов данных, относящих¬ ся к решению одной задачи. Основными элементами этой структуры служат семейства и подсемейства массивов данных. Семейство массивов данных - это такая совокупность массивов, относя¬ щихся к одному варианту решения задачи, в которой все массивы имеют разные ИВИ. Один и тот же массив, вообще говоря, может одновременно принадлежать нескольким семействам. Подсемейство массивов данных - это совокупность массивов, логически связанных друг с; другом таким образом, что если один из массивов подсе¬ мейства принадлежит некоторому семейству,-то и все остальные массивы подсемейства также принадлежат этому семейству. Любой массив инфор¬ мации может принадлежать только одному подсемейству. Одно и то же подсемейство может принадлежать нескольким семействам одновременно. Подсемействам массивов данных пользователь обычно присваивает имена. Кроме этого, система управления пакетом присваивает каждому подсемейству уникальный цифровой код. JlpHMcp 2.3. Пусть в результате выполнения некоторой работы были введены массивы ИМЕНА ПЕРЕМЕННЫХ = РАЗМЕР АКТИВНОСТЬ; МАТРИЦА НАБЛЮДЕНИЙ = 3.7. 4.5. . . . . 9.1; С ПИСОК НОМЕРОВ СТРОК = 1,2.10: СПИСОК HOMJ POB СТРОК = 2. 5. 136. 150; Массив ИМЕНА ПЕРЕМЕННЫХ содержит имена, присвоенные столбцам 38
матрицы наблюдений. В списках номеров строк заданы номера некоторых, выбранных пользователем, строк матрицы наблюдений. Это множество массивов представляет собой два семейства, относящих¬ ся к двум вариантам решения задачи. Задачей может быть, например, вычисление выборочных средних по тем строкам матрицы наблюдений, которые заданы в списке. Каждое семейство содержит матрицу наблюдений, имена переменных и один из списков номеров строк. Матрица наблюдений и имена переменных образуют одно подсемейство, а списки номеров строк- два других подсемейства. Выборочные средние, вычисленные с использованием, например, 1-го списка номеров строк, будут включены в то подсемейство-, которому принадлежит 1-й список. Тем самым массив выборочных средних попадет и во все семейства (в данном примере такое семейство одно), содержащие 1-й список номеров строк. Предложение ’’операция” составляется для того, чтобы сообщить системе управления пакетом, какой алгоритм обработки данных выбран. В пакете определено большое количество стандартных алгоритмов, реализованных в виде одного или нескольких модулей. Каждому стандарт¬ ному алгоритму присвоен идентификатор операции (мнемокод и полное название). Идентификаторы операций зафиксированы в пакете и могут быть изменены только системным программистом. Пример. 2.4. С помощью следующего предложения ’’операция” задает¬ ся вычисление выборочных средних. Идентификатор операции - СРЕДНИЕ. СРЕДНИЕ: С помощью одного предложения ’’операция” указывается один стандарт¬ ный алгоритм обработки данных. Для описания более сложных способов обработки, состоящих из последовательного выполнения нескольких стандартных алгоритмов, используется несколько предложений ’’операция”. Каждой операции, т.е. стандартному алгоритму, приписан порядок опера¬ ции. Порядок операции равен количеству семейств массивов данных, используемых при выполнении операции. Большинство операций пакета имеют порядок, равный единице. Наибольший порядок операций в пакете равен трем. Описание работы представляет собой последовательность предложений ”данные”и ’’операция” следующей структуры : НАЧАЛО РАБОТЫ; ЗАДАЧА = . . . : СЕМЕЙСТВА МАССИВОВ = .... последовательность предложений "данные" и "операция" для указанных семейств СЕМЕЙСТВА МАССИВОВ = .... последовательность предложений "данные" и "операция" для указанных семейств КОНЕЦ РАБОТЫ: Эта струкгура формируется с помощью специальных предложений ’’дан¬ ные” ЗАДАЧА и СЕМЕЙСТВА МАССИВОВ (мнемокоды видов информа¬ 39
ции — 3 и СМ) и специальных предложений ’’операция” НАЧАЛО РАБОТЫ и КОНЕЦ РАБОТЫ (мнемокоды операций — HP и КР). После операции КР в последнем описании работы следует операция КОНЕЦ РАБОТЫ ПАКЕ¬ ТА (мнемокод - КРП). В предложении ЗАДАЧА указывается идентификатор раздела БД, в котором хранятся все данные, относящиеся к решаемой задаче. Если база данных в работе не используется, то предложение ЗАДАЧА в описании отсутствует. В предложении СЕМЕЙСТВА МАССИВОВ указываются все используе¬ мые семейства массивов данных. Каждое семейство задается перечислением нескольких массивов из этого семейства, называемых представителями семейства. При этом каждый массив данных указывается парой {идентифи¬ катор вида информации; имя или цифровой код подсемейства }. Все массивы, вводимые с помощью предложений ’’данные”, помещаются в то семейство, которое указано в 1-й строке матрицы СМ из предыдущего предложения СЕМЕЙСТВА МАССИВОВ. Все предложения ’’операция” задают обработку только тех массивов данных, которые принадлежат семействам, указанным с помощью предыдущего предложения СЕМЕЙСТ¬ ВА МАССИВОВ. Пример. 2.5. Вычисляются выборочные дисперсии. Используемое семейство массивов данных задается указанием массивов-представителей (МАТРИЦА НАБЛЮДЕНИЙ, 103) и (СПИСОК НОМЕРОВ СТРОК, 105), где 103 и 105 — цифровые коды подсемейств, присвоенные системой управ-, ления пакетом. СМ ='МАТРИЦА НАБЛЮДЕНИЙ (103). СПИСОК НОМЕРОВ СТРОК(105)'; ДИСПЕРСИИ; В этом примере предложение СМ однозначно задает семейство массивов, к которому, кроме массивов-представителей, принадлежат также массивы ИМЕНА ПЕРЕМЕННЫХ и СРЕДНИЕ ЗНАЧЕНИЯ. Последние два массива также используются при выполнении операции ДИСПЕРСИИ, несмотря на то, что они не заданы явно в описании работы. Если даже к моменту выпол¬ нения операции ДИСПЕРСИИ было вычислено несколько вариантов сред¬ них значений, различающихся списками номеров строк, при выполнении операции будет использован тот из них, который принадлежит указанному семейству, т.е. соответствующий списку номеров строк из подсемейства с цифровым кодом 105. Если пользователь присвоил имена подсемействам 103 и 105, то эти имена могут использоваться в предложении СМ вместо цифровых кодов: СМ = 'МАТРИЦА НАБЛЮДЕНИЙ (ИСХОДНЫЙ ВАРИ АН Г). СПИСОК' НОМЕРОВ СТРОК (РАС ШИРЕННЫЙ СПИСОК)': Предполагается, что подсемейству 103 присвоено имя ИСХОДНЫЙ ВАРИ¬ АНТ, а подсемейству 105 - имя РАСШИРЕННЫЙ СПИСОК. Если порядок операции равен/: (1 < к <3), го для операции ис польз укл¬ ея к семейств, описанных в первых к строках матрицы СМ из предыдущего предложения СЕМЕЙСТВА МАССИВОВ. Порядок, в котором должны быть описаны семейства в предложении СМ. указан для каждой конкретной операции в главах IV V. 40
Массив, полученный в результате выполнения операции А:-го порядка, включается в одно из к семейств (обычно в последнее), указанных в преды¬ дущем предложении СЕМЕЙСТВА МАССИВОВ, согласно описанию операции. Входными данными операции могут служить, во-первых, массивы, опи¬ санные в этой же работе с помощью предложений ’’данные”, предшествую¬ щих выполняемому предложению ’’операция”. Во-вторых, вводными дан¬ ными могут быть массивы, полученные в этой же работе с помощью предло¬ жений ’’операция”, предшествующих выполняемому предложению ’’опера¬ ция”. И, в-третьих, входными данными могут служить массивы, хранящие¬ ся в разделе БД, заданном с помощью предложения ЗАДАЧА. Источник вход¬ ных данных операции отыскивается автоматически по информации, задан¬ ной пользователем в предложениях ЗАДАЧА и СЕМЕЙСТВА МАССИВОВ. Для того чтобы массив, введенный с помощью предложения ’’данйые” или полученный в результате выполнения операции в одной работе, мог быть использован в последующих работах, этот массив должен быть записан в базу данных (операция ЗАПИСЬ). § 3. СТРУКТУРА ДАННЫХ Программы пакета АСТА обрабатывают данные, имеющие следующие основные структуры: скаляры, векторы, прямоугольные матрицы и трех¬ мерные таблицы. Массивом данных будем называть множество данных, имеющее одну из перечисленных структур (в том числе скаляры). Элементами массива данных могут служить символы, целые числа и действительные числа. Введем названия подмножеств трехмерной таблицы {*(й ,й ,й); Zi = 1,...,w 1; ii = 1,... ,«2; /3 = 1,.:. ,и3}. Произвольное подмножество трехмерной таблицы вида {*(й,й,й); /’1 = 1,./2 = 1,.. . ,//2; /3 = const} будем называть (1,2) -матрицей. Произвольное подмножество трехмерной таблицы вида {х (й , й , й); Й = й---Л1; /’2-const; /3 = const} будем называть 1-строкой. Аналогично определим (1,3)-матрицу, (2,3)-мат¬ рицу, 2-строку и 3-строку. Соответственно строки 1) {х(/!,/2); й = 1, • - • , «1; й = const} и столб¬ цы 1) {*(/!, й )?й = const; Z2 = 1,. . . , п2 } прямоугольной матрицы {х(й , й); й = 1, ; i2 = 1, . . • ,п2} иногда будем называть 1-строками и 2-стро¬ ками. Многие операции пакета АСТА могут использовать только заданную часть входного массива данных. Для описания части массива данных служат имена подмножеств массива, задаваемые пользователем. Имена могут иметь компоненты вектора, столбцы и строки матрицы, (1,2)-матрицы, 1) Для обозначения элементов матриц всюду в этой книге будем пользоваться правилом: x(i,j) - это элемент матрицы х, стоящий на пересечении /-го столбца и 7‘Й строки. 41
(1,3)-матрицы и (2,3)-матрицы трехмерной таблицы. Элементы матрицы и строки трехмерной таблицы указываются парой имен: строка и столбец матрицы, две матрицы трехмерной таблицы. Элементы трехмерной таблицы задаются тройкой имен матриц. Вместо имен пользователь может задавать цифровые коды. Возможно использовать имена и цифровые коды одновременно и в любой комбинации. Если цифровые коды не были заданы, то по умолчанию полагается, что цифровые коды равны порядковым номерам именуемых строк или матриц в массиве. Имена и цифровые коды подмножествам массива присваиваются с по¬ мощью предложений ’’данные”. Количество символов в имени подмножества массива, вообще говоря, не ограничено. Исключением являются имена столбцов матрицы наблюдений, в качестве которых могут быть использованы мнемокоды (сокращенные названия переменных, не более 8 символов) и полные названия переменных (более 8 символов). Сокращенными и полными названиями переменных, а также цифровыми кодами переменных можно пользоваться одновре¬ менно и в любой комбинации. На практике имена и цифровые коды имеет смысл присваивать подмно¬ жествам массивов только некоторых часто используемых видов информа¬ ции. Так, имена и цифровые коды присваиваются строкам и столбцам матрицы наблюдений (имена объектов и имена переменных), (2,3)-матри¬ цам трехмерной таблицы частот (имена классов) строкам матрицы логи¬ ческих функций (имена функций) и некоторым другим. Имена для осталь¬ ных массивов определяются следующим образом: если между именуемыми частями двух массивов данных существует взаимнооднозначное соответст¬ вие, то имена и цифровые коды соответствующих частей совпадают. Так, имена компонент вектора ’’средние значения чисел, содержащихся в столб¬ цах матрицы наблюдений” совпадают с именами столбцов этой матрицы. Пример .3.1. Пусть матрица наблюдений содержит анкетные данные группы служащих. Тогда столбцы матрицы могут иметь имена ГОД РОЖ¬ ДЕНИЯ, СЕМЕЙНОЕ ПОЛОЖЕНИЕ, СПЕЦИАЛЬНОСТЬ и т.д. В качестве имен строк естественно выбрать фамилии и инициалы служащих. Цифровы¬ ми кодами строк матрицы наблюдений могут служить табельные номера, если они лежат в интервале от 1 до 32767. Если пользователь описал только перечисленные имена и цифровые коды, то по умолчанию цифровыми кодами столбцов матрицы наблюдений будут числа 1, 2, 3, . . . Компоненты векторов СРЕДНИЕ ЗНАЧЕНИЯ и ДИСПЕРСИИ автоматически будут иметь те же имена и цифровые коды, что и столбцы матрицы наблюдений. §4. ЯЗЫК УПРАВЛЕНИЯ ПАКЕТОМ В этом параграфе опишем синтаксис предложений ’’операция”и ’’данные”. Предложение "операция” представляет собой идентификатор, после которого ставится точка с запятой. Идентификатор — это последователь¬ ность цифр и букв русского и латинского алфавитов, начинающаяся с бук¬ вы. Идентификатор операции (мнемокод или полное название) может состоять из корня и суффиксов, записанных слитно или через пробел. В 42
полных названиях допускается разделять корень и суффиксы запятыми или запятыми и пробелами. Пример 4.1. Примеры предложений ’’операция”. Даны мнемокоды и полные названия операций. ПЕЧАТЬ МАССИВА; ЗАПИСЬ МАССИВА; СРЕДНИЕ И ДИСПЕРСИИ; СРЕДНИЕ И ДИСПЕРСИИ, ТАБЛИЦЫ, КАРТИНКИ; П; 3; СД; СДТК; Последнее предложение содержит корень СД и два суффикса: Т и К. Пол¬ ные названия: СРЕДНИЕ И ДИСПЕСИИ, ТАБЛИЦЫ, КАРТИНКИ. Суф¬ фиксы описывают форму представления результатов выполнения операции. Теперь определим элементы предложения ’’данные” Имя — это последовательность любых символов, используемых в ЭВМ (например, стандартного кода ДКОИ ). Идентификатор массива данных — это идентификатор (мнемокод или полное название) вида информации, содержащейся в массиве, за которым следует заключенное в круглые скобки имя подсемейства, которому принад¬ лежит этот массив. Имя подсемейства вместе с круглыми скобками может отсутствовать. Все идентификаторы вида информации пакета АСТА перечи¬ слены в главах IV — V. Метка элемента массива имеет следующий вид. Метка компоненты вектора представляет собой имя или цифровой код компоненты, перед которым ставится символ (наклонная черта). Метка элемента матрицы представляет собой имена или цифровые коды строки и столбца матрицы, на пересечении которых находится этот элемент. Перед первым именем или цифровым кодом ставятся две наклон¬ ные черты, а перед вторым — одна. Метка элемента трехмерной таблицы представляет собой последователь¬ ность трех имен или цифровых кодов тех (1,2)-матрицы, (1,3)-матрицы и (2,3)-матрицы, на пересечении которых находится этот элемент. Перед первым именем или цифровым кодом ставятся три наклонные черты, перед вторым — две и перед третьим -- одна. Стандартный порядок имен — имя строки, имя столбца матрицы или имя (1,2)-матрицы, имя (1,3)-матрицы, имя (2,3)-матрицы — может быть изменен по желанию пользователя (см. § 5). Имя в метке элемента массива заключается в апострофы (т.е. символы ”'”), если это имя либо начинается с одного из символов ’0123456789+—.”, либо содержит хотя бы один из символов Пример 4.2. Метки элементов вектора, матрицы и трехмерной таблицы. Метки компонент вектора СРЕДНИЕ ЗНАЧЕНИЯ: /РАЗМЕР — метка компоненты, содержащей среднее значение перемен¬ ной с именем РАЗМЕР; /14 — метка компоненты, содержащей среднее значение переменной с Цифровым кодом 14: Метки элементов матрицы наблюдений: //ИВАНОВ А.Я./РЕЗУС-ФАКТОР — метка элемента строки матрицы Наблюдений с именем ИВАНОВ А.Я., содержащего значение переменной рЕЗУС-ФАКТОР; 43
//100/4 — метка элемента матрицы, расположенного на пересечении стро¬ ки с цифровым кодом 100 и столбца с цифровым кодом 4. Другие приме¬ ры меток элементов матрицы наблюдений: //7935/'ПРОБА 16/75', //ПРЕПАРАТ 003 /18. Метка элемента трехмерной таблицы: ///ЯКОВЛЕВ Б.Ю.//ТЕМПЕРАТУРА/'31 ЯНВАРЯ 85 Г.' - метка элемен¬ та, содержащего значение температуры, измеренной у больного Яковле¬ ва Б.Ю. 31-го января 1985-го года. Числовая константа — это запись целого или действительного числа с помощью символов ”0123456789+—.Е”. Примеры числовых констант: 0, -1, +1.2, —.1., 0.02Е—3, т.е. 0,02 • 10_3. Текстовая константа — это произвольное имя. Текстовая константа должна быть заключена в апострофы, если первым символом имени явля¬ ется один из символов ”0123456789+—.” или имя содержит хотя бы один из символов ”;./=@'”. Апостроф, входящий в состав имени, изображается в записи текстовой константы двумя апострофами, между которыми нет других символов, пробела или перехода на следующую строку. Код управляющий вводом данных, или просто управляющий код пред¬ ставляет собой символ, за которым может следовать аргумент — числовая или текстовая константа. Все управляющие коды пакета описаны в §5. Определим вид предложения ’’данные” для /77-мерной таблицы (772= 1,2,3). Предложение "данные" представляет собой последовательность меток элементов, управляющих кодов, числовых или текстовых констант, перед которой ставится идентификатор массива и знак равенства. Последним сим¬ волом предложения является точка с запятой. Метки, константы и управ¬ ляющие коды отделяются друг от друга пробелами или запятыми. Предло¬ жение ’’данные” для скаляра не должно содержать меток и управляющих кодов. Метка указывает элемент m-мерной таблицы, начиная с которого запол¬ няется таблица. Одному элементу таблицы присваивается одна числовая константа или один символ из текстовой константы. Все константы, распо¬ ложенные в предложении ’’данные” между двумя метками, заносятся подряд в ту строку таблицы, которая указана первым именем в метке элемента матрицы и первыми двумя именами в метке элемента трехмерной таблицы. Пример 4.3. Примеры предложений’’данные”. ЭПСИЛОН = 0.005; АЛГОРИТМ = ЛИНЕЙНАЯ РЕГРЕССИЯ; СПИСОК НОМЕРОВ СТРОК = 10 20 30 40 50; МАТРИЦА НАБЛЮДЕНИЙ (ВАРИАНТ Г) = //ОБЪЕКТ 1/1 0.5 0.8 0.7 0.9 //ОБЪЕКТ 2 /1 1.0 3.0 5.0 2.0 //ОБЪЕКТ 3 /1 0.0 0.0 1.0 2.0; Имена или цифровые коды в метке могут отсутствовать. Если имена отсутствуют вместе с символами ”/”, то недостающие имена заимствуются из предыдущей метки предложения ’’данные”. Первая метка предложения ’’данные” для ввода матриц и трехмерных таблиц всегда должна быть записана полностью. Если при вводе вектора первая метка отсутствует, за¬ полнение вектора начинается с 1-й компоненты. 44
Пример 4.4. Следующие предложения ’’данные” эквивалентны. МАТРИЦА НАБЛЮДЕНИЙ = //АЛЕКСЕЕВ А.А./ВОЗРАСТ, 40 //БОРИСОВ Б.Б. /ВОЗРАСТ, 37 //ВОЛОДИНА В.В. /ВОЗРАСТ, 25; МАТРИЦА НАБЛЮДЕНИЙ = //АЛЕКСЕЕВ А.А. /ВОЗРАСТ. 40 //БОРИСОВ Б.Б., 37 /ВОЛОДИНА В.В., 25; Если в метке нет некоторых имен или цифровых кодов, но символы присутствуют, то эта метка указывает на строку или матрицу, следующую за строкой или матрицей, помеченной предыдущей меткой предложения ’’данные”. Пример 4.5. Следующие пары предложений ’’данные” эквивалентны. МАТРИЦА НАБЛЮДЕНИЙ = //1/1 10 20 30 //2/1 20 20 20 //3/1 30 20 10; МАТРИЦА НАБЛЮДЕНИЙ = //1/1 10 20 30 //, 20 20 20 //, 30 20 10; ТАБЛИЦА 0 111 ///1//2/1, 1111 ///1//3/1, 1 0 1 0 ///2//1/1, 0 0 0 0 ///2//2/1, 1 1 0 0 ///2//3/1, 1 000; ТАБЛИЦА =///1//1 /1, 0 1 1 1 //, 1 1 1 1 //, 1 0 1 0 ///, 0 0 0 0 //, 1 1 0 0 //, 1 0 0 0; В заключение опишем правила употребления пробелов и запятых, а так¬ же правила переноса предложений с одной строки на другую. Числовые константы, текстовые константы, управляющие коды и метки элементов должны отделяться друг от друга разделителями. Разделителями могут служить пробелы, запятые и переходы на следую¬ щую строку. Каждый из этих разделителей может быть использован в лю¬ бой ситуации, кроме следующих. 1. Две текстовые константы, не заключенные в апострофы, должны раз¬ деляться только запятыми. 2. После последнего имени элемента в метке должна следовать запятая. После последнего цифрового кода в метке должна- следовать запятая или пробел. После метки, заканчивающейся символом должна следовать запятая. Вместо имени или цифрового кода, отсутствующего внутри метки, должна стоять запятая (например, ”//, /”) . 3. Пробелы в метке или текстовой константе не являются разделителя¬ ми. Пробелы до или после текстовой константы (в том числе до или после имени элемента в метке), не заключенной в апострофы, при вводе предло¬ жения ’’данные” исключаются. Кроме того, ликвидируются все пробелы, за исключением одного, в каждой серии пробелов, идущих подряд внутри текстовой константы. Например, следующие метки эквивалентны: ’’/ИВАНОВ* __ А. Б.”, ’/ИВАНОВ _ А. _ Б.”, а следующие - не эквивалентны: ’’/ИВАНОВ _ А. _ Б ”, ’’/ИВАНОВ _ А.Б ”. 4. Разделители не допускаются внутри числовых констант и внутри уп¬ равляющих кодов. Например, число 1000000 нельзя записать в виде 1 000 000 или 1,000,000. Разделитель может отсутствовать перед и после Управляющего кода, начинающегося символом @, и перед меткой элемента. 5. Переходы на следующую запись внутри числовой константы или текстовой константы, заключенной в апострофы (в том числе внутри име¬ ни элемента в метке, заключенном в апострофы) , не допускаются. 45
Пример 4.6. Переход на следующую строку внутри текстовой кон¬ станты, заключенной в апострофы. Неправильный перенос '25.01.85 Г. КОЭФФИЦИЕН ТЫ ИНФОРМАТИВНОСТИ' Правильный перенос '25.01.85 Г. КОЭФФИЦИЕ' НТЫ ИНФОРМАТИВНОСТИ Многочисленные примеры предложений ’’данные” можно найти в сле¬ дующем параграфе и в главах IV — VI. § 5. КОДЫ, УПРАВЛЯЮЩИЕ ВВОДОМ ДАННЫХ Как уже упоминалось в предыдущем параграфе, одним из элементов предложения ’’данные” служат управляющие коды (УК). Применение управляющих кодов необязательно. Любое предложение ’’данные”, содер¬ жащее УК, можно переписать в эквивалентном виде без управляющих .кодов. Основное назначение управляющих кодов — сократить длину предло¬ жения ’’данные”, используя особенности вводимого массива данных. Кроме того, применение УК вносит элемент игры в процесс подготовки данных и делает это занятие менее скучным. Игра состоит в том, что ’’противник” последовательно предъявляет части вводимого массива данных, которые нужно записать компактным способом с помощью УК. Некоторые части массива не поддаются сокращению, а другие удается записать очень крат¬ ко, что вызывает удовлетворение и является выигрышем в игре. С другой стороны, использование УК усложняет предложение ’’данные” и служит источником ошибок. Поэтому пользователю-новичку не рекомен¬ дуется применять управляющие коды слишком часто. Управляющие коды в предложении ’’данные” записываются в виде @Кт, где К - символ управляющего кода, т — число или текстовая кон¬ станта, служащая аргументом управляющего кода. Аргумент УК может отсутствовать. При вводе числовых данных символ @ в УК можно опус¬ кать, если в предшествующей части предложения содержится хотя бы од¬ на числовая константа или управляющий код @ ИЦЭ (описан ниже). С помощью управляющих кодов, реализованных в пакете, выполняются следующие операции (в скобках даны символы управляющих кодов): 1) повторение элемента (П) ; 2) повторение группы элементов (Г, П); 3) копирование группы элементов (М, Г, К) ; 4) формирование арифметической прогрессии (Ш, А); 5) пропуск элементов (:); 6) сдвиг элементов строки (С); 7) запоминание значений, принимаемых по умолчанию (У) ; 8) указание количества элементов в строке (Д) ; 9) указание порядка перечисления элементов массива (Т): 10) указание формы представления данных (Ф) ; 11) указание способа интерпретации числовых и текстовых констант (И). Дадим подробные описания перечисленных управляющих кодов. Повторение элементов массива выполняется с помощью УК @Пт, где II — символ УК (Повторение), т - целое число, равное количеству одина- 46
ковых элементов, т > 1. Действие УК @П/н состоит в том, что предыдущая числовая константа или последний символ предыдущей текстовой констан¬ ты повторяется т раз. Если аргумент т отсутствует, то предыдущий эле¬ мент повторяется до конца заполняемой строки. Пример 5.1. Следующие пары предложений "данные" эквивалентны. МВ = 1 1 1 1 0 0 0 0 0 2 1 2, МВ = 1 П4 О Г15 2 1 2; ЗАГОЛОВОК=X X; ЗАГОЛОВОК = X С* TI10 _ X: Повторение группы элементов массива данных выполняется с помощью УК где Г - символ управляющего кода (Группа элементов),/?? -- це¬ лое число, равное количеству элементов в группе,/??> 1. Количество повто¬ рений п группы из т элементов задается с помощью УК следующего за УК (а)Гт. Если количество повторений в управляющем коде @\Лт отсут¬ ствует, то группа элементов повторяется до конца заполняемой строки. Если отсутствует аргумент кода ФГ, то полагается, что т равно количест¬ ву заполненных к данному моменту элементов этой строки. Пример 5.2. Следующие пары предложений "данные” эквивалентны. МВ = 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2; МВ = 1 1 2 Г П6; ЗАГОЛОВОК =Х +-+■+-- + - +Х; ЗАГОЛОВОК = X - + (* Г2 115 _ X; Копирование группы элементов массива осуществляется с помощью управляющих кодов С^'Мд? (числовая Метка группы элементов), С«Ти (количество элементов в Группе) и (Копирование группы элементов с числовой меткой т), где т и п - целые числа, т > 1, п > 1. Аргументы кодов @Мт и (®Кшне могут отсутствовать. Числовая метка т присваивает¬ ся группе из п предшествующих элементов заполняемой строки. Метка не может быть присвоена группе, содержащей элементы более чем одной строки. Если перед УК @Мд? отсутствует код @Гд, то полагается, что п рав¬ но количеству предшествующих элементов заполняемой строки. После того как некоторой группе элементов присвоена метка д?, эта же группа элемен¬ тов, встретившаяся в предложении "данные", может быть заменена на УК @Кд?. Пример 5.3. Следующие предложения "данные" эквивалентны. ЗАГОЛОВОК = ЗАВИСИМОСТЬ КОЭФФИЦИЕНТА А ОТ КОЭФФИЦИЕНТА Б; ЗАГОЛОВОК = ЗАВИСИМОСТЬ _ КОЭФФИЦИЕНТА __ ' _ (? Г14 («> Ml А ОТ_ С К1 _ Б; Формирование арифметической прогрессии ^о» + d, aQ + 2 • d,. . . , aQ + (ni - 1) • d осуществляется с помощью управляющих кодов C^llk/ (Шаг прогрессии) и @Адг (количество членов Арифметической прогрессии), где III и А — сим¬ волы управляющих кодов, d — целое или действительное число, т - целое число, а() - числовая константа, предшествующая УК @HIJ. Если код ("lilt/ отсутствует перед УК @Аш, то полагается, что d = 1. Если отсутствует ар¬ 47
гумент кода @А, то члены прогрессии заполняют строку до конца. Приме¬ нение кодов @Ш и @А для текстовых данных не имеет смысла. Пример 5.4. Следующие пары предложений ’’данные” эквивалентны. СПИСОК НОМЕРОВ СТРОК = 123456789 10; СПИСОК НОМЕРОВ СТРОК = 1 А10; МАТРИЦА НАБЛЮДЕНИЙ (МОДЕЛЬНАЯ) = //1/1 0.0 0.1 0.2 0.3 0.4 0.5 //2 1.0 1.1 1.2 1.3 1.4 1.5; МАТРИЦА НАБЛЮДЕНИЙ (МОДЕЛЬНАЯ) =//1/1 0.0 1П0.1 А5 //2 1.0 Ш0.1 А; Пропуск элементов массива данных выполняется с помощью УК где - символ управляющего кода, т — целое число, равное количеству пропущенных элементов, т > 1. Пропущенным элементам заполняемой строки присваиваются числовые константы или символы, принятые по умолчанию. Аргумент кода не может отсутствовать. С помощью УК @\т (т < — 1) может быть выполнен возврат на | т | элементов строки влево. При возврате влево и при повторном пропуске элементов занесение значений, принятых по умолчанию, не производится. Значения, принятые по умолчанию, могут быть установлены с помощью УК @Уш, (®У$, где У — символ управляющего кода, т — целое или действи¬ тельное число, 5 - символ, заключенный в апострофы. Установленные зна¬ чения используются для заполнения пропущенных элементов до тех пор, пока они не будут изменены с помощью другого кода @У. В той части предложения ’’данные”, которая предшествует первому коду @*У, или в предложении, нс содержащем кодов (W, пропущенным элементам число¬ вых массивов присваиваются числовые коды, соответствующие ’’прочер¬ кам” (значение элемента нс определено), а пропущенным элементам тек¬ стовых массивов присваиваются пробелы. Пример 5.5. Следующие предложения эквивалентны. МН = //1/1 1.0 1234.567 2 1234.567 1234.567 3; МН = //1/1 1.0 У1-234.567 :1 2 :2 3; Значения, принятые по умолчанию, присваиваются также гем элементам массива, для которых предложение ’’данные” нс содержит числовых кон¬ стант или символов. П ример 5.6. Следующие предложения ’’данные” эквивалентны. ИМЕНА ВЕКТОРОВ = //1/1 ДИКУМАРОЛ //2 ' -//- ' //3 КОУМАДИН //4 ГЕПАРИН //5 ВАЗОПРЕССИН. . . ; ИМЕНА ВЕКТОРОВ = //1/1@У ДИКУМАРОЛ //2/6 '-//-' //3 КОУМАДИН //4 ГЕПАРИН//5 ВАЗОПРЕССИН; Сдвиг элементов уже заполненной строки или ее части осуществляется с помощью УК (®Сд7?, где С - символ управляющего кода (Сдвиг элемен¬ тов), а т - целое число, равное количеству новых элементов, добавляемых в строку (tn > 1), или количеству элементов, исключаемых из строки, с обратным знаком (ш < — 1) . При т > 1 (вставка т чисел или символов) следующие за кодом т чисел или символов вставляются перед элементом массива, указанным меткой элемента, непосредственно предшествующей коду @Сш. Элементы 48
строки массива, расположенные правее элемента, указанного меткой, вклю¬ чая и этот элемент, сдвигаются вправо на т позиций. Последние т элемен¬ тов строки теряются. Пример 5.7. Следующие предложения ’’данные” эквивалентны. СПИСОК НОМЕРОВ СТРОК = 1 2 3 4 5; СПИСОК НОМЕРОВ СТРОК = 12355 /4 С14; При т < — 1 (исключение | т | чисел или символов) | т | чисел или сим¬ волов, начиная с элемента массива, указанного меткой, предшествующей коду @Сш, удаляются. Элементы строки массива, расположенные правее удаленных элементов, сдвигаются влево на | т | позиций. Последние | т | позиций строки заполняются числами или символами, следующими за кодом @Ст. Пример 5.8. Следующие предложения ’’данные” эквивалентны. СПИСОК НОМЕРОВ СТРОК = 1 2 3 4 5; СПИСОК НОМЕРОВ СТРОК = 1 2 3 7 4 /4 С-1 5; Длина заполняемой строки массива может быть задана с помощью УК @Дт, где Д - символ управляющего кода (Длина), т — целое число, равное длине строки. Длина строки текстового массива всегда должна быть четна. В большинстве случаев длина строки вводимого массива, т.е. количест¬ во элементов в строке, определяется автоматически по параметрам дру¬ гих, введенных ранее, массивов этого же семейства. Например, длина строки матрицы наблюдений всегда равна количеству строк матрицы, содержащей названия столбцов матрицы наблюдений. Если массивы, нуж¬ ные для автоматического определения длины, в семействе отсутствуют, то длина строки вводимого массива принимается равной количеству число¬ вых констант или символов в предложении ’’данные”, предназначенных для первой строки этого массива, с учетом элементов, пропущенных с помощью УК @:т. В последнем случае, если для заполнения первой строки используется управляющий код @С.т или коды @П и @А без аргументов или последним элементам строки присваиваются значения, принятые по умолчанию, то длина строки должна быть указана явно, с помощью УК @Дт и прежде, чем будут использованы коды @11, @А и @Ст. Пример 5.9. Следующие предложения ’’данные” эквивалентны. МН = //1/1 1 20 00//20 0 0 0 3; МН =//1/1 @ УО 1 2 Д5 //2 :4 3; Порядок перечисления элементов матрицы или трехмерной таблицы в предложении ’’данные” задается с помощью УК @Тт, где Т - символ Управляющего кода (способ Транспонирования), ат — одно из чисел 1, 2, 12, 13, 21, 23, 31, 32. Каждое число из этого списка задает определен¬ ный порядок перечисления элементов и соответственно порядок имен элементов массива в метках (см. таблицу 3.1) . Если код @Тт в предложении ’’данные” отсутствует, порядок перечисле¬ ния элементов соответствует кодам @Т1 для матриц и @Т12 для трехмер- В.А. Кощеев 49
Таблица 3.1 УК j ВИД МЕТКИ ЭЛЕМЕНТОВ СТРУКТУРЫ | @Т1 @Т2 @Т12 @Т13 @Т21 @Т23 @Т31 @Т32 //СТРОКА /СТОЛБЕЦ //СТОЛБЕЦ /СТРОКА ///(1,2)-МАТРИЦА //(1,3)-МАТРИЦА /(2,3)-МАТРИЦА ///(1,3)-МАТРИЦА //(1,2)-МАТРИЦА /(2,3)-МАТРИЦА ///(1,2)-МАТРИЦА //(2,3)-МАТРИЦА / (1,3)-МАТРИЦА ///(2,3)-МАТРИЦА //(1,2)-МАТРИЦА /(1,3)-МАТРИЦА ///(1,3)-МАТРИЦА //(2,3)-МАТРИЦА / (1,2)-МАТРИЦА ///(2,3)-МАТРИЦА //(1,3)-МАТРИЦА /(1,2)-МАТРИЦА ных таблиц. Код @Тт может появиться только между знаком ”=” и первой меткой предложения ’’данные’’. Наиболее часто применяют порядки пере¬ числения, задаваемые кодами @Т1, @Т2, @Т12. Форма, в которой должна быть представлена матрица или трехмерная таблица, вводимая с помощью предложения ’’данные”, задается управляю¬ щими кодами ФСТ, ФСМ, ФПС, ФМ1, ФМ2, ФМЗ (где Ф — символ управляю¬ щего кода, а СТ, СМ, ПС, Ml, М2, М3 - аргументы} : @ФСТ — стандартная пх X п2 матрица или X п2 X и3 трехмерная таблица; @ФСМ — симметричная квадратная матрица, представленная в треуголь¬ ной форме: элементы, расположенные ниже главной диагонали, отсут¬ ствуют; @ФПС — матрица или трехмерная таблица, состоящая из строк перемен¬ ной длины; @ФМ1 -- трехмерная таблица, состоящая из матриц с одинаковым коли¬ чеством строк; но с разным количеством столбцов; @ФМ2 — трехмерная таблица, состоящая из матриц с разным количест¬ вом строк, но с одинаковым количеством столбцов; @ФМЗ — трехмерная таблица, состоящая из матриц с разным количест¬ вом строк и столбцов. Если в предложении ’’данные” не указаны коды @Ф, то полагается, что форма представления массива стандартная. Коды @Ф могут появиться только между знаком ”=” и первой меткой предложения ’’данные”. Способ интерпретации числовых и текстовых констант в предложении ’’данные” задается с помощью управляющих кодов ИСТ, ИТС, ИТЭ и ИЦЭ (где И - символ управляющего кода, а СТ, ТС, ТЭ, ЦЭ — аргу¬ менты) : @ИСТ — стандартная интерпретация: элементу вводимого массива присваивается числовая константа или один символ текстовой константы; @ИТС — каждая текстовая константа помещается в отдельную строку массива: @ИТЭ — каждой текстовой константе присваивается цифровой код, который и заносится в элемент массива; (ФИЦЭ — каждая цифра числовой константы превращается в число О, 1, . . . или 9, которое и заносится в элемент массива. 50
ПОРЯДОК ПЕРЕЧИСЛЕНИЯ ЭЛЕМЕНТОВ Х(1,1), . . . , Х(л, ,1), Х(1,2), . . . X (1,1), . . . , X (1, и2), X (2,1) , . . . Х(1,1,1), - - - , X(и,, 1,1), X(1,2,1), . . . X (1,1,1), . . . ,Х(и,, 1,1), X (1,1,2), . . . X (1,1,1)X (1,м2,1), X (2,1,1),.. . Х(1,1,1), . . . ,Х(1,п?,1),Х(1,1,2), . . . X(1,1,1), . . . , Х(1,1,«3), X (2,1,1), . . . X (1,1,1)X (1,1,л3), X (1,2,1),.. . Код ("И может быть только первым элементом предложения ’’данные”, расположенным справа от знака ”=”. Если в предложении не указан код @И, то подразумевается стандартная интерпретация констант. Другие примеры использования управляющих кодов можно найти в описаниях заданий, приведенных в главах IV — VI. ГЛАВА IV ОПЕРАЦИИ ВВОДА, ФОРМИРОВАНИЯ И ПРЕОБРАЗОВАНИЯ ДАН¬ НЫХ, РЕАЛИЗОВАННЫЕ В ПАКЕТЕ АСТА Данная глава содержит описание операций ввода, коррекции, формиро¬ вания, преобразования и печати данных, реализованных в пакете приклад¬ ных статистических программ АСТА. Приведены типичные задания, объяс¬ нена структура и назначение используемых массивов информации. Описа¬ ние операций статистической обработки данных помещено в главе V. § 1.ВВОД ДАННЫХ Решение задачи статистического анализа данных с помощью программ пакета АСТА начинается с ввода исходных данных. Обычно исходными данными служит матрица наблюдений и имена ее столбцов и строк, т.е. имена переменных и векторов-реализаций. Для краткости векторы-реализации, записанные в строках матрицы наблюде¬ ний, будем называть просто векторами. Дополнительно могут быть введены цифровые коды переменных и век¬ торов. Иногда исходная матрица наблюдений неизвестна, а известны массивы, полученные в результате обработки этой матрицы, например массив частот значений признаков или матрица расстояний между векторами матрицы Наблюдений. В этом случае исходными данными для программ пакета АСТА будут служить массив частот или матрица расстояний. Опишем ввод матрицы наблюдений. Программы пакета АСТА обраба¬ тывают матрицы наблюдений двух типов: матрицы, содержащие значения Действительных переменных (вещественные числа в интервале от — 1О30 4* 51
до +1О30). и матрицы, содержащие значения целочисленных переменных (целые числа 1, 2, 3, .. . , 99). Если изучаемый объект характеризуется не ременными обоих типов, то для решения задачи составляют две матрицы наблюдений, имеющие одинаковые номера и имена строк, но разные номе¬ ра и имена столбцов. В одну матрицу группируют действительные перемен¬ ные, а в другую - целочисленные. Качественные переменные преобразую! в целочисленные, присваивая градациям качественной переменной числа 1,2,... . Тип матрицы определяется по первой числовой константе пред¬ ложения ’’данные”. Для действительных матриц наблюдений эта константа должна быть записана в виде десятичного числа. Пример 1.1. Задание для ввода действительной матрицы наблюдений, составленной из 12 строк таблицы, которая заимствована из [26]. Таблица содержит результаты измерения размеров цветков ириса различных сортов. Имя подсемейства массивов данных - ИСХ. Строкам матрицы наблюдений присвоены цифровые коды 1,2, 3, 4, 5 1,52, 53. 54, 101. 102, 103, 104. НАЧАЛО РАБОТЫ; МАТРИЦА НАБЛЮДЕНИЙ (ИСХ> = //1/1 5.1 3.5 1.4 0.2 //2 4.9 3.0 1.4 0-2 //3 4.7 3.2 1.3 0.2 //4 4.6 3.1 1.5 0.2 //51 7.0 3.2 4.7 1.4 //52 6.4 3.2 4.5 1.5 //53 6.9 3.1 4.9 1.5 //54 5.5 2.3 4.0 1.3 //101 6.3 3.3 6.0 2.5 //102 5.8 2.7 5.1 1.9 //103 7.1 3.0 5.9 2.1 //104 6.3 2.9 5.6 1.8; КОНЕЦ РАБОТЫ; В результате прохождения задания будут напечатаны сообщения о синтак¬ сических ошибках (если в тексте описания работы имеются ошибки). Для того чтобы было удобно указывать выбранные для анализа столб¬ цы матрицы наблюдений, рекомендуется вводить имена столбцов, т.е. имена переменных. Различают сокращенные имена переменных (мнемоко¬ ды) и полные названия переменных. Мнемокоды переменных состоят не более чем из 8 символов, а полные названия имеют бо'лыную длину. Мне¬ мокоды переменных используются для указания столбцов матрицы наблю¬ дений, а для печати результатов по выбору пользователя могут быть взяты либо мнемокоды, либо полные названия. При вводе имена переменных должны перечисляться в том же порядке, в котором соответствующие столбцы расположены в матрице наблюдений. Пример 1.2. Ввод названий переменных для матрицы наблюдений из примера 1.1. НАЧАЛО РАБОТЫ; ПОЛНЫЕ НАЗВАНИЯ ПЕРЕМЕННЫХ (ИСХ) = & ИТС, ДЛИНА ЧАШЕЛИСТИКА, ШИРИНА ЧАШЕЛИСТИКА, ДЛИНА ЛЕПЕСТКА, ШИРИНА ЛЕПЕСТКА; ИМЕНА ПЕРЕМЕННЫХ (ИСХ) = ИТС. ДЛ. ЧАШ.. ШИР. ЧАШ., ДЛ. ЛЕИ., ШИР. ЛЕТЕ; КОНЕЦ РАБОТЫ; Во многих случаях элементы матрицы наблюдений вводят в другом поряд¬ ке (по столбцам). При этом обычно чаше удается использовать управляю¬ щий код @ Г1. 52
Пример 1.3. Ввод исходных данных из предыдущих примеров. Пол¬ ные названия переменных вводятся без управляющего кода ИТС. Длина самого длинного названия указана с помощью кода (« Д. Матрица наблю¬ дений вводится по столбцам. Мнемокоды переменных заданы в предложе¬ нии ’’данные” для матрицы наблюдений, поэтому специального предложе¬ ния для их ввода не требуется. Используются мнемокоды операций и видов информации. HP: МН(ИСХ) --(? Т2//ДЛ. ЧАШ./1 5.1 4.9 4.7 4.6 7.0 6.4 6.9 5.5 6.3 5.8 7.1 6.3 //ШИР.ЧАШ., 3.5 3 0 3.2 3.1 3.2 112 3.1 2.3 3.3 2.7 3.0 2.9 //ДЛ.ЛЕ1Е, 1.4 П2 1.3 1.5 4.7 4.5 4.9 4.0 6.0 5.1 5.9 5.6 //ШИР. ЛЕП., 0.2 114 1.4 1.5 112 1.3 2.5 1.9 2.1 1.8; ПНП(ИСХ) = //1/1 ДЛИНА ЧАШЕЛИСТИКА, Д18//2, ШИРИНА ЧАШЕ ЛИСТИКА, //3, ДЛИНА ЛЕПЕСТКА. //4, ШИРИНА ЛЕПЕСТКА: КР; Предложение ’’данные” из примера 1.3 для массива ПНП можно перепи¬ сать в виде ПНП(ИСХ) =//ДЛ. ЧАШ./1 (“ Д18, ДЛИНА ЧАШЕЛИСТИКА//ШИР.ЧАШ., ШИРИНА ЧАШЕЛИСТИКА //ДЛ. ЛЕН., ДЛИНА ЛЕГ1ЕСТКА//ШИР.ЛЕП., ШИРИНА ЛЕПЕСТКА; С помощью этого предюжения вводятся массивы ПОЛНЫЕ НАЗВАНИЯ ПЕРЕМЕННЫХ и ИМЕНА ПЕРЕМЕННЫХ (мнемокод - ИП). Пример 1.4. Ввод целочисленной матрицы наблюдений для задачи ДИАГНОСТИКА. Имя подсемейства - АНДРЕЕВ. Дополнительно вводят¬ ся имена строк матрицы наблюдений (ИМЕНА ВЕКТОРОВ, ИВ) и имена, присвоенные значениям 1, 2, 3,... целочисленных переменных (ИМЕНА ГРАДАЦИЙ, ИГ). Полные названия переменных даны вместе с массивом ИГ. HP; МН (АНДРЕЕВ) = //1/1 1 1 3 3 //2 1 2 1 2 //3 1 3 2 3 //4 1 1 1 1 //5 2 2 1 2 //6 2 4 2 2 //7 2 1 4 3 //8 2 2 2 3: ИВ (АНДРЕЕВ) = И ГС, ИВАНОВ А.Б., ПЕТРОВ Б.В., СИДОРОВ В.Г., ЕГОРОВ Г.Д.. ИВАНОВА Ю.Я.. ПЕТРОВА ЭЮ.. СИДОРОВА Щ.Э., ЕГОРОВА Ш.Щ.; ИГ (АНДРЕЕВ) = ИТС. ///ПОЛ, МУЖСКОЙ, ЖЕНСКИЙ, ///СЕМЕЙНОЕ ПОЛОЖЕНИЕ, ХОЛОСТ, ЖЕНАТ, ВДОВ. РАЗВЕДЕН, ///ГРУППА КРОВИ. I, II, III, IV, ///ОСНОВНОЕ ЗАБОЛЕВАНИЕ, РАК ЖЕЛУДКА, ЯЗВА ЖЕЛУДКА, ЗДОРОВ: КР; С использованием управляющих кодов предложение ’’данные” Д1я матри¬ цы наблюдений можно записать в виде МН (АНДРЕЕВ) = С. ИЦЭ//1 /1 1133 //2 1 212 //3 1 323 //4 1 1 1 1 //5 2212 //6 2422 //7 2143 //8 2223; Пример 1.5. Ввод нескольких матриц наблюдений для задачи ЭКСГ1Е- РИМЕНТ. Названия переменных 1-й и 2-й матриц наблюдений совпадают (рис. 4.1). HP; МН (ЧАСТЬ АI) = //1/1 . . ; И11 (ЧАС ТИ А1 И Б1 ) = //1 /1 . . . ; 53
МН (ЧАСТЬ Б1) =//501/1 . . • : МН (ЧАСТИ А2 И Б2) = //1/1 . . . ; ИГ1 (ЧАСТИ А2 И Б21 = //41 . . . : КР; Множество массивов, введенное в примере 1.5. образует четыре подсемейст¬ ва с именами ЧАСТЬ А1, ЧАСТЬ Ы. ЧАСТИ А1 И Б1, ЧАСТИ А2 И Б2. Из этих подсемейств образованы три семейства, изображенные на рис. 4.2. На этом закончим рассмотрение примеров и приведем краткие описа¬ ния операций ВВФОР, КР, КРП, ИР, ПИП. Назначение параметров операций Рис. 4.1. Части матрицы наблюдений из.примера 1.5 Рис. 4.2. Семейства массивов данных, описанные в примере 1.5 и массивов информации (НОН, ФОР, I1HOCT, КСТОЛБ и др.) описано в конце параграфа. ВВФОР, ВВОД ПО ФОРМАТУ (Т)1). Ввод матрицы целых или действи¬ тельных чисел под управлением оператора FORMAT. Операция использует¬ ся для ввода данных без помощи предложения ’’данные”. Идентифика¬ тор вводимого массива задается в первой строке матрицы СЕМЕЙСТВА МАССИВОВ. Строки матрицы, содержащейся в наборе данных с номером НОН (одна логическая запись соответствует одной строке вводимой матрицы), вво¬ дятся под управлением оператора FORMAT, описывающего одну логичес¬ кую запись. Текст оператора FORMAT задан в массиве ФОР. При ПНОСТ =ДА первым числом каждой логической записи является цифровой код строки, а далее следуют КСТОЛБ целых или действительных чисел - элементов строки матрицы. При ПНОСТ = НЕТ логические записи не содержат цифровых кодов строк вводимой матрицы. Все элементы вводимой матрицы должны быть одного типа — целые или действительные. Целым числам в формате ФОР соответствуют формат¬ ные коды I, а действительным - форматные коды F, G или Е. Цифровые коды всегда вводятся с помощью форматных кодов 1. Значения параметров, принятые по умолчанию: НОН = 5, ПНОСТ =ДА. Печать результатов: ВВФОР - без печати, ВВФОРТ - печать вводимых за¬ писей. КР, КОНЕЦ РАБОТЫ. Последнее предложение ’’операция” в описании работы. КРП, КОНЕЦ РАБОТЫ ПАКЕТА. Последнее предложение ’’операция” в последовательности описаний работ. 1 ) В скобках перечислены возможные суффиксы операций. 54
HP, НАЧАЛО РАБОТЫ. Первое предложение ’’операция” в описании работы. ПИП, ПЕЧАТЬ ИНФОРМАЦИИ О ПАКЕТЕ. Печать справочника пакета. Печатаются части справочника, перечисленные в векторе ЧТОП. По умол¬ чанию ЧТОГ1 = 1. Дадим краткие описания структуры и назначение массивов информации ив, иг, ИГ1, КСТОЛБ, мн, нон, ноем, ПНОСТ, ПНП, ФОР, ЦВ, ЦП, ЧТОГ1. ИВ, ИМЕНА ВЕКТОРОВ. Текстовая матрица х(1 :л15 1 :п2), содержа¬ щая имена строк (векторов) матрицы наблюдений МН (л/ - длина самого длинного имени, п2 — количество строк матрицы МН). Имена строк матри¬ цы ИВ совпадают с именами строк матрицы МН. ИГ, ИМЕНА ГРАДАЦИЙ. Текстовая трехмерная таблица х(1 : , 1 : п2, 1 :и3), содержащая имена градаций целочисленных переменных, значения которых находятся в матрице наблюдений МН (пх - длина самого длинно¬ го имени, п2 - наибольшее количество градаций в переменных, н3 - коли¬ чество переменных). Идентификатор /3-й (1,2)-матрицы таблицы ИГ сов¬ падает с названием /3-й переменной (73-го столбца матрицы МН). ИП, ИМЕНА ПЕРЕМЕННЫХ. Текстовая матрица х(1 : п i, 1 :п2), со¬ держащая имена столбцов матрицы наблюдений МН (н1 - длина самого длинного имени, п2 - количество столбцов матрицы МН). Имена строк матрицы ИП совпадают с именами переменных. КСТОЛБ, КОЛИЧЕСТВО СТОЛБЦОВ. Целое число, равное количеству столбцов матрицы, вводимой под управлением оператора FORMAT. МН, МАТРИЦА НАБЛЮДЕНИЙ. Целочисленная или действительная мат¬ рица х(1 :Д],1 ;п2 ). содержащая п2 реализаций пх -мерного вектора наблюдений. Это основной вид информации, используемый в пакете. Все элементы матрицы должны быть одного типа - целые или действительные числа. Имена и цифровые коды столбцов (переменных) и строк (векто¬ ров) матрицы МН содержатся в массивах ИП, ИВ, ЦП, ЦВ. Полные назва¬ ния переменных могут находиться в массиве 11НП. НОН, НОМЕР НАБОРА. Целое число, равное номеру набора данных, используемого при выполнении операции. НОСМ, НОМЕРА СТРОК МАТРИЦЫ СМ. Целочисленный вектор *(1 :Д1), описывающий перестановку и удаление строк матрицы СЕ¬ МЕЙСТВА МАССИВОВ (д, - количество строк в матрице СМ после удале¬ ния):/^ строкой матрицы СМ станет бывшая х(/)-я строка СМ (/-1, ... . •..,И1 ). ОЗ, ОПИСАНИЕ ЗАДАЧИ. Текстовый вектор, содержащий формули¬ ровку задачи в произвольной форме. Вектор ОЗ используется только Для печати результатов. ПНОСТ, ПЕЧАТАТЬ НОМЕРА СТРОК. Текстовая константа, вид которой (ДА, НЕТ) определяет, напечатаны ли (или печатать ли) номера строк мат¬ рицы, вводимой (или выводимой) под управлением оператора FORMAT. ПНП, ПОЛНЫЕ НАЗВАНИЯ ПЕРЕМЕННЫХ. Текстовая матрица х (1 : пх , 1 :/7г), содержащая полные названия столбцов матрицы наблюдений МН (^i — длина самого длинного названия, п2 — количество столбцов матри¬ цы МН). Имена и полные названия строк матрицы ПНП совпадают с имена¬ ми и полными названиями переменных (столбцов матрицы МН). 55
ФОР, ФОРМАТ. Текстовый вектор, содержащий текст оператора FOR- МАТ(от самой левой скобки до самой правой, включая скобки), под управле¬ нием которого передаются строки матрицы данных. ЦВ, ЦИФРОВЫЕ КОДЫ ВЕКТОРОВ. Целочисленный вектор х(1 :«i), содержащий цифровые коды строк (векторов) матрицы наблюдений МН (пл — количество строк матрицы МН, 1 <х( • ) <32767). Имена и цифро¬ вые коды компонент вектора ЦВ содержатся в массивах ИВ, ЦВ. ЦП, ЦИФРОВЫЕ КОДЫ ПЕРЕМЕННЫХ. Целочисленный вектор х(1 : и,), содержащий цифровые коды столбцов (переменных) матрицы наблюдений МН («1 - количество столбцов матрицы МН, 1 <х() <32767). Имена и цифровые коды компонент вектора ЦГ1 содержатся в массивах ИП, ЦП. ЧТОГ1, ЧТО ПЕЧАТАТЬ. Целочисленный вектор х(1 :пх), содержащий список номеров тех частей справочника пакета, которые нужно напечатать («! - количество печатаемых частей справочника) : 1 - описание синтаксиса языка управления; 2 - мнемокоды и полные названия видов информации, мнемокоды и полные названия операций для операций статистической обработки дан¬ ных: 3 - те же идентификаторы для остальных операций. § 2. ОПЕРАЦИИ ПЕЧАТИ, КОРРЕКЦИИ И ЗАПИСИ МАССИВОВ В БАЗУ ДАННЫХ Все описания работ, приведенные в предыдущем параграфе, содержали только предложения '’данные”, не считая операций HP и КР. Поэтому вве¬ денная информация после окончания работы не сохранялась. Для того чго бы не только проверить синтаксис предложений ’’данные”, но и получить распечатку данных или записать введенную информацию в базу данных (БД), нужно в описании работы задать операции ПЕЧАТЬ или ЗАПИСЬ. Операция ПЕЧАТЬ выполняется для тех массивов, индентификаторы которых перечислены в предыдущем предложении СЕМЕЙСТВА МАССИ ВОВ. Вместе с матрицей наблюдений всегда печатаются массивы имен или цифровых кодов столбцов и строк этой матрицы (если они были введены пользователем). Пример 2.1. Печать массивов данных, введенных в этой же работе: ип,.мн,цви пип. HP; ИН (ИСХОДЫ.) - . : МН (ИСХОДЫ.) • -... ЦВ (ИСХОДЫ ) = . . : ПНИ (ИСХОДЫ.) = . . . : СЕМЕЙСТВА МАССИВОВ = ' МЫ (ИСХОДЫ.), И1111 (ИСХОДЫ )' : ПЕЧАТЬ: КР: Форматом распечатки можно управлять с помощью параметров операции ПЕЧАТЬ. Пример 2.2. Печать введенных массивов на страницах размером 30 X 60. помещенных в позиции 41 — 70 листа АЦПУ. HP: МН (ИСХОДЫ.) = . . . : ЦВ (ИСХОДЫ ) = . . . : СМ = МН (ИСХОДЫ.) : 56
НАЧАЛЬНАЯ ПОЗИЦИЯ = 41; ВЫСОТА СТРАНИЦЫ = 30; ШИРИНА СТРАНИЦЫ =60; ПЕЧАТЬ; КР; С помощью мнемокодов последние предположения можно записать в виде НГ103 = 41; ВСТР = 30; ШСТР = 60; П; КР; Операция ЗАПИСЬ выполняется для тех массивов 1-го семейства, ука¬ занного в предыдущем предложении СЕМЕЙСТВА МАССИВОВ, которые, были введены или сформированы в этой же работе до предложения ЗА¬ ПИСЬ. Вместе с матрицей наблюдений .в БД всегда записываются те из массивов имен или цифровых кодов столбцов и строк этой матрицы, ко¬ торые были введены пользователем. В описании ,работы, записывающей информацию в БД, должно быть указано имя раздела БД. Для этой цели используется предложение ЗАДА¬ ЧА (мнемокод 3). Если в БД уже есть раздел с этим именем, то все запи¬ сываемые’данные будут помещены в этот раздел. Если такого раздела в БД нет, то автоматически создается новый раздел. В одном разделе поме¬ шаются все массивы, относящиеся к решаемой задаче. Администратор БД должен следить за тем, чтобы имена разделов разных задач не совпа¬ дали. Раздел БД, имя которого указано в описании работы, будем называть активным разделом. Пример 2.3. Запись в БД массивов ИП, МН, ЦВ и ПНП. HP; ЗАДАЧА = ИРИС ФИШЕРА; ИП (ИСХОДИ.) = /. . ; МН (ИСХОДИ.) = . . . ; ЦВ (ИСХОДИ.) = . ‘ . ; ПИП (ИСХОДИ.) = . . . ; СМ ='МН (ИСХОДИ.) , ПНП (ИСХОДИ.)' ; ЗАПИСЬ; КР; После того как данные введены и напечатаны, необходимо исправить ошиб¬ ки, обнаруженные программой ввода и найденные при проверке вручную. Кроме исправления ошибок, операция КОРРЕКЦИЯ может быть использо¬ вана для нестандартных преобразований данных. Корректирующая информация подготавливается в виде предложения ’’данные”, в котором указаны только изменяемые элементы. Управляю¬ щие коды (&У и в режиме коррекции не действуют. Вносить исправления можно только по порядку, продвигаясь от начала массива к его концу. Если корректируется матрица, то исправления внут¬ ри любой ее строки можно вносить в любом порядке. Если корректирует- Ся трехмерная таблица, то исправления внутри любой ее матрицы также можно вносить в произвольном порядке. С помощью управляющего кода @Т в предложении ’’данные”, пос- тавляюшем корректирующую информацию, задается порядок следования элементов, который может не совпадать с порядком следования элементов, ^Данным при вводе массива. За одно выполнение операции КОРРЕКЦИЯ можно исправить несколь¬ ко массивов, принадлежащих первому семейству, указанному в предыду¬ щем предложении СЕМЕЙСТВА МАССИВОВ. Все предложения ’’данные” 57
с корректирующей информацией размешаются между предложениями НАЧАЛО КОРРЕКЦИИ и КОНЕЦ КОРРЕКЦИИ (мнемокоды НКОРР и ККОРР). Если корректируемые массивы находятся в БД, го в описании работы нужно задать имя раздела. Пример 2.4. В первой работе исходные данные задачи ШЕЛЬФ вво дятся, печатаются и записываются в БД. Две ошибки исправляются во время подготовки данных. Остальные ошибки исправляются во второй работе': в 3-й элемент 5-й строки записывается число 5; после 2-го эле¬ мента 7-й строки вставляется число 2; 1-й элемент 1-й строки исклю¬ чается, остальные четыре элемента этой строки сдвигаются влево на одну позицию, на освободившееся место в конце строки записывается число 5. Цифровой код последней строки матрицы МН, равный 91, заменяется на 9. HP; ЗАДАЧА = ШЕЛЬФ; СМ = МН (РЕГИОН А); ЦП (РЕГИОН) =1 А5; МН(РЕГИОНА) = & ИЦЭ //1/1 11171 //2 22222 //3 33433 :-3 3 //4 44444 //5 55455 //6 12345 //7 1345 //8 112345 //91 234 //1/4 1; П; 3; КР; HP; ЗАДАЧА = ШЕЛЬФ; СМ = МН (РЕГИОН А); НАЧАЛО КОРРЕКЦИИ; МН (РЕГИОН А) = //5/3 5//7/2 С1 2//91/1 С -1 5; ЦВ (РЕГИОН А) =/91 9; КОНЕЦ КОРРЕКЦИИ; 3; КР; Если в описании работы нет операции ЗАПИСЬ для откорректированных массивов, то коррекция выполняется временно. Исправления аннули¬ руются по окончании работы. Если же в описании работы задана запись новой версии массива дан¬ ных в БД, то новая версия помешается в то же подсемейство, которому принадлежала старая версия. При этом если в БД нет данных, полученных в результате обработки старой версии, то старая версия массива не сохра¬ няется. В противном случае старая версия массива не уничтожается, а формируется новое подсемейство, в которое и помещается старая версия. Пример 2.5. Корректируется и записывается в БД матрица наблю¬ дений задачи АНКЕТА, принадлежащая подсемейству с именем ГОРОД¬ СКОЕ НАСЕЛЕНИЕ. HP: 3= АНКЕТА; СМ = МН (ГОРОДСКОЕ НАСЕЛЕНИЕ); НКОРР: МН (ГОРОДСКОЕ НАСЕЛЕНИЕ) = . . . : ККОРР: 3; КР; Откорректированная матрица будет включена в подсемейство ГОРОДСКОЕ НАСЕЛЕНИЕ. Однако если в разделе АНКЕТА уже хранятся данные, полу¬ ченные в результате обработки предыдущей версии матрицы наблюдений, например вектор выборочных средних значений, то старая версия матрицы наблюдений будет помешена в новое подсемейство, не имеющее имени, с 58
цифровым кодом, присвоенным системой управления пакетом. Благодаря этому не будет оборвана цепочка массивов, ведущая к массиву СРЕДНИЕ ЗНАЧЕНИЯ. Если же в разделе АНКЕТА нет данных, полученных с помощью старой версии матрицы наблюдений, то старая версия не сохраняется. В том случае, когда необходимо сохранить предыдущую версию коррек¬ тируемого массива, а новую версию поместить в новое подсемейство, пользо¬ ватель должен задать имя нового подсемейства с помощью предложения НОВОЕ ИМЯ ПОДСЕМЕЙСТВА (мнемокод НИГ1С), заданного до предло¬ жения НАЧАЛО КОРРЕКЦИИ. Пример 2.6. Откорректированная матрица наблюдений задачи АНКЕ¬ ТА записывается в подсемейство ГОРОДСКОЕ НАСЕЛЕНИЕ - 2. Старая версия остается в подсемействе ГОРОДСКОЕ НАСЕЛЕНИЕ. HP; 3= АНКЕТА; СМ = МН (ГОРОДСКОЕ НАСЕЛЕНИЕ); НИПС = ГОРОДСКОЕ НАСЕЛЕНИЕ 2; НКОРР; МН (ГОРОДСКОЕ НАСЕЛЕНИЕ) =. • • ; ККОРР; 3; КР: На этом закончим рассмотрение примеров и приведем краткие описания операций ВОССТМД, ВЫВФОР, 3, ЗАЩ, КОРРИЗ, КОРРИП, НКОРР, П, ПЕРМ, ПЕРМООД, Г1ОГЛР, СВЕРТКА, СНЗА1Ц, СТЕРМООД, СТЕРПС. ВОССТМД, ВОССТАНОВИТЬ МАССИВ. Восставновление ошибочно стер¬ того в БД массива данных. Стертые массивы активного раздела БД с идентификаторами из 1-й стро¬ ки матрицы СМ восстанавливаются и переименовываются. Новые индсн- тификаторы заданы во 2-й строке матрицы СМ. Восстановить стертый мас¬ сив возможно только в том случае, если между уничтожением и восстанов¬ лением массива не выполнялась реорганизация БД. ВЫВФОР, ВЫВОД ПО ФОРМАТУ (Т)1). Вывод матрицы целых или действительных чисел под управлением оператора FORMAT. Строки матрицы, идентификатор которой задан в предложении СМ, выводятся под управлением оператора FORMAT с текстом в массиве ФОР. В остальном описание аналогично описанию операции ВВФОР. Значения параметров, принятые по умолчанию: НОН = 7, ПНОСТ =ДА. Печать результатов: ВЫВФОР - без печати, ВЫВФОРТ - печать выводи¬ мых записей. 3, ЗАПИСЬ. Запись массива в базу данных. Все те массивы 1-го семейства, указанного в предложении СМ, которые были введены или сформированы в работе, записываются в активный раз¬ дел БД. ЗАЩ, ЗАЩИТА МАССИВА. Защита массива данных в активном раз¬ деле БД. Выполняется зашита всех массивов, идентификаторы которых пере¬ числены в 1-й строке матрицы СМ. Для того чтобы стереть, откорректиро- вать или переименовать защищенный массив, необходимо указывать шифр ^ассива. Шифры массивов можно узнать, распечатав оглавление раздела БД. 1 ) В скобках перечислены возможные суффиксы операций. 59
КОРРИ3, КОРРЕКЦИЯ ИМЕНИ ЗАДАЧИ. Изменение имени задачи, т.е. имени раздела БД, содержащего данные этой задачи. Имя задачи, указанное в векторе 3, заменяется на имя из вектора НИЗ. Соответственно изменяется имя активного раздела БД, всегда совпадаю¬ щее с именем задачи. Если в активном разделе есть хотя бы один защи¬ щенный массив, то для изменения имени задачи необходимо указать шифр первого из защищенных массивов раздела. КОРРИП, КОРРЕКЦИЯ ИМЕНИ ПОДСЕМЕЙСТВА. Изменение имени подсемейства массивов данных. Подсемейству с именем, заданным в векторе СИПС, присваивается имя из вектора НИПС. Если вектор СИПС отсутствует, то переименовывается подсемейство, указанное в 1 -й строке матрицы СМ. НКОРР, НАЧАЛО КОРРЕКЦИИ. Коррекция массива данных. При коррекции массива данных возможна замена одних значений дру¬ гими, сдвиги значений элементов в пределах строки. Параметры массива , п2, п3 не могут быть изменены. Корректирующая информация поставляется в виде предложений ’’дан¬ ные”, в которых приводятся только новые значения элементов. При этом могут быть использованы любые управляющие коды, кроме кодов У и (а Д. За предложением НКОРР может следовать несколько предложений ’’данные”, поставляющих корректирующую информацию. Признаком конца коррекции служит предложение ККОРР. Если задан вектор НИПС, то откорректированные массивы включаются в новое подсемейство, а старые массивы сохраняются. П, ПЕЧАТЬ. Постраничная печать массива данных. Массивы, перечисленные в первой строке матрицы СМ, печатаются на страницах размером ШСТР X ВСТР. Левый край страницы печатается в по¬ зиции НГ1ОЗ. Код управления подводом страницы АЦПУ задается с по¬ мощью параметра КОДУП. Для действительных чисел сохраняется КЦИФР значащих цифр. Между печатаемыми строками пропускается по ПУСТ пус¬ тых строк. Печатаются имена и цифровые коды подмножеств массива (если они были введены). Значения параметров, принятые по умолчанию: НПОЗ = 1, ВСТР = 60. ШСТР = 120, КОДУП - ' 0' , КЦИФР = 4, Г1У СТ = 0. ПЕРМ, ПЕРЕИМЕНОВАНИЕ МАССИВА. Переименование массива дан¬ ных. Массивы активного раздела БД с идентификаторами из первой строки матрицы СМ переименовываются. Новые идентификаторы заданы во вто рой строке СМ. Переименование защищенного массива происходит толь ко в том случае, если шифр массива совпадает с соответствующей ком¬ понентой вектора ШИФР. ПЕРМООД, ПЕРЕИМЕНОВАНИЕ МАССИВА В ООД. Переименование массива в оперативной области данных. Массивы, заданные в первой строке матрицы СМ, переименовываются в ООД, т.е. только на время выполнения работы. Новые идентификаторы заданы во второй строке СМ. ПОГЛР, ПЕЧАТЬ ОГЛАВЛЕНИЯ РАЗДЕЛА. Печать оглавления актив¬ ного раздела базы данных. .60
СВЕРТКА. Вычисление контрольной свертки (суммы) массива данных в активном разделе БД. Вычисляются контрольные свертки массивов, перечисленных в пер¬ вой строке матрицы СМ. СНЗАЩ, СНЯТЬ ЗАЩИТУ. Снятие зашиты массива данных. Снимается зашита массивов активного раздела БД, перечисленных в первой'строке матрицы СМ. Шифры массивов необходимо задать в мас¬ сиве ШИФР. СТЕРМООД, СТЕРЕТЬ МАССИВ В ООД. Уничтожение массивов дан¬ ных в оперативной области данных. Массивы, перечисленные в первой строке матрицы СМ; вычеркиваются из ООД. СТЕРНС, СТЕРЕТЬ ПОДСЕМЕЙСТВО. Уничтожение подсемейства мас¬ сивов данных в активном разделе БД. В базе данных уничтожаются все массивы первою подсемейства, ука¬ занного в матрице СМ, и все массивы, полученные в результате обработки хотя бы одного из массивов-представителей подсемейства, перечисленных в первой строке СМ. Если СТПРЕД = НЕТ, то массивы-представители, ука¬ занные в СМ, остаются в БД. По умолчанию СТПРЕД = НЕТ (см. ниже). Опишем структуру и назначение массивов информации ВСТР, 3, КОДУГ1, КЦИФР, НИЗ, НИПС. НПОЗ, ПУСТ, СИГ1С, СМ, СТПРЕД, ШИФР, ШСТР. ВСТР, ВЫСОТА СТРАНИЦЫ. Целое число х(1 <х<120). равное коли¬ честву строк АЦПУ, которые занимает страница. 3, ЗАДАЧА. Текстовый вектор х (1 ) (1 16), содержащий имя задачи. Имена присваиваются всем задачам, при решении которых исполь¬ зуется БД. Имя задачи присваивается администратором БД так, чтобы име¬ на всех задач были различны. Если при выполнении работы исполь¬ зуется БД, то описание работы должно содержать одно предложение ЗАДАЧА. Имя задачи всегда совпадает с именем раздела БД, в котором хранятся данные этой задачи. КОДУП, КОД УПРАВЛЕНИЯ ПЕЧАТЬЮ. Символ ”и_Л ”1” или ”0”, управляющий печатью первой строки страницы АЦПУ: "1" печа шемая страница располагается с начала страницы АЦПУ: ”0” перед первой строкой страницы пропускаются две пустые строки: ’’ i’’ перед первой строкой страницы пустые строки не пропускаются. КЦИФР, КОЛИЧЕСТВО ЦИФР. Целое число х,х> 1, равное количеству 'значащих цифр, используемых при печати результатов. НИЗ, НОВОЕ ИМЯ ЗАДАЧИ. Текстовый вектор х(1 ), 1 < 16, содержаший новое имя, присваиваемое задаче взамен старого НИПС, НОВОЕ ИМЯ ПОДСЕМЕЙСТВА. Текстовый вектор, содержаший новое имя. присваиваемое подсемейству массивов данных. НПОЗ, НАЧАЛЬНАЯ ПОЗИЦИЯ. Целое число х 1 < 1 20, равное по¬ зиции строки АЦПУ, начиная с которой печатаются данные. ПУСГ, ПУСТЫЕ СТРОКИ. Целое число х равное количеству ^Устых строк, пропускаемых между печатаемыми строками страницы. СИГ1С, СТАРОЕ ИМЯ ПОДСЕМЕЙСТВА. Текстовый вектор, содержа¬ ний старое имя подсемейства массивов данных. 61
СМ, СЕМЕЙСТВА МАССИВОВ. Текстовая матрица х(1 :И1,1 : п2 ), содержащая описания п2 семейств массивов данных, используемых При выполнении последующих операций - длина самого длинного описа¬ ния). Описание семейства представляет собой последовательность иденти¬ фикаторов массивов данных (представителей семейства), отделенных друг от друга запятыми. Е1апример, если в строке СМ перечислены массивы данных А, В, С, то эта строка определяет все семейства массивов, одновременно содержащие массивы А, В и С. Если ни одного такого семейства нет, то возникает ошиб¬ ка ’’входные данные операции не найдены”. Если таких семейств несколько и последующая операция использует массив данных, не принадлежащий одновременно всем указанным семействам, то возникает ошибка ’’входные данные операции заданы неоднозначно”. Для некоторых операций, например СТЕРГ1С, нужно задавать входное подсемейство массивов данных. Для этого в строке матрицы СМ указываем¬ ся идентификатор любого массива нужного подсемейства. СТПРЕД, СТЕРЕТЬ ПРЕДСТАВИТЕЛЕЙ. Текстовая константа, исполь¬ зуемая при выполнении операции СТЕРПС: если СТПРЕД = ДА, то масси¬ вы-представители, перечисленные в первой строке матрицы СМ. уничто¬ жаются, если СТПРЕД = НЕТ - не уничтожаются. ШИФР, ШИФРЫ МАССИВОВ. Целочисленный вектор, содержащий шифры массивов данных. 1ПСТР, ШИРИНА СТРАНИЦЫ. Целое число х, 1 < 1 20, равное длине строки печатаемой страницы. § 3. ОПЕРАЦИИ ФОРМИРОВАНИЯ, ПРЕОБРАЗОВАНИЯ, РАЗБИЕНИЯ НА ЧАСТИ И ОБЪЕДИНЕНИЯ МАССИВОВ ДАННЫХ Объединение матриц данных используется в тех случаях, когда исходная матрица наблюдений накапливается постепенно и ее части по мере готов¬ ности вводятся в ЭВМ и добавляются к уже введенным частям. Кроме того, к исходной матрице наблюдений могут быть добавлены столбцы, содержа¬ щие значения новых переменных (равные, например, значениям некото¬ рых функций от старых переменных), полученные в результате преобразо¬ вания исходной матрицы наблюдений. Объединение производится с учетом имен и цифровых кодов строк и столбцов объединяемых матриц: одноименные строки объединяются, а строки с разными именами добавляются без изменения. То же самое отно¬ сится к столбцам объединяемых матриц. Одноименные строки (столбцы) нс обязательно должны быть упорядочены одинаковым образом в объеди¬ няемых матрицах. При объединении матриц наблюдений происходит также объединение массивов имен и цифровых кодов строк и столбцов матриц. Идентификаторы объединяемых массивов указываются в первых двух строках матрицы СМ. В третьей строке задается идентификатор, который будет присвоен объединенному массиву. Пример 3.1. Объединение матриц наблюдений, введенных в приме¬ ре 1.5 для задачи ЭКСПЕРИМЕНТ. HP; 3 = ЭКСПЕРИМЕНТ; 62
см = (“ ИТС, MH (ЧАСТЬ Al), МН (ЧАСТЬ Б1), МН (ЧАСТИ А1 ИЫ); ОМД; СМ = С^ИТС, МН (ЧАСТИ А1 И Ы), МН (ЧАСТИ А2 И Б2), МН (ВСЕ ЧАСТИ); ОМД: СМ = МН (ВСЕ ЧАСТИ) 3; КР; Выделение части матрицы наблюдений применяется тогда, когда некото¬ рая часть матрицы многократно используется в разных работах (особенно в тех случаях, когда объем части мал по сравнению с объёмом всего мас¬ сива). Выделяемая часть может быть задана различными способами: 1) списком имен или цифровых кодов столбцов СИВ, СЦВ и строк СИП,СЦП; 2) масками векторов и переменных МВ. МП; 3) логической функцией ПФ. Идентификаторы исходной матрицы и полученной ее части задаются в первой и во второй строках матрицы СМ. Пример 3.2. Разбиение матрицы наблюдений задачи ИРИС ФИШЕРА на три части и запись частей в БД. Каждая часть состоит из четырех строк и четырех столбцов. HP; 3-ИРИС ФИШЕРА; СМ & И'ГС, МН (ИСХ). МН (КЛАСС 1); СПИСОК ЦИФРОВЫХ КОДОВ ВЕКТОРОВ, ВЗЯТЫХ = 1 А4; ВЧМД; СМ- МН (КЛАСС 1); 3; СМ = (<Г ИТС, МН (ИСХ), МН (КЛАСС 2): СЦВВ-51 А4; ВЧМД; СМ = МН (КЛАСС 2); 3; СМ = & ИТС, МН (ИСХ), МН (КЛАСС 3); СЦВВ = 101 А4; ВЧМД; СМ = МН (КЛАСС 3) ; 3; КР: Операция ФОРМИРОВАНИЕ применяется для образования новых целочисленных переменных матрицы наблюдений МН, нелинейно зависящих от старых переменных. Формулы, описывающие новые переменные, задают¬ ся с помощью логических функций ЛФ. Каждая новая переменная, прини¬ мающая значения 1, 2, . . . , k + 1, описывается одной строкой матрицы ЛФ, содержащей к логических функций. Значение новой переменной для i-й строки матрицы наблюдений будет равно /, если числа, содержащиеся в /-й строке МН, будут удовлетворять условию, заданному /-й логической функ-' иней, и, не будут удовлетворять условиям, которые заданы предыдущими логическими функциями. Идентификаторы исходной матрицы и матрицы,' содержащей значения Новых переменных, указываются в первой и во второй строках массива СМ. Пример 3.3. Формируются значения двух новых переменных для за¬ дачи ИРИС ФИШЕРА: II, если X] < 6.0; | ( 2 в противном случае; 63
*6 = если х2 < 3.3 если х2 > 3.3 если х2 < 3.3 если х2 > 3.3 и х4 <1.5; и х4 < 1.5; и х4 > 1.5; и х4 > 1.5. Полученная матрица МН, состоящая из 12 строк и двух столбцов, записы¬ вается в подсемейство с именем ПЕРЕМ. 5 И 6. Имена строк матрицы ЛФ Х5 и Х6. HP; 3=ИРИС ФИШЕРА; СМ = @ ИТС, МН (ИСХ), МН (ПЕРЕМ. 5 И 6) ; ЛФ = //Х5/1, /ДЛИНА ЧАШЕЛИСТИКА = 6.001 : 10* //Х6, ' (/ШИР. ЧАШ. = 0 : 3.3 И /ШИР. ЛЕП. = 0 : 1.5)/ '(/ШИР. ЧАШ. = 3.301 :10 И /ШИР. ЛЕП. = 0 : 1.5),' '(/ШИР. ЧАШ. = 0 : 3.3 И /ШИР. ЛЕП. = 1.501 : 10)'; ФОРМ: СМ = МН (ПЕРЕМ. 5 И 6) ; 3; КР; Преобразования матрицы наблюдений выполняются в надежде на то, что с помощью преобразованных данных будет получено более точное решение задачи. С этой целью могут быть применены следующие преобразования матрицы наблюдений (в скобках даны мнемокоды операций) : 1) оптимальное преобразование действительных переменных в целочис¬ ленные (ГРДЦ); 2) вычисление главных компонент (ГЛКОМП); 3) центрирование и нормировка строк (векторов) матрицы наблюде¬ ний (ЦП). В первых двух случаях происходит упрощение задачи за счет исключения малосущественной части информации. Центрирование и нормировка могут уменьшить влияние ошибок округления на конечные результаты. Пример 3.4. Действительная матрица наблюдений задачи ИРИС' ФИШЕРА преобразуется в целочисленную матрицу наблюдений. Векторы с номерами 4, 54 и 104 при вычислении оптимальных градаций не исполь¬ зуются. HP; 3 = ИРИС ФИШЕРА: СМ = ИТС, МН (ИСХ). МН(Ц): ПОМЕТА КЛАС СОВ = 1 П4 2 П4 3 П4; СПИСОК ЦИФРОВЫХ КОДОВ ВЕКТОРОВ, НЕ ВЗЯТЫХ = 4 54 104; ГРДЦ: СМ = МН(Ц); 3: КР; Пример 3.5. Вычисляются главные компоненты для первых трех столбцов матрицы наблюдений задачи ИРИС ФИШЕРА. HP: 3 = ИРИС' ФИШЕРА: СМ= («ИТС, МН(ИСХ), МН(ГЛ.К): СПИСОК ИМЕН ПЕРЕМЕННЫХ, НЕ ВЗЯТЫХ ~ ШИРИНА ЛЕПЕС ТКА; ГЛКОМПТ; СМ = МН (ГЛ.К ) : 3: КР; 64
Дадим краткое описание операций ВЧМД, ГЛКОМП, ГР, ГРДЦ, ОМД, ПГЛКОМП. ПРЕОДЦ, ПРЕОСМ, ПРЕОЦД, СЧИСЛ, СЭЛФ, ФОРМ, хтх, ЦН. ВЧМД, ВЫДЕЛЕНИЕ ЧАСТИ МАССИВА (Т) 1). Выделение части матри¬ цы или вектора. Выходной массив (выделенная часть) состоит из элементов входного массива, стоящих на пересечении заданных столбцов и строк. Столбцы могут быть указаны с помощью маски переменных МП значе¬ нием, равным 1, или с помощью списков имен или цифровых кодов пере¬ менных СЙПВ, СЦГ1В или СИПИ, C1I11H. В списках СИПВ, СЦПВ (суффикс В - ВЗЯТЫХ) перечисляются имена столбцов, включенных в выделяемую часть, а в списках СИПН. СЦПН (суффикс Н - НЕ ВЗЯТЫХ)- имена столбцов, не включенных в выделяемую часть. Строки могут быть указаны с помощью маски векторов МВ значением, равным 1, или с помощью списков имен или цифровых кодов СИВВ, СЦВВ или СИВН, СЦВН. Кроме этого, выделяемые строки могут быть указаны с помощью логической функции ЛФВ или ЛФН. Отбираются строки, удовлетворяющие условию, заданному функцией ЛФВ, или строки, не удовлетворяющие условию, заданному функцией ЛФН. Если для задания строк и столбцов используется несколько способов одновременно, то может возникнуть противоречие, например имя строки задано в списке СИВВ, но значения, записанные в строке, не удовлетворя¬ ют условию, заданному функцией ЛФВ. Возникшие противоречия разре¬ шаются в зависимости от параметра ВИН: при ВИН = В строка включается, а при ВИН -- Н - не включается в выходной массив. По умолчанию ВИН = Н. Печать результатов: ВЧМД — без печати, ВЧМДТ - печать выделенной части массива. ГЛКОМП, ГЛАВНЫЕ КОМПОНЕНТЫ (Т). Вычисление собственных векторов матрицы ХТХ, где X — матрица наблюдений МН, и пересчет матри¬ цы МН в базис полученных собственных векторов. Операция эквивалентна последовательности операций ХТХ, СЧИСЛ и ПГЛКОМП. Значения параметров, принятые по умолчанию: ТОЧН = 1, ПРОЧ = = ПРОП, ЭПС = 0.0001, КИТ = 4000, КВОЗ - 1. Печать результатов: ГЛКОМП — без печати, ГЛКОМПТ - печать массива собственных чи¬ сел СЧХТ. ГР, ГРАДАЦИИ (Т). Вычисление оптимальных градаций для значений Действительных переменных. Для каждого столбца матрицы наблюдений МН, указанного значением 1 маски МП, вычисляются оптимальные градации (границы интервалов, на которые разбивается отрезок, содержащий значения столбца матрицы МН). Используются векторы (строки матрицы МН), указанные значениями 1 и 3 Маски МВ. Номера классов для строк МН заданы в векторе НОКЛ. Критерием оптимальности служит коэффициент информативности КФИ Целочисленной переменной, равной номеру того интервала, в который по¬ падает значение столбца матрицы МН. Максимум коэффициента информа¬ тивности отыскивается перебором вариантов. Объем перебора регулируется О В скобках перечислены возможные суффиксы операций. 5- И.А. Кощеев 65
массивами КОТР, КГРМИ, КГРМК, ВОЗГР и ФИКСГР, параметрами ДЛГРМК, ДЛГРМН, КСМЕНЗ. Если заданы фиксированные градации ФИКСГР, то в переборе участвуют только те варианты разбиения отрезка, при которых каждое фиксирован¬ ное значение служит границей одного из интервалов. Если задан массив возможных градаций ВОЗГР, то в переборе участвуют только те варианты разбиения, при которых границами всех интервалов служат только значения из массива ВОЗГР (все или часть значений). Если количество интервалов разбиения превышает количество фиксированных и возможных градаций, то в качестве недостающих значений границ интерва¬ лов используются (округленные до КЦИФР значащих цифр): либо значе¬ ния столбца матрицы МН (при ВЗГР = 1 или 3), либо полусуммы соседних чисел последовательности значений столбца МН, упорядоченных по воз¬ растанию (при ВЗГР = 2). При ВЗГР = 1 граница интервала относится к правому интервалу ( \а, /?)), а при ВЗГР = 3 - к левому ((я, /;]). Значения параметров, принятые по умолчанию: ДЛГРМК = 1.0, ДЛГРМН = 0, ЭПС = 0, КОТР - 1000, 500, 200, 100, 20, 20, 20, 20. KOTP(z) = i + И, i > 8, А = 1, ПИА - НЕТ, ОРМ = 400, КЦИФР = 2, КСМЕНЗ = 2, ВЗГР = 1. Печать результатов: ГР — без печати, ГРТ — печать массивов ГР и КФИ. ГРДЦ, ГРАДАЦИИ И КОДИРОВАНИЕ (Т, К, ГК). Вычисление опти мальных градаций для значений действительных переменных, преобразо вание действительных переменных в целочисленные и вычисление часто! значений полученных переменных. Операция эквивалентна последователь ности операций ГР, ПРЕОДЦ и Ч. Печать результатов: ГРДЦ - без печати, ГРДЦТ — печать массивов ГР. КФИ, ЧА, ЧО; ГРДЦК - печать гистрограммы распределения значений сформированных целочисленных переменных. ОМД, ОБЪЕДИНЕНИЕ МАССИВОВ. Обьединие матриц данных. Объединяются две матрицы одного и того же вида информации. Спи сок имен или цифровых кодов строк и столбцов выходного массива получается объединением списков имен входных массивов. Элементы выходного массива выбираются равными элементам первого или второ¬ го массивов или содержат ’’прочерки”, таким образом, что выполняют¬ ся условия: 1) элементы выходного массива и второго массива, стоящие на пересе¬ чении одноименных строк и столбцов, совпадают, если элемент второго массива не является прочерком; 2) элементы выходного массива и первого массива, стоящие на Пересе чении одноименных строк и столбцов, совпадают, если во втором мас¬ сиве нет одноименной строки и одноименного столбца, либо во втором массиве на пересечении одноименных строки и столбца стоит ’’прочерк”. 3) все остальные элементы выходного массива содержат ’'прочерки”. ПГЛКОМП, ПЕРЕХОД К ГЛАВНЫМ КОМПОНЕНТАМ. Вычисляются коэффициенты разложения строк (векторов) матрицы наблюдений МН по собственным векторам СВКР, СВКВ или СВХТ. Исполь¬ зуются только те столбцы матрицы МН. которые перечислены в списке идентификаторов столбцов матрицы СВКР, СВКВ или СВХТ. Неиспользо¬ ванные столбцы переносятся в выходную матрицу МН без изменения. 66
Исключенные строки входной матрицы МН, отмеченные значениями О маски МВ, в выходную матрицу МН не переносятся. ПРЕОДЦ, ПРЕОБРАЗОВАНИЕ ДЕЙСТВИТЕЛЬНЫХ В ЦЕЛЫЕ. Преоб¬ разование действительной матрицы наблюдений МН в целочисленную. Каждое значение действительной переменной (столбца матрицы МН первого семейства, указанного в массиве СМ) заменяется номером интер¬ вала, содержащего это значение. Границы интервалов для всех столбцов входной матрицы МН заданы в массиве ГР. Если массив ГР не задан, го выбираются интервалы, разбивающие отрезок, содержащий все значения переменной, на 9 равных частей. ПРЕОСМ, ПРЕОБРАЗОВАНИЕ СДВИГА И ИЗМЕНЕНИЕ МАСШТАБА. Линейные преобразования значений столбцов матрицы наблюдений МН. Значения переменных, указанных единицами в маске МП, преобразуются по формуле Хновое “ а ' ^старое + гДе коэффициенты а и Ь заданы в мас¬ сивах КФМ и КФС. Значения остальных переменных переносятся в выход¬ ную матрицу МН без изменения. Исключенные строки входной матрицы МН (заданы значениями 0 маски МВ) в выходную матрицу МН не переносятся. Значение параметров, принятые по умолчанию: СДВИГ = НЕТ, ИМАСШ = = НЕТ. ПРЕОЦД, ПРЕОБРАЗОВАНИЕ ЦЕЛЫХ В ДЕЙСТВИТЕЛЬНЫЕ. Преоб¬ разование целочисленной матрицы наблюдений МН в действительную. Значения каждой целочисленной переменной, указанной единицей в маске МП, заменяются действительными числами из массива ЦМЕТ. Если массив ЦМЕТ не задан, то значений 1,2,3,... всех целочисленных перемен¬ ных заменяются действительными числами 1.0, 2.0, 3.0, .... СЧИСЛ, СОБСТВЕННЫЕ ЧИСЛА (Т). Вычисление собственных чисел и собственных векторов матрицы КВ или КР или ХТХ. Собственные числа и векторы входной квадратной симметричной матри¬ цы вычисляются методом вращений. После каждой итерации вычисляется невязка д — максимальный по модулю не диагональный элемент матрицы ZTAZ, где А - входная симметричная матрица, aZ - матрица собственных векторов, полученная на этой итерации. Итерации заканчиваются, если нэпе. Если 6 > ЭПС и значение 6 оказалось больше невязки, полученной на пре¬ дыдущей итерации, то выполняется возобновление итераций. В качестве исходной используется матрица Z'AZ. Если количество итераций, при которых невязка Ь монотонно убывает, но остается больше ЭПС, превысит кит, то выполняется возобновление. Если количество возобновлений превысило значение КВОЗ, выполнение операции прекращается. В этом случае точность, заданная пользователем, не достигнута. Печатается предупреждение и результаты, соответствующие наилучшей достигнутой точности. Ортонормальность полученной матрицы собственных векторов оцени¬ вается величиной || / - Z AZ ||, где / - единичная матрица, а || А || - норма Матрицы Л: || А || = ( S а /2. i, i Значения параметров, принятые по умолчанию: ЭПС = 0.0001, КИТ = * 4000, КВОЗ = 1. Печать результатов? СЧИСЛ - без печати, СЧИСЛТ - Печать собственных чисел. 5* 67
СЭЛФ, СПИСОК ЭЛЕМЕНТОВ ПО ЛФ (Т). Составление списка тех элементов массива данных, для которых результат логической функции есть ИСТИНА. Для строк, столбцов или матриц входного массива определяются ре¬ зультаты логической функции ЛФ. Если результат — ИСТИНА, то идентифи¬ катор строки, столбца или матрицы трехмерной таблицы заносится в вы¬ ходной массив. Идентификаторы входного и выходного массивов заданы в первой и во второй строках матрицы СМ. ФОРМ, ФОРМИРОВАНИЕ МАССИВА. Формирование массива данных с помощью логических функций. Выходной массив представляет собой массив целых чисел, полученных следующим образом. Если матрица ЛФ состоит из одной строки, то размер¬ ность выходного массива связана с размерностью входного массива и ви¬ дом меток в логических функциях так, как показано в таблице 4.1. Каж дый элемент выходного массива равен номеру первой из тех логических функций в строке ЛФ, результатом которых является ИСТИНА. Если результатом всех функций является ЛОЖЬ, то элемент выходного массива равен количеству функций в строке плюс единица. Если матрица ЛФ состоит из нескольких строк, го массивы, полученные для каждой строки описанным способом, объединяются. Если массив, полученный для первой строки ЛФ, является трехмерной таблицей, то остальные строки ЛФ игнорируются. ХТХ, МАТРИЦА ХТХ. Вычисление матрицы ХГХ, где X — матриц) наблюдений МН, ат— символ транспонирования. Описание аналогично описанию операции КОВМ (см. глав}/ V ). Выходными данными служат мае сивы ХТХ и КВХТ. ЦН, ЦЕНТРИРОВАНИЕ И НОРМИРОВКА. Центрирование и нормиров ка значений столбцов матрицы наблюдений МН. Операция совпадает с операцией ПРЕОСМ с точностью до формулы ли¬ нейного преобразования, которая для операции ЦН имеет вид I ■^новое ~ ^старое ~ X G где о и х - компоненты векторов ДИ и СЗ (см. главу V). Таблица 4.1 входной МАССИВ ВИД МЕТОК ЛФ РЕЗУЛЬТАТ ЛФ 1 ОПРЕДЕЛЯЕТСЯ для выход¬ ной МАССИВ вектор метки компонент вектора всего вектора скаляр вектор метки без имени каждой компоненты вектор матрица метки элементов матрицы всей матрицы скаляр матрица метки строк матрицы каждого столбца вектор матрица метки столбцов матрицы каждой строки вектор матрица метки без имени каждого элемента матрица трехмерная. метки элементов таблицы всей таблицы скаляр таблица 68
Значения параметров, принятые по умолчанию: СДВИГ = ДА, ИМАС111 = = ДА. Приведем описания структуры и назначение массивов информации А, ВЗГР, ВИН, ВОЗГР, ГР, ДЛГРМК, ДЛГРМН, ИЛФ, ИМАСШ, квоз, квхт, КГРМК, КГРМН, КИТ, КОТР, КСМЕНЗ, КФМ, КФС, КЦИФР, ЛТ, ЛФ, МВ, МП, НОКЛ, ОРМ, ПИА, свхт, сдвиг, сип, сив, сцв, сцп, СЧХТ, ФИКСГР, ХТХ, ЦЛФ, ЦМЕТ, эпс. А, ПАРАМЕТР А. Действительное число, равное параметру а в формуле для коэффициентов информативности и коэффициентов байесовского решающего правила. См. главу V. ВЗГР, ВЗЯТЬ ЗНАЧЕНИЯ ГРАДАЦИИ. Целое число х (1 <х<3), управляющее выбором значения градации. См. описание операции ГР. ВИН, ВКЛЮЧАТЬ ИЛИ НЕ ВКЛЮЧАТЬ. Текстовая константа, исполь¬ зуемая при выделении части массива данных. См. описание операции ВЧМД. ВОЗГР, ВОЗМОЖНЫЕ ГРАДАЦИИ. Матрица действительных чисел х (1 :И1, 1 : л2), содержащая списки значений, среди которых должны отыс¬ киваться границы интервалов при разбиении области изменения действи¬ тельной переменной на градации (пх — длина самого длинного списка, п2 -- количество столбцов матрицы наблюдений МН) . ГР, ГРАДАЦИИ. Матрица действительных чисел х (1 : 1 : п2) содер¬ жащая граничные точки интервалов разбиения областей изменения пере¬ менных. В z-й строке матрицы содержится к, чисел, упорядоченных по возрастанию, разбивающих область изменения z-й переменной на kf + 1 интервал (z = 1, . . ., и2). Здесь пх = тах(/с15 . . . , kfj2} . Имена, полные названия и цифровые коды строк матрицы ГР содержатся в масси¬ вах ИП,ПНПиЦП. ДЛГРМК, МАКСИМАЛЬНАЯ ОТНОСИТЕЛЬНАЯ ДЛИНА ГРАДАЦИИ. Действительное число х (0,0 <х < 1,0) . Длина каждой градации переменной не будет превышать х • с/, где d - размах значений переменной (разность между наибольшим и наименьшим значениями). ДЛГРМН, МИНИМАЛЬНАЯ ОТНОСИТЕЛЬНАЯ ДЛИНА ГРАДАЦИИ. Действительное число х (0,0 <х < 1,0) . Длина каждой градации переменной будет выбрана не меньшей, чем х • d, где d - размах значений переменной. ИЛФ, ИМЕНА ЛОГИЧЕСКИХ ФУНКЦИЙ (В, Н, О, Ф, Э). Текстовая матрица х (1 -.гц, I: п2) , содержащая имена строк матрицы ЛФ (z?j - длина самого длинного имени, п2 — количество строк матрицы ЛФ). Имена строк матрицы ИЛФ совпадают с именами строк матрицы ЛФ. Значения суффик¬ сов описаны ниже (см. ЛФ). ИМАСШ, ИЗМЕНИТЬ МАСШТАБ. Текстовая константа, вид которой (ДА, НЕТ) определяет, нужно ли выполнять изменение масштаба. КВОЗ, КОЛИЧЕСТВО ВОЗОБНОВЛЕНИЙ. Целое число, равное коли¬ честву возобновлений итераций алгоритма. КВХТ, КОЛИЧЕСТВА ВЕКТОРОВ ДЛЯ МАТРИЦЫ ХТХ. Целочислен¬ ная квадратная симметричная матрица х (1 : 1 : лг j), элемент х(/, /) которой равен количеству пар значений z-й и /-й компонент строки матрицы Наблюдений МН, использованных для вычисления элемента ХТХ(/, /) Матрицы ХТХ. Здесь пх - количество столбцов матрицы МН. Имена, Полные названия и цифровые коды строк и столбцов матрицы КВХТ со¬ держатся в массивах ИН, ПНП и ЦГГ 69
КГРМК, МАКСИМАЛЬНОЕ: КОЛИЧЕСТВО ГРАДАЦИЙ. Целочислен¬ ный вектор х(1 : Hi), Х*( • ) 2), компонента которого ограничивает множество вариантов разбиения области значений z-й переменной на града¬ ции (/ = 1, . . . , и!): варианты разбиения на x(i) + 1 градацию и более не рассматриваются - количество столбцов матрицы наблюдений МН). КГРМН, МИНИМАЛЬНОЕ КОЛИЧЕСТВО ГРАДАЦИЙ. Целочисленный вектор л'(1:Н]), х(-)>2, /-я компонента которого ограничивает мно¬ жество вариантов разбиения области значений z-й переменной на градации варианты разбиения на x(i) -1 градацию и менее нс рассматриваются - количество столбцов матрицы наблюдений МН). КИТ, КОЛИЧЕСТВО ИТЕРАЦИЙ. Целое число, равное максимальному количеству итераций алгоритма. КОТР, КОЛИЧЕСТВО ОТРЕЗКОВ. Целочисленный вектор х( 1 : п j), z-я компонента которого ограничивает множество вариантов разбиения об ласти значений переменных на i + 1 градацию (/ = 1, . . . , п j): область зна чений разбивается на x(z) интервалов с помощью массивов ВОЗГР. ФИКСГР и других (см. описание операции ГР), затем полученные интерва¬ лы объединяются всеми возможными способами так, чтобы образовалось ровно i + 1 интервалов +1 - наибольшее количество градаций, для которого задано значение компоненты вектора КОТР). КСМЕНЗ, КОЛИЧЕСТВО СМЕН ЗНАКА. Целочисленный вектор х(1:Hj), х(•) > 1, z-я компонента которого ограничивает множество ва риантов разбиения области значений z-й переменной на градации- (/ - = 1, . . . , л? 1): если количество смен знака в последовательности разностей частот /7 - /7, /7 - /22, . . . , Д1 - /\2 больше x(z), то данный вариант не рассматривается. Здесь - частота значений z-й переменной в т-м классе, попавших в /-ю градацию, а к - количество градаций. КФМ, КОЭФФИЦИЕНТЫ ПРЕОБРАЗОВАНИЯ МАСШТАБА. Действи¬ тельный вектор х(1:П1), /-я компонента которого равна коэффициенту а в формуле для линейного преобразования /-й переменной: хновое = л*-^старое + Ь (пх - количество столбцов матрицы наблюдений МЕГ). Имена, полные названия и цифровые коды компонент вектора КФМ содер¬ жатся в массивах ИП, Г1НП и ЦП. КФС, КОЭФФИЦИЕНТЫ СДВИГА. Действительный вектор х*(1: mJ . z-я компонента которого равна коэффициенту b в формуле линейного преобразования значений z-й переменной: хновое - а ♦ хСтарое + (^i количество столбцов матрицы наблюдений МН). Имена, полные названия и цифровые коды компонент вектора КФС содержатся в массивах ИИ. ПНИ и ЦП. ЛТ, ЛОГИЧЕСКИЕ: ТАБЛИЦЫ. Вектор, содержащий таблицы, получен¬ ные в результате трансляции логических функций ЛФ и используемые для определения результатов логических функций на массивах данных. Вектор содержит элементы разного типа: целые и действительные числа и символы. ЛФ, ЛОГИЧЕСКИЕ ФУНКЦИИ (В. ЕЕ О, Ф, Э: полные названия суффик¬ сов: ВЗЯТЬ, НЕ БРАТЬ, ОБУЧЕНИЕ, ФИКСИРОВАТЬ. ЭКЗАМЕН). Текстовая матрица х(1 \пх, 1:7?2) > содержащая в строках логические функ¬ ции, записанные в виде текстовых констант (пх - длина самой длинной 70
строки символов, п2 - количество строк матрицы ЛФ). Имена и цифровые коды строк матрицы ЛФ заданы в массивах ИЛФ и ЦЛФ. В каждой строке матрицы ЛФ может быть записано несколько логи¬ ческих функций. Текст логической функции составляется по следующим правилам. 1. Простейшей логической функцией является отношение. Отношение ’’значение элемента массива равно одному из значений, перечисленных в списке” записывается в виде ’’метка элемента = список”. Метка элемента описана в § 4 главы III, а список представляет собой последовательность числовых констант, разделенных пробелами или запятыми. Интервалы значений записываются с помощью двоеточия: ’’нижняя граница'интерва¬ ла : верхняя граница интервала”. Интервалы значений и числовые констан¬ ты могут чередоваться в списке произвольным образом. Полагается, что верхняя и нижняя границы принадлежат интервалу. 2. Различные отношения объединяются в более сложные логические функции с помощью операций И, ИЛИ, НЕ обычным способом. Кодами операций служат слова И, ИЛИ, НЕ, записываемые без апострофов. Для указания порядка выполнения операций используются круглые скобки. 3. Значение логической функции может быть определено для каждого элемента вектора, матрицы или трехмерной таблицы, для каждой строки матрицы или трехмерной таблицы, для каждой матрицы трехмерной табли¬ цы или для всего массива в целом. В первом случае все метки элементов в логической функции имеют вид ”/”, во втором случае -- ’’/элемент стро¬ ки”, в третьем случае - ’’//строка/элемент строки”. В последнем случае все метки элементов являются полными метками элементов массива. В метках используются имена или цифровые коды элементов строк, строк, столбцов и матриц. 4. Употребление пробелов в тексте логических функций подчиняется правилам, изложенным при описании языка управления пакетом в § 4 главы III. Внутри слов ИЛИ и НЕ пробелы не допускаются. Если в одной строке матрицы ЛФ записано несколько логических функций, то их тексты разделяются одним или несколькими пробелами. Суффиксы мнемокодов указывают на подмножества элементов, ото¬ бранных с помощью логической функции: В - использовать для выполнения операции: Н - не использовать для выполнения операции; О - использовать для обучения; Э - использовать для экзамена; Ф использовать в качестве фиксированных. МВ, МАСКА ВЕКТОРОВ. Целочисленный вектор х( 1: п j), описываю¬ щий использование строк (векторов) матрицы наблюдений МН - Количество строк матрицы МН): О, если Тя строка МН не используется; 1, если /-я строка МН используется для обучения; 2, если i-я строка МН используется для экзамена; 3, если /-я строка МН используется в качестве фиксированной. 71
Любые другие значения x(i) интерпретируются как x(i) = 0. Имена и циф¬ ровые коды компонент вектора МВ содержатся в массивах ИВ и ЦВ. МП, МАСКА ПЕРЕМЕННЫХ. Целочисленный вектор х(1: п j), описы¬ вающий использование столбцов (переменных) матрицы наблюдений МН (п} — количество столбцов матрицы МН) : x(i) = ' о, 1, 3, если /-й столбец МН не используется; если /-й столбец МН используется основным способом; если /-й столбец МН используется в качестве фиксирован' ного. Любые другие значения х(/) интерпретируются какх(/) = 0. Имена, полные названия и цифровые коды компонент вектора МП содержатся в массивах ИП, ПИП и ЦП. НОКЛ, НОМЕРА КЛАССОВ. Целочисленный вектор х(1: , описываю щий разбиение строк матрицы наблюдений МН на классы (??i - количество строк матрицы МН) : номер класса, которому принадлежит /-я строка МН. равен %(/), i - 1t. Имена классов содержатся в массиве ИКЛ. ОРМ, ОБЪЕМ РАБОЧЕГО МАССИВА. Целое число, равное объему рабочего массива, который используется при выполнении операции. ПИА, ПЕЧАТБ НА ИТЕРАЦИЯХ АЛГОРИТМА. Текстовая константа: ДА - нужна печать информации на каждой итерации алгоритма, НЕТ в противном случае. СВХТ, СОБСТВЕННЫЕ ВЕКТОРЫ МАТРИЦЫ ХТХ. Действительная матрица jc(1 :1: ), в строках которой содержатся собственные векто¬ ры ХТХ, упорядоченные по убыванию собственных чисел -- количество столбцов матрицы ХТХ). Имена, полные названия и цифровые коды столб цов матрицы СВХТ содержатся в массивах ИП, ПНП и ЦП. С'ДВИГ\ Текстовая константа, вид которой (ДА, НЕТ) определяет, нуж¬ но ли выполнять преобразование сдвига. СИВ, СПИСОК ИМЕН ВЕКТОРОВ (В. Н, О, Ф, Э: полные названия суффиксов: ВЗЯТЫХ, НЕ ВЗЯТЫХ, ОБУЧЕНИЯ, ФИКСИРОВАННЫХ. ЭКЗАМЕНА). Текстовая матрица х(1 :«], 1 :п2), содержащая список имен строк матрицы наблюдений МН (nj - длина самого длинного7 имени, п2 количество имен’ в списке). Значения суффиксов мнемокодов объяснены при описании массива ЛФ. СИП, СПИСОК ИМЕН ПЕРЕМЕННЫХ (В, Н, Ф). Текстовая матрица х(1: И], 1: и2) , содержащая список имен столбцов матрицы наблюдений МН (ri[ - длина самого длинного имени, п2 — количество имен в списке). Список может содержать имена ИП и полные названия переменных ПНП. Суффиксы обозначают назначение переменных, указываемых списком (см. описание массива ЛФ). СЦВ, СПИСОК ЦИФРОВЫХ КОДОВ ВЕКТОРОВ (В,И, О, Ф, Э). Цело¬ численный вектор л*(1 ги/), содержащий список цифровых кодов строк матрицы наблюдений МН (п} - количество цифровых кодов в списке). СЦП1, СПИСОК ЦИФРОВЫХ КОДОВ ПЕРЕМЕННЫХ (В. Н.Ф). Цело¬ численный вектор х(1 ), содержащий список цифровых кодов столбцов матрицы наблюдений МН (пх - количество цифровых кодов в списке). 72
СЧХТ, СОБСТВЕННЫЕ ЧИСЛА МАТРИЦЫ ХТХ. Действительный вектор jc(1 : rz 1), содержащий собственные числа матрицы ХТХ, расположен¬ ные в порядке убывания («! — количество столбцов матрицы ХТХ). ФИКСГР, ФИКСИРОВАННЫЕ ГРАДАЦИИ. Действительная трехмерная таблица х(1: Hi, 1: п2, 1: и3) . Строка х(1: и15/, к) содержит список границ интервалов в порядке возрастания, которые должны обязательно входить в разбиение области значений к-й переменной на / + 1 градацию (д?! - длина самого длинного списка, п2 — максимальное количество градаций, для которого в таблице ФИКСГР даны списки, п3 - количество столбцов матрицы наблюдений МН). Имена, полные названия и цифровые коды (1,2)-матриц трехмерной таблицы ФИКСГР содержатся в массивах ИП, ПНП и ЦП. ХТХ, МАТРИЦА ХТХ. Действительная квадратная симметричная матри¬ ца х(1: /ц, 1: пх), равная ХТХ, где X — матрица наблюдений МН, Хт — транспонированная матрица X, пх — количество столбцов матрицы МН. Имена, полные названия и цифровые коды матрицы ХТХ содержатся в массивах ИП, ПНП и ЦП. ЦЛФ, ЦИФРОВЫЕ КОДЫ ЛОГИЧЕСКИХ ФУНКЦИЙ (В, Н, О, Ф, Э). Целочисленный вектор х(1: «j), содержащий цифровые коды строк матрицы ЛФ («! - количество строк матрицы ЛФ). Цифровые коды ком¬ понент вектора ЦЛФ совпадают с цифровыми кодами строк матрицы ЛФ. ЦМЕТ, ЦИФРОВЫЕ МЕТКИ. Действительная матрица х(1: пt, 1: п2), содержащая действительные числа (метки), соответствующие значениям 1,2,3,... целочисленной переменной - максимальное количество градаций в переменных, п2 — количество столбцов матрицы наблюдений МН). Имена, полные названия и цифровые коды строк матрицы ЦМЕТ содержатся в массивах ИП, Г1НГ1 и ЦП. ЭПС, ЭПСИЛОН. Действительное число х, 0<х<1, служащее пара¬ метром некоторых операций. ГЛАВА V ОПЕРАЦИИ СТАТИСТИЧЕСКОЙ ОБРАБОТКИ ДАННЫХ, РЕАЛИЗОВАННЫЕ В ПАКЕТЕ АСТА В этой главе описаны операции статистической обработки матриц наблю¬ дений: элементарная статистика, распознавание образов, восстановление регрессии и другие операции. Более сложные варианты обработки данных будут рассмотрены в главе VI. § 1. СОСТАВЛЕНИЕ ОПИСАНИЙ РАБОТ ДЛЯ СТАТИСТИЧЕСКОЙ ОБРАБОТКИ ДАННЫХ Для того чтобы составить задание для программ пакета АСТА, пресле¬ дую щих цель выполнить некоторую операцию статистической обработки Данных, нужно описать используемые данные и указать алгоритм их обра¬ ботки. 73
Используемая матрица наблюдений может быть введена или сформи¬ рована в этом же задании. В противном случае матрица должна находиться в базе данных. Для того чтобы указать используемую матрицу наблюдений, достаточно задать имя или цифровой код подсемейства, которому она принадлежит. Если матрица наблюдений хранится в некотором разделе БД, то, кроме этого, в описание работы необходимо поместить предложение ЗАДАЧА, содержащее имя раздела. Очень часто обработке подвергается не вся матрица наблюдений, а толь¬ ко ее часть. Выбранную часть матрицы наблюдений можно указать несколь кими эквивалентными способами. Если используемая часть матрицы {а^ i = 1, / = 1, . . .,я} пред¬ ставляет собой блок {ац, i = k^, .к. . , k2; j - . , m2}, где 1 ^k2 < < /, 1 < < m2 < и, то удобно воспользоваться маской векторов МВ и маской переменных МГ1, задав fl, i = kx, . . . ,k2\ fl, j = . . . , m2 ; I МП(7) = О, в остальных случаях: l0, в остальных случаях. Если используются только те элементы матрицы наблюдений, которые стоят на пересечении заданных строк и столбцов, то, возможно, будет удоб¬ нее указать имена строк и столбцов с помощью списка имен векторов СИВВ и списка имен переменных СИПВ. Полное название суффикса В ВЗЯТЫХ. Если используется вся матрица наблюдений, кроме тех элементов, которые находятся в заданных строках и столбцах, то предпочтительнее перечислить исключенные строки и столбцы матрицы с помощью списков СИВН и СИПИ. Полное название суффикса Н - НЕ ВЗЯТЫХ. Вместо списков имен СИВВ, СИВН, СИПВ, СИПН можно использовать списки цифровых кодов СЦВВ, СЦВН, СЦПВ, СЦГ1Н. Наконец, с помощью логических функций ЛФВ или ЛФН можно вклю¬ чать или исключать строки матрицы, для которых выполняется условие, записанное в виде логической функции. Для многих алгоримов статистического анализа данных нужно задавать способ обработки каждой строки и каждого столбца используемой части матрицы наблюдений, например, с помощью масок МВ и МГ1. Если в некотором алгоритме реализовано к способов обработки строк матрицы наблюдений, то значение маски MB(z) = m, 1 означает, что i-я строка матрицы должна быть обработана m-м способом. Значения мв(о < 1 и MB(z) > к считаются эквивалентными значению MB(z) = 0, т.е. данная строка не обрабатывается. Аналогично используется маска перемен¬ ных МП. * Обычно значение MB(z) ~ 1 соответствует основному способу обработки, в частности, все векторы с MB(z) = 1 включаются в обучающую последов а- телъностъ для построения решающих правил. Значение MB(z) = 2 часто означает, что данный вектор используется для проверки результатов, полученных с помощью векторов, обработанных основным способом, например все векторы с MB(zj = 2 включаются в экзаменационную последо¬ вательность для проверки решающих правил. 74
Значение МВ(/) = 3 для некоторых алгоритмов указывает фиксирован¬ ные векторы, которые не могут быть исключены во время работы алгорит¬ ма, сокращающего длину обучающей выборки. Значения маски переменных МП(/) - 1 и 3 указывают независимые пе¬ ременные и фиксированные переменные соответственно. Более подробно интерпретация значений масок МВ и МП объяснена в описаниях операций статистической обработки данных, приведенных в остальных параграфах этой главы. Вместо того чтобы задавать значения MB(z) -тс помощью маски МВ, можно перечислить имена векторов, обрабатываемых m-м способом в спис¬ ках СИВО (для т - 1), СИВЭ (для т = 2) или СИВФ (для т = 3). Полные названия суффиксов О, Э, Ф - ОБУЧЕНИЕ, ЭКЗАМЕН, ФИКСИРОВАН¬ НЫХ. Для этой же цели могут быть использованы и списки цифровых кодов СЦВО, СЦВЭ, СЦВФ или логические функции ЛФО, ЛФЭ, ЛФФ. Аналогично вместо маски МП можно пользоваться списками имен или цифровых кодов переменных СИПО, СИПЭ, СИПФ, СЦПО, СЦПЭ, СЦПФ. Для некоторых алгоритмов необходимо задавать разбиение строк матри¬ цы наблюдений на классы. Номера классов, которым принадлежат строки матрицы наблюдений, можно указать с помощью вектора НОМЕРА КЛАССОВ. Значение НОКЛЦ) равно номеру класса, к которому отнесе¬ на i-я строка матрицы. Если один из столбцов целочисленной матрицы наблюдений содержит номера классов (соответствующая целочисленная переменная называется признаком класса), то вместо массива НОКЛ можно задать имя это¬ го столбца с помощью текстового вектора ИПКЛ, ИМЯ ПРИЗНА¬ КА КЛАССА. Цифровой код признака класса задается скаляром ЦПКЛ. Аналогично имя или цифровой код столбца действительной матрицы наблюдений, содержащего значения переменной регрессии, можно указать с помощью текстового вектора ИПРЕ, ИМЯ ПЕРЕМЕННОЙ РЕГРЕССИИ или скаляра ЦПРЕ. Значения признака класса можно временно изменить, задав целочислен¬ ный вектор МОДПКЛ, МОДИФИКАЦИЯ ПРИЗНАКА КЛАССА. В этом случае номер класса z-й строки матрицы наблюдений будет равен МОД ПКЛ(ПКЛЦ)) , где ПКЛ(У) - значение признака класса для z-й строки матрицы. Управление печатью результатов осуществляется с помощью суффиксов мнемокодов операций Т, К. Полные названия — ТАБЛИЦЫ, КАРТИНКИ. Идентификатор операции без суффиксов обычно соответствует Минималь¬ ной печати или отсутствию ее. Наличие суффикса Т означает, что результаты Работы алгоритма будут напечатаны в виде таблиц. Суффикс К задает Печать гисгрограмм, графиков или диаграмм. Идентификаторы некоторых операций могут содержать оба суффикса. Допустимые комбинации суффиксов и их конкретный смысл даны в °писаниях операций. Некоторые операции имеют входные параметры УП, ПИА (УПРАВЛЕ- НИЕ ПЕЧАТЬЮ, ПЕЧАТЬ НА ИТЕРАЦИЯХ АЛГОРИТМА), значения 75
которых определяют, какие из массивов-результатов должны быть напе¬ чатаны, а какие — нет. После сделанных общих замечаний перейдем к рассмотрению конкрет¬ ных операций статистической обработки данных. § 2. ЭЛЕМЕНТАРНЫЕ ОПЕРАЦИИ СТАТИСТИЧЕСКОЙ ОБРАБОТКИ ДАННЫХ После того как исходная информация введена и исправлена (см. гл. IV), выполняют несколько пробных вариантов расчетов. Вначале используют элементарные статистические операции. Пример 2.1. Вычисление выборочных средних и дисперсий для зада чи ИРИС ФИШЕРА. Полученные значения печатаются, но в БД не запоми¬ наются. HP; 3 = ИРИС ФИШЕРА; СМ = МН (ИСХ); СРЕДНИЕ И ДИСПЕРСИИ, ТАБЛИЦЫ, КАРТИНКИ; КР; Пример 2.2. Вычисление выборочных средних и дисперсий для раз¬ личных классов задачи ИРИС ФИШЕРА. Все приведенные описания ра¬ бот эквивалентны. HP; 3 = ИРИС ФИШЕРА; СМ = МН (ИСХ); СЦВВ = 1 А4; СДТК; СЦВВ = 51А4; СДТК; СЦВВ = 101 А4; СДТК; КР; HP; 3 = ИРИС ФИШЕРА; СМ = МН (ИСХ) ; МВ = Г"'У0 1 Г14; СДТК; МВ =@У() /51 1 114; СДТК; МВ = @ /У0 /101 1 П4;.СДТК; КР; HP; 3 = ИРИС ФИШЕРА; СМ = МН (ИСХ); СЦВН =51 А4 101 А4; СДТК; СЦВН = 1 А4 101 А4; СДТК; СЦВН = 1 А4 51 А4; СДТК; КР; Пример 2.3. В первой работе массивы, описывающие разбиение строк матрицы МН на группы, записываются в БД. Во второй работе два из них используются для операции СДТК. Полученные выборочные сред ние запоминаются в БД. HP; 3 = ИРИС ФИШЕРА; СМ = МН (ИСХ); СЦВВ(ИШ) = 1 А4; СЦВВ (ИР) = 51 А4; СЦВВ (ИВ) =101 А4; СМ = ' СЦВВ (ИЩ), СЦВВ (ИР), СЦВВ (ИВ)г; 3; КР; HP; 3 = ИРИС ФИШЕРА; СМ ='МН(ИСХ), СИВВ (ИЩ), СЗ, ДИ' ; СДТК; 3; СМ =' МН (ИСХ), СЦВВ (ИВ), СЗ, ДИ' ; СДТК; 3; КР; 76
рис. 5.1. Четыре подсемейства, описанные в примере 2.3 Во второй работе два вари¬ анта массива СРЕДНИЕ ЗНА¬ ЧЕНИЯ и два варианта мас¬ сива ДИСПЕРСИИ помеща¬ ются в два подсемейства (рис. 5.1). Пример 2.4. Вычисле¬ ние частот значений целочис¬ ленных переменных для за¬ дачи ДИАГНОСТИКА. HP; 3= ДИАГНОСТИКА; СМ = МН (АНДРЕЕВ): ЧАСТОТЫ. ТАБЛИЦЫ, КАРТИНКИ; КР; Пример 2.5. Вычисле¬ ние часто! значений целочис¬ ленных переменных для задачи ДИАГНОСТИКА в двух разных классах. HP; 3 -ДИАГНОСТИКА; СМ = МН (АНДРЕЕВ) ; ИМЯ ПРИЗНАКА КЛАССА - ПОЛ; ЧТК; КР; Пример 2.6. Вычисление частот и коэффициентов информативности для нескольких вариантов разбиения на классы строк матрицы наблю¬ дений задачи ДИАГНОСТИКА. HP; 3 - ДИАГНОСТИКА; СМ = МН (АНДРЕЕВ); НОКЛ-СУ1 /ПЕТРОВ Б.В.. 2/I1FTPOBA Э.Ю.. 2; ЧИГК; ИПКЛ = ОСНОВНОЕ ЗАБОЛЕВАНИЕ; ЧИТК; ИПКЛ - ГРУППА КРОВИ; ЧИТК; МОДПКЛ - 1 1 2 2; ЧИТК; МОДИФИКАЦИЯ ПРИЗНАКА КЛАССА - 1 2 2 2; ЧИТК; КР; Используется пять вариантов разбиения строк матрицы МН на классы: 1) к первому классу отнесены все строки МН} кроме строк с именами ПЕ:ТРОВ Б.В. и ПЕТРОВА Э.Ю., которые отнесены ко второму классу; 2) разбиение по основному заболеванию на три класса: рак желудка, язва желудка, здоров; 3) разбиение по группе крови на 4 класса: I, II, III, IV группа крови; 4) разбиение по группе крови на два класса: I или 11, III или IV группа крови; 5) разбиение по группе крови на два класса: I, II или III или IV группа крови. Пример 2.7. Вычисление коэффициентов информативности пере¬ менных по частотам значений. Вводятся частоты значений в двух классах трех целочисленных переменных, имеющих две, три и четыре градации. Затем вычисляются коэффициенты информативности. ПР; ЧА -С ФМ2. ///1//1/1, 0 3 //,4 3 ///2//, I 2 //, 1 2 //, 2 2 ///3//, 2 1 //, 0 1 //, 0 2 //, 2 2; ИЧ Г; КР; 77
Пример 2.8. Вычисление частот конъюнкций для задачи ДИАГНО¬ СТИКА. Вычисляются частоты следующих конъюнкций: 1) семейное положение — холост, основное заболевание — рак желудка; 2) пол — мужской„ группа крови — II, основное заболевание — язва желудка. Затем определяются частоты для всех конъюнкций из двух множеств. Первое множество содержит все конъюнкции вида ’’семейное положение, группа крови, пол” и ’’семейное положение, основное заболевание, пол”. Второе множество содержит все парные конъюнкции вида ”пол, семей¬ ное положение”, ”пол, группа крови”, ’’семейное положение, группа крови”, ’’основное заболевание, пол”, ’’основное заболевание, семейное по¬ ложение”, основное заболевание, группа крови”. Далее вычисляются частоты строк МН, удовлетворяющих условиям, которые заданы логическими функциями: первое условие - неженатый мужчина или замужняя женщина; второе условие -- мужчина или жен¬ щина, имеющая кровь не IV группы. ИР; 3 -ДИАГНОСТИКА; СМ - МН (АНДРЕЕВ); ИМЯ ПРИЗНАКА КЛАССА = ОСНОВНОЕ ЗАБОЛЕВАНИЕ: СПИСОК КОНЪЮНКЦИЙ-///КОН 1//ЧЛЕН1 , 1,2 1 //ЧЛЕН2,4Г ///КОН2//, 1 Г /7, 2 2 //ЧЛЕН 3, 4 2; СПИСОК МНОЖЕСТВ КОНЪЮНКЦИЙ = //./.\1Н1//ЧЛ1/1, 2 //ЧЛ2, 3 4 //ЧЛ 3, I /// МН2//, /. 1 А4 //, 1 АЗ: ЛОГИЧЕСКИЕ ФУНКЦИИ = //, /, ' (/ПОЛ = 1 И /СЕМЕЙНОЕ ПОЛОЖЕ ’ ' НИЕ -1,3, 4) ИЛИ (/ПОЛ = 2 И /СЕМЕЙНОЕ ПОЛОЖЕНИЕ - 2)' /А ' /ПОЛ = 1 ИЛИ /ГРУППА КРОВИ - 1:3' ; • КОНТ; КР; Массив СМКОН в этом примере может быть задан следующим экви¬ валентным способом: СМКОН = ///, //, 2 //, - 2 - 1 II, 1 ///, //, 0 //, - 4; Множество всех парных и всех тройных конъюнкций задается так: СМКОН = ///, //, /, 0 //, 0 ///,//, О//, О //, 0; Приведем краткие описания операций ГИСТ, ДИАГР, И, ИД, ИЧ, КОВМ, КОРМ, КОНТ, сд, ч, чд, чи, чид. ГИСТ, ГИСТОГРАММА (К, ТК)1^. Формирование гистограммы рас¬ пределения значений массива данных (вектора или матрицы) . Если входной массив — вектор, то строится гистограмма распределения значений компонент этого вектора в виде матрицы символов размером ВКХШК. Используются значения.отмеченные единицей в маске МВ. Номера классов заданы в массиве НОКЛ. Если массив НОКЛ не задан, то считает¬ ся, что все значения относятся к одному классу. Разбиение оси абсцисс на интервалы указывается с помощью массива ГР. Параметр КИНТ при этом не используется. Если массив ГР не задан, то ось абсцисс разбивает¬ ся на КИНТ интервалов. Если входной массив - матрица, то для каждого столбца строится отдельная гистограмма. В скобках перечислены возможные суффиксы операций. 78
Границы интервалов оси абсцисс и частоты попадания значений в ин¬ тервалы запоминаются в массивах ГИГИСТ и ЧАГИСТ. Мнемокоды полу¬ ченных гистограмм образуются добавлением символов Г или ГИ слева к мнемокоду входного массива. Значения параметров, принятые по умолчанию: КИНТ = 5, ВК = 20, шк = 40, НПОЗ = 1, ВСТР = 20, ШСТР = 40, КОДУП = ' 0' . Печать резуль- татов: ГИСТ - без печати, ГИСТК - печать гистрограмм, ГИСТТК - пе¬ чать гистограмм и массивов ГИГИСТ, ЧАГИСТ. ДИАГР, ДИАГРАММА РАССЕЯНИЯ (К, ТК). Построение диаграммы рассеяния. На диаграмме изображаются точки (х/, yz), где xz - значение элемента массива, указанного в первой строке матрицы СМ, у, — значение элемен¬ та массива, указанного во второй строке СМ. Значения xz выбираются из строк или столбцов, заданных с помощью имен И1Х, И2Х или цифровых кодов Ц1Х, Ц2Х. Значения yz выбираются из строк или столбцов, задан¬ ных с помощью И1У, И2У, Ц1У, Ц2У. Если параметры И IX, И2Х, И 1 У, И2У, Ц1Х, Ц2Х, Ц1У,Ц2У не заданы, то по умолчанию полагается, что Ц1X = 1 иЦ 1У- 1. Номера классов для пар (xz, yz) содержатся в массиве НОКЛ. Если массив НОКЛ не задан, то считается, что все пары - одного класса. Пара (xi> У?), принадлежащая А-му классу, изображается символом СС(/<). Если значения xz и yz содержатся в одном и том же массиве, то для операции достаточно указывать только одну строку,матрицы СМ. Все строки и столбцы диаграммы пронумерованы. В массиве КООР содержатся пары ’’номер строки диаграммы, номер столбца диаграммы” для всех изображенных точек. Значения параметров, принятые по умолчанию: ВК = 20, ШК = 40, СС = = ' 1234567890 . . . 0' , Ц 1X = 1, Ц1 У = 1. Печать результатов: ДИАГР- без печати, ДИАГРК — печать диаграммы рассеяния, ДИАГРТК — печать диаграммы и массива КООР. И, ИНФОРМАТИВНОСТЬ (Т). Вычисление коэффициентов информа¬ тивности целочисленных переменных по значениям матрицы наблю¬ дений МН. Коэффициент информативности оценивает количество информации о принадлежности вектора наблюдений к одному из к классов, которое содержится в значении целочиелейной переменной. Коэффициент инфор¬ мативности переменной, принимающей значения 1, 2, 3, . . . , т, вычис¬ ляется по форхмуле [16] : к J= -- I z — 1 1; + а I,- + а — log, -L- ■ . L+k-а L + к - a к т + z s /=1 ]- li+a-т li + a> фц + a -■ log*. L + к -a Lf +а-т lj + a L + a • т L+k-a к m - J fij + a где fij количество значений переменной, равных j , в векторах z-ro класса, к I i — количество векторов z-ro класса, L = S I г- ,а — параметр. i = 1 79
Коэффициенты информативности КФИ вычисляются для переменных, отмеченных значениями 1 и 3 маски МП. Используются строки матрицы МП, указанные значениями 1 и 3 маски МВ. Затем вычисляются коли¬ чества векторов в классах КВКЛ. Номера классов для строк матрицы МН заданы в массиве НОКЛ или определяются по признаку класса, имя которого задано в ИПКЛ или ЦИКЛ. Значения параметров, принятые по умолчанию: А = 1, ПРОЧ = ПРОП, МОДПКЛ = 1,2, 3, . . . Печать результатов: И -- без печати, ИТ - печать массивов КФИ, КВКЛ. ИД, ИНФОРМАТИВНОСТЬ, ДЕЙСТВИТЕЛЬНЫЕ ПЕРЕМЕННЫЕ (Т). Вычисление коэффициентов информативности действительных перемен¬ ных, значения которых записаны в столбцах матрицы наблюдений МН, с преобразованием действительных переменных в целочисленные. Эк¬ вивалентно выполнению операций ГРДЦ и И. ИЧ, ИНФОРМАТИВНОСТЬ ПО ЧАСТОТАМ (Т). Вычисление коэф¬ фициентов информативности целочисленных переменных по частотам значений этих’ переменных в разных классах. Операция аналогична опе¬ рации И, но использует не матрицу наблюдений МН, а массив частот ЧА. КОВМ, МАТРИЦА КОВАРИАЦИЙ (Т). Вычисление коэффициентов ковариации компонент случайного вектора, реализации которого запи¬ саны в строках матрицы наблюдений МИ. Коэффициенты ковариации вычисляются для переменных, указанных значениями 1 и'З маски МП. Используются строки матрицы МН, отмеченные значениями 1 и 3 мае ки МВ. Прочерки в МН при ПРОЧ = ПРОП пропускаются, а при ПРОЧ = = СРЕД заменяются на средние значения СЗ. Количества векторов, ис¬ пользованных при вычислении каждого коэффициента, образуют матри¬ цу КВКВ. Вычисления производятся с обычной (ТОф-1 =' 1) или двойной точностью (ТОЧН - 2). Значения параметров, принятые по умолчанию: ТОЧН - 1, ПРОЧ = Г1РОП. Печать результатов: КОВМ - без печати, КОВМТ — печать массивов КВ и КВКВ. КОРМ, МАТРИЦА КОРРЕЛЯЦИЙ (Т). Вычисление коэффициентов корреляции компонент случайного, вектора, реализации которого запи¬ саны в строках матрицы ^наблюдений МН. Выходными данными являются коэффициенты корреляции КР, матрица количеств векторов, использо¬ ванных при вычислении каждого коэффициента, и матрица дисперсий коэффициентов корреляции, рассчитанная по формуле [29] : ДИКФКР (/,/) = 1 - КР(/, /)2 VkbkpoTT В остальном описание аналогично описанию операции КОВМ. КОНТ, ЧАСТОТЫ КОНЪЮНКЦИЙ. Вычисление частот конъюнкций, т.е. логических функций вида ’’значение столбца . . . матрицы МН равно . . И значение столбца . . . матрицы МН равно . . . И . . .”, в разных классах Для вычисления частот конъюнкций, т.е. количеств строк матрицы наблюдений МН, для которых результат конъюнкции есть ИСТИНА, ис¬ пользуются строки МН, указанные значениями 1 и 3 маски МВ. Частоты вычисляются для каждой конъюнкции из множества конъюнкций, опи- 80
санного массивами СКОН и СМКОН, а также для каждой логической функ¬ ции из матрицы ЛФ. Номера классов для строк матрицы МИ заданы в массиве Н01<Л или определяются по признаку класса, указанному с по¬ мощью ИПКЛ или ЦИКЛ. Параметры ЧАМП, ЧОМН, РАЗЧ, СТМН, ХИМН предназначены для выключения печати информации о тех конъюнк¬ циях, частоты которых в разных классах мало отличаются друг от друга. Значения параметров, принятые по умолчанию: ЧАМН = 1, ЧОМН = О, РАЗЧ = О, СТМН = О, ХИМН = О, КОДУН = '0 ' , ВСТР = 60, ПОРК = 5, ККЛМК =5, ОРМ = 100, ОРМ1 = 100. СР, СРЕДНИЕ И ДИСПЕРСИИ (Т, К, ТК). Вычисление выборочных средних и дисперсий компонент случайного вектора, реализации которого записаны в строках матрицы наблюдений МН. Выборочные средние значения СЗ и выборочные дисперсии ДИ вычис¬ ляются для столбцов матрицы МН, отмеченных значениями 1 и 3 маски МП. Используются строки матрицы МН, указанные значениями 1 и 3 мас¬ ки МВ. Кроме тою, для каждого столбца вычисляется количество строк, не содержащих прочерков в этом столбце, — массив КВБП. Если задан вектор НОКЛ, го средние и дисперсии вычисляются для каждого класса. Печать результатов: СД — без печати, СДТ — печать массивов СЗ, ДИ и КВБП, СДК - печать гистограмм распределения значений столб¬ цов матрицы МН. Ч, ЧАСТОТЫ (Т, К, ТК). Вычисление частот значений целочисленнных переменных, записанных в столбцах матрицы наблюдений МН. Вычисляются абсолютные и относительные частоты ЧА, ЧО значений столбцов матрицы МН, указанных элементами 1 и 3 маски МП. Используют¬ ся строки МН, отмеченные значениями 1 и 3 маски МВ. Номера классов для строк МН содержатся в массиве НОКЛ либо определяются с помощью признака класса, указанного в ИПКЛ или ЦИКЛ. Кроме частот ЧА, ЧО, вычисляется количество строк матрицы МН, отнесенных к каждому клас¬ су — вектор КВКЛ. Печать результатов: Ч - без печати, ЧТ — печать массивов ЧА, ЧО, КВКЛ; ЧК — печать гистограмм распределения значений переменных. ЧД, ЧАСТОТЫ, ДЕЙСТВИТЕЛЬНЫЕ ПЕРЕМЕННЫЕ (Т, К, ТК) . Преоб¬ разование действительных переменных, значения которых записаны в столбцах матрицы наблюдений МН, в целочисленные и вычисление час¬ тот значений полученных целочисленных переменных. Эквивалентно вы¬ полнению операций ГРДЦ и Ч. ЧИ, ЧАСТОТЫ И ИНФОРМАТИВНОСТЬ (Т, К, ТК). Вычисление частот значений и коэффициентов информативности целочисленных переменных. Эквивалентно выполнению операций Ч и И. ЧИД, ЧАСТОТЫ И ИНФОРМАТИВНОСТЬ, ДЕЙСТВИТЕЛЬНЫЕ ПЕРЕ¬ МЕННЫЕ (Т, К, ТК). Вычисление частот значений и коэффициентов ин¬ формативности целочисленных переменных с преобразованием дейст¬ вительных переменных в целочисленные. Эквивалентно выполнению опе¬ раций ГРДЦ, Ч и И. Опишем структуру и назначение массивов информации А, ВК, ГИГИСТ, гимн, ДИ, ДИАГР, ДИКФР, ИКЛ, ИПКЛ, КВ, КВБП. КВКВ, КВКЛ, КВКР, КИНТ, ККЛМК, КООР, КР, КФИ, МОДПКЛ, НОКЛ, НПОЗ, ОРМ, ОРМ1, 6. В,А. Кощеев
ПОРЕ, ПОРЦ, ПРОЧ, РАЗЧ. СВЕВ, СВЕР, СЗ, СЕОН, СМЕОН, СС, СТИН. СЧЕВ, СЧЕР, ТОЧИ, ХИМН, ЦГ1ЕЛ, ЧА, ЧАГИСТ, ЧАМН, 4Q;“4OMH, ШЕ. А, ПАРАМЕТР А. Действительное число, равное параметру а в форму лах для коэффициентов информативности и коэффициентов байесовскою решающего правила (см. описание операций И и РПБ) . ВК, ВЫСОТА КАРТИНКИ. Целое число х, 10 < 120, равное коли честву строк АЦПУ, занимаемых картинкой. Г'ИГИСТ, ГРАНИЦЫ ИНТЕРВАЛОВ НА ГИСТОГРАММЕ. Дейсгвитель ная матрица х(1: /?1, 1:и2), содержащая верхние границы интервалов, на которые разбита ось абсцисс гистограммы (Hi - наибольшее коли- чество интервалов в гистограммах, п2 — количество гистограмм) . ГИМН, ГИСТОГРАММЫ МАТРИЦЫ НАБЛЮДЕНИЙ. Текстовая трех мерная таблица х(1 \пх, 1 \пг> 1 :п3) , содержащая гистограммы распреде¬ ления значений столбцов матрицы наблюдений МН (nj — размер гисто¬ граммы по горизонтали, п2 — размер гистограммы по вертикали, и3 - количество гистограмм) . Имена, полные названия и цифровые коды (1,2)- матриц трехмерной таблицы ГИМН содержатся в массивах ИП, ПНП и ЦГ1. ДИ, ДИСПЕРСИИ. Действительная матрица х(1:д1} 1:лг2), содержа щая квадратные корни из выборочных дисперсий значений, которые на¬ ходятся в столбцах матрицы наблюдений МН. Дисперсии вычисляются для каждою из классов — количество классов, п2 — количество столбцов матрицы МН). Имена, полные названия и цифровые коды строк матрицы ДИ содержатся в массивах ИП, ПНП и ЦП. ДИКФКР, ДИСПЕРСИИ КОЭФФИЦИЕНТОВ КОРРЕЛЯЦИИ. Действи¬ тельная квадратная симметричная матрица х{\'.П\, 1:hi), элемент x(i. j) которой равен квадратному корню из оценки дисперсии выборочного коэффициента корреляции — количество столбцов матрицы МН). Имена, полные названия и цифровые коды строк и столбцов матрицы ДИКФКР содержатся в массивах ИГ1, ПНП и ЦП. ДИАГР, ДИАГРАММА РАССЕЯНИЯ. Текстовая матрица х(1:«i, 1:н2) , содержащая диаграмму рассеяния, т.е. двумерное изображение проек ции на заданную плоскость множества реализаций /z-мерного случайного вектора (строк матрицы наблюдений МН). Здесь п\ - размер диаграм¬ мы по горизонтали, п2 — размер диаграммы по вертикали) . ИКЛ, ИМЕНА КЛАССОВ. Текстовая матрица x(l:/ii, 1: п2), содер¬ жащая имена классов, на которые разбиваются строки матрицы наблю¬ дений МН (/?! — длина самого длинного имени, п2 - количество клас¬ сов) . Имена строк матрицы ИКЛ совпадают с именами классов. ИГ1КЛ, ИМЯ ПРИЗНАКА КЛАССА. Текстовый вектор, содержащий имя или полное название целочисленной переменной, выбранной в ка¬ честве признака класса. Значение признака класса в z-й строке матрицы наблюдений МН равно номеру класса z-ro вектора наблюдений. КВ, МАТРИЦА КОВАРИАЦИЙ. Действительная квадратная симметрич¬ ная матрица х(1: /?! 9 l:«i), содержащая выборочные коэффициенты ко¬ вариации компонент случайного вектора, реализации которого находятся в строках матрицы наблюдений МН (гц — количество столбцов матрицы МН). Имена, полные названия и цифровые коды строк и столбцов матри¬ цы КВ содержатся в массивах ИП, ПНГ1 и ЦП. 82
КВБП, КОЛИЧЕСТВА ВЕКТОРОВ БЕЗ ПРОЧЕРКОВ. Целочисленный вектор х(1:Hi), компонента x(i) которого равна количеству строк матри¬ цы наблюдений МН, не содержащих прочерков в z-м столбце (z = 1, . . . , - количество столбцов матрицы МН). Имена, полные названия и цифровые коды компонент вектора КВБП содержатся в массивах ИП, ПНП и ЦП. КВКВ, КОЛИЧЕСТВА ВЕКТОРОВ ДЛЯ МАТРИЦЫ КОВАРИАЦИЙ. Целочисленная квадратная симметричная матрица х(1: , 1: пг) , элемент x(z, /) которой равен количеству пар значений z-й и /-й компонент век¬ тора матрицы наблюдений МН, использованных для вычисления коэф¬ фициента КВ/7 (z = 1, . . . , п 1; j ~ 1, . . . , п i, пt — количество ' столбцов матрицы МН). Имена, полные названия и цифровые коды строк и столб¬ цов матрицы КВКВ содержатся в массивах ИГ1, ПНП и ЦП. КВКЛ, КОЛИЧЕСТВА ВЕКТОРОВ В КЛАССАХ. Целочисленный вектор x(l:z?i), компонента, х (г) которого равна количеству векторов, относя¬ щихся к z-му классу (z = 1, п\ — количество классов). Имена компонент вектора КВКЛ содержатся в массиве ИКЛ. КВКР, КОЛИЧЕСТВА ВЕКТОРОВ ДЛЯ МАТРИЦЫ КОРРЕЛЯЦИЙ. Аналог матрицы КВКВ для матрицы корреляций КР. КИНТ, КОЛИЧЕСТВО ИНТЕРВАЛОВ. Целое число х, х > 1, равное количеству интервалов гистограммы. ККЛМК, МАКСИМАЛЬНОЕ КОЛИЧЕСТВО КЛАССОВ. Целое число х, х > 1, равное максимальному количеству классов. КООР, КООРДИНАТЫ ТОЧЕК. Целочисленная матрица х(1:2, 1 :п2), элементы х(1, z) и х(2, z) которой содержат координаты z-й точки (стро¬ ки матрицы наблюдений МН), изображенной на диаграмме рассеяния ДИАГР (z = 1, . . . , и2, п2 — количество строк матрицы МН). Здесь х(1, z) — деление на оси обсцисс, х(2, z) — деление на оси ординат. Имена и цифровые коды строк матрицы КООР содержатся в массивах ИВ и ЦВ. KF, МАТРИЦА КОРРЕЛЯЦИЙ. Действительная квадратная симметрич¬ ная матрица х(\.пх. 1 :п}), содержащая выборочные коэффициенты корреляции компонент случайного вектора, реализации которого нахо¬ дятся в строках матрицы наблюдений МН (/? i -- количество столбцов матрицы МН). Имена, полные названия и цифровые коды строк и столб¬ цов матрицы КР содержатся в массивах ИП, ПНП и ЦП. , КФИ, КОЭФФИЦИЕНТЫ ИНФОРМАТИВНОСТИ. Действительный вектор х(1 содержащий коэффициенты информативности целочисленных переменных (гц - количество столбцов матрицы МН). Имена, полные наз¬ вания и цифровые коды компонент вектора КФИ содержатся в массивах ИП, ПНП и ЦП. МОДПКЛ, МОДИФИКАЦИЯ ПРИЗНАКА КЛАССА. Целочисленный век¬ тор х(1 : ), с помощью которого осуществляется замена номеров клас¬ сов, определенных по признаку класса (п} -- количество градаций в приз¬ наке класса): номер класса z-й строки матрицы МН равен х(/), где j - значение признака класса для z-й строки матрицы' Mil. НОКЛ, НОМЕРА КЛАССОВ. Целочисленный вектор, координата x(z) Которого равна номеру класса, к которому отнесена z-я строка матрицы Наблюдений МН. 6* 83
НПОЗ, НОМЕР ПОЗИЦИИ. Целое число х, 1 <х < 120, равное номеру позиции строки АЦПУ, начиная с которой печатаются данные. ОРМ, ОБЪЕМ РАБОЧЕГО МАССИВА (1). Целое число, равное объему рабочего массива в байтах, который используется при выполнении операции. ПОРК, ПОРЯДОК КОНЪЮНКЦИИ. Целое число, равное количеству чле¬ нов вида ’’значение переменной . . . равно ...” в конъюнкции. 11ОРЦ, ПОРЦИЯ. Целое число, равное объему печатаемой порции мас¬ сива данных (количество строк АЦПУ) . ПРОЧ, ПРОЧЕРКИ. Т екстовая константа, вид которой определяет спо¬ соб обработки ’’прочерков” (отсутствующих наблюдений) в матрице наблюдений МН: при ПРОЧ = ПРОН ’’прочерки” пропускаются, а при ПРОЧ = СРЕД - заменяются на соответствующие средние значения. РАЗЧ, РАЗНОСТЬ ЧАСТОТ. Действительное число х, 0 <х < 100, зна¬ чение которого управляет печатью информации о конъюнкциях: инфор¬ мация печатается только в том случае, если разность частот конъюнкций хотя бы в одной паре классов будет больше или равна числу х (в %). СВКВ, СОБСТВЕННЫЕ ВЕКТОРЫ МАТРИЦЫ КОВАРИАЦИЙ. Дей¬ ствительная квадратная матрица х(1 : , 1 в строках которой со¬ держатся собственные векторы матрицы ковариаций КВ, упорядоченные по убыванию собственных чисел {пх количество столбцов матрицы КВ) Имена, полные названия и цифровые коды столбцов матрицы СВКВ содер¬ жатся в массивах ИП, ПНПиЦП. СВКР, СОБСТВЕННЫЕ ВЕКТОРЫ МАТРИЦЫ КОРРЕЛЯЦИЙ. Аналог матрицы СВКВ для матрицы корреляций КР. СЗ, СРЕДНИЕ ЗНАЧЕНИЯ. Действительная матрица х(1 1 : п2). содержащая выборочные средние, т.е. средние значения чисел, которые находятся в столбцах матрицы наблюдений МН. Средние значения вычис¬ ляются для каждого из п} классов (п2 -- количество столбцов матрицы МН). Имена, полные названия и цифровые коды строк матрицы СЗ со¬ держатся в массивах ИП, ПНИ и ЦП, а имена столбцов - в массиве ИКЛ. СКОП, СПИСОК КОНЪЮНКЦИЙ. Целочисленная трехмерная таблица х(1 : 2, 1 : /?2 , 1 : Из), содержащая список конъюнкций (и2 - максималь¬ ный порядок конъюнкций в списке, и3 количество коньюнкций в спис¬ ке): элемент х(1, у, /с) содержит цифровой код переменной, а элемент х(2, у, Л) значение этой переменной. Пара {х (1, у, £) , х (2. у, £)} опи¬ сывает у-й член А>ой конъюнкции вида ’’значение переменной . . . равно . . . ... И значение переменной . . . равно . . . И . . .”. СМКОН. СПИСОК МНОЖЕСТВ КОНЪЮНКЦИЙ. Целочисленная трех мерная таблица х(1 : Hj , 1 : п2, 1 :и3). содержащая список множеств конъюнкций - длина самого длинного списка цифровых кодов пе¬ ременных, которые используются в конъюнкциях. п2 максимальный порядок конъюнкций во всех множествах. количество множеств коньюнкций в списке). Строка х(1 : к) содержит список цифровых кодов переменных, которые входят по очереди в у-й член конъюнкции £-го множества '’значение переменной . . . равно . . .”. Значениями пере¬ менной. входящей в у-й член конъюнкции, служат по очереди все возмож¬ ные значения, встречающиеся в столбце матрицы наблюдений, который соответствует этой переменной. 84
Если строка х(1 к) содержит одно число, равное нулю, то это равносильно перечислению цифровых кодов всех столбцов матрицы МН. Если все цифровые коды в строке х(1 \nx,j,k) взяты со знаком минус, то это равносильно перечислению цифровых кодов всех столбцов матри¬ цы МН, за исключением столбцов с цифровыми кодами, указанными в строке со знаком минус. СС, СПИСОК СИМВОЛОВ. Текстовый вектор х(1 :И]), z-я компонен¬ та которого содержит символ, с помощью которого на картинке изобра¬ жаются точки, принадлежащие z-му классу (п} — количество классов). Имена компонент вектора СС содержатся в массиве ИКЛ. СТМН, КРИТЕРИЙ СТЬЮДЕНТА. Действительное число х, значение которого управляет печатью информации о конъюнкциях в том случае, если количество классов равно двум: информация печатается только тог¬ да, когда значение критерия Стьюдента для проверки гипотезы о равен¬ стве частот в двух классах окажется больше или равно числу х. СЧКВ, СОБСТВЕННЫЕ ЧИСЛА МАТРИЦЫ КОВАРИАЦИИ. Действи¬ тельный вектор х(1 содержащий собственные числа матрицы ко¬ вариации КВ, расположенные в порядке убывания (пх — количество столб¬ цов матрицы КВ). СЧКР. СОБСТВЕННЫЕ ЧИСЛА МАТРИЦЫ КОРРЕЛЯЦИЙ. Аналог вектора СЧКВ для матрицы корреляций КР. ТОЧН, ТОЧНОСТЬ. Целое число, равное 1 (обычная точность) или 2 (двойная точность) , задающее точность вычислений. ХИМ И, КРИТЕРИЙ ХИ КВАДРАТ. Действительное число х, значение которого управляет печатью информации о конъюнкциях в том случае, если количество классов больше двух: информация печатается только тогда, когда значение критерия х2 для проверки гипотезы о равенстве частот во всех классах окажется больше или равно х. ЦИКЛ, ЦИФРОВОЙ КОД ПРИЗНАКА КЛАССА. Целое число, равное цифровому коду целочисленной переменной, выбранной в качестве приз¬ нака класса (см. также ИПКЛ). ЧА. АБС ОЛЮТНЫЕ ЧАСТОТЫ. Целочислення трехмерная таблица х(1 :/?!, 1 :/72, 1 :и3), элемент х (/, /, к) которой содержит количество строк матрицы наблюдений МН /-го класса, в которых значение Л-го столб¬ ца равно j - количество классов, п2 - максимальное количество градаций в переменных, - количество столбцов матрицы МН). Имена, полные названия и цифровые коды (1, 2)-матриц трехмерной таблицы ЧА содержатся в массивах ИП, ПИП и ЦП, а имена (2, 3)-матриц - в мас¬ сиве ИКЛ. ЧАМН, АБСОЛЮТНАЯ ЧАС ТО I А. Целое число х,управляющее печатью информации о конъюнкциях: информация печатается только в том случае, если значение абсолютной частоты конъюнкции хотя бы в одном классе окажется больше или равно числу х. ЧА ГИСТ, ЧАСТОТЫ НА ГИСТОГРАММЕ. Действительная трехмерная таблица х (1 ://5. 1 : п2, 1 :л3). элемент x(z, /, А) который равен высо¬ те /’-го столбика /-го класса А-й гистограммы, т.е. частоте (в 7<) попадания значений, относящихся к /-му классу, в z-й интервал А:-й гистограммы наибольшее количество интервалов в гистограммах. п2 ~ количест¬ во классов, - количество гистограмм). 85
40, ОТНОСИТЕЛЬНЫЕ ЧАСТОТЫ. Действительная трехмерная таб¬ лица, содержащая относительные частоты (в %), соответствующие абсо¬ лютным частотам ЧА. Аналог таблицы ЧА. ЧОМН, ОТНОСИТЕЛЬНАЯ ЧАСТОТА. Действительное число х, 0 <х < < 100, управляющее печатью информации о конъюнкциях: информация печатается только в том случае, если значение относительной частоты конъ¬ юнкции хотя бы в одном классе окажется больше или равно числу х. ШК, ШИРИНА КАРТИНКИ. Целое число х, 1 <х < 120, равное количест¬ ву позиций АЦПУ по горизонтали, в которых печатается картинка. § 3. РАСПОЗНАВАНИЕ ОБРАЗОВ В тех случаях, когда нужно научиться классифицировать объекты, описываемые строками матрицы наблюдений, прибегают к методам тео¬ рии распознавания образов. С помощью этих методов изучается возмож¬ ность разделения множества объектов на группы (классы) объектов, сходных между собой. В пакете АСТА реализованы следующие алгоритмы распознавания образов: 1) построение кусочно постоянных решающих правил; 2) построение байесовских решающих правил; 3) группа алгоритмов ’’обобщенный портрет”, реализующих метод структурной минимизации риска в классе линейных, кусочно линейных и локально линейных решающих правил; 4) построение дискриминантной функции с помощью процедуры ’’сколь¬ зящий контроль”. Пример 3.1. Построение байесовского решающего правила для задачи ДИАГНОСТИКА. НАЧАЛО РАБОТЫ; ЗАДАЧА = ДИАГНОСТИКА; СЕМЕЙСТВА МАССИВОВ = МАТРИЦА НАБЛЮДЕНИЙ (АНДРЕЕВ); ИМЯ ПРИЗНАКА КЛАССА - ОСНОВНОЕ ЗАБОЛЕВАНИЕ; РЕШАЮЩЕЕ ПРАВИЛО ПО БАЙЕСУ, ТАБЛИЦЫ, КАРТИНКИ: КОНЕЦ РАБОТЫ; В этом примере все строки матрицы наблюдений включены в обучающую выборку. Печатаются коэффициенты решающего правила, точность пра¬ вила, определенная по обучающей выборке (т.е. количество совпадений классов строк матрицы наблюдений, вычисленных с помощью построен¬ ного решающего правила, с классами строк, заданными в признаке ОСНОВ¬ НОЕ ЗАБОЛЕВАНИЕ), и гистограмма распределения сумм коэффициен¬ тов решающего правила, полученных для строк матрицы МН. Пример 3.2. Решение задачи предыдущего примера с проведением экзамена. Переменная СЕМЕЙНОЕ ПОЛОЖЕНИЕ исключена. ПР; 3 = ДИАГНОСТИКА; СМ - МН (АНДРЕЕВ); ИГ1КЛ ОСНОВНОЕ ЗАБОЛЕВАНИЕ; С ИВЭ - ^ИТС. СИДОРОВ В.Г.. ПЕТРОВА Э.Ю.; СИНИ =СЕМЕЙНОЕ ПОЛОЖЕНИЕ; РГ1БТК; КР; 86
Вместо массива СИВЭ можно было ввести массив МВ: МВ =1 1 21 1 2 1 1; Или, что эквивалентно, МВ - 1 1 2 Г П; Приведем краткие описания операций распознавания образов ДФ, РПБ, РГ1КП. РГ1ФОГ1, ЭБ. ДФ, ДИСКРИМИНАНТНАЯ ФУНКЦИЯ (Т, К, ТК). Построение гребне¬ вой оценки дискриминантной функции. Вычисляется гребневая оценка КФДФ дискриминантной функции [2]. Используются векторы обучающей последовательности и переменные, отмеченные значениями 1 и 3 маски МП. Параметр ПРОЧ задает способ обработки прочерков в матрице наблюдений МН. При ССЧ = НЕТ сво¬ бодный член в выражении для дискриминантной функции отсутствует. При ПОИСК Г - ДА отыскивается оптимальное значение параметра ре¬ гуляризации 7. Отрезок, содержащий это значение, разбивается на КИНТ ин¬ тервалов. Поиск заканчивается, если длина отрезка становится меньше ЭПСИЛОН. При ПОИСК Г = НЕТ гребневая оценка строится для фиксированного значения параметра регуляризации, равного Г. Значения параметров, принятые по умолчанию: УП = 1, ПОИСК I' - ДА, Г = О, КИНГ - 50, ЭПСИЛОН - 0,001, ССЧ - ДА, ПРОЧ - ПРОН. Печать результатов: ДФ - без печати, ДФТ печать массивов РЭДФ, КФДФ. СЧЛДФ (при УП > 1), ОКЛДФ (при УП > 2); ДФК - печать гистограммы распределения значений дискриминантной функции для векторов разных классов. РПБ, РЕШАЮЩЕЕ ПРАВИЛО ПО БАЙЕСУ (Т, К, ТК). Вычисление коэффициентов байесовского решающего рравила. Коэффициент решающего правила для у'-й градации /-го признака в классе А'равен [10] где - количество векторов А-го класса, у которых значение /-го приз¬ нака равно /, //д - количество векторов А-го класса, не имеющих про¬ черка в /-м признаке. rz - количество градаций /-го признака, а пара¬ метр алгоритма, [а*] - целая часть числа х. Коэффициенты байесовского решающего правила КФРПБ. ПОРОГЕ вычисляются для переменных, указанных значениями 1 и 3 маски МГЕ Используются векторы обучающей последовательности. Номера классов Для строк матрицы МН заданы в массиве НОКЛ или определяются по признаку класса, указанному в ИПКЛ или ЦГ1КЛ. Затем выполняется экзамен полученного решающего правила - опе¬ рация ЭБ. Значения параметров, принятые по умолчанию: А = 1, КОДУII = 'О', ВСТР = 60. УП = 1, АВЕР = 1,1,1,..., МОДПКЛ = 1, 2, 3,. . . Печать ре- зультаюв: РПБ — без печати, РПБТ - печать массивов КФРПБ, РЭБ, РЭСК, 87
ПОРОГЕ (при УП > 1), ОКЛБ, ОКЛСК, ОВЕР, СУМКФБ, СУМКФСК (при УН > 2); РПБК - печать гистограммы распределения значений массива СУМКФБ. РГ1КП, РЕШАЮЩЕЕ ПРАВИЛО КП. Построение оптимального кусочно постоянного решающего правила. Сначала строится КУРТ уровней таксонной структуры множества строк матрицы наблюдений. Уровень структуры с порядковым номером /, i - - 1, 2, .. . , КУР Г, описывает разбиение множества строк на i таксонов (см. операцию ТАКСМН в § 5). Каждому уровню полученной структуры соответствует кусочно пос¬ тоянное решающее правило следующего вида: ’’вектор, принадлежащий /-му таксону этого уровня, относится к тому классу, который представлен в этом таксоне наибольшим количеством векторов обучающей последо¬ вательности”. Принадлежность векторов к классам определяется по зна¬ чениям вектора НОКЛ. Затем среди построенных таким образом КУРТ решающих правил от¬ бирается оптимальное в смысле минимума оценки вероятности ошибки решающего правила [2] где -• частота ошибок классификации векторов обучающей выборки на /-м уровне структуры, I - объем обучающей выборки. Результаты экзамена полученного правила заносятся в массив РЭРП. а соответствующие оценки номеров классов — в массив ОНОКЛ. Значение параметров, принятые по умолчанию: УП = 1, КУРТ = 5. Пе¬ чать результатов: РГ1КГ1 - без печати, РПКПТ - печать массивов РЭРП (при УП > Г), ОНОКЛ (при УП > 1). РПФОП, РЕШАЮЩЕЕ ПРАВИЛО ФОГ1 (Т, К, ТК). Построение решающе¬ го правила с помощью алгоритмов, которые используют отыскание опти мальвой разделяющей! гиперплоскости методом ’’обобщенный портрет”. Алгоритм построения решающего правила указывается в АЛРО. При¬ надлежность строк матрицы наблюдений МН к классам задается с помощью ИПКЛ, ПИКЛ или НОКЛ. Для построения используются векторы обучаю щей выборки и переменные, указанные значениями 1 и 3 маски МН. Па¬ раметр ПРОЧ задает способ обработки прочерков в матрице МН. Коэф¬ фициенты полученного решающего правила заносятся в массивы КФРН и ПОРОГ РП, оценки номеров классов -- в массив ОНОКЛ, а результаты экзамена в массив РЭРП. Значения параметров, принятые по умолчанию: АЛРО - ФОН. УГ1 = = 1, ИСКЛБВ - О, ИСКЛОВ = О, КЛАССВЫБ = ЭКЗАМЕНАЦИОННАЯ. КДОБВ - 1, ЭПСИЛОН = 0.1, ПАРНЕР - 2.0, МКДИСКЛВ = 0.5. МКОТКЛКР = 0, СООГНОШ - 0.5, ПРОЧ - ПРОН. Печать результатов: РПФОП - без печати, РПФОПТ - печать массивов РЭРП (при УП > 1). КФРП, ПОРОГРП (при УГ1 2), ОНОКЛ (при УП > 3); РПФОПК пе¬ чать гистограммы распределения сумм коэффициентов решающего пра¬ вила для векторов обучающей и экзаменационной выборок. 88
ЭБ, ЭКЗАМЕН ПО БАЙЕСУ (Т, К, ТК). Проведение ’’экзамена” байе¬ совского решающего правила. Для каждого вектора обучающей и экзаменационной последователь¬ ности вычисляются: оценка номера класса методом Байеса ОНОКЛБ и методом ’’скользящий контроль” ОНОКЛСК, оценка апостериорной вероятности ОВЕР (7), с которой z-й вектор отнесен к классу с номером ОКЛБ(г), (z = 1, . . . , /, где I - количество строк матрицы наблюдений), суммы коэффициентов решающего правила по Байесу СУМКФБ и анало¬ гичные суммы метода ’’скользящий контроль” СУМКФСК. Затем оценки номера класса ОНОКЛБ и ОНОКЛСК сравниваются с истинным номером класса, заданным в векторе НОКЛ или определенным по признаку класса, который указан в ИГ1КЛ или ЦПКЛ. Результаты срав¬ нения отдельно для обучающей и для экзаменационной последователь¬ ностей запоминаются в массивах РЭБ и РЭСК. Значения параметров, принятые по умолчанию: КОДУП = 'О', ВСТР = = 60, УП = I. Печать результатов: ЭБ - без печати, ЭБТ - печать массивов РЭБ, РЭСК (при УП > Г), ОНОКЛБ, ОНОКЛСК, ОВЕР, СУМКФБ, СУМФСК (при УП > 2); ЭБК - печать гистограммы распределения значений мас¬ сива СУМКФБ. По оси абсцисс откладываются разности между значения¬ ми СУМКФБ, соответствующими номерам классов НОКЛ и ОНОКЛБ, взятые с таким знаком, что правильно опознанные векторы попадают в правую часть гистограммы, а неправильно опознанные в левую. Опишем структуру и назначение массивов информации АВЕР. АЛРО, Г, ИСКЛБВ, ИСКЛОВ, КВКЛ, КВОЭ, КДОБВ, КЛАССВЫБ, КПВИГ, КУРТ, КФДФ, КФРПБ, КФРПФОП, КФСКБ, МЕТ, МКДИСКЛВ. МКОТКЛКР, НОТАКС, ОВЕР, ОНОКЛБ, ОНОКЛСК, ОНОКЛДФ, ОНОКЛФОП, ПАРНЕР, Г10Р0ГБ, ПОРОГФОП, РЭБ, РЭДФ, РЭКП, РЭСК, РЭФОП. соотнош, СУМКФБ, СУМКФФОП, СУМКФСК, СЧЛДФ, УП, эпс. АВЕР, АПРИОРНЫЕ ВЕРОЯТНОСТИ. Действительный вектор х(1 : пх). компонента x(i) которого пропорциональна априорной вероятности, с которой вектор реализаций (строка матрицы наблюдений МН) отно¬ сится к z-му классу (z - 1, . . . , пх\ пх - количество классов). Имена компонент вектора АВЕР содержатся в массиве ИКЛ. АЛРО, АЛГОРИТМ РАСПОЗНАВАНИЯ ОБРАЗОВ. Текстовый вектор, содержащий название алгоритма распознавания образов: ФОГ1 — построение оптимальной разделяющей гиперплоскости; СКОНТ -- алгоритм ФОП с оценкой качества гиперплоскости методом ’скользящий контроль”; НМИН — построение разделяющей гиперплоскости в оптимальном подпространстве признаков; КЛОП - построение оптимальной кусочно линейной разделяющей по¬ верхности; ЛОКОП — построение гиперплоскости в оптимальной окрестности клас¬ сифицируемого вектора; СУМР - восстановление значений индикаторной функции в заданных точках в классе линейных решающих правил; СУМКЛ - восстановление значений индикаторной функции в заданных точках в классе кусочно линейных функций; 89
СУМЛОК - восстановление значений индикаторной функции в заданных точках в классе локально линейных функций. ИСКЛБВ, ИСКЛЮЧИТЬ БЛИЗКИЕ ВЕКТОРЫ. Целое число х > 0, уп¬ равляющее исключением близких векторов: при х = 0 исключения нет, при х > 0 исключаются векторы, отличающиеся значениями х признаков или менее. ИС'КЛОВ, ИСКЛЮЧИТЬ ОДИНАКОВЫЕ ВЕКТОРЫ. Текстовый век¬ тор, содержащий ответ на вопрос, исключать ли одинаковые векторы (ДА, НЕТ). КВКЛ, КОЛИЧЕСТВА ВЕКТОРОВ В КЛАССАХ. Целочисленный век¬ тор х (1 : п! ), z-я компонента которого равна количеству векторов обучающей выборки, принадлежащих z-му классу количество классов). КВОЭ, КОЛИЧЕСТВО ВЕКТОРОВ НА ОБУЧЕНИИ И ЭКЗАМЕНЕ. Целочисленный вектор, состоящий из двух компонент: х(1) - количество векторов обучающей последовательности, х (2) -- количество векторов эк¬ заменационной последовательности. КДОБВ, КОЛИЧЕСТВО ДОБАВЛЯЕМЫХ ВЕКТОРОВ. Целое число х > 1, равное количеству добавляемых векторов при переходе от одной окрестности классифицируемой точки к другой. КЛАССВЫБ, КЛАССИФИЦИРУЕМАЯ ВЫБОРКА. Текстовый вектор, содержащий ответ на вопрос, какую из выборок нужно классифицировать (РАБОЧАЯ, ЭКЗАМЕНАЦИОННАЯ). КПВИГ, КОЛИЧЕСТВО ПАР ВЕКТОРОВ В ИСХОДНОЙ ГРУППЕ. Целое число х > 1, равное количеству пар векторов в исходной группе. КУРТ, КОЛИЧЕСТВО УРОВНЕЙ ТАКСОНОВ. Целое число х > 1, рав¬ ное количеству уровней таксонной структуры множества строк матрицы наблюдений МН. КФДФ, КОЭФФИЦИЕНТЫ ДФ. Действительный вектор, содержащий коэффициенты линейной дискриминантной функции, кроме свободного члена. КФРПБ, РЕШАЮЩЕЕ ПРАВИЛО ПО БАЙЕСУ. Целочисленная трех¬ мерная таблица х (1 : п{, 1 : п2,1 : и3), содержащая коэффициенты решающе¬ го правила по Байесу (пх - количество классов, п2 - максимальное коли¬ чество градаций в переменных, п3 - количество столбцов матрицы МН). Имена, полные названия и цифровые коды (1,2)-матриц трехмерной табли¬ цы КФРПБ содержатся в массивах ИП, ПНП и ЦП. Имена (2,3)-матриц находятся в массиве ИКЛ. КФРПФОП, РЕШАЮЩЕЕ ПРАВИЛО ФОН. Аналог трехмерной таблицы КФРПБ для решающего правила, полученного одним из методов, которые основаны на процедуре ’’обобщенный портрет”. КФСКБ, КОЭФФИЦИЕНТЫ МЕТОДА СК ПО БАЙЕСУ. Целочислен¬ ная трехмерная таблица x(l :п{у 1 : п2, 1 :д3), содержащая коэффициенты метода ’’скользящий контроль” (п} - количество классов, п2 — наиболь¬ шее количество градаций в переменных, д?3 - количество столбцов матри¬ цы наблюдений МН). Аналог трехмерной таблицы КФРПБ. МЕТ, МЕТРИКА. Текстовая константа, указывающуя используемую метрику: ЭВКЛ — эвклидово расстояние, ХЕММ - расстояние Хемминга. МКДИСКЛВ, МАКСИМАЛЬНАЯ ДОЛЯ ИСКЛЮЧЕННЫХ ВЕКТОРОВ. 90
Действительное число х, 0 < х < 1, равное предельно допустимой доле векторов, исключенных из обучающей выборки. МКОТКЛКР, МАКСИМАЛЬНОЕ ОТКЛОНЕНИЕ ОТ ОПТИМУМА КРИ¬ ТЕРИЯ. Действительное число х, 0 <х < 1, ограничивающее сверху вели¬ чину допустимого отклонения значения критерия от оптимума. НОТАКС, НОМЕРА ТАКСОНОВ. Целочисленная матрица х(1 :п{, 1 :п2), элемент x(z, / ) которой равен номеру таксона (7 + Г)-го уровня таксонной структуры, содержащего у-й вектор, т.е. /-ю строку матрицы наблюдений МН («1 ~ количество уровней таксонной структуры без единицы, п2 - ко¬ личество строк матрицы МН). Имена и цифровые коды строк матрицы НОТАКС содержатся в массивах ИВ и ЦВ. ОВЕР, ОЦЕНКА ВЕРОЯТНОСТИ. Действительный вектор х(1 :«!), компонента х(z) которого равна оценке вероятности, с которой z-й вектор относится к классу, указанному в z-й компоненте вектора ОНОКЛБ, с по¬ мощью решающего правила КФРПБ (/ = 1, . . . , пх; пг — количество строк матрицы МН). Имена и цифровые коды компонент вектора ОВЕР содер¬ жатся в массивах ИВ и ЦВ. Компонента ОВЕР (7) вычисляется по формуле ехр {СУМ КФБ (/,&)/100} OBEP(z) = max —- —- J < к < К К S ехр {СУМКФБ (z,/)/100} / = 1 ОНОКЛБ, ОЦЕНКА КЛАССА ПО БАЙЕСУ. Целочисленный вектор х(1 : ), компонента x(z) которого равна оценке номера класса z-ro век¬ тора, полученной с помощью решающего правила КФРПБ (nx — количест¬ во строк матрицы наблюдений МН). Компонента ОНОКЛБ (z) равна порядковому номеру максимального из чисел в последовательности { СУМКФБ (z, 1), . . . , СУМКФБ (z, К)}. Аналогично вычисляются компо¬ ненты вектора ОНОКЛСК. Имена и цифровые коды компонент вектора ОНОКЛБ содержатся в массивах ИВ и ЦВ. ОНОКЛСК, ОЦЕНКА КЛАССА СК. Аналог вектора ОНОКЛБ, полу¬ чаемый заменой коэффициентов КФРПБ на коэффициенты КФСКБ. ОНОКЛДФ, ОЦЕНКА КЛАССА ДФ. Целочисленный вектор х (1 : п}), содержащий оценки номеров классов для строк матрицы наблюдений МН, вычисленные с помощью дискриминантной функции КФДФ, СВЧЛДФ (и! — количество строк матрицы МН). Имена и цифровые коды компонент век¬ тора ОНОКЛДФ содержатся в массивах ИВ и ЦВ. ОНОКЛФОП, ОЦЕНКА КЛАССА ФОП. Целочисленный вектор х(1 :«/), содержащий оценки номеров классов для строк матрицы наблюдений МН, полученные одним из методов, основанных на процедуре ’’обобщенный портрет”. ПАРНЕР, ПАРАМЕТР НЕРАЗДЕЛИМОСТИ. Действительное число х > О, служащее параметром операции РПФОП. ПОРОГЕ, ПОРОГ ПО БАЙЕСУ. Целочисленный вектор х (1 : пх), со¬ держащий константы, добавляемые к суммам коэффициентов решающего правила, полученным при ’’экзамене” КФРПБ (пг - количество классов). Имена компонент вектора ПОРОГЕ содержатся в массиве ИКЛ. 91
ПОРОГФОП. Целое число, добавляемое к суммам коэффициентов ре тающего правила, полученным при ’’экзамене” КФРПФОП. РЭБ, РЕЗУЛЬТАТЫ ЭКЗАМЕНА РГ1Б. Целочисленная трехмерная таб¬ лица х(1 :«1, 1 :«i, 1:3), содержащая результаты экзамена байесовского решающего правила КФРПБ: элемент x(i, /, к) равен количеству векто¬ ров z-.ro класса на обучении (к = 1), экзамене (к = 2) или исключенных векторов (к = 3), отнесенных с помощью решающего правила КФРПБ к /-му классу. Здесь п{ - количество классов. Имена (1,3)-матриц и (2,3)-матриц трехмерной таблицы РЭБ содержатся в массиве ИКЛ. РЭДФ, РЕЗУЛЬТАТЫ ЭКЗАМЕНА ДФ. Целочисленная трехмерная таблица, содержащая результаты экзамена дискриминантной функции КФДФ, СВЧЛДФ. Аналог таблицы РЭБ. РЭКП, РЕЗУЛЬТАТЫ ЭКЗАМЕНА КП. Целочисленная трехмерная таблица, содержащая результаты экзамена кусочно постоянного решающе го правила КФКГ1. Аналог таблицы РЭБ. РЭСК, РЕЗУЛЬТАТЫ ЭКЗАМЕНА СК. Целочисленная трехмерная таб¬ лица, содержащая результаты экзамена, проведенного методом ’’скользя¬ щий контроль”. Аналог таблицы РЭБ. РЭФОП, РЕЗУЛЬТАТЫ ЭКЗАМЕНА ФОП. Целочисленная трехмерная таблица, содержащая результаты экзамена решающего правила КФРПФОП. Аналог таблицы РЭБ. СООТНОШ, СООТНОШЕНИЕ ОШИБОК. Действительное число х > 0. равное заданному соотношению ошибок 1-го и 2-го рода при исключении векторов. СУМКФБ, СУММЫ КОЭФФИЦИЕНТОВ РПБ. Целочисленный вектор х(1 :И1), содержащий суммы коэффициентов решающего правила КФРПБ для строк матрицы наблюдений МН (zzt - количество строк МН). Имена и цифровые коды компонент вектора СУМКФБ содержатся в массивах ИВ и ЦВ. СУМКФСК, СУММЫ КОЭФФИЦИЕНТОВ СК. Аналог вектора СУМКФБ для коэффициентов метода ’’скользящий контроль” КФСКБ. СУМКФФ0Г1, СУММЫ КОЭФФИЦИЕНТОВ ФОП. Аналог вектора СУМКФБ для коэффициентов КФРПФОП. СЧЛДФ, СВОБОДНЫЙ ЧЛЕН ДФ. Действительное число, равное сво¬ бодному члену линейной дискриминантной функции КФДФ. УП, УПРАВЛЕНИЕ ПЕЧАТЬЮ. Целое число х > 0, задающее вид инфор¬ мации, выводимой на АЦПУ, ЭПС, ЭПСИЛОН. Действительное число л* > 0, задающее точность при поиске экстремума функции Ш(а) в методе ’’обобщенный портрет”. Поиск считается завершенным, когда все составляющие градиента по модулю станут меньше х. § 4. ВОССТАНОВЛЕНИЕ РЕГ РЕССИИ Алгоритмы восстановления регрессии применяются в тех случаях, когда необходимо определить зависимость одной из переменных, которая назы¬ вается переменной, регрессии, от одной или нескольких других переменных, которые называются независимыми переменными, или регрессорами. Иско¬ 92
мая зависимость восстанавливается по значениям переменной регрессии и независимых переменных, записанным в матрице наблюдений. В пакете АСТА реализованы следующие алгоритмы восстановления рег¬ рессии методом структурной минимизации риска. 1. Восстановление одномерной регрессии: а) в классе полиномов Чебышева с выбором оптимальной степени полинома; б) , в классе кубических сплайнов с выбором числа сопряжений. 2. Восстановление многомерной регрессии: а) в классе линейных функций с выбором оптимального числа апри¬ орно упорядоченных переменных; б) в классе линейных функций с выбором подмножества независи¬ мых переменных (пошаговые алгоритмы); в) в классе кусочно линейных функций с использованием таксонной структуры строк матрицы наблюдений; г) локальный алгоритм восстановления значений регрессии в классе кусочно линейных функций; д) построение гребневых оценок регрессии с помощью процедуры ’’скользящий контроль”. Пример 4.1. Восстановление зависимости 4-й переменной задачи ИРИС ФИШЕРА от остальных переменных в классе линейных функций. Алгоритм - линейная регрессия с выбором количества априорно упорядо¬ ченных переменных. НАЧАЛО РАБОТЫ; ЗАДАЧА - ИРИС ФИШЕРА; СЕМЕЙСТВА МАССИВОВ = МАТРИЦА НАБЛЮДЕНИЙ (ИСХ); ИМЯ ПЕРЕМЕННОЙ РЕГРЕССИИ - ДЛИНА ЛЕПЕСТКА; ЛИНЕЙНАЯ РЕГРЕССИЯ, ТАБЛИЦЫ. КАРТИНКИ; КОНЕЦ РАБОТЫ; Пример 4.2. Решение задачи предыдущего примера с помощью не¬ скольких алгоритмов. HP; 3 = ИРИС ФИШЕРА; СМ = МН (ИСХ); ИПРЕ = ШИР.ЛЕГЕ; АЛРЕ-ПОР1; ВФТК; АЛРЕ = ПОР4; ВФТК; АЛРЕ-ЛИРС; ВФТК; АЛРЕ-ЛОР; ВФТК; КР; Пример 4.3. Решение задачи примера 4.1 для различных групп строк матрицы наблюдений. HP; 3-ИРИС ФИШЕРА; СМ-МН (ИСХ); ИПРЕ = ШИР.ЛЕГЕ; АЛРЕ = ЛИР; СЦВО = 1 АЗ 51 АЗ 101 АЗ; СЦВЭ - 4 54 104; СИПИ-ДЛИНА ЛЕПЕСТКА; ВФТК; СИГ1Н - ДЛИНА ЧАШЕЛИСТИКА; ВФТК; СЦВО = 1 А4; СЦВЭ = 51 А4; СЦВН = 101 А4; ИАУГ1 = ^ИТС, ДЛ.ЛЕГЕ, ДЛ.ЧАШ.. ШИР.ЧАШ ; ВФТК; КР; В этом примере описаны три варианта решения задачи. 93
1. Алгоритм ЛИР. Обучающая последовательность - первые три строки из каждого класса, экзаменационная последовательность - остальные стро- ки. Переменная ДЛИНА ЛЕПЕСТКА исключена. 2. Второй вариант отличается от первого только тем, что вместо пере¬ менной ДЛИНА ЛЕПЕСТКА исключается переменная ДЛИНА ЧАШЕ¬ ЛИСТИКА. 3. Алгоритм ЛИР. Априорное упорядочение переменных задано с не¬ мощью матрицы ИАУ1Г Обучающая последовательность - строки с 1-й по 4-ю, экзаменационная -- строки с номерами от 51 до 54. Остальные строки исключены. Пример 4.4. Восстановление зависимости 4-й Переменной задачи ИРИС ФИШЕРА от 1-й и 2-й переменных в классе кусочно линейных функ¬ ций, состоящих не более чем из двух кусков. HP; 3 - ИРИС ФИШЕРА; СМ = МН (ИСХ); ИПРЕ = ШИР.ЛЕН.; СИПИ-ДЛ.ЛЕН; КУСК - 2; ВКФТК; КР; Пример 4.5. Восстановление линейной регрессии для нескольких вариантов решения задачи ЭКСПЕРИМЕНТ. HP; 3 = ЭКСПЕРИМЕНТ; ИПРЕ = ПЕРЕМЕННАЯ АБВ; СМ = 'МН (ЧАСТЬ Al), МВ (СЕРИЯ Х2), СЦПВ (ГРУППА 0)'; ВФТК; СМ = 'МН (ЧАСТЬ Al), МВ (СЕРИЯ Х2)'; ВФГК; СМ = 'МН (ЧАСТЬ Б1), СЦВН (СЕРИЯ Ml 9), МП (ГРУППА 03)'; ВФТК; КР; Во втором варианте примера по умолчанию полагается, что используются все переменные. Все упомянутые в задании массивы МН, МВ, МГ1, СЦПВ. СЦВН хранятся в разделе БД с именем ЭКСПЕРИМЕНТ. Приведем краткие описания операций восстановления регрессии ВГР. ВЗ, ВЗЛ, ВКЗ, ВКФ, ВФ, В1Р, ГРАФ, ЭКЛРЕ, ЭРЕ. ВГР, ВОССТАНОВЛЕНИЕ ГРЕБНЕВОЙ РЕГРЕССИИ (Т, К, ТК)1). Построение гребневой оценки регрессии. Восстанавливается линейная регрессия в классе гребневых опенок. Столбец матрицы наблюдений МН, содержащий значения переменной рег¬ рессии, задан в ИПРЕ или ЦПРЕ. Используются переменные, указанные значениями 1 и 3 в маске МГ1. При ССЧ = НЕТ свободный член регрессии отсутствует. Параметр ПРОЧ задает способ обработки прочерков в матрице наблю¬ дений. При ПОИСК Г = ДА отыскивается оптимальное значение параметра регуляризации ГАММА. Отрезок, содержащий искомое значение ГАММА, разбивается на КИНТ интервалов. Поиск заканчивается, если длина отрез¬ ка станет меньше ЭПСИЛОН. При ПОИСК Г = НЕТ гребневая оценка строится для фиксированной) значения параметра регуляризации, равного Г. Значения параметров, принятые по умолчанию: УП -■ 1. ПОИСК Г = ДА, Г - 0, КИНТ = 50, ЭПСИЛОН = 0.00Е ССЧ - ДА, ПРОЧ - ПРОН. Печать 1 1 В скобках перечислены возможные суффиксы операций. 94
результатов: ВГР — без печати, ВГРТ — печать массивов КФРЕ, СЧЛРЕ. РЭРЕ, КВОЭ, ОСР (при УГ1> 1), OPE, НЕВРЕ, КВБП (при УП > 2); вгрк - печать гистограммы распределения невязок НЕВРЕ. ВЗ, ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ ЛИНЕЙНОЙ РЕГРЕССИИ (1-й суффикс: Г, Н, НГ\ Ц, ЦГ, ЦН, ЦНГ; 2-й суффикс: Т, К, ТК; полные наз¬ вания суффиксов: Г - ГЛАВНЫЕ КОМПОНЕНТЫ, Н - НОРМИРОВКА И ЦЕНТРИРОВАНИЕ, Ц - ЦЕЛОЧИСЛЕННЫЕ ПЕРЕМЕННЫЕ). Варианты восстановления значений линейной регрессии методом структурной мини¬ мизации среднего риска, различающиеся предварительной обработкой матрицы наблюдений (см. операцию ВФ.) Значения суффиксов: Г - переход к главным компонентам (операция ГЛКОМП); Н - линейное преобразование значений переменных (операция ЦН); НГ - последовательное выполнение операций ЦН и ГЛКОМП; Ц - преобразование целочисленных переменных в действительные (опе¬ рация ПРЕОЦД); ЦГ - последовательное выполнение операций Г1РЕОЦД и ГЛКОМП; ЦН - последовательное выполнение операций ПРЕОЦД и ЦН: ЦНГ - последовательное выполнение операций ПРЕОЦД, ЦН и ГЛКОМП. ВЗЛ, ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ ЛОКАЛЬНОЙ РЕГРЕССИИ (1-й суффикс: Г, Н, НГ, Ц, ЦГ, ЦН, ЦНГ, 2-й суффикс: Г, К, ТК). Варианты восстановления значений локальной оценки регрессии ОРЕ в классе кусоч¬ но линейных функций методом структурной минимизации риска (алгоритм ЛОР), различающиеся предварительной обработкой матрицы наблю¬ дений. Алгоритм ЛОР описан в [2]. Значения параметров, принятые по умолча¬ нию: ПРОЧ - ПРОН, КОДУП = 'О', КЦИФР = 4, ВСТР = 60, Г1ИА - НЕТ, ( 1, при 1/п < 1 , ЭТА = j exp { 1 //// }, при 1 < 1/п < 4; [ ехр { -3} . при 1/п > 4, где I - количество векторов обучающей последовательности, а п — коли¬ чество используемых переменных. Печать результатов: ВЗЛ — без печати, ВЗЛТ - печать массивов ОРЕ, НЕВ, КВБП, КВОЭ, РЭРЕ: ВЗЛК — печать гистограммы распределения значений невязок НЕВ. Кроме того, при ПИА = ДА печатается информа¬ ция о каждом щаге алгоритма. Количество шагов равно количеству векто¬ ров на обучении. ВКЗ, ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ КУСОЧНО ЛИНЕЙНОЙ РЕГ- СЕССИИ (1-й суффикс: Г, Н. НГ, Ц, ЦГ, ЦН, ЦНГ, 2-й суффикс: Т, К, ТК). Варианты восстановления значений кусочно линейной регрессии методом структурной минимизации среднего риска, различающиеся предваритель¬ ной обработкой матрицы наблюдений. (См. операцию ВКФ.) ВКФ, ВОССТАНОВЛЕНИЕ КУСОЧНО ЛИНЕЙНОЙ РЕГРЕССИИ (1-й сУффикс: Г, Н, НГ, Ц. ЦГ, ЦН, ЦНГ, 2-й суффикс: Т, К, ТК). Варианты вос¬ становления кусочно линейной функции регрессии с использованием так- сонной структуры множества строк матрицы наблюдений МН, различаю¬ щиеся предварительной обработкой матрицы МН. 95
Сначала строится таксонная структура множества строк матрицы наблю¬ дений (см. операцию 1АКСМН в §5). Используются переменные, указан¬ ные значениями 1 и 3 маски МГЕ Количество уровней структуры равно КУСК. Затем вычисляются коэффициенты кусочно линейной регрессии КФКЛРЕ, СЧЛКЛРЕ методом структурной минимизации среднего риска с выбором оптимального количества кусков А, 1 <А' <КУСК. Для вычисле¬ ний используются только векторы обучающей последовательности. Пара¬ метр ЭТА задает доверительный уровень критерия. Параметр ПРОЧ указы¬ вает способ обработки прочерков в матрице МН. Далее выполняется операция ЭКЛРЕ,- экзамен полученной кусочно ли¬ нейной регрессии. Значения параметров, принятые по умолчанию: ПРОЧ = ПРОП, КОДУГ1 = = 'О’,КЦИФР = 4, ВСТР = 60, ПИА = НЕТ. Печать результатов: ВКФ - без печати, ВКФТ - печать массивов КФКЛРЕ, СЧЛКЛРЕ, OPE, НЕВ, НОТАКС, КВБП, КВОЭ, РЭКЛРЕ; ВКФ - печать гистограммы распределения невязок НЕВ для разных кусков. ВФ, ВОССТАНОВЛЕНИЕ ЛИНЕЙНОЙ РЕГРЕССИИ (1-й суффикс: Г, 1L НГ,Ц.ЦГ,ЦН,ЦНГ, 2-й суффикс: Т, К, ТК).Варианты восстановления функ¬ ции регрессии в классе линейных функций методом структурной миними¬ зации среднего риска, различающиеся предварительной обработкой матри¬ цы наблюдений. С помощью параметров КГ1МН и КГ1МК задают минимальное и макси¬ мальное количество переменных в выражении для регрессии. В результате выполнения операции будет восстановлена регрессия от п переменных, где КПМН<и< КПМК. Параметр АЛРЕ определяет алгоритм восстановления: АЛ РЕ = ЛИР — восстановление линейной регрессии с автоматическим выбором количества априорно упорядоченных переменных. Имена или цифровые коды переменных в заданном порядке перечисляются в массиве ИАУП или ЦАУП. АЛРЕ = ЛИРС алгоритм ЛИР с селекцией векторов обучающей после¬ довательности. Максимальное количество отброшенных при селекции векто¬ ров задано в КВСЕЛ. Фиксированные векторы, указанные значением 3 маски МВ, включаются в обучающую последовательность, но селекции не подвер¬ гаются. АЛРЕ = Г10Р1, ПОР2, ПОРЗ или ПОР4 - различные варианты пошаговой регрессии, различающиеся правилами чередования шагов добавления и удаления переменной. На каждом шаге добавляется (удаляется) та пере¬ менная, добавление (удаление) которой оказывается выгоднее в смысле используемого критерия. Полное количество шагов ограничено значением параметра КИТ. Исходной регрессией может служить либо функция от KI1MH переменных (при ИСХП = НЕТ), либо функция от всех используе¬ мых переменных (при ИСХП = ВСЕ). Алгоритм ПОР! . Чередование шагов добавления и удаления пере¬ менной происходит до тех пор, пока значение критерия не псрсстане1 монотонно убывать от шага к шагу (рис. 5.2). Если в результате некоторо¬ го шага значение критерия возросло, го происходит возврат на один шаг 96
Рис. 5.2. Изменение количества переменных в оценке регрессии для алгоритма ПОР1 назад и выполнение алгоритма продолжается. Выполнение алгоритма заканчивается, как только произойдут два возврата подряд. Алгоритм ПОР2. Шаги удаления (добавления) переменной выполня¬ ются до тех пор, пока количество переменных в выражении для оценки регрессии не достигнет предельного значения, равного КПМН (соответст¬ венно КПМК). Среди полученных оценок регрессии находится оптимальная, которая берется в качестве исходной для серии шагов добавления (удале¬ ния) переменной. Выполнение алгоритма заканчивается, если оптимальной оценкой регрессии оказывается исходная (рис. 5.3). Алгоритм ПОРЗ. Шаги удаления (добавления) переменной выпол¬ няются до тех пор, пока значение критерия не перестанет монотонно убы- pHc. 5.3. Изменение количества переменных в оценке регрессии для алогоритма ПОР2 7' В.А. Кощеев 97
Рис. 5.4. Изменение количества переменных в оценке регрессии для алгоритма ПОРЗ вать или пока количество переменных в выражении для оценки регрессия не достигнет предельного значения. Затем выполняется серия шагов добав¬ ления (удаления) переменной. Выполнение алгоритма заканчивается, если ни добавление, ни удаление переменной не приводят к уменьшению значе¬ ния критерия (рис. 5.4). Алгоритм ПОР4. Делается попытка выполнить шаг удаления и шаг добавления переменной. Наилучшая из двух полученных оценок регрессии выбирается в качестве исходной для следующей попытки (рис. 5.5) . Выпол¬ нение алгоритма заканчивается, если обе полученные оценки регрессии оказываются хуже исходной. После того как оптимальная линейная оценка регрессии будет построена, выполняется ее ’’экзамен” — операция ЭРЕ. Рис. 5.5. Изменение количества переменных в оценке регрессии для алгоритма 11()N 98
Значения параметров, принятые по умолчанию: АИРЕ = ЛИР, КВСЕЛ = 1, КИТ = 1000, ИСХП = НЕТ, УП = 1, ПИ А = НЕТ, КПМН = 0, КПМК = м, где п — количество столбцов матрицы наблюдений, указанных значениями 1 и 3 маски МГ1, ССЧ = ДА, ПРОЧ = ПРОН, КОДУГ1 = 'О'. КЦИФР = 4, ВСТР = 60. Печать результатов: ВФ — без печати, ВФТ — печать массивов КФРЕ,СЧЛ, РЭРЕ, КВОЭ, ОСР (при УП > 1), OPE, НЕВ, КВБП (при УГ1 > 2); ВФК - печать гистограммы распределения невязок НЕВ. В1Р, ВОССТАНОВЛЕНИЕ ОДНОМЕРНОЙ РЕГРЕССИИ (1-й суффикс: ЧЕБ, СПЛ, 2-й суффикс: Т, К, ТК; полные названия 1-го суффикса: ЧЕБ - ПОЛИНОМЫ ЧЕБЫШЕВА, СПЛ - СПЛАЙНЫ). Восстанавливается одномерная регрессия в виде разложения по полино¬ мам Чебышева с выбором оптимального числа членов разложения (не более МКЧЛРАЗЛ членов) или в виде кубического сплайна с сопряжениями в равноотстоящих точках с выбором оптимального числа сопряжений (не более МККССПЛ сопряжений). Столбцы матрицы наблюдений, содержащие значения переменной регрессии и независимой переменной, указываются в ИПРЕ, ИНЕЗП или в ЦПРЕ, ЦНЕЗП. Для построения используются точки обучающей последовательности, отмеченные значениями 1 и 3 маски МВ. Значения полученной оценки регрессии вычисляются для точек экзамена¬ ционной последовательности. Если задано МККСЕЛТ > 0, го при построении оценки выполняется оптимальная селекция точек (не более МККСЕЛТ точек) обучающей последовательности. Точки, отмеченные значением 3 в маске МВ, селекции не подвергаются. Значения параметров, принятые по умолчанию: МКЧЛРАЗЛ = 20, МНЧЛРАЗЛ = 1, МККССПЛ = 20, МНКССПЛ = 0, МККСЕЛТ = 0, УП= 1, ПРОЧ = ПРОП. Если вектор СКОЗПРЕ не задан, то полагается, что диспер¬ сии всех значений переменной регрессии одинаковы. Печать результатов: В1Р — без печати, В1РТ — печать массивов КФРЕ, НЕВ (при УП > 1), ОРЕ, (при УП > 2); В1РК - печать графика восстановленной зависимости. ГРАФ, ГРАФИК (К). Построение графика. На графике изображаются точки (xz,j'z), где xz — значение массива, указанного в первой строке матрицы СМ, у, - значение массива, указанно¬ го во второй строке СМ. Значения xz выбираются из строки или столбца массива, заданных в И1Х. И2Х, Ц1Х, Ц2Х. Значения выбираются из строки или столбца массива, заданных в И1У, И2У, Ц1У, Ц2У. Если парамет¬ ры И1Х, . . . , Ц2У не заданы, то по умолчанию полагается, что Ц2Х = 1 и Ц2У = 1. Номера классов для пар (xz,j>z) содержатся в массиве НОКЛ. Если мас¬ сив НО К Л не задан, то полагается, что все пары одного класса. Пара (xz, j>z), Принадлежащая /:-му классу, изображается символом СС (к). Если значения xz и содержатся в одном и том же массиве, то для Операции достаточно указать только одну строку матрицы СМ. Тексты, Печатаемые на графике, задаются в массивах ТЕКК и ИКЛ. Значения параметров, принятые по умолчанию: Х0 = 0, У0 = 0, ВК = 20, •ЦК = 40, СС ='1234567890 ... О', ПАРК = ШК, ШК, ВК, к, ШК/20+1, вК/20 + 1, П1К/5, ВК/5, 0,0, 1, 1, где к - количество классов, определенное 110 значениям массива НОКЛ. Печать результатов: ГРАФ — без печати, ГРАФ К - печать графика ГРАФ. 7* 99
ЭКЛРЕ, ЭКЗАМЕН КУСОЧНО ЛИНЕЙНОЙ РЕГРЕССИИ (Т, К, ТК) Выполнение ’’экзамена” кусочно линейной оценки регрессии. Аналог операции ЭРЕ. Вместо массивов КФРЕ, СЧЛРЕ используются массивы КФКЛРЕ, СЧЛКЛРЕ и НОТАКС. Значения параметров, принятые гю умолчанию: КОДУП = 'О', КЦИФР -- = 4, ВСТР = 60, УП = 1. Печать результатов: ЭКЛРЕ — без печати, ЭКЛРЕТ печать массивов КВОЭ, РЭКЛРЕ (при УП > 1), OPE, НЕВ, КВБП (при УП > 2); ЭКЛРЕК — печать гистограммы распределения значений невязок НЕВ. ЭРЕ, ЭКЗАМЕН РЕГРЕССИИ (Т, К, ТК). Выполнение ’’экзамена” линей ной оценки регрессии. Для каждого вектора обучающей и экзаменационной последовательности вычисляются: оценка регрессии ОРЕ, невязка НЕВ, количество векторов на обучении и экзамене КВОЭ, количество строк матрицы наблюдений, не содержащих прочерков в столбце матрицы (для всех столбцов) КВБП Затем вычисляются среднеквадратичное отклонение на обучении и на экз: мене, а также максимальная по абсолютной величине невязка — масси РЭРЕ. Значения параметров, принятые по умолчанию: ПРОЧ - ПРОП, КОДУП = 'О', КЦИФР = 4, ВСТР = 60, УП = 1. Печать результатов: ЭРЕ — без печати, ЭРЕТ — печать массивов ОРЕ, НЕВ, КВБП (при УП > 2), КВОЭ, РЭРЕ (при УП > Г, ЭРЕК — печать гистограммы распределения значений невя¬ зок НЕВ. Опишем структуру и назначение массивов информации АЛРЕ, ВИДЕ, ГНЕВ, ГРАФ, ИАУП, ИНЕЗП, ИПРЕ, ИСХГ1, КВБП, КВСЕЛ, КИТ, КПМК, КПМН, КУСК, КФКЛРЕ, КФРЕ, КФРЕСПЛ, КФРЕЧЕБ, МККСЕЛТ, МККССПЛ. МКЧЛРАЗЛ, МНКССПЛ, МНЧЛРАЗЛ, НЕВ, НЕВСПЛ, НЕВЧЕБ, OPL\ ОРЕСПЛ, ОРЕЧЕБ, OOP, ПАРК, ПОИСКГ, РЭКЛРЕ, РЭРЕ, СКОЗПРЕ, ССЧ, СЧЛ, СЧЛКЛРЕ, ТЕКК, У. У0, X, Х0,ЦАУП, ЦНЕЗП, ЦПРЕ, ЭТА. АЛРЕ, АЛГОРИТМ ВОССТАНОВЛЕНИЯ РЕГРЕССИИ. Текстовая константа, соответствующая выбранному алгоритму восстановления pei - pecСии: АЛРЕ = ЛИР — восстановление линейной регрессии с выбором числа априорно упорядоченных переменных; АЛРЕ = ЛИРС — алгоритм ЛИР с селекцией выборки; АЛРЕ = ПОР1, ПОР2, ПОРЗ, ПОР4 — различные пошаговые алгоритма восстановления линейной регрессии. ВИДК, ВИД КАРТИНКИ. Целое число, равное сумме тех коэффициентов, которые определяют вид графика, нужный пользователю: 1 -- на графике рисуется ось X (ось абсцисс); 2 - на графике рисуется ось Y (осьординат); 4 - выполняется оцифровка делений оси X; 8 — выполняется оцифровка делений оси Y; 16 - каждая точка графика соединяется столбцом символов с осью X; 32 — каждая точка графика соединяется столбцом символов с осью Y. ГНЕВ, ГИСТОГРАММА НЕВЯЗОК РЕГРЕССИИ. Текстовая матрица x(l:nj, 1: п2 ), содержащая гистограмму распределения значений невязок регрессии НЕВ (п^ - размер гистограммы по горизонтали, п2 — размер гистограммы по вертикали). 100
ГРАФ, ГРАФИК. Текстовая трехмерная таблица х (1: п i, 1: п2,1: п3), содержащая п3 графиков (ni — размер графиков по горизонтали, п2 — размер графиков по вертикали). ИАУП, ИМЕНА АПРИОРНО УПОРЯДОЧЕННЫХ ПЕРЕМЕННЫХ. Текстовая матрица х (1: , 1: п2), содержащая имена переменных в задан¬ ном порядке (п\ — длина самого длинного имени, п2 — количество имен). ИНЕЗП, ИМЯ НЕЗАВИСИМОЙ ПЕРЕМЕННОЙ. Текстовый вектор, содержащий имя столбца матрицы наблюдений МН, в котором записаны значения независимой переменной. ИПРЕ, ИМЯ ПЕРЕМЕННОЙ РЕГРЕССИИ. Текстовый вектор, содержа¬ щий имя или полное название переменной, выбранной в качестве перемен¬ ной регрессии. ИСХП, ИСХОДНЫЕ ПЕРЕМЕННЫЕ. Текстовая константа, вид которой определяет исходную функцию для алгоритмов пошагового восстановле¬ ния регрессии: ИСХП = ВСЕ — в исходную функцию включаются все пере¬ менные, которые используются в данном варианте восстановления, ИСХП = = НЕТ - исходная функция не содержит ни одной переменной, т.е. равна константе. КВБП, КОЛИЧЕСТВО ВЕКТОРОВ БЕЗ ПРОЧЕРКОВ. Целочисленный вектор х(1: П \), z-я компонента которого равна количеству строк матрицы наблюдений МН, не содержащих прочерка в z-м столбце (гц — количество столбцов матрицы МН). КВСЕЛ, КОЛИЧЕСТВО СЕЛЕКТИРУЕМЫХ ВЕКТОРОВ. Целое число, равное максимальному количеству селектируемых векторов в алгоритме ЛИРС. КИТ, КОЛИЧЕСТВО ИТЕРАЦИЙ. Целое число, равное максимальному количеству итераций алгоритма. КГ1МК, МАКСИМАЛЬНОЕ КОЛИЧЕСТВО ПЕРЕМЕННЫХ. Целое число х. Количество переменных в восстановленной функции будет меньше или равно х. КГ1МН, МИНИМАЛЬНОЕ КОЛИЧЕСТВО ПЕРЕМЕННЫХ. Целое число х. Количество переменных в восстановленной функции будет больше или равно х. КУСК, КОЛИЧЕСТВО КУСКОВ. Целое числох, х > 2, равное количеству кусков кусочно линейной оценки регрессии. КФКЛРЕ, КОЭФФИЦИЕНТЫ КУСОЧНО ЛИНЕЙНОЙ РЕГРЕССИИ. Матрица действительных чисел х(1 :«i, 1 : л2), содержащая коэффициенты кусочно линейной оценки регрессии (z?i — количество кусков, п2 — коли¬ чество столбцов матрицы наблюдений МН). Свободные члены кусочно линейной оценки помещены в вектор СЧЛКЛРЕ. Имена, полные названия и цифровые коды строк матрицы КФКЛРЕ содержатся в массивах ИП, ПНГ1 и ЦП. КФРЕ, КОЭФФИЦИЕНТЫ ЛИНЕЙНОЙ РЕГРЕССИИ. Действительный вектор х(1: ), содержащий коэффициенты линейной оценки регрессии (Л1 — количество столбцов матрицы наблюдений МН). Свободный член °Ценки записывается в виде скаляра СЧЛ. Имена, полные названия и цифро¬ вые коды компонент вектора КФРЕ содержатся в массивах ИП, ПНГ1 и ЦП. 101
КФРЕ, КОЭФФИЦИЕНТЫ РЕГРЕССИИ (ЧЕБ, СПЯ; полные названия суффиксов: ПОЛИНОМЫ ЧЕБЫШЕВА, СПЛАЙНЫ). Действительный вектор х(1 :И1 ) (для суффикса ЧЕБ) или действительная матрицах (1: , 1 :2) (для суффикса СИЛ), содержащие коэффициенты разложения одно¬ мерной оценки регрессии по полиномам Чебышева или, соответственно, коэффициенты кубического сплайна, приближающего регрессию количество полиномов или сопряжений сплайна). МККСЕЛТ, МАКСИМАЛЬНОЕ КОЛИЧЕСТВО ОТСЕЛЕКТИРОВАННЫХ ТОЧЕК. Целое число, ограничивающее сверху количество отброшенных при селекции точек. МККССПЛ, МАКСИМАЛЬНОЕ КОЛИЧЕСТВО СОПРЯЖЕНИЙ СПЛАЙ¬ НА. Целое число, ограничивающее сверху количество сопряжений сплайна. МКЧЛРАЗЛ, МАКСИМАЛЬНОЕ КОЛИЧЕСТВО ЧЛЕНОВ РАЗЛОЖЕ¬ НИЯ. Целое число, ограничивающее сверху количество членов разло¬ жения. МНКССПЛ, МИНИМАЛЬНОЕ КОЛИЧЕСТВО СОПРЯЖЕНИЙ СПЛАЙ¬ НА. Целое число, ограничивающее снизу количество сопряжений сплайна. МНЧЛРАЗЛ, МИНИМАЛЬНОЕ КОЛИЧЕСТВО ЧЛЕНОВ РАЗЛОЖЕНИЯ. Целое число, ограничивающее снизу количество членов разложения. НЕВ, НЕВЯЗКА РЕГРЕССИИ. Действительный вектор х(1 : пх ), содер¬ жащий разности между переменной регрессии и ее оценкой ОРЕ - коли¬ чество строк матрицы наблюдений МН). Имена и цифровые коды компо¬ нент вектора НЕВ содержатся в массивах ИВ и ЦВ. НЕВСГ1Л, НЕВЯЗКА, СПЛАЙН; НЕВЧЕЬ, НЕВЯЗКА, ПОЛИНОМЫ ЧЕБЫШЕВА. Действительное число, равно остаточной невязке оценки регрессии, усредненной по количеству значений переменной регрессии. ОРЕ, ОЦЕНКИ РЕГРЕССИИ. Действительный векторх(1 : ), содержа¬ щий оценки переменной регрессии для строк матрицы наблюдений МН (а?! — количество строк матрицы МН). Имена и цифровые коды компонент вектора ОРЕ содержатся в массивах ИВ и ЦВ. ОРЕСПЛ, ОЦЕНКИ РЕГРЕССИИ, СПЛАЙН; ОРЕЧЕБ, ОЦЕНКИ РЕГ¬ РЕССИИ, ПОЛИНОМЫ ЧЕБЫШЕВА. Действительный вектор х(1: пj ), содержащий оценки значений переменной регрессии — количество оцениваемых значений регрессии). Суффикс указывает использованный алгоритм восстановления регрессии. ОСР, ОЦЕНКА СРЕДНЕГО РИСКА. Действительное число х, равное квадратному корню из оценки среднего риска, полученной при восстанов¬ лении регрессии методом структурной минимизации среднего риска. ПАРК, ПАРАМЕТРЫ КАРТИНКИ. Целочисленный вектор х(1: 12), содержащий следующие параметры картинки: х(1) - количество символов в строке текстовой матрицы, содержащей картинку; х(2) - количество символов в картинке по горизонтали; х(3) — количество символов в картинке по вертикали; х(4) - количество классов, на которые разбиваются изображаемые точки: х(5 ) - ширина полей справа и слева от картинки; х(6) - ширина полей сверху и снизу от картинки; х(7) - количество делений оси X; 102
X (8) - количество делений оси Y. х(9) - шаг сетки ”+ + +” по горизонтали; X (10) - шаг сетки ”+ + +” по вертикали (при х( 10) < 0 сетка не печатает¬ ся) ; Х(11) - количество символов, в изображении рамки (при х (11 ) <0 рамка не печатается); X (1 2) — количество символов, с помощью которых изображаются кривые на графике. ПОИСКЕ, ПОИСК ГАММА. Текстовый вектор, содержащий ответ (ДА, НЕТ) на вопрос, задан ли поиск параметра ГАММА. РЭКЛРЕ, РЕЗУЛЬТАТЫ ЭКЗАМЕНА КУСОЧНО ЛИНЕЙНОЙ РЕГРЕС¬ СИИ. Действительная матрицах( 1 : 2, Г. 3), содержащая результаты экзаме¬ на кусочно линейной оценки регрессии : элементы х( 1 , / ) и х(2,/ ) равны среднеквадратичной ошибке и максимальной по модулю невязке НЕВ для векторов на обучении (/= 1), на экзамене (/ = 2) и для исключенных векторов ( / = 3). РЭРЕ, РЕЗУЛЬТАТЫ ЭКЗАМЕНА РЕГРЕССИИ. Действительная матри¬ ца, аналог матрицы РЭКЛРЕ для линейной оценки регрессии КФРЕ. СКОЗПРЕ, СКО ЗНАЧЕНИЙ ПЕРЕМЕННОЙ РЕГРЕССИИ. Действитель¬ ный вектор х(1 : ), содержащий среднеквадратичные ошибки (СКО) значений переменной регрессии, которые записаны в одном из столбцов матрицы наблюдений МН (д1 - количество строк МН). ССЧ, СО СВОБОДНЫМ ЧЛЕНОМ. Текстовая константа, определяющая вид выражения для линейной оценки регрессии: ССЧ = ДА - линейная оценка со свободным членом, ССЧ = НЕТ — линейная оценка без свободно¬ го члена. СЧЛ, СВОБОДНЫЙ ЧЛЕН. Действительное число, служащее свободным членом линейной оценки регрессии КФРЕ. СЧЛКЛРЕ, СВОБОДНЫЕ ЧЛЕНЫ КУСОЧНО ЛИНЕЙНОЙ РЕГРЕССИИ. Действительный вектор х(1 : ), содержащий свободные члены линейных функций, составляющих кусочно линейную оценку регрессии (п{ — коли¬ чество кусков). ТЕКК, ТЕКСТ НА КАРТИНКЕ. Текстовый вектор, содержащий заголо¬ вок картинки, заданный пользователем. У0, НАЧАЛО КООРДИНАТ НА ОСИ Y. Действительное число, соответ¬ ствующее точке оси У, выбранной в качестве начала координат. И1У,ИМЯ СТРОКИ 1 ДЛЯ ОСИ Y. Текстовый вектор, содержащий имя строки, в которой находятся значения, откладываемые по оси Y. Суффиксы 1, 2, 3 в мнемокодах И1У, И2У, ИЗУ определяют положение строки в мас¬ сиве данных: 1 1-строка трехмерной таблицы или столбец матрицы; 2 - 2-строка трехмерной таблицы или строка матрицы; 3 - 3-строка трехмерной таблицы. Х0, НАЧАЛО КООРДИНАТ НА ОСИ X. Действительное число, соответ¬ ствующее точке оси X, выбранной в качестве начала координат. И1Х, ИМЯ СТРОКИ 1 ДЛЯ ОСИ X. Текстовый вектор, содержащий и,мя строки, в которой находятся значения, откладываемые по оси X. Значе¬ ние суффиксов 1, 2, 3 в мнемокодах ИIX, И2Х, ИЗХ см. в описании масси- ваИ1У. 103
ЦАУП, ЦИФРОВЫЕ КОДЫ АПРИОРНО УПОРЯДОЧЕННЫХ ПЕРЕМЕН НЫХ. Целочисленный вектор х(1: пх), содержащий цифровые коды пере менных в заданном порядке (Hi — количество цифровых кодов). ЦНЕЗП, ЦИФРОВОЙ КОД НЕЗАВИСИМОЙ ПЕРЕМЕННОЙ. Целое число, равное цифровому коду столбца матрицы наблюдений МН, содержа¬ щего значения независимой переменной. ЦПРЕ, ЦИФРОВОЙ КОД ПЕРЕМЕННОЙ РЕГРЕССИИ. Целое число, равное цифровому коду переменной, выбранной в качестве переменной регрессии. Ц1У, ЦИФРОВОЙ КОД СТРОКИ 1 ДЛЯ ОСИ У. Целое число, равное цифровому коду строки, содержащей значения, откладываемые по оси У. Суффиксы 1, 2, 3, мнемокодов Ц1У, Ц2У, ЦЗУ имеют то же значение, что и суффиксы мнемокодов И1У, И2У, ИЗУ. Ц1Х, ЦИФРОВОЙ КОД СТРОКИ 1 ДЛЯ ОСИ X. Целое число, равное цифровому коду строки, которая содержит значения, откладываемые по оси X. Значение суффиксов 1, 2,3 мнемокодов Ц1X, Ц2Х, ЦЗХ описано в разделе массива И1 У. ЭТА, ПАРАМЕТР ЭТА. Действительное число х, 0 <х <1, равное значе¬ нию параметра т? операций восстановления регрессии. §5. ИНТЕРПРЕТАЦИЯ РЕЗУЛЬТАТОВ КОСВЕННЫХ ЭКСПЕРИМЕНТОВ, КЛАСТЕР-АНАЛИЗ, ВОССТАНОВЛЕНИЕ ПЛОТНОСТИ ВЕРОЯТНОСТИ В этом параграфе опишем следующие операции [2]. 1. Решение одномерных обратных задач: а) в классе полиномов Чебышева; б) в классе кубических сплайнов; в) методом регуляризации с выбором оптимальной величины пара метра регуляции. 2. Построение таксонной структуры множества векторов с использова¬ нием минимального покрывающего дерева. 3. Восстановление плотности вероятности методом структурной мини¬ мизации риска. Задача интерпретации результатов косвенного эксперимента возникает тогда, когда в распоряжении исследователя находятся измерения некою рой функции {yi = f(Xj) + ■>, z = 1где - случайная ошибка, а восстановить нужно другую функцию y(t), которая связана с f(x) некою рым известным образом. В программах пакета АСТА для решения обратных задач полагается, что эта связь имеет вид f(x) = J' R(x, typ(t)dt, а где ядро интегрального уравнения’ R (х, t) задано матрицей значений {Л(х,.Г7); /=1,...,/; /=1 А}. Пример 5.1. Восстановление функции по замерам функции/(х ) Значения ДхД х,- содержатся в матрице МЗЯИу вместе со значениями ядра 104
R(xirtj). В векторе СКОЗПРИУ заданы среднеквадратичные ошибки значений /(*/) для i = 1, . . . , I. НАЧАЛО РАБОТЫ; МАТРИЦА ЗНАЧЕНИЙ ЯДРА ИНТЕГРАЛЬНОГО УРАВНЕНИЯ = //1/1 . . . ; СКОЗПРИУ = . . . ; МАКСИМАЛЬНОЕ КОЛИЧЕСТВО ЧЛЕНОВ РАЗЛОЖЕНИЯ = 5; РЕШЕНИЕ ИНТЕГРАЛЬНОГО УРАВНЕНИЯ, ПОЛИНОМЫ ЧЕБЫШЕВА, ТАБЛИЦЫ: КОНЕЦ РАБОТЫ; Если нужно проверить, не образуют ли строки матрицы наблюдений ком¬ пактные группы в n-мерном пространстве, применяют алгоритм таксоно¬ мии. Иногда в качестве исходных данных вместо матрицы наблюдений используют матрицу рассеяний. Пример 5.2. Таксонная структура строится для введенной матрицы расстояний (5 объектов). HP; МАТРИЦА РАССТОЯНИЙ = @ИСМ, //1/1, 0 4 2 17 25 //2,0 1'11 7 //3,0 23 36 //4.0 15 //5,0; КОЛИЧЕСТВО УРОВНЕЙ = 3; ТАКСОНЫ ПО МАТРИЦЕ РАССТОЯНИЙ, ТАБЛИЦЫ; КР; В тех случаях, когда представляет интерес вид функции плотности вероят¬ ности значений, записанных в некотором столбце матрицы наблюдений, применяют программу восстановления плотности вероятности. Пример 5.3. Восстановление плотности вероятности распределения значений переменной ШИРИНА ЛЕПЕСТКА задачи ИРИС ФИШЕРА. HP; 3=ИРИС ФИШЕРА; СМ = МН (ИСХ); ИМЯ НЕЗАВИСИМОЙ ПЕРЕМЕННОЙ = ШИРИНА ЛЕПЕСТКА; МАКСИМАЛЬНОЕ КОЛИЧЕСТВО ЧЛЕНОВ РАЗЛОЖЕНИЯ = 5; ОЦЕНКА ПЛОТНОСТИ ВЕРОЯТНОСТИ, КАРТИНКИ; КР; Приведем краткие описания операций МРАССТ, РИУСПЛ, РИУЧЕБ, РЛСРЕГ, ОПЛВЕР, ТАКСМН, ТАКСМР. МРАССТ, МАТРИЦА РАССТОЯНИЙ (Т)1). Вычисление матрицы рас¬ стояний между строками матрицы наблюдений МН. Вычисляются всевозможные пары расстояний между строками МН, указанными значениями 1 и 3 маски МВ. Используются только те элементы строк, которые находятся в столбцах МН, отмеченных значениями 1 и 3 маски МП. Метрика задана параметром МЕТ. Значения параметров, принятые по умолчанию: МЕТ = ЭВКЛ. Печать результатов: МРАССТ - без печати, МРАССТТ - печать массива МРАССТ. РИУ, РЕШЕНИЕ ИУ (1-й суффикс: ЧЕБ, СПЛ, 2-й суффикс: Т, К, ТК; полные названия суффиксов: ЧЕБ - ПОЛИНОМЫ ЧЕБЫШЕВА, СПЛ — СПЛАЙН). Решение интегрального уравнения SR(x, t)<p(t)dt = f(x). а 1) В скобках перечислены возможные суффиксы операций. 105
Приближенное решение ip(f) интегрального уравнения отыскивается в виде разложения ио полиномам Чебышева с выбором оптимального числа членов разложения (не более МКЧЛРАЗЛ членов) или в виде кубического сплайна с сопряжениями в равноотстоящих точках с выбором оптимально¬ го числа сопряжений (не более МККССПЛ сопряжений). Выходной вектор ОРИУСПЛ, ОРИУЧЕБ содержит значения найденной функции в точках z15 . . . ,tn, записанных в последней строке матрицы МЗЯИУ. При ТОЧН = 2 реализуется ’’медленный’’ вариант алгоритма, в котором часть вычислений производятся с двойной точностью. Если МККСЕЛТ > 0, то выполняется оптимальная селекция значений правой части уравнения (не более МККСЕЛТ точек). Значения параметров, принятые по умолчанию: МКЧЛРАЗЛ = 20. МККССПЛ = 20, МНЧЛРАЗЛ = 1, МНКССПЛ = 0, УП =1, ТОЧН = 1 МККСЕЛТ = 0. Если вектор СКОЗПРИУ не задан, то полагается, что диспер¬ сии всех значений правой части интегрального уравнения одинаковы. Печать результатов: РИУ — без печати, РИУТ — печать массивов КФРИУ, НРИУ (при УП > 1), ОРИУ (при УП > 2); РИУК - печать графика восстановлен¬ ной зависимости и гистограммы распределения невязок правой части уравнения. РЛСРЕГ, РЕШЕНИЕ ЛИНЕЙНОЙ СИСТЕМЫ МЕТОДОМ РЕГУЛЯРИЗА¬ ЦИИ (Т). Решение системы линейных алгебраических уравнений с выбором оптимального значения параметра регуляризации. Цифровой код столбца матрицы МЛС, содержащего свободные члены системы линейных уравне¬ ний, указан в ЦСТСВЧЛ. Система решается методом регуляризации с выбором оптимального значения параметра регуляризации. Найденное решение записывается в виде вектора РЛС. Значения параметров, принятые по умолчанию: УП = 1, ПАРЕГН = 0.1, ПАРЕГК = 10’4, ПАРЕГМ = 0.1. Если не задан скалярЦСТСВЧЛ, то полага¬ ется, что свободные члены записаны в последнем столбце матрицы МЛС. Печать результатов: РЛСРЕГ - без печати, РЛСРЕГТ — печать массивов ХАРРЛС (при УП > 1) и РЛС (при УП > 2). ОПЛВЕР, ОЦЕНКА ПЛОТНОСТИ ВЕРОЯТНОСТИ (Т, К, ТК). Восстанов¬ ление функции плотности вероятности. Оценка плотности вероятности случайной величины отыскивается в виде разложения по системе функций с выбором оптимального числа членов разложения (не более МКЧЛРАЗЛ членов). Значения случайной величины содержатся в столбце матрицы наблюдений МН, указанном в ИНЕЗП или ЦНЕЗП. Используются только значения обучающей последовательности. Прочерки в матрице МН пропу¬ скаются. Значения восстановленной функции в КИНТ равноотстоящих точках записываются в массив ОЗПЛВЕР, а коэффициенты разложения - в массив КФРПЛВЕР. Значения параметров, принятые по умолчанию: УП = 1, КИНТ = 10, МКЧЛРАЗЛ = 20. Печать результатов: ОПЛВЕР — без печати, ОГ1ЛВЕРТ - 106
печать массивов КФПЛВЕР (при УП > 1),ОЗПЛВЕР (при УП >2); ОПЛВЕРК - печать графика восстановленной функции. ТАКСМН, ТАКСОНЫ ПО МАТРИЦЕ НАБЛЮДЕНИЙ (Т). Построение тасонной структуры множества строк матрицы наблюдений МН. Эквива¬ лентно выполнению операций МРАССТ и ТАКСМР. ТАКСМР, ТАКСОНЫ ПО МАТРИЦЕ РАССТОЯНИЙ (Т). Построение таксонной структуры множества объектов, описанного матрицей расстоя¬ ний МРАССТ. Такео иная структура множества векторов определяется следующим образом. Строится минимальное покрывающее дерево (МПД) и запомина¬ ются длины ребер этого дерева. Разбиение множества векторов на i таксо¬ нов получается удалением из МПД i — 1 наиболее длинных ребер. Для того чтобы уменьшить вероятность образования таксонов, сильно различающихся по объему (в частности, затруднить образование таксонов, состоящих из одного вектора ), применена следующая эвристическая форму¬ ла для эффективного расстояния между таксонами Г /1 • /2 1 . г, где г — расстояние между таксонами, определенное по матрице расстояний, Z! и Z2 — количества векторов в таксонах, р - входной параметр алгоритма ПАРАМЕТР РО, 0 < р < 1. При р - 1 осуществляется выравнивание объемов таксонов, а при р = 0 - нет. Для построения используются векторы обучающей последовательности. Векторы экзаменационной последовательности присоединяются к ближай¬ шим таксонам полученной структуры. Значения параметров, принятые по умолчанию: КУРТ - 5, ПАРАМЕТР РО = 1. Печать результатов: ТАКСМР — без печати, ТДКСМРТ — печать массивов НОТАКС и МПД. Опишем структуру и назначение массивов информации ИСТСВЧЛ, КФРИУ, МЗЯИУ, МПС, МПД, МРАССТ, НРИУ, ОЗПЛВЕР, ОРИУ, ПАРЕГ, РЛС, ПАРАМЕТР РО, СКОЗПРИУ; ЦМЛС, ХАРРЛС, ЦСТСВЧЛ. ИСТСВЧЛ, ИМЯ СТОЛБЦА СВОБОДНЫХ ЧЛЕНОВ. Текстовый вектор, содержащий имя столбца матрицы линейной системы МЛС, в котором записаны свободные члены системы линейных алгебраических уравнений. КФРИУ, КОЭФФИЦИЕНТЫ РЕШЕНИЯ ИУ (ЧЕБ, СПЛ, полные названия суффиксов: СПЛ - СПЛАЙН, ЧЕБ - ПОЛИНОМЫ ЧЕБЫШЕВА). Действи¬ тельный вектор х( 1 : пх) (для суффикса ЧЕБ) или действительная матрица х(1 : щ, 1:2) (для суффикса СПЛ), содержащие коэффициенты разложе¬ ния решения интегрального уравнения по полиномам Чебышева или соот¬ ветственно коэффициенты кубического сплайна, служащего решением этого уравнения (hj — количество полиномов или сопряжений сплайна). КФРПЛВЕР, КОЭФФИЦИЕНТЫ РАЗЛОЖЕНИЯ ПЛОТНОСТИ ВЕРОЯТ¬ НОСТИ. Действительный вектор х(1:и1), содержащий коэффициенты разложения восстановленной плотности вероятности — количество членов разложения). МЗЯИУ, МАТРИЦА ЗНАЧЕНИЙ ЯДРА ИУ. Действительная матрица * ( 1 : п j , 1 : п2 )> содержащая значения ядра R(x, t) интегрального 107
уравнения — f(x), а вычисленные для t = tx,. . . , tn * _ х их = Xi,.. . , хп _ х. Последняя строка матрицы содержит значения Гх,. . . , х, а последний столбец — значения функции /(х), измеренные в точках х15. . . ,хп^_х. Элемент матрицы х (п 1, п2 ) всегда равен нулю. МЛ С, МАТРИЦА ЛИНЕЙНОЙ СИСТЕМЫ. Действительная матрица х (1: Hi, 1: п2), содержащая коэффициенты системы линейных алгебраиче¬ ских уравнений с — 1 неизвестными. Один из столбцов матрицы, указан¬ ный пользователем, содержит столбец свободных членов. МИД, МИНИМАЛЬНОЕ ПОКРЫВАЮЩЕЕ ДЕРЕВО. Целочисленная матри¬ ца х(1: 3, 1: п2 ), содержащая описания дуг минимального покрывающего дерева для множества строк матрицы наблюдений MH:x(l,z) и x(2,z) — цифровые коды векторов, служащих началом и концом z-й дуги дерева, х(3, i) — длина z-й дуги в условных единицах. Здесь п\ — количество дуг, равное количеству строк матрицы МН без единицы. МРАССТ, МАТРИЦА РАССТОЯНИЙ. Целочисленная квадратная симмет¬ ричная матрица х (1: пх, 1: п i), элемент x(z, /); i = 1,. . . , п х;/ = 1, . . . , их, которой равен расстоянию между z-м и /-м объектами в условных единицах («1 — количество объектов). Объектами часто служат строки матрицы наблюдений МН. НРИУ, НЕВЯЗКА РЕШЕНИЯ ИУ (СПЛ, ЧЕБ) . Действительное число, рав¬ ное остаточной невязке правой части интегрального уравнения, усредненной по количеству значений правой части. ОЗПЛВЕР, ОЦЕНКИ ЗНАЧЕНИЙ ПЛОТНОСТИ ВЕРОЯТНОСТИ. Дейст¬ вительный вектор, содержащий оценки значений плотности вероятности. ОРИУ, ОЦЕНКИ РЕШЕНИЯ ИУ (СПЛ, ЧЕБ). Действительный вектор х(1:Л1), содержащий значения решения интегрального уравнения - количество точек, в которых вычисляются значения). Суффикс указывает использованный алгоритм решения интегрального уравнения. ПАРЕГ, ПАРАМЕТР РЕГУЛЯРИЗАЦИИ (Н, К, М, полные названия суффиксов: Н - НАЧАЛЬНЫЙ, К - КОНЕЧНЫЙ, М - МНОЖИТЕЛЬ). Действительное число х > О (Г1АРЕГН > ПАРЕГК), служащее параметром операции РЛСРЕГ. РЛС, РЕШЕНИЕ ЛИНЕЙНОЙ СИСТЕМЫ. Действительный векторх(1: пх), содержащий решение системы линейных алгебраических уравнений с их неизвестными. РО, ПАРАМЕТР РО. Действительное число х, 0 <х < 1, равное значению параметра р в формуле для эффективного расстояния между таксонами. СКОЗПРИУ, СКО ЗНАЧЕНИЙ ПЕРЕМЕННОЙ ДЛЯ РЕШЕНИЯ ИУ. Дейст¬ вительный вектор х(1: пх), значения компонент которого пропорциональ¬ ны среднеквадратичным ошибкам (СКО) значений правой части интеграль¬ ного уравнения, записанным в последнем столбце матрицы МЗЯИУ — количество строк матрицы МЗЯИУ без единицы). УМЛС, ЦИФРОВЫЕ КОДЫ СТОЛБЦОВ МЛС. Целочисленный вектор, содержащий цифровые коды столбцов матрицы линейной системы алгебра¬ ических уравнений МЛС. 108
ХАРРЛС, ХАРАКТЕРИСТИКИ РЕШЕНИЯ ЛИНЕЙНОЙ СИСТЕМЫ. Дейст¬ вительный вектор х(1:4), компоненты которого имеют следующий смысл: х(1) - найденное оптимальное значение параметра регуляризации; х(2) — невязка при оптимальном значении параметра регуляризации; Х(3 ) — наименьшее достигнутое значение критерия; _ значение шага е-сети,при котором критерий принимает наименьшее значение. ЦСТСВЧЛ, ЦИФРОВОЙ КОД СТОЛБЦА СВОБОДНЫХ ЧЛЕНОВ. Целое число, равное цифровому коду столбца матрицы линейной системы (МЛС), содержащего свободные члены линейной системы алгебраических урав¬ нений . ГЛАВА VI МНОГОЭТАПНАЯ ОБРАБОТКА ДАННЫХ С ПОМОЩЬЮ ПРОГРАММ ПАКЕТА АСТА Описания работ, приведенные в предыдущих главах, иллюстрировали главным образом набор операций, реализованный в пакете прикладных статистических программ АСТА. В данной главе будет показано, как с по¬ мощью этого набора можно составлять задания, которые описывают слож¬ ные, состоящие из нескольких последовательных этапов, процессы обра¬ ботки данных. Для этого рассмотрим одну из практических задач, искус¬ ственно усложнив ее решение так, чтобы продемонстрировать различные приемы составления сложных заданий. § 1. ВВОД И ПЕЧАТЬ ИСХОДНЫХ ДАННЫХ Рассмотрим задачу статистической обработки данных, собранных в не¬ котором медицинском учреждении, а именно задачу дифференциальной диагностики определенных злокачественных заболеваний. Воздержимся от того, чтобы приводить полные медицинские названия, и обозначим изучаемые заболевания ’’рак’1 и ’’фиброаденома”. Пусть матрица наблюдений содержит результаты цитологического ис¬ следования отпечатков злокачественных и доброкачественных опухолей: 100 случаев рака и 100 случаев фиброаденомы. В каждом отпечатке слу¬ чайным образом отбирали 20 клеток и для каждой из них определяли зна¬ чения ряда качественных и количественных признаков: размеры клеток, ядер и ядрышек, форму цитоплазмы, ядра и ядрышка, расположение ядра и ядрышек, структуру хроматина и другие. Описания работ для ввода исходного материала приведены в следую¬ щем примере. Пример 1.1. Ввод массивов ОПИСАНИЕ ЗАДАЧИ, НОМЕРА КЛАС- СОВ, ИМЕНА КЛАССОВ; ИМЕНА ГРАДАЦИЙ. Введенные массивы йена- таются и записываются в раздел базы данных с именем ЦИТОЛОГИЯ. 109
НАЧАЛО РАБОТЫ: ЗАДАЧА = ЦИТОЛОГИЯ: СЕМЕЙСТВА МАССИВОВ = 'ОПИСАНИЕ ЗАДАЧИ (ЦИТ), ИМЕНА КЛАССОВ' '(ЦИТ)', ОПИСАНИЕ ЗАДАЧИ (ЦИТ) = 'ДИФФЕРЕНЦИАЛЬНАЯ ДИАГНОС1 ИКА”РАК/' 'ФИБРОАДЕНОМА” НОМЕРА КЛАССОВ (ЦИТ) = 1 П2000 2 112000: ИМЕНА КЛАССОВ (ЦИТ) = ИТС’, РАК, ФИБРОАДЕНОМА: СМ = МАТРИЦА НАБЛЮДЕНИЙ (КАЧЕСТВ. ПРИЗЫ.) : ИМЕНА ГРАДАЦИЙ (КАЧЕСТВ. ПРИЗЫ.) = < ИТС, ФНС, ///СТРУКТУРА ХРОМАТИНА, ЗЕРНИСТАЯ, СЕТЧАГАЯ. /// ФОРМА ЯДРА, КРУГЛАЯ. ОВАЛЬНАЯ. ЛЕНТОВИДНАЯ. НЕПРАВИЛЬНАЯ, ///РАСПОЛОЖЕНИЕ ЯДРА. ЦЕНТРАЛЬНОЕ, ЭКСЦЕНТРИЧНОЕ. БАЗАЛЬНОЕ, ///ФОРМА ЦИТОПЛАЗМЫ, КРУГЛАЯ. ОВАЛЬНАЯ. КУБИЧЕСКАЯ, ЦИЛИНДРИЧЕС КАЯ, ПОЛИГОНАЛЫ1АЯ, НЕПРАВИЛЬНАЯ. ///• • •; ПЕЧАТЬ: ЗАПИСЬ: СМ = МАТРИЦА НАБЛЮДЕНИЙ (КОЛИЧЕСТВ. ПРИЗЫ ) : ПОЛНЫЕ НАЗВАНИЯ ПЕРЕМЕННЫХ (КОЛИЧЕСТВ. ПРИЗЫ.) = И 1 С. ШИРИНА КЛ1 ТКИ, ДЛИНА КЛЕТКИ. ШИРИНА ЯДРА. ДЛИНА ЯДРА, ШИРИНА ЯДРЫШКА, ДЛИНА ЯДРЫШКА. КОЛИЧ1 СТВО ЯДЕР. КОЛИЧЕСТВО ЯДРЫШЕК. . . . : ЗАПИСЬ: КОНЕЦ РАБОТЫ: В работе вводится вектор ОПИСАНИЕ: ЗАДАЧИ, содержащий краткую формулировку поставленной задачи в произвольной форме. Этот вектор используется только в качестве заголовка при печати результатов. Кроме этого, ВВОДИ1СЯ вектор НОМЕРА КЛАСС ОВ. Пример 1.2. Ввод двух матриц наблюдений: действительной и цело¬ численной. Поскольку объем матриц велик, го удобнее вводить их по частям. HP: 3 = ЦИТОЛОГИЯ: МН (КАЧЕС ТВ. ПРИЗЫ ) = ® ИЦЭ. Т2. /.'СТРУКТУРА ХРОМА ТИНА, 1 1 12I221 122112221122 . .21 1. //ФОРМА ЯДРА, 2.33144321 21 432. . . . //РАСПОЛОЖЕНИЕ ЯДРА. 331 1 1 11 23 1 1 1 1. . .; ЗАПИСЬ: КОНЕЦ РАБОТЫ: HP; 3 = ЦИТОЛОГИЯ: МН(ЧАСГЬ2) = (" ИЦЭ. Т2 //ФОРМА ЦИТОПЛАЗМЫ. 6111511231114141111...; СМ = (« ИТС. МН (КАЧЕСТВ. ПРИЗЫ). МН (ЧАСТЬ 2): ОБЪЕДИНЕНИЕ МАССИВОВ ДАННЫХ; П; 3; КР; HP; 3= ЦИТОЛОГИЯ; МН (КОЛИЧЕСТВ. ПРИЗН.) = (» Т2. //ШИРИНА КЛГТКИ. 10.0 12 9 18 20 1 1 . . . //ДЛИНА KjII ТКИ, 20 25 18 21... // ДЛИНА ЯДРА. 6 8 10 7 14 12...; ЗАПИСЬ; КОНЕЦ РАБОТЫ; 110
HP: 3 = ЦИТОЛОГИЯ; MH (ЧАСТЬ 2 ) = «'T2; //ШИРИНА ЯДРЫШКА. 1.2 0.8 1.2 1.1 ... ; СМ = <“ ИТС. МН (КОЛИЧЕСТВ. ПРИЗН.), МН (ЧАСТЬ 2); ОБЪЕДИНЕНИЕ МАССИВОВ ДАННЫХ; ПЕЧАТЬ; ЗАПИСЬ; КР; Теперь введем цифровые коды строк матриц наблюдений, которые имеют вид ппптт. где ппп - целое число от 1 до 200 - номер отпечатка, а тт — целое число oi 1 до 20 - порядковый номер клетки на отпечатке. Удобно, чтобы каждое из подсемейств КАЧЕСТВ. ПРИЗЫ, и КОЛИ¬ ЧЕСТВ. ПРИЗЫ, содержало массив цифровых кодов ЦВ. Поскольку обе матрицы имеют одинаковые номера строк, ю продублируем введенный массив ЦВ с помощью фиктивной операции КОРРЕКЦИЯ. П ример 1.3. Ввод цифровых кодов строк матриц наблюдений. ПР: 3= ЦИТОЛОГИЯ: ЦИФРОВЫЕ КОДЫ ВЕКТОРОВ (КАЧ1СТВ. ПРИЗН.) = 101 А20 201 А20 301 АЗО . . . 20001 А20; HOBOI- ИМЯ ПОДСЕМЕЙСТВА = КОЛИЧЕСТВ. ПРИЗН.; НАЧАЛО КОРРЕКЦИИ; ЦВ (КАЧЕСТВ. ПРИЗН.) = 1 : КОНЕЦ КОРРЕКЦИИ; СМ - 'ШИКАЧЕСТВ. ПРИЗН). ЦВ (КОЛИЧЕСТВ. ПРИЗН.) ЗАПИС Ь: КР; § 2. ПЕРВОНАЧАЛЬНАЯ СТАТИСТИЧЕСКАЯ ОБРАБОТКА ДАННЫХ Прежде чем получать статистические характеристики введенных в пре¬ дыдущем параграфе данных, сформируем еще две матрицы наблюде¬ ний (целочисленную и действительную), каждая из которых содержит полный набор переменных. Для этого действительные переменные нужно преобразовать в целочисленные, а целочисленные в действительные. Пример 2.1. Преобразование действ и ien ьной матрицы МН (КОЛИ¬ ЧЕСТВ. ПРИЗЫ.) в целочисленную МН(ЦИТ-Ц) осуществим в три этана. Эти этапы различаюIся значениями массива ВОЗМОЖНЫЕ ГРАДАЦИИ, содержащего Поспелова! ельность чисел, среди которых оптимальным об¬ разом отбираются границы интервалов. Признаки ШИРИНА КЛЕТКИ, ДЛИНА КЛЕТКИ, ШИРИНА ЯДРА и ДЛИНА ЯДРА будут преобразованы в целочисленные переменные с помощью оптимальною набора интервалов, границы которых выбраны среди чисел 4. 6, 8, 10,. . .32. Для перемен¬ ных ШИРИНА ЯДРЫШКА, ДЛИНА ЯДРЫШКА границы оптимальных интервалов будут выбраны среди чисел 0, 0.5, 1.0, 1.5, . . . 10.0. Для пре¬ образования остальных действительных переменных массив ВОЗМОЖ¬ НЫЕ ГРАДАЦИИ задавать не будем. Поэтому границы оптимальных интер¬ валов будут выбираться из набора всех значений переменной, содержащих¬ ся в соответствующем столбце матрицы наблюдений. HP: 3 =-’ЦИТОЛОГИЯ; СМ = ИТС. 'МШКОЛИЧЕСТВ. ПРИЗН.), НОКЛ (ЦИТ) МН (ЦИТ-Ц) ; ВОЗМОЖНЫЕ ГРАДАЦИИ (ИСНОЛЬЗ. ДЛЯ ГРАД:) - (“ Ш2 4 А15 ; МВ - 1 П5 0 Г115 Г Н; СПИСОК ИМЕН ПЕРЕМЕННЫХ. ВЗЯТЫХ = (“ ИТС, ШИРИНА КЛЕТКИ, 111
ДЛИНА КЛЕТКИ, ШИРИНА ЯДРА, ДЛИНА ЯДРА; ГРАДАЦИИ И КОДИРОВАНИЕ, ТАБЛИЦЫ; СМ = ИТС, 'МН (КОЛИЧЕСТВ. ПРИЗН.) , НОКЛ (ЦИ Г) ', МН (ЦИТ-Ц2); ВОЗМОЖНЫЕ ГРАДАЦИИ = Ш0.5 0А22; СИПВ = ("ИТС, ШИРИНА ЯДРЫШКА, ДЛИНА ЯДРЫШКА; ГРДЦТ; СМ = (" ИТС, МН (ЦИТ-Ц) , МН (ЦИТ-Ц2) ; ОБЪЕДИНЕНИЕ МАССИВОВ ДАННЫХ; СМ = ВОЗГР; СТЕРМООД; СМ =(о ИТС,'МН (КОЛИЧЕСТВ.ПРИЗН), НОКЛ (ЦИТ)', МН(ЦИТ-Ц2); СИПН = Г" ИТС, ШИРИНА КЛЕТКИ, ДЛИНА КЛЕТКИ, ШИРИНА ЯДРА, ДЛИНА ЯДРА, ШИРИНА ЯДРЫШКА, ДЛИНА ЯДРЫШКА; ГРДЦГ; СМ =(«' ИТС,МН (ЦИТ-Ц), МЩЦИТ-Ц2); ОБЪЕДИНЕНИЕ МАССИВОВ ДАННЫХ; ЗАПИСЬ; СМ = МВ (ИСПОЛЬЗ. ДЛЯ ГРАД.); ЗАПИСЬ; КОНЕЦ РАБОТЫ: В этом примере с помощью массива МВ были заданы строки матрицы МН (КОЛИЧЕСТВ. ПРИЗН.), с помощью которых оценивалось качество преобразования. Строго говоря, соответствующие строки матрицы МН(ЦИТ-Ц) уже не могут считаться независимыми реализациями случай ного вектора, поэтому для упрощения анализа результатов при последую щей статистической обработке матрицы МН (ЦИТ-Ц) эти строки следует исключать. Массив МВ записывается в БД, поскольку он понадобится в последую¬ щих работах. Пример 2.2. Преобразование целочисленных переменных в действи¬ тельные. В векторе НОМЕРА СТРОК СМ задана перестановка строк мат¬ рицы СМ: 2-я и 1-я строки меняются местами. HP; 3 - ЦИТОЛОГИЯ; СМ = (<• ИТС, МН (КАЧЕСТВ. ПРИЗН.), МН (ЦИТ-Д); ПРЕОБРАЗОВАНИЕ ЦЕЛЫХ В ДЕЙС ТВИТЕЛЬНЫЕ; НОМЕРА СТРОК СМ = 2 1; ЗАПИСЬ; КР; Теперь осталось объединить полученные матрицы МН (ЦИТ-Ц) и МН (ЦИТ-Д) с исходными, чтобы получить полный набор переменных и в действительной, и в целочисленной матрицах наблюдений. Пример 2.3. Объединение матриц наблюдений. HP; 3 = ЦИТОЛОГИЯ; СМ = (" ИТС, МН (КАЧЕСТВ. ПРИЗН.), МН (ЦИТ-Ц), МН(ЦИТ-ЦП); ОМД; НОСМ =3; ЗАПИСЬ; СМ = С" ИТС, МН (КОЛИЧЕСТВ. ПРИЗН), МН (ЦИТ-Д), МН(ЦИТ-ДП); ОМД; НОСМ =3; ЗАПИСЬ; СМ = МН (ЦИТ-Д); СТЕРЕТЬ ПОДСЕМЕЙСТВО: СМ = МН (ЦИТ-Ц) ; СТЕРЕТЬ ПОДСЕМЕЙСТВО; КР; А сейчас займемся целочисленной матрицей наблюдений. Пример 2.4. Вычисление коэффициентов информативности и частот значений признаков в двух классах; РАК и ФИБРОАДЕНОМА. Сначала с помощью тех строк матрицы МН, информация из которых не исполь- 112
зовалась при отыскании оптимальных градаций, а затем, для сравнения, с помощью строк, использованных при выполнении операции ГРДЦТ. В качестве признака класса указан признак с цифровым кодом 1, сформи¬ рованный операцией ГРДЦТ. Этот признак содержит значения вектора НОКЛ, заданного при выполнении операции ГРДЦТ. Кроме коэффициентов информативности и частот значений признаков, вычисляются частоты всех возможных пар значений двух признаков. В переборе участвуют все признаки, кроме признака класса. Цифровой код исключенного признака со знаком минус указан в массиве СПИСОК МНОЖЕСТВ КОНЪЮНКЦИЙ. Печатается информация только о тех конъюнкциях, для которых разность частот в двух классах превышает 10%. HP; 3 =ЦИТОЛОГИЯ; МВ (НЕИСПОЛЬЗ. ДЛЯ ГРАД.) = О П5 1 П15 Г П; СМ = 'МН (ЦИТ-ЦП), МВ (НЕИСПОЛЬЗ. ДЛЯ ГРАД.)' ; ЦИКЛ = 1; ЧАСТОТЫ И ИНФОРМАТИВНОСТЬ, ТАБЛИЦЫ; СМ = ' МН (ЦИТ-ЦП), МВ (ИСПОЛЬЗ. ДЛЯ ГРАД.)'; ЧИ Г; РАЗНОСТЬ ЧАСТОТ - 10; СПИСОК МНОЖЕСТВ КОНЪЮНКЦИЙ = ///, //,/1, -1 //, -1; КОНЪЮНКЦИИ, ТАБЛИЦЫ; СМ = МВ (НЕИСПОЛЬЗ. ДЛЯ ГРАД ) ; ЗАПИСЬ; КР; Нужно подчеркнуть, что для определения достоверности различий час¬ тот конъюнкций, отобранных среди большого количества конъюнкций по критерию, зависящему от значений частот, нужно учитывать объем просмотренного множества конъюнкций. Следовательно,обычные способы оценки достоверности различий (критерий Стьюдента, критерий %2) здесь неприменимы. Если после анализа результатов выполнения работы из примера 2.4 выяснится, что сочетания некоторых признаков высокоинформативны, то можно попытаться сформировать новые нелинейные признаки и вклю¬ чить их значения в матрицу МН (ЦИТ-ЦП) . Пример 2.5. Формируется матрица МН(ЦИТ-НОВ), содержащая значение одного нового признака с названием НЕПР.ФОРМ.ЦИТ.И ЗЕРН. СТР. ХРОМ., равного 1 для клеток с неправильной формой цитоплазмы (градация 6 признака ФОРМА ЦИТОПЛАЗМЫ) и зернистой структурой хроматина (градация 1 признака СТРУКТУРА ХРОМАТИНА). Для клеток с другим сочетанием значений этих переменных значение нового признака будет равно 2. Имя нового признака совпадает с именем логической функ¬ ции ЛФ, использованной при формировании значений нового признака. Полученная матрица МН(ЦИТ-НОВ) добавляется к матрице наблюде¬ ний МН(ЦИТ-ЦП). Объединенная матрица записывается в базу данных. HP; 3 = ЦИТОЛОГИЯ; СМ = ИТС, МН (ЦИТ-ЦП), МН (ЦИТ-НОВ) ; ЛОГИЧЕСКИЕ ФУНКЦИИ = //НЕПР. ФОРМ. ЦИТ. И ЗЕРН. СТР. ХРОМ./1, ' (/ФОРМА ЦИТОПЛАЗМЫ = 6 И /СТРУКТУРА ХРОМАТИНА = 1)' ; ФОРМИРОВАНИЕ; ОБЪЕДИНЕНИЕ МАССИВОВ ДАННЫХ: 3; КР; Теперь займемся действительной матрицей наблюдений МН(ЦИТ-ДП). Пример 2.6. Сначала вычисляются выборочные средние, дисперсии и коэффициенты корреляции для всех переменных. Затем строятся три Диаграммы рассеяния: 8. В.А. Кощеев ИЗ
а) в координатах ШИРИНА КЛЕТКИ, ДЛИНА КЛЕТКИ; б) в координатах ШИРИНА ЯДРА, ДЛИНА ЯДРА; в) в первых двух главных компонентах подпространства шести пере¬ менных, перечисленных в списке СИПВ. Точки класса РАК обозначаются символом Р, а точки класса ФИБРО¬ АДЕНОМА символом Ф. ИР: 3 = ЦИТОЛОГИЯ; СМ = 'МИ (ЦИТ-ДП). НОКЛ СЦИ1) '; СРЕДНИЕ И ДИСПЕРСИИ, ТАБЛИЦЫ, КАРТИНКИ; МАТРИЦА КОРРЕЛЯЦИЙ, ТАБЛИЦЫ; ИМЯ СТРОКИ 1 ДЛЯ ОСИ У = ШИРИНА КЛЕТКИ; ИМЯ С ТРОКИ 1 ДЛЯ ОСИ X - ДЛИНА КЛЕТКИ; ВЫСОТА КАРТИНКИ - 60; ШИРИНА КАРТИНКИ = 120; СПИСОК СИМВОЛОВ -■= /РАК. Р /ФИБРОАДЕНОМА, Ф; ДИАГРАММА РАССЕЯНИЯ, ТАБЛИЦЫ, КАРТИНКИ; И1У - ШИРИНА ЯДРА; И1Х = ДЛИНА ЯДРА; ДИАГРТК; СМ = (“ ИТС. МН (ЦИТ-ДП), МН (РАБОЧАЯ): С ИПВ = (“ ИТС, ШИРИНА КЛЕТКИ, ДЛИНА КЛЕТКИ. ШИРИНА ЯДРА, ДЛИНА ЯДРА. ШИРИНА ЯДРЫШКА, ДЛИНА ЯДРЫШКА; ВЫДЕЛЕНИЕ ЧАСТИ МАССИВА ДАННЫХ; СМ = (" ИТС, МН (РАБОЧАЯ), МН (СОБСТВЕННЫЙ БАЗИС) ; ГЛАВ НЫ Е КОМ ПО Н Е Н ТЫ; СМ = МН (СОБСТВЕННЫЙ БАЗИС); Ц1Х = 1; Ц1У = 2; ДИАГРТК; КР; § 3. ОПЕРАЦИИ РАСПОЗНАВАНИЯ ОБРАЗОВ И ВОССТАНОВЛЕНИЯ РЕГРЕССИИ Предположим, что после изучения результатов первоначальной статис¬ тической обработки выяснилось следующее: 1) строки матрицы наблюдений МН(ЦИТ-ДП) с номерами 13412, 13505. 13506, 13507 изображаются на диаграммах рассеяния точками, далеко об¬ стоящими от основного более или менее компактного облака точек; 2) значения признака ШИРИНА ЯДРЫШКА сильно коррелируют со значениями признака ДЛИНА ЯДРЫШКА. Принимается . решение в дальнейшем исключать перечисленные строки матриц МН(ЦИТ-ДП) и МН(ЦИТ-ЦП) как нетипичные (возможно, оши¬ бочные) , а признак ШИРИНА ЯДРЫШКА как сильно связанный с приз¬ наком ДЛИНА ЯДРЫШКА (т.е. содержащий практически ту же инфор¬ мацию) . Пример 3.1. Вычисляется два варианта решающих правил: в первом используются все признаки, а во втором - только те из них, коэффициент информативности которых больше 0.2. Экзамен решающих правил прово¬ дится на векторах с цифровыми кодами вида пппттп, где ппп — числа 1. 2, . . . , 200, а тт - одно из чисел 11, 12. 13. При выполнении операции ФОРМ используется вектор коэффициентов информативности КФИ, полу¬ ченный с помощью операции ИНФОРМАТИВНОСТЬ. HP; 3 = ЦИТОЛОГИЯ; 114
CM = 'МН(ЦИТ-ЦП), MB (НЕИСПОЛЬЗ. ДЛЯ ГРАД.)' ; СЦВ11 = 1 3412 13505 АЗ; ВИН = Н; ЦИКЛ = 1; СЦВЭ - (« Ш20. 11 А200 12 А200 13 А200; ( ИНН = ШИРИНА ЯДРЫШКА; РГ1БТК; ИНФОРМАТИВНОС ТЬ; СМ = (<’ И ГС, КФИ. МГ1 (ИНФ. БОЛЬШЕ 0.2) ; ЛФ = ' / = 0.2 : 1.0' ; ФОРМ; СМ - 'МН(ЦИТ-ЦП). MB (III ИСПОЛЬЗ. ДЛЯ ГРАД.), МН (ИНФ.БОЛЬШЕ 0.2) '; РГ1БТК; КР; Пример 3.2. Восстанавливается линейная зависимость переменной ШИРИНА КЛЕТКИ о г остальных переменных, кроме переменной ШИРИНА ЯДРЫШКА. Используется алгоритм пошаговой регрессии ПОРТ. Затем строится диаграмма рассеяния в плоскости первых двух главных компо¬ нент пространства всех признаков. Символами ”1” отмечены точки, для которых абсолютная величина отклонения (невязка) построенной зави¬ симости си значений переменной ШИРИНА КЛЕТКИ лежит в пределах от 0 до 2. Значениями 2 и 3 отмечены точки с отклонениями, лежащими в интервалах от 2 до 5 и свыше 5 соответственно. HP; 3 -ЦИТОЛОГИЯ; СМ = 'МН(ЦИТ-ДП), МВ (НЕИСПОЛЬЗ. ДЛЯ ГРАД.)'; СНВН - 13412. 13505 АЗ; ВИН = Н; СЦВЭ = (« Ш20 11 А200 12 А200 13 А200; СИПЫ - ШИРИН/Ч ЯДРЫШКА; АЛРЕ - НОР4; ИМЯ ПЕРЕМЕННОЙ РЕГРЕССИИ = ШИРИНА КЛЕТКИ; ВФТК; СМ = ИТС. НЕВ, НОКЛ (ПО НЕВЯЗКЕ) ; ЛФ = '/ = -2:2, (/ = 5 ; -2.01 ИЛИ/ = 2.01 : 5),' '(/ = -100 : 5.01 ИЛИ / =5.01 : 100)'; ФОРМ; СМ = (« ИТС, МН (ЦИТ -ДП). МН (РАБОЧАЯ ) ; ГЛКОМП; Ц1Х = 1; 1Д1У = 2; ВК = 60; ШК = 120; СМ = («ИГС, МН (РАБОЧАЯ), НОКЛ (ПО НЕВЯЗКЕ); ДИАГРТК; КР; Пример 3.3. Восстанавливается зависимость переменной ШИРИНА КЛЕТКИ от главных компонент двух базисов собственных векторов: первый базис построен в подпространстве, образованном переменными ДЛИНА КЛЕТКИ, ШИРИНА ЯДРА, ДЛИНА ЯДРА, ДЛИНА ЯДРЫШКА. Второй базис построен в подпространстве, образованном всеми остальны¬ ми переменными. Переменные ШИРИНА КЛЕТКИ и ШИРИНА ЯДРЫШКА не принадлежат указанным подпространствам. Порядок добавления глав¬ ных компонент в уравнение регрессии задан в векторе ЦАУП. Цифровые коды компонент первого базиса: 2, 3, 4, 5. Цифровые коды компонент второго базиса: 7,8,9,10,... HP; 3 = ЦИТОЛОГИЯ: СМ = ИТС. МН(ЦИТ-ДП), МН (РАБОЧАЯ); ( ИПО = (« ИТС, ДЛИНА КЛЕТКИ, ШИРИНА ЯДРА, ДЛИНА ЯДРА, ДЛИНА ЯДРЫШКА; МП = -« У2; ГЛКОМП: 8* 115
CM = (а ИТС, MH (ЦИТ-Д11), MH (РАБОЧАЯ 2); СИПЭ = ИТС, ШИРИНА КЛЕТКИ, ДЛИНА КЛЕТКИ, ДЛИНА ЯДРЫШКА, ШИРИНА ЯДРЫШКА; МП = @У1; ГЛКОМП; СМ = fe ИТС, МН (РАБОЧАЯ1) , МН (РАБОЧАЯ2), МН (РАБОЧАЯЗ); ОБЪЕДИНЕНИЕ МАССИВОВ ДАННЫХ; СМ = ' МН(РАБОЧАЯЗ), МВ (НЕИСПОЛЬЗ. ДЛЯ ГРАД.)' ; СЦВН = 13412, 13505 АЗ; ВИН = Н; СЦВЭ = &Ш2011 А200 12 А200 13 А200; ИПРЕ = ШИРИНА КЛЕТКИ; ЦАУП = 2 7 3 8 4 9 5 10; АЛРЕ = ЛИР; ВФТК; КР: ГЛАВА VII ЗАПУСК И ЭКСПЛУАТАЦИЯ ПАКЕТА АСТА В этой главе рассмотрим действия системного программиста и адми¬ нистратора базы данных во время запуска и эксплуатации пакета АСТА: инициализацию пакета и базы данных, изменение параметров пакета, рабо¬ ту в разных режимах. § 1. ИНИЦИАЛИЗАЦИЯ ПАКЕТА И БАЗЫ ДАННЫХ Для инициализации пакета АСТА используются магнитные ленты, содер¬ жащие либо загрузочные модули, либо тексты исходных модулей пакета на языке ФОРТРАН IV. В обоих случаях в модулях содержатся массивы системной информации и набор описаний тестовых работ. Стандартная процедура инициализации пакета (на магнитной ленте - загрузочные модули) состоит в следующем. 1. Загрузочные модули переписываются с магнитной ленты (МЛ) в биб¬ лиотеку загрузочных модулей, расположенную на одном из магнитных дисков. 2. Выполняется проверка функционирования модулей пакета без ис¬ пользования БД (операция ТЕСТЫ 1). 3. Выделяется участок магнитного диска для БД пакета АСТА и вы¬ полняется операция ИНИЦИАЛИЗАЦИЯ БД. 4. Выполняется проверка функционирования модулей пакета с исполь¬ зованием БД (операция ТЕСТЫ 2). Если тесты прошли нормально, то инициализация пакета заканчивает¬ ся. В противном случае непрошедшие тесты выполняются повторно в ре¬ жиме самоконтроля и полученная информация анализируется. Инициализация пакета с помощью МЛ, содержащей исходные модули, осуществляется аналогично, с той разницей, что исходные модули транс¬ лируются. Перед трансляцией возможно изменить объем оперативной области данных (ООД). Для этого нужно в главном модуле пакета испра¬ вить операторы описаний (эквивалентных) массивов Х8, Х4, 1X4. 1X2 и XI типов, соответственно, REAL*8, REAL*4, INTEGER*4, INTEGER*2. 116
LOGICAL* 1 и изменить значение константы МК в операторе DATA ^1К/ • • • Л Величина МК равна объему ООД в словах, т.е. количеству эле¬ ментов массивов Х4 и 1X4. Таким образом, размер массивов Х8, Х4, 1X4, 1X2 и XI должен быть равен Х8(МК/2), Х4(МК), 1X4(МК), 1X2 (МК*2), XI (МК*4). Пример 1.1.Описание первой работы, выполняемой при инициа¬ лизации пакета АСТА. НАЧАЛО РАБОТЫ; ТЕСТЫ 1; КОНЕЦ РАБОТЫ; Пример 1.2. Описание второй работы, выполняе!чой во время ини¬ циализации пакета АСТА. Предполагается, что для БД отведено 10000 записей по 256 байтов и что задание для вызова программы АСТА содер¬ жит оператор //FT13F001 DD DSN = . . . для этого набора данных. Набор данных для БД предварительно формати- зован, т.е. содержит записи постоянной длины, заполненные нулями или произвольной информацией. НАЧАЛО РАБОТЫ; ДЛИНА ЗАПИСИ БД = 256; КОЛИЧЕСТВО ЗАПИСЕЙ БД = 10000; ИМЯ БД = БАЗА ДАННЫХ ЛАБ2; НОМЕР ФАЙЛА БД = 13; ИНИЦИАЛИЗАЦИЯ БД; ТЕСТЫ 2; КОНЕЦ РАБОТЫ; Для выполнения этих работ в режиме самоконтроля нужно добавить в описание работы после предложения И5 предложение РЕЖИМ - КОНТ¬ РОЛЬ. §2. РЕЖИМЫ РАБОТЫ ПАКЕТА В пакете АСТА предусмотрено три режима рабо ты: 1) стандартный ре¬ жим, или режим пользователя; 2) режим самоконтроля, или режим сис¬ темного программиста; 3) режим с блокировкой снятия работы, или режим опытного пользователя. В режиме самоконтроля в отличие от стандартного режима выполняют¬ ся многочисленные проверки действий системы управления пакетом (СУПП) и функциональных модулей и печатается информация о работе СУГТГ1. В режиме опытного пользователя некоторые из обнаруженных ошибок не приводят к снятию работы, как это происходит в стандартном режиме. При этом всю ответственность за последствия берет на себя пользователь. Нужный режим устанавливается с помощью предложений ’’данные” Для системного параметра РЕЖИМ и вектора БЛОКИРОВКА СНЯТИЯ работы. Рассмотрим два последних режима подробнее. Режим самоконтроля. В этом режиме печатается дополнительная ин¬ формация, объем которой регулируется параметром УПРАВЛЕНИЕ СИС¬ ТЕМНОЙ ПЕЧАТЬЮ. Кроме этого, в режиме самоконтроля выполняются следующие проверки: 117
1) проверки массива описаний модуля МОМ; 2) проверки массива описаний входов и выходов модуля МОВВМ; 3) контроль за изменениями данных в ООД: для каждого массива данных в ООД вычисляются две контрольные свертки (КСВ): одна для служебной информации, описывающей массив, а другая для данных. Конт¬ рольные свертки (или контрольные суммы), полученные после формиро¬ вания или изменения массива, запоминаются в описании массива данных (ОМД). Несовпадение этих КСВ с вновь вычисленными означает, что мас¬ сив был изменен. Если изменения не должно было быть, то печатается сооб¬ щение об ошибке. Контроль за изменениями ОМД в базе данных осуществляется во всех трех режимах. Режим опытного пользователя задается с помощью вектора БЛОКИРОВ¬ КА СНЯТИЯ РАБОТЫ (мнемокод вида информации БСР). Каждой обнаруженной ошибке СУГ1П ставит в соответствие четырехзначное число код ошибки. Для того чтобы заблокировать снятие работы при обнаруже¬ нии некоторых ошибок, достаточно перечислить соответствующие коды в векторе БСР. Цифры, входящие в состав кода ошибки klmn. имеют следующий смысл. Первая цифра слева оценивает тяжесть последствий продолжения работы после обнаружения ошибки: О - отсутствие последствий; 1 - легкоустранимые последствия; 2 - последствия средней тяжести; < 3- весьма тяжелые последствия. Вторая цифра слева кодирует объект подвергающийся опасности при продолжении работы после обнаружения ошибки: О потеря информации исключена; 1 возможно уничтожение информации в разделе пользователя; 2 возможно уничтожение информации в системном разделе базы данных. Третья цифра кодирует виновника совершенной ошибки: О - ошибки нет; к = I = m - 1 ошибка пользователя; 2 ошибка в функциональном модуле; 3 ошибка СУГП1; 4 ошибка СУПП или в функциональном модуле; 5 причина ошибки не установлена. Наконец, четвертая цифра указывает действия СУПП при обнаружении ошибки: п ~ О ошибка игнорируется; 1 - ошибка исправляется; 2 -• ошибка не исправляется, блок программы, при вы¬ полнении которого возникла ошибка, обходится; 3 -- ошибка не исправляется, устанавливается блокировка операций с базой данных. Если код ошибки не равен нулю, то печатается сообщение об ошибке. По умолчанию полагается, что БСР = 0,10,11. 118
§ 3. ИЗМЕНЕНИЕ СИСТЕМНОЙ ИНФОРМАЦИИ Опишем цели и способы изменения системной информации пакета. Сис¬ темная информация по своей форме и назначению разбита на следующие группы (в скобках даны мнемокоды видов информации) : 1) списки идентификаторов видов информации и операций (ММВИ, МИВИ, ММСВИ, МИСВИ. ММО. МИО, ММСО, МИСО); 2) описание операций (ОНО, ОПСО. МАКРО); 3) мнемокоды и имена системных параметров и значения, принятые по умолчанию (МСИПА, ИСИПА, ЗСИПА); 4) описание подсемейств массивов данных пользователя (МОПС, ТИПС, НОПС. ИОСМОПС. НОСТИНС. МОПСМВИ): 5) таблица имен разделов БД и другие массивы, описывающие файл базы данных (ТИР, ПОЗОР, БЛОКРАЗД): 6) прочие массивы (МВИЭЛ. МВИО, СМВИО1, СМВИО2, МВИНВ. ТИМ). Изменение каждой из этих групп имеет свои особенности. Прежде всего отметим, что некоторые массивы системной информации корректировать нельзя без соответствующих изменений текстов модулей СУ ПН. При по¬ пытке коррекции возникает ошибка с кодом 3112 (коррекция МОПС. ТИПС, НОПС. ИОСМОПС, НОСТИНС, МОПСМВИ) или с кодом 3212 (кор¬ рекция ТИР, МВИЭЛ, МВИО. СМВИО1. СМВИО2). Для изменения осталь¬ ных массивов системной информации используют обычные способы кор¬ рекции данных, принятые в пакете. Проще всего изменить значение системного параметра. Для этого нужно задать новое значение с помощью предложения "данные". Список иденти¬ фикаторов системных параметров находится в § 5. Нужно иметь в виду, что. в отличие от других данных, вводимых с по¬ мощью предложения "данные", установленное значение системного пара¬ метра сохраняется до тех пор. пока оно не будет изменено с помощью другого предложения "данные". Если системному параметру не было при¬ своено никакого значения, то используется значение, принятое по умол¬ чанию. Таблица значений системных параметров, принимаемых но умол¬ чанию, (ЗСИПА) вместе с мнемокодами (МСИПА) и. именами (ИСИПА) системных параметров, является частью системной информации. Значе¬ ния. принятые по умолчанию для системных параметров, восстанавлива¬ ются при каждом новом вызове программы АСТА. Все остальные массивы системной информации могут быть изменены с помощью операций НАЧАЛО КОРРЕКЦИИ и КОНЕЦ КОРРЕКЦИИ обыч¬ ным способом. Возможна временная коррекция (исходное состояние восстанавливается в конце работы) и коррекция с фиксацией изменений в БД. Для того чтобы зафиксировать произведенные изменения, нужно выполнить операцию ЗАПИСЬ для измененных массивов. Попытка зафик¬ сировать измененные системные массивы ММВИ, МИВИ, ММС ВИ, МИСВИ. ММО. МИО, ММСО. МИСО. ИСИПА, МСИПА. ЗСИПА, ОНО, ОПСО. МАКРО расценивается системой управления пакетом как ошибка с кодом 3212, а попытка скорректировать временно как ошибка с кодом 2112. Необходимость изменить перечисленные массивы может быть вызвана Добавлением новых модулей или макрооперацией или желанием заменить неудачный идентификатор. Идентификаторы параметров РЕЖИМ, БЛОКИ- 119
РОВКА СНЯТИЯ РАБОТЫ и некоторые другие могут быть изменены системным программистом для того, чтобы исключить возможность зло употреблений со стороны некоторых пользователей. Накапливающиеся изменения системной информации в БД полезно время от времени переносить в тексты модулей пакета. § 4. ОБЯЗАННОСТИ АДМИНИСТРАТОРА БАЗЫ ДАННЫХ Рассмотрим круг вопросов, которыми занимается администратор БД пакета АСТА: 1) инициализация базы данных; 2) контроль за использованием базы данных; 3) обеспечение надежности хранения информации в БД; 4) ведение архивов. Инициализация базы данных. Основная задача администратора БД при инициализации правильно определить объем файла БД. Завышение объема уменьшит коэффициент использования внешней памяти ЭВМ, а занижение приведет к тому, что много времени будет расходоваться на частую реорганизацию БД. Объем файла БД оценивается как сумма объе¬ мов массивов системной информации, максимальных объемов разделов всех последователей и объема части БД, которая используется в качестве расширения ООД. Для разных групп пользователей могут быть созданы разные файлы БД. Цель контроля за использованием БД - обеспечить уникальность имен разделов БД и не допускать чрезмерного увеличения объемов разделов пользователей. Имя раздела (16 произвольных символов) обычно содержит дату соз¬ дания раздела, фамилию или код пользователя и краткое наименование или код задачи. Имя раздела не должно совпадать с именами СИСТЕМНЫЙ РАЗДЕЛ и ТЕСТОВЫЙ РАЗДЕЛ. Имена всех разделов БД, включая имена старых разделов, переписанных на архивные магнитные ленты, должны быть различны. Сведения об объемах всех разделов администратор БД может узнать с помощью операции ПЕЧАТЬ ОГЛАВЛЕНИЯ СИСТЕМНОГО РАЗДЕЛА За превышение объема раздела администратор БД может наказать поль¬ зователя, заблокировав операции с его разделом. Обеспечение надежности хранения информации в БД - самая важная задача администратора. Эта задача решается периодическим созданием ко¬ пий БД на магнитных лентах (МЛ). Период зависит от интенсивности внесения изменений в БД. Если в результате сбоя ЭВМ или по другим причинам часть информации в БД окажется потерянной, эта часть дан¬ ных считывается с МЛ, содержащей последнюю копию БД. Запоминание всех изменений в БД со времени создания последней копии и их автомати¬ ческое повторение после считывания копий в данной версии пакета не пре¬ дусмотрено. Если объем потерянной информации невелик, то администратор БД может предпринять следущие действия: 1) для восстановления описания массива данных (ОМД) пользова¬ теля продублировать массив в БД (операция КОРРЕКЦИЯ); 120
2) для восстановления оглавления раздела пользователя — выполнить операцию ВОССТАНОВИТЬ ОГЛАВЛЕНИЕ РАЗДЕЛА; 3) для восстановления массива системной информации - переписать этот массив из текста системного модуля СУПП в БД (операция ЗАПИСЬ); 4) для восстановления оглавления системного раздела или массивов ТИР, БЛОКРАЗД, НОЗОР — выполнить операцию ВОССТАНОВИТЬ ОГ¬ ЛАВЛЕНИЕ СИСТЕМНОГО РАЗДЕЛА; 5) для восстановления массива пользователя — повторить формирова¬ ние и запись массива в БД. Если перестала считываться какая-либо запись файла БД (при чтении возникают ошибки типа ’’запись не найдена”, ’’ошибка при чтении”), то файл необходимо форматизовать заново либо воспользоваться програм¬ мами коррекции физических записей на диске. Если файл создается зано¬ во, а последняя копия БД на МЛ устарела, то перед этим всю информацию, кроме массива данных, записанного на сбойных дорожках, желательно скопировать на МЛ, чтобы восстановить ее после создания файла. При этом со старой копии БД, записанной на МЛ, считывается только постра¬ давший массив. Ведение архивов также является важной стороной деятельности адми¬ нистратора БД. На архивные МЛ переписываются исходные данные и ко¬ нечные результаты задач, решение которых закончено. Разделы, перепи¬ санные на МЛ, в БД уничтожаются. При необходимости к решению любой задачи, данные которой записаны в архив, можно вернуться, переписав с МЛ в БД соответствующий раздел. Альтернатива ведению архивных МЛ — хранить все данные решенных задач в БД или не хранить их вовсе. Описание стандартных работ администратора БД приведено в § 7. § 5. ИДЕНТИФИКАТОРЫ ВИДОВ СИСТЕМНОЙ ИНФОРМАЦИИ В этом параграфе приведены идентификаторы видов информации, предназначенные только для системного программиста и администрато¬ ра БД пакета АСТА. Эти идентификаторы могут быть изменены систем¬ ным программистом по своему усмотрению, что снизит вероятность не¬ санкционированного доступа к обрабатываемым данным. Перечислим виды информации, используемые при операциях с базой данных. БЛОКРАЗД, БЛОКИРОВКА РАЗДЕЛОВ. Целочисленная матрица х(1 : 2, 1 : п2), четырехбайтовые элементы которой х(1, У) и х(2, i) со¬ держат номер модуля, установившего блокировку z-ro раздела и номер записи, содержащей массив ИНФОКТ, описывающий причины блокиров¬ ки (п2 - количество разделов БД) . ДЛЗБД, ДЛИНА ЗАПИСИ БД. Целое число, кратное 8, равное длине ’записи файла БД в байтах. Не может превышать максимальную длину записи, возможную для используемого устройства прямого доступа. ИБД, ИМЯ БД. Текстовый вектор х(1 : 16), содержащий имя БД. ИНФОКТ, ИНФОРМАЦИЯ О КОНТРОЛЬНОЙ ТОЧКЕ. Массив, содер¬ жащий информацию, необходимую для возобновления работы модуля С контрольной точки. Структура массива различна для разных модулей, создающих контрольные точки. 121
КЗФБД, КОЛИЧЕСТВО ЗАПИСЕЙ В ФАЙЛЕ БД. Целое число, равное количеству записей, отведенных для файла БД. Не должно превышать количество записей, указанное в операторе DEFINE FILE. МОПС. МАССИВ ОПИСАНИЙ ПОДСЕМЕЙСТВ. Целочисленная матрица, содержащая описания всех подсемейств массивов данных, хранящихся в разделе БД. В каждой строке матрицы записана одна или несколько пар (НОМВИ, НПС) для массивов, определяющих подсемейство (НОМВИ номер строки матрицы МОПСМВИ, содержащей мнемокод вида инфор¬ мации (МВИ) массива данных, НПС - номер подсемейства, которому принадлежит этот массив). Четырехбайтовые пары (НОМВИ, НПС) упо¬ рядочены по возрастанию НОМВИ. Цифровые коды строк матрицы МОГИ содержатся в векторе НОПС. МОПСМВИ. Текстовая матрица х(1 : 8, 1 ; п2), содержащая список МВИ, номера которых содержатся в массиве МОГ1С (п2 — количество МВИ в списке). ПОЗОР, НОМЕРА ЗАПИСЕЙ ОГЛАВЛЕНИЙ РАЗДЕЛОВ. Целочислен¬ ный вектор, содержащий физические адреса в БД для оглавлений все>; разделов, включая системный. НОПС, НОМЕРА ПОДСЕМЕЙСТВ. Целочисленный вектор, содержащий номера подсемейств массивов данных, описанных в матрице МОГ1С. Циф¬ ровые коды компонент вектора НОПС равны значениям этих компо¬ нент. НОСМОПС. Целочисленный вектор, /-я компонента которого равна номеру строки матрицы МОПС для подсемейства, имя которого содер¬ жится в i-й строке матрицы ТИПС. Имена компонент вектора НОСМОПС записаны в матрице ТИПС. НОСТИПС. Целочисленный вектор, /-я компонента которого равна номеру строки матрицы ТИПС, содержащей имя подсемейства, описан¬ ного i-й строкой матрицы МОПС. Если подсемейству имя не присвоено, то элемент НОСТИПС равен нулю. Цифровые коды компонент вектора НОСТИПС содержатся в векторе НОПС. НОФБД, НОМЕР ФАЙЛА БД. Целое число, большее или равное еди¬ нице, задающее номер файла БД. ОР, ОГЛАВЛЕНИЕ РАЗДЕЛА. Текстовая матрица х(1 :п}, 1 : п2). содержащая описания массивов данных пользователя и массивов МОПС, НОГ1С, ТИПС, НОСМОПС, НОСТИПС, МОПСМВИ, хранящихся в этом разделе (пх - длина самого длинного описания, п2 - количество мас¬ сивов в разделе). ОСР. ОГЛАВЛЕНИЕ СИСТЕМНОГО РАЗДЕЛА. Текстовая матрица х(1 :И], 1 : п2), содержащая описания системных массивов данных, хра¬ нящихся в БД (И] - длина самого длинного описания, п2 - количество массивов системной информации, хранящихся в системном разделе БД). СИР, СПИСОК ИМЕН РАЗДЕЛОВ (1-й суффикс: ГЕ Н, 2-й суффикс. БД, Л1, 3-й суффикс: БД, ЛЗ. Полные названия суффиксов: П - ПЕРЕ¬ ПИСЫВАЕМЫХ, Н - НЕ ПЕРЕПИСЫВАЕМЫХ, БД - ИЗ БД или В БД. Л1 - С МЛ 1, ЛЗ - НА МЛ 3). Текстовый вектор, содержащий имена раз¬ делов, записанные через запятую. Назначение списка указывается с по¬ мощью суффиксов. 122
типе, ТАБЛИЦА ИМЕН ПОДСЕМЕЙСТВ. Текстовая матрица ^(1 : П], 1 :и2), содержащая имена подсемейств массивов данных, наз¬ наченные пользователем - длина самого длинного имени, п2 - коли¬ чество имен). ТИР, ТАБЛИЦА ИМЕН РАЗДЕЛОВ. Текстовая матрица х(1 : 16, 1 : п2), содержащая имена всех разделов БД (п2 - количество разделов БД, вклю¬ чая системный). ШИФР. Целое число, значение которого указывает, разрешена ли инициа¬ лизация БД. Инициализация разрешена, если это значение равно номеру работы, в которой выполняется инициализация: Номера работ печатаются вместе с распечаткой описания работы. Перечислим мнемокоды видов системной информации. МАКРО. Текстовая матрица х(1 :и1ч 1 : п2), содержащая описания макроопераций, записанные на входном языке пакета АСТА - длина самого длинного описания, п2 - количество макроопераций). Описание макрооперации не должно содержать предложения HP, КР, КРП. Цифро¬ вые коды строк матрицы МАКРО равны порядковым номерам этих строк. МВИНВ. Целочисленный вектор, содержащий номера строк матрицы ММ ВИ для массивов, которые нс могут быть переписаны из ООД в БД (вытеснены) во время распределения ООД. МВИО. Целочисленная матрица х(1 : 3, 1 :и2). четырехбайтовые эле¬ менты которой имеют следующий смысл: х(3, /) - номер строки матрицы ММО для операции, которая вызывается автоматически после ввода или формирования массива данных, мнемокод вида информации которого записан в элементах х(1 : 2, /) (п2 - количество автоматически вызы¬ ваемых операций). Цифровые коды строк матрицы МВИО равны поряд¬ ковым номерам этих строк. МВИЭЛ. Целочисленная матрица х(1 : 3, 1 :и2), устанавливающая связь между массивами данных и идентификаторами подмножеств этих массивов данных: имена элементов массива, мнемокод вида информа¬ ции которого записан в /-й строке матрицы ММВИ, содержатся в масси¬ вах, мнемокоды видов информации которых записаны в х (1, /) -й, х (2, /) -й и х(3, /)-й строках ММВИ. В х(1,/)-й строке записан мнемокод вида ин¬ формации для имен 1-элементов (имена компонент вектора, столбцов матрицы, (2, 3)-матриц трехмерной таблицы), в х(2,/)-й строке ММВИ записан МВИ для имен 2-элементов (имена строк матрицы, (1, 3)-матриц трехмерной таблицы), в х(3, /)-й строке ММВИ записан МВИ для имен 3-элементов (имена (1, 2)-матриц трехмерной таблицы). Здесь н2 -коли¬ чество мнемокодов видов информации в пакете. ММВИ. Текстовая матрица х (1 : 8, 1:п2), содержащая мнемокоды видов информации пакета (п2 - количество мнемокодов). Имена строк матрицы ММВИ совпадают с содержимым этих строк ММВИ. МИВИ. Текстовая матрица х(1 :hj, 1 :н2), содержащая имена видов информации пакета - длина самого /длинного имени, п2 - количество имен). Имена строк матрицы МИВИ содержатся в матрице ММВИ. ММСВИ. Текстовая матрица х ( 1 : 4, 1 : н2 ), содержащая мне¬ мокоды суффиксов видов информации пакета ( п2 ~ количество суффиксов). Имена строк матрицы ММСВИ хранятся в матрице ММСВИ. 123
МИСВИ. Текстовая матрица х(1 \пх, 1 : п2), содержащая имена суф¬ фиксов видов информации пакета («! — длина самого длинного имени, п2 - количество суффиксов). Имена строк матрицы МИСВИ содержатся в матрице ММСВИ. ММО. Текстовая матрица х(1 : 8, 1 : п2), содержащая мнемокоды операций пакета (п2 — количество мнемокодов). Имена строк матрицы ММО хранятся в строках матрицы ММО. МИО. Текстовая матрица х(1 :И1,1 : п2), содержащая имена операций пакета («! - длина самого длинного имени, п2 - количество имен). Имена строк матрицы МИО содержатся в матрице ММО. ММСО. Текстовая матрица х(1 : 4, 1 : п2), содержащая мнемокоды суффиксов идентификаторов операций пакета (п2 — количество суффик¬ сов) . Имена строк ММСО хранятся в строках матрицы ММСО. МИСО. Текстовая матрица х(1 : 1 : п2), содержащая имена суффик¬ сов идентификаторов операций пакета (пх - длина самого длинного име¬ ни, п2 — количество имен) . Имена строк матрицы МИСО содержатся в мат¬ рице ММСО. ОНО. Целочисленный вектор, z-я компонента которого либо равна но¬ меру модуля, реализующего операцию с мнемокодом из z-й строки мат¬ рицы ММО (с обратным знаком), либо равна номеру строки матрицы МАКРО, содержащей описание этой операции. Имена компонент вектора ОНО содержатся в матрице ММО. ОПСО. Целочисленная матрица х(1 .пх, 1 :п2), элементы которой имеют следующий смысл: х (1, i), х (4, z), х (7, i) , х (10, z) - это описания операций, составленные по тем же правилам, что и компоненты вектора ОНО, соответствующих суффиксу из х(13, /)-й строки матрицы ММСО при условии, что корень идентификатора операции (точнее, номер строки в матрице ММО, соответствующей корню) задан в одном из элементов х(14 : П), / ) матрицы 0Г1С0. Описание операции, идентификатор которой состоит из корня и суф фиксов, получается объединением соответствующих строк ОНО и ОПСО. Приоритет-1 описаний суффикса содержится в х(2, z), х(5, /), х(8, /), х(11, /). Описания, соответствующие корню и, суффиксам, при объеди¬ нении располагаются по возрастанию приоритетов-1. Приоритет-1 корня всегда равен единице. Если два описания имеют одинаковые приорите¬ ты-1, то при объединении остается то из них, которое имеет наибольший из приоритетов-2 (элементы х (3, /) , х (6, z) ,х(9, z) , х (12, z)). Цифровые коды строк матрицы ОПСО равны порядковым номерам этих строк. СМВИО1. Текстовая матрица х(1 : 8, 1 : п2), содержащая список МВИ, соответствующих компонентам вектора ВМАС (п2 - количество компо¬ нент вектора ВМАС). СМВИО2. Текстовая матрица х(1 : 8, 1 : п2), содержащая список МВИ входных массивов модуля, для получения которых автоматически вызы¬ вается модуль, указанный в СНМВИО (п2 количество МВИ в списке). СНМВИО. Целочисленная матрица х(1 \пх, 1 :и2), устанавливающая связь между матрицами СМВИО1, СМВИО2 и модулем, вызываемым ав¬ томатически: модуль с номером СНМВИО(1, z) вызывается автоматичес¬ ки перед вызовом каждого модуля, один из входных массивов которого 124
указан в i-й строке СМВИО2, при условии, что хотя бы одна из компонент вектора ВМЛС с номерами, перечисленными в СНМВИОЦ, /), j > 2, равна единице. Здесь п2 - количество строк матрицы СМВИО2. ТИМ, ТАБЛИЦА ИМЕН МОДУЛЕЙ. Текстовая матрица х(1 : 8, 1 : п2), содержащая имена модулей пакета (п2 - количество модулей)Исполь¬ зуется для печати системной информации. Имена строк матрицы ТИМ хранятся в строках матрицы ТИМ. Перечислим идентификаторы видов информации, присвоенные рабочим массивам СУПГ1. ЙВ (суффикс: В, Н, О, Ф, Э). Целочисленный вектор, содержащий спи¬ сок порядковых номеров строк матрицы наблюдений. Назначение списка указывается с помощью суффикса: В - взять, Н не брать, О обучаю¬ щая выборка, Ф - фиксированные, Э экзаменационная выборка. Й11 (суффикс: В, Н, Ф). Целочисленный вектор, содержащий список порядковых номеров столбцов матрицы наблюдений. Назначение списка указывается с помощью суффикса (см. описание вектора ЙВ). МОВВМ, МАССИВ ОПИСАНИЙ ВХОДОВ И ВЫХОДОВ МОДУЛЯ. Мат¬ рица элементов разного типа, строки которой описывают входные и вы¬ ходные массивы исполнительного модуля (см. § 2 главы VIII). МОМ, МАССИВ ОПИСАНИЙ МОДУЛЯ. Вектор, имеющий компоненты разного типа, содержащий информацию, которая описывает исполнитель¬ ный модуль. См. § 1 главы VIII. НВМ, НЕМЕДЛЕННО ВЫПОЛНИТЬ МОДУЛЬ. Целое число, равное но¬ меру модуля, который выполняется сразу же после появления в ООД ска¬ ляра НВМ. НОМ, НОМЕРА МОДУЛЕЙ. Целочисленный вектор, содержащий спи¬ сок номеров модулей. НОИР, НОМЕР ИМЕНИ РАЗДЕЛА. Целое число, равное номеру строки матрицы ТИР, содержащей имя активного раздела БД. ОСМ, ОПИСАНИЕ СЕМЕЙСТВ. Целочисленная матрица, содержащая описания используемых семейств массивов данных. Структура аналогична структуре матрицы МОПС, но порядок пар (НОМВИ, НПС) совпадает с порядком идентификаторов массивов данных, записанных в соответствую¬ щей матрице СМ. ТИСМ. Текстовая матрица х(1:и1; 1:я2), содержащая имена подсе¬ мейств, упомянутых в матрице СМ (пх длина самого длинного имени, п2 - количество имен). Перечислим идентификаторы и значения, принятые по умолчанию для системных параметров пакета. Напомним, что значение системного пара¬ метра, присвоенное в некоторой работе, сохраняется и в течение последую¬ щих работ до присвоения другого значения. ДЛЗНД, ДЛИНА ЗАПИСИ НАБОРА ДАННЫХ. Целое число, равное Длине записи набора данных, содержащего описания работ пользователей. По умолчанию ДЛЗДН = 80 байтов. МККАМ, МАКСИМАЛЬНОЕ КОЛИЧЕСТВО АРГУМЕНТОВ МОДУЛЯ. Целое число, равное максимальному количеству аргументов исполнитель¬ ного модуля. По умолчанию МККАМ = 50. МКОЧАСТ, МАКСИМАЛЬНЫЙ ОБЪЕМ ЧАСТИ. Целое число х, х > 0, Используемое при проверке обработки массивов данных по частям. Если 125
х > 0, то СУПП разбивает массивы на части, объем которых не превышает л компонент вектора, х строк или столбцов матрицы, х матриц трехмерно!; таблицы. При х = 0 объемы частей вычисляются так, чтобы использовать всю ООД. Результаты выполнения модулей не должны зависеть ог значе¬ ния МКОЧАСТ. По умолчанию МКОЧАСТ-0. МКПОРМ, МАКСИМАЛЬНЫЙ ПОРЯДОК МОДУЛЯ. Целое число, рав¬ ное наибольшему порядку модулей, входящих в пакет. По умолчанию МКПОРМ = 3. МКСТВЛМА, МАКСИМАЛЬНАЯ СТЕПЕНЬ ВЛОЖЕННОСТИ МАКРО ОПЕРАЦИЙ. Целое число х > 1, задающее объем рабочего массива СУПП. содержащего строки матрицы описаний макроопераций, вложенных одно в другое. Описание макрооперации О2 вложено в описание макроопера¬ ции Ох, если макрооперация О2 используется при описании Ох. Необходи¬ мость увеличить МКСТВЛМА появляется при добавлении описаний макро¬ операций с большей степенью вложенности, чем задано по умолчанию МКСТВЛМА = 10. НОН, НОМЕР НАБОРА. Целое число х > 1, равное номеру набора дан¬ ных, содержащего описания работ пользователей. По умолчанию НОН = 5. НОНИНФ, НОМЕР НАБОРА ДЛЯ ИНФОРМАЦИОННЫХ СООБЩЕ¬ НИЙ. Целое число х > 1, равное номеру набора данных, в который запи¬ сываются информационные сообщения модулей пакета. По умолчанию НОНИНФ = 6. НОНРЕЗ, НОМЕР НАБОРА ДЛЯ РЕЗУЛЬТАТОВ. Целое число х > 1, равное номеру набора данных, в который записываются результаты выпол¬ нения операций с данными (печать результатов). По умолчанию НОНРЕЗ = 6. НОНОШ, НОМЕР НАБОРА ДЛЯ СООБЩЕНИЙ ОБ ОШИБКАХ. Целое число х > 1, равное номеру набора данных, в который выводятся сообще¬ ния об ошибках, обнаруженных модулями пакета. По умолчанию НОНОШ = 6. ОООД, ОБЪЕМ ООД. Целое число х, 1000 < МК, равное объем} ООД в словах. Здесь МК - объем массива Х4, описанного в главном моду¬ ле пакета. Значения х < МК могут быть установлены с целью проверки алгоритмов распределения ООД для массивов данных. По умолчанию ОООД = МК. ПРОЧДД, ПРОЧЕРК В ДЕЙСТВИТЕЛЬНЫХ ДАННЫХ. Действитсль нос число, обозначающее отсутствие значения (прочерк) в массивах дейст¬ вительных чисел. По умолчанию ПРОЧДД - --1075. Г1Р0ЧЦД, ПРОЧЕРК В ЦЕЛОЧИСЛЕННЫХ ДАННЫХ (суффикс: 2.4; полные названия суффиксов: 2 2 БАЙТА, 4 - 4 БАЙТА). Целое число, обозначающее отсутствие значения в массивах целых чисел. По умолчанию для двухбайтовых целых чисел ПРОЧЦД2 = - 32767, т.е. -215 + 1. а для четырехбайтовых - Г1Р0ЧЦД4 = —2 147 483 647, т.е. — 231 + 1. Изменять параметры ПРОЧЦД и ПРОЧДД нужно очень осторожно, гак как во время обработки данных прочерки, отмеченные стандартными кодами -107S --215 + 1, - 231 + 1, будут восприняты как данные и вызовут арифмети¬ ческие прерывания, что приведет к появлению неправильных резуль¬ татов . РЕЖИМ. Текстовый вектор, содержащий сокращенное название режима работы пакета: 126
СТАНДАРТ — для стандартного режима; КОНТРОЛЬ — для режима самоконтроля. По умолчанию РЕЖИМ = СТАНДАРТ. Режим опытного пользователя уста¬ навливается параметром БСР. УСГ1, УПРАВЛЕНИЕ СИСТЕМНОЙ ПЕЧАТЬЮ. Целое число х > 0. ре¬ гулирующее объем печатаемой информации о работе СУПП: УСП <0 - информация о работе СУПП не печатается; УСГ1 > 1 — печатаются имена вызываемых исполнительных модулей, идентификаторы и параметры входных и выходных массивов для каждого модуля; УСП > 2 -- печатаются массивы МОМ и МОВВМ для каждого вызывае¬ мого модуля и описания новых подсемейств массивов данных; УСП > 3 - печатается список массивов, находящихся в ООД перед вызовом каждого модуля; УСП > 4 - печатаются параметры частей массивов, передаваемых из ООД в БД и в обратном направлении при обработке данных по частям. § 6. ИДЕНТИФИКАТОРЫ СЛУЖЕБНЫХ ОПЕРАЦИЙ Перечислим мнемокоды и имена операций, которые используются сис¬ темным программистом и администратором БД пакета ACT А. БЛОКРБД, БЛОКИРОВКА РАСШИРЕНИЯ РАЗДЕЛА БД. После вы¬ полнения операции БЛОКРБД система управления пакетом расценивает любую попытку записи в этот раздел БД как ошибку с кодом 1211. Для снятия блокировки нужно выполнить операцию БЛОКРБД повторно. ВОССТОР, ВОССТАНОВИТЬ ОГЛАВЛЕНИЕ РАЗДЕЛА. Описания мас¬ сивов данных для всех массивов, записанных в БД, с заданным именем раздела объединяются в оглавление раздела ОР. Прежнее оглавление раз¬ дела уничтожается. ВОССТОСР, ВОССТАНОВИТЬ ОГЛАВЛЕНИЕ СИСТЕМНОГО РАЗДЕ¬ ЛА. Описания массивов данных для всех системных массивов, находящих¬ ся в БД, объединяются в оглавление системного раздела. Прежнее оглавле¬ ние системного раздела уничтожается. ЗАГРБД, ЗАГРУЗКА БД. С магнитной ленты 1 (номер набора дан¬ ных - 11) в БД переписываются все массивы разделов, указанных с по¬ мощью списков СИРПЛ1БД, СИРИЛ 1 БД. Если заданный раздел уже есть в БД, то переписывание этого раздела не происходит (код ошибки — 1111). См. также описание операции РЗГРБД. ИБД, ИНИЦИАЛИЗАЦИЯ БД. Формирование служебных записей од¬ ного файла БД, содержащего пустой системный раздел. Инициализируемый файл должен быть предварительно формализован (т.е. иметь записи фик¬ сированной длины, содержащие произвольную информацию). Используют¬ ся входные данные ДЛЗБД, КЗБД, ИБД, НОФБД, ШИФР. ОБНАМЛ, ОБНОВЛЕНИЕ АРХИВНЫХ МАГНИТНЫХ ЛЕНТ. С маг¬ нитной ленты 1 (номер набора данных -- 11) на магнитную ленту 3 (номер Набора - 13) переписываются массивы, указанные с помощью списков разделов СИРИЛ 1ЛЗ или СИРПЛ1ЛЗ. См. также описание операции РЗГРБД. 127
ОАМЛ, ОБЪЕДИНЕНИЕ АРХИВНЫХ МАГНИТНЫХ ЛЕНТ. Операция отличается от операции ОБНАМЛ тем, что после перезаписи массивов с ленты 1 на ленту 3 выполняется перезапись массивов с ленты 2 (номер на¬ бора - 12) на ленту 3. При этом переписываются массивы, указанные с помощью списков СИРПЛ2ЛЗ и СИРНЛ2ЛЗ. С ленты 2 на ленту 3 не пе¬ реписываются массивы тех разделов, которые были переписаны с ленты 1 на ленту 3. ПОГЛБД, ПЕЧАТЬ ОГЛАВЛЕНИЯ БД. Печать массивов ТИР, ПОЗОР, БЛОКРАЗД. В описании работы должно присутствовать предложение ЗАДАЧА с именем произвольного раздела БД. ПОГЛВРБД, ПЕЧАТЬ ОГЛАВЛЕНИЙ ВСЕХ РАЗДЕЛОВ БД. Печать массивов ОР из всех разделов БД. В описание работы нужно поместить предложение ЗАДАЧА с именем одного из разделов БД. РЗГРБД, РАЗГРУЗКА БД. Запись всех массивов тех разделов БД, ко¬ торые перечислены в списке СИРПБДЛЗ, на магнитную ленту 3. Если списка СИРПБДЛЗ нет, то записываются все разделы БД, кроме перечис¬ ленных в списке СИРНБДЛЗ. Если нет обоих списков, то переписываются все массивы БД, включая системные. РЗГРБДЛ1, РАЗГРУЗКА БД И МЛ1. Операция отличается от опера¬ ции РЗГРБД тем, что на ленту 3 сначала записываются массивы из БД, а затем - массивы с ленты 1, принадлежащие разделам, которые перечислены в списке СИРПЛ1ЛЗ. Если списка СИРПЛ1ЛЗ нет, то с ленты 1 на ленту 3 переписываются все разделы, кроме перечисленных в списке СИРНЛ1ЛЗ. Если нет обоих списков, то с ленты 1 на ленту 3 переписываются все мас¬ сивы. Во всех случаях с ленты 1 на ленту 3 не переписываются массивы тех разделов, которые были переписаны на ленту 3 из БД. СТЕРРБД, СТЕРЕТЬ РАЗДЕЛ БД. Операция выполняется для того, чтобы стереть все массивы раздела, включая оглавление. ТЕСТЫ. Выполнение встроенных тестов. Вид суффикса определяет содержание выполняемых тестов: I — все тесты без использования БД; II — проверка операций статистической обработки целочисленных мат¬ риц наблюдений без использования БД; 12 - проверка операций статистической обработки действительных мат¬ риц наблюдений без использования БД; 13 - проверка операций формирования и преобразования данных без ис¬ пользования БД; 2, 21, 22, 23 — те же самые тесты с использованием раздела БД с именем ТЕСТОВЫЙ РАЗДЕЛ. В конце операции этот раздел уничтожается. § 7. ПРИМЕРЫ ОПИСАНИЙ РАБОТ СИСТЕМНОГО ПРОГРАММИСТА И АДМИНИСТРАТОРА БАЗЫ ДАННЫХ В этом параграфе приведены описания типичных работ, которые исполь¬ зуются системным программистом и администратором БД пакета АСТА. Тестирование пакета применяется при инициализации пакета и проверке работы СУПП. Пример 7.1. Выполнение группы тестов в обычном режиме. НАЧАЛО РАБОТЫ; 128
ТЕСТЫ 11; ТЕСТЫ 13; КОНЕЦ РАБОТЫ: Пример 7.2. Выполнение группы тестов в режиме самоконтроля. В конце задания устанавливаются стандартные значения системных парамет¬ ров РЕЖИМ и УСП. HP; РЕЖИМ = КОНТРОЛЬ; УПРАВЛЕНИЕ СИСТЕМНОЙ ПЕЧАТЬЮ = 3? ТЕСТЫ 12; ТЕСТЫ 13; РЕЖИМ = СТАНДАРТ; УСП = 0; КР; Системный программист управляет работой пакета с помощью систем¬ ных параметров, в частности, с помощью параметра НОН указывается но¬ мер набора данных, в котором записаны описания работ. Пример 7.3. Ввод и выполнение описаний работ пользователей из наборов данных с номерами 10, 12 и 13. HP; НОМЕР НАБОРА = 10; НОН = 12; НОН = 13; КР; Инициализация новой базы данных описана в § 1. Если нужно инициали¬ зировать уже существующую БД для того, чтобы стереть данные всех раз¬ делов, то необходимо дополнительно задать параметр ШИФР, равный номе¬ ру работы, в которой выполняется инициализация. Этот номер всегда пе¬ чатается в начале каждой работы. В этом случае все незаданные в описании работы параметры операции ИНИЦИАЛИЗАЦИЯ БД берутся из файла БД. Пример 7.4. Инициализация уже существующей БД. Номер работы равен 1027. HP; ИМЯ БД = БАЗА ДАННЫХ АБВ; НОМЕР ФАЙЛА = 7; ШИФР = 1027; ИНИЦИАЛИЗАЦИЯ БД; КР; Приведем примеры изменения системной информации (см. § 3) . Пример 7.5. Запись системной информации в БД. Системная инфор¬ мация извлекается из текстов модулей СУПП и записывается в БД. HP; ЗАДАЧА = СИСТЕМНЫЙ РАЗДЕЛ; СМ = 'ММВИ, МИВИ, ММСВИ, МИСВИ, ММО, МИО, ММСО, МИСО/ 'ОНО, ОГ1СО, МАКРО, ТИМ, МВИЭЛ, МВИО, СМВИО1, СМВИО2/ ‘СНМВИО, МВИНВ, СИПА, ИСИПА, МСИПА, ЗСИПА'; ЗАПИСЬ; КР; В этом примере в векторе СМ перечислены мнемокоды массивов системной информации, записываемых в БД. Пример 7.6. Коррекция имени операции ВКФ. Новое имя — ’’восста¬ новление регрессии в классе кусочно линейных функций”. HP; 3= СИСТЕМНЫЙ РАЗДЕЛ; СМ = МИО; НАЧАЛО КОРРЕКЦИИ; МИО = //ВКФ, ВОССТАНОВЛЕНИЕ РЕГРЕССИИ В КЛАСС! КУСОЧНО¬ ЛИНЕЙНЫХ ФУНКЦИЙ; КОНЕЦ КОРРЕКЦИИ; ЗАПИСЬ; КР; Изменения системной информации, связанные с добавлением новых мо¬ дулей или макроопераций, описаны в следующей главе. 9. В.А. Кощеев 129
Получить информацию о состоянии БД можно с помощью следующих работ. Пример 7.7. Печать оглавления БД. HP; 3= СИСТЕМНЫЙ РАЗДЕЛ; ПЕЧАТЬ ОГЛАВЛЕНИЯ БД; КР; Пример 7.8. Печать оглавлений всех разделов БД. HP; 3= СИСТЕМНЫЙ РАЗДЕЛ; ПЕЧАТЬ ОГЛАВЛЕНИЙ ВСЕХ РАЗДЕЛОВ БД; КР; Применение санкций против пользователя осуществляется с помощью следующих работ. Пример 7.9. Блокирование расширения раздела с именем ИВАНОВ и уничтожение раздела с именем СМИРНОВ 11. HP; 3 = ИВАНОВ; БЛОКРБД; КР; HP; 3= СМИРНОВ 11; СТЕРРБД; КР; Восстановление информации на диске иллюстрируется следующим примером. Пример 7.10. Восстановление оглавления раздела пользователя, утра¬ ченного в результате сбоя ЭВМ или по другим причинам. HP; 3 = ПЕТРОВ 7 МАЯ 85; ВОССТАНОВИТЬ ОГЛАВЛЕНИЕ РАЗДЕЛА; КР; Обеспечение безопасности данных в БД поясним следующими приме¬ рами. Пример 7.11. Разгрузка всей базы данных на магнитную ленту 3. HP; 3 = ИВАНОВ 10; РАЗГРУЗКА БД; КР; Пример 7.12. Создание новой копии БД на магнитной ленте 3. Из ста¬ рой копии БД (магнитная лента 1) переписываются все разделы, кроме раз¬ дела ЕГОРОВ 14. К переписанным разделам добавляются разделы ИВАНОВ и ПЕТРОВ из БД. Последние два раздела с ленты 1 на ленту 3 не перепи¬ сываются. HP; ЗАДАЧА = АЛЕКСЕЕВ 84; СПИСОК РАЗДЕЛОВ, НЕ ПЕРЕПИСЫВАЕМЫХ С МЛ1 НА МЛЗ = ЕГОРОВ 14; СПИСОК РАЗДЕЛОВ, ПЕРЕПИСЫВАЕМЫХ ИЗ БД ,НА МЛЗ = ИВАНОВ, ПЕТРОВ; РАЗГРУЗКА БД И МЛ1; КР; Пример 7.13. Пополнение архива. Разделы ИВАНОВ и ПЕТРОВ до¬ бавляются к массивам, записанным на архивной магнитной ленте 1, и уда¬ ляются из БД. В результате формируется новая архивная лента 3. HP; 3= ИВАНОВ; СИРПБДЛЗ ='ИВАНОВ, ПЕТРОВ'; РАЗГРУЗКА БД И МЛ1; СТЕРЕТЬ РАЗДЕЛ БД; КР; HP; 3 = ПЕТРОВ; СТЕРРБД; КР; 130
ГЛАВА VIII ПОДКЛЮЧЕНИЕ НОВЫХ МОДУЛЕЙ К ПАКЕТУ АСТА В этой главе содержится информация, необходимая для добавления новых модулей в пакет АСТА: 1) форматы массива описаний модуля МОМ и массива параметров входных и выходных массивов модуля МОВВМ; 2) формальные требования к тексту модуля; 3) составление описаний но¬ вых операций. § 1. МАССИВ ОПИСАНИЙ МОДУЛЯ К пакету АСТА может быть подключен любой модуль, для которого составлен массив описаний модуля (МОМ) и организован обмен информа¬ цией между модулем и СУГ1П. Кроме этого, желательно, чтобы новый модуль удовлетворял соглашениям, принятым для исполнительных моду¬ лей в пакете АСТА. В этом параграфе рассмотрим вид массива описаний модуля МОМ. Массив МОМ — это вектор с компонентами разного типа и разной длины: ИМОД ВЕРМОД КВВ КРМ КЭМ ТМОД ДВВ р МВИ овв РРМ РРММ нэм ИМОД - имя модуля - произвольная последовательность символов. Все имена модулей пакета должны быть различны. ВЕРМ ОД — версия модуля — целое число от 1 до 255. КВВ — количество основных входов и выходов модуля. КРМ — количество рабочих массивов модуля. КЭМ — количество массивов, объявленных эквивалентными некоторым из входных, выход¬ ных или рабочих массивов модуля. ТМОД — целое число, задающее тип модуля: О - стандартный исполнительный модуль; 1 — исполнительный модуль, выходы которого всегда образуют новые подсемейства массивов данных; 3 - модуль системы управления пакетом; 4 — модуль СУПП, выходы которого всегда образуют новые подсемейст¬ ва массивов данных. ДВВ — целое число, описывающее дополнительные входы и выходы модуля; О — дополнительных входов и выходов нет; 1 - дополнительными входами служат все массивы, перечисленные в первой строке матрицы СМ; 2 - дополнительными входами служат все массивы семейства, указан¬ ного в первой строке матрицы СМ; 3 - дополнительными входами служат все массивы семейства, указанно¬ го в первой строке СМ, кроме массивов, перечисленных в СМ явно; 4 — дополнительными выходами служат все массивы, перечисленные в первой строке матрицы СМ; 7 — для каждого из массивов перечисленных в первой строке матрицы СМ, модуль имеет дополнительный вход и дополнительный выход. Р — резервное поле длиной 6 байтов. Q* 131
МВИ — матрица, содержащая мнемокоды видов информации, присвоенные основным входам и выходам модуля. ОВВ — матрица, каждая из КВВ строк которой описывает один основной вход или выход модуля. Формат строки матрицы ОВВ описан ниже. РРМ - последовательность из КРМ це¬ лых чисел, равных объемам рабочих массивов. РРММ — последовательность из КРМ целых чисел, равных максимальным объемам рабочих массивов. НЭМ — номера массивов, для которых имеются эквивалентные массивы. Скаляры ВЕРМОД, КВВ, КРМ, КЭМ, ТМОД, ДВВ и элементы матриц ОВВ и НЭМ имеют длину 2 байта, элементы матриц РРМ и РРММ — 4 бай¬ та, параметр ИМ ОД — 6 байтов, длина матрицы МВИ — 8 • КВВ байтов. Прежде чем описать вид строки матрицы ОВВ, сделаем необходимые пояснения. Имя модуля должно отличаться от остальных имен модулей пакета, перечисленных в таблице ТИМ. Версия нового модуля полагается равной единице и увеличивается на 1 при каждом изменении модуля, влияющем на выходные массивы. Входными массивами объявляют все входные параметры и массивы модуля. Выходными массивами объявляют все результаты выполнения модуля, которые могут служить входными для других модулей пакета. Все остальные массивы, описанные в тексте модуля, следует оформлять в виде рабочих массивов для того, чтобы СУПП могла выделить для них поле в ООД. Небольшие массивы постоянной длины можно не объявлять рабочими и память для них будет отведена в теле модуля. В тех случаях, когда модуль обрабатывает массивы данных с элемен¬ тами разных типов, например INTEGER и REAL, в тексте модуля необхо¬ димо описать два массива: один типа INTEGER, другой — типа REAL и сде¬ лать их эквивалентными. Для этого нужно составить массив НЭМ. Элемент НЭМ(/) равен номеру массива модуля, которому эквивален¬ тен (КВВ + КРМ + /)-й массив. Все массивы модуля нумеруются в следую¬ щем порядке: 1) КВВ входных и выходных массивов; 2) КРМ рабочих массивов; 3) КЭМ массивов, объявленных эквивалентными. В этом поряд¬ ке расположены идентификаторы массивов в списке формальных парамет¬ ров подпрограммы, реализующей модуль, и строки матриц МВИ и ОВВ. Таким образом, элемент НЭМ(/) < КВВ описывает массив, экви¬ валентный НЭМ(/)-у входному или выходному массиву, а эле¬ мент КВВ < НЭМ(?) < КВВ + КРМ описывает массив, эквивалентный (НЭМ (/) - КВВ) -у рабочему массиву. Тип модуля ТМОД = 0 задается для большинства модулей пакета, в том числе для всех модулей статистической обработки данных. Значение ТМОД = 1 задают для всех модулей порядка 2 и 3, имеющих хотя бы один выход. Остальные значения ТМОД для новых модулей пакета не исполь¬ зуются. Кроме основных входов и выходов, модуль может иметь дополнитель¬ ные входы и выходы. Эта возможность используется в том случае, когда количество входных или выходных массивов модуля должно быть пере¬ менно или когда входными массивами служат все массивы некоторого семейства, число которых заранее неизвестно. Количество дополнительных входов и выходов передается от СУПП к модулю с помощью специального аргумента КВВДОП. 132
Если объем z-ro рабочего массива известен, т.е. может быть вычислен, исходя из параметров входных массивов модуля, то элементу PPM(z) присваивается число, равное величине этого объема в словах, а PPMM (z) =0. Если объем i-го рабочего массива не может быть определен до выполнения модуля, то полагается PPM(z) = —kt < 0, а элементу PPMM(z) присваива¬ ется значение, равное максимально возможному объему массива. В этом случае СУПП распределяет всю свободную часть ООД между всеми масси¬ вами неизвестной длины пропорционально величинам | kj |. Если получен¬ ный объем превысит значение PPMM (z), то для массива отводится PPMM (z) слов, а избыток будет распределен между оставшимися массивами неопре¬ деленной длины. Строка матрицы ОВВ, описывающая один вход или выход модуля, имеет вид НГВВ ФПДМОМ ! ТЭ I ТI ПВМ ВВЫI ПМ ОТСМ i ВЛ ‘ РЕЗЕРВ I I I!!■i I НГВВ — номер группы входов-выходов, к которой относится данный вход или выход. Напомним, что на входы z-й группы подаются массивы, принад¬ лежащие семейству, которое указано в z-й строке матрицы СМ. Массивы, снятые с выходов z-й группы, включаются в это же семейство. ФПДМОМ — форма представления данных. ТЭ — тип элементов массива. Т — порядок перечисления элементов массива. ПВМ — целое число, отражающее возмож¬ ность обработки массива по частям: 0 — массив может быть обработан только целиком; 1 — массив может обрабатываться по признакам; 2 — массив может обрабатываться по векторам; 3 — массив может обрабатываться по матрицам; — 1 — модулю нужно только описание массива данных; —2 — массив не нужен. ВВЫ = 1 для входного массива и ВВЫ = 2 для выходного массива. ПМ — целое число, определяющее способ поиска массива: 1 — поиск массива из входного семейства в ООД и БД; 2 - то же самое, но если идентификатор массива не указан в СМ, то поиск в БД не выполняется: 3 - поиск последнего введенного или сформированного массива в ООД и БД; 4 - то же самое, но если идентификатор массива не указан в СМ, то поиск в БД не выполняется; 5 — поиск массива с цифровым кодом подсемейства, равным НГВВ, в ООД и БД; 7 - то же самое, но поиск только в ООД и в системном разделе БД; 9 - то же самое, но поиск только в системном разделе БД. ОТСМ - целое число, определяющее действия СУПП в случае отсутствия входного массива: 1 — отсутствие массива расценивается как ошибка с кодом 1012; 2 - отсутствие массива не считается ошибкой. ВЛ = 1, если хотя бы один выходной массив модуля зависит от данного массива, и ВЛ = 2 в противном случае. 133
Поясним составление матриц МВИ и ОВВ. Строка матрицы МВИ с номером i содержит мнемокод того вида ин¬ формации, которая должна быть подана на z-й вход или снята с z-ro выхода. Если допускается любая информация, то в строку МВИ заносится код —. ’’.Коды ”_Л1И__ _ ”_Л2И. ”, ”_ЛЗИ ,, ,, появившиеся в строке МВИ, обозначают массивы имен 1-элементов, 2-элементов и 3-элементов массива, отмеченного послед¬ ним из кодов ”—Л. , ” в предыдущих строках матрицы МВИ. Коды Л1Ц_, ”.”__Л2Ц„ ”и ”_ЛЗЦ__ ” обозначают векторы цифровых кодов элементов того же массива. Группы входов-выходов модуля нумеруются целыми числами 1, 2, 3. Тип элементов массива обозначается двумя символами. Первый сим¬ вол: Д — действительные числа, Ц - целые числа, С - символы. Второй символ: 1, 2, 4 или 8 — длина элемента в байтах. Если допускается лю¬ бой тип элементов, то ТЭ = ” , , Л”. ФПДМОМ — это два символа, обозначающие форму представления данных массива, используемую в модуле. Приведем формулы, с помощью которых извлекается элемент массива для разных ФПДМОМ. AY21. N02, N03 — параметры, задающие размер матрицы или трехмерной таблицы. ФПДМОМ = СТ - стандартная m-мерная таблица: ,л = 2: xz/ = X((z- 1) NO\ + т = 3\ хик=Х((к- \)NO\ NO2+(i- 1) • NO\ + /). ФПДМОМ = ПС, Cl, C2, C3, CM -- матрица или трехмерная таблица с переменной длиной строки: т = 2: = X(\) = NO2 + 1; m = 3: xijk = X (X ((Zc - 1) • N02 + /)+/); У(1) = N02 • N03 + 1. Коды Cl, C2, СЗ означают, что массив с ФПДМОМ = СТ был преобразован с помощью одного из трех алгоритмов сжатия данных. Код СМ означает, что массив представляет собой квадратную симметричную матрицу, в ко¬ торой отсутствуют элементы, расположенные ниже главной диагонали. ФПДМОМ = Ml, М2, М3 — трехмерная таблица с матрицами перемен¬ ных размеров: м 1: xijk = X (X (к) +(i - ■ NO\k +/), X (к + 1) - X (к) где NO\k = , Х(1) = Л'Ш + 1; N02 М2: xijk=X(X(k)+(i- 1)-М71 +/), X (1) = N03 + 1; М3: xijk = X (X (2 • к - 1)+(/- 1) NO\k + /), где NO\k = X (2 -к), X (1) = 2 • N03 + 2. ФПДМОМ = АЕ — целочисленная матрица наблюдений х(\:п}, 1 : п-,), элементы которой подвергнуты преобразованию: , 0, при i = 1; •^новое О'. /) ^старое 0. /) / - 1 S таххстарое (к,/), при z> 1. к 1 / 134
Применяется для операций статистической обработки целочисленных дан¬ ных. Формы представления данных, отличные от СТ и АЕ, используются для сокращения объема, занимаемого массивом данных. Форма представ¬ ления АЕ применяется для уменьшения времени счета модулей статистичес¬ кой обработки данных. Если допустима любая ФПД, то ФГ1ДМОМ = ”—.Л”. Величина Т задает порядок перечисления элементов массива следующим образом: Т = 1 : ((л* (/,/), z=l,... , М?1), /=1,... .N02) (по строкам): Т=2: ((.хт (7, / ),/ = 1, . . , N02), /=!,..., 7VO1) (по столбцам)1); Т= 12: (((х(/,/, к), 1 NO\),j = 1 N02), к = 1, . . .,N03) (по (1,2) -матрицам): Т= 32. (((,v(/, у, к), к = 1, . . . ,N03), у = 1 N02), i= 1,. . . , NO 1) (по (2,3)-матрицам). Чаще всего используются значения Т - 1 и Т= 12. Если допустйм любой по¬ рядок перечисления элементов, то полагается Т- 0. Значения ИМ = 1 и 2 задаются для входных массивов, которые должны принадлежать семействам массивов данных, указанным с помощью матри¬ цы СМ. Значение ПМ = 2 используется для данных, которые обычно не хранятся в БД, например для скаляров. Остапьныехзначения параметра ПМ используются редко и только в том случае, если нужно выключить меха¬ низм поиска массивов, принадлежащих одному семейству. Значение параметра ОТСМ, равное двум, используется для вспомога¬ тельных (необязательных) массивов, например для таблиц имен элементов. При этом в модуле должен быть предусмотрен обход участков программы, обращающихся к этим данным. Значение параметра Г1ВМ > 0 указывает способ разбиения массивов дан¬ ных при обработке по частям (рис. 8.1). Желательно, чтобы в модуле была реализована обработка по частям для всех массивов, объем которых может быть велик. Значения ПВМ < 0 употребляются редко: ПВМ = -1 используется при передаче массива со входа на выход модуля (см. § 2), а также в тех случаях, когда нужны только параметры массива. Значение ПВМ = -2 модуль может установить в том случае, если во время диалога модуля с СУПГ1 выяснится, что этот массив не нужен. Значение ВЛ = 2 задается для тех входных данных, которые не влияют на содержимое выходных массивов модуля, например для параметров ОБЪЕМ РАБОЧЕГО МАССИВА или УПРАВЛЕНИЕ ПЕЧАТЬЮ. Для выходных массивов модуля значения некоторых параметров строки матрицы ОВВ смысла не имеют. Для них принято указывать следующие значения: Г1М = 1, ОТСМ = 2, ВЛ = 2. 1) Для обозначения элементов матриц всюду в этой книге будем пользоваться правилом: x(i, у) - это элемент матрицы х, стоящий на пересечении /-го столбца и /-й строки. 135
1 A//V /V01 / / / / / 2 L Рис. 8.1. Разбиение векторов, матриц и трехмерных таблиц при обработке данных по частям Исполнительный модуль может изменять некоторые элементы массива МОМ во время работы (см. § 4). Перечислим ограничения, которым должны удовлетворять элементы массива МОМ: 1) КВВ > О, КРМ > О, КЭМ > О, КВВ + КРМ + КЭМ < КАМАХ, где КАМАХ — максимальное количество аргументов программного модуля: 2) ТМОД = 0, 1,2, 3, 4; ДВВ = 0, 1,2, 3, 4, 7; 3) первый слева символ в поле МВИ не может быть пробелом, за исклю¬ чением кодов ’’и— Л”, Л1И” и т.д/, 4) НГВВ= 1,2,3; 5) ТЭ = Д4, Д8, Ц2, Ц4, С1; 6) ФПДМОМ = СТ.. АЕ, ПС, С1, С2, СЗ, CM, Ml, М2, М3; 7) Т= 1,2, 12, 13,21,23,31,32; 8) ВВЫ = 1, 2; ПМ = 1, 2, 3, 4, 5, 7, 9; ОТСМ = 1,2; ПВМ =-2,-1,0, 1,2,3; ВЛ = 1,2. В заключение опишем способ присвоения значений элементам массива МОМ в тексте модуля, написанном на языке ФОРТРАН IV, Для записи массива МОМ удобно описать следующие массивы: MOMD(q) - типа INTEGER*4, МОМР(0), 0WD(7, 10), NEM(5) типа INTEGER * 2, RRM(t?), RRMM(t?) - типа INTEGER*4, MVID(7) - типа REAL *8 и составить оператор эквивалентности EQUIVALENCE (MOMD(l), MOMP(l)), (MOMD(tf), MVID(l)), (MOMDG), OVVD(l)), (MOMD(t), RRM(l)), (MOMD(k), RRMM(l)), (MOMD(X), NEM(l)), где 0 =. 12, # = 7, а остальные греческие буквы следует заменить целыми 136
числами, рассчитанными по формулам а = 6 + 8 • КВВ+ 2 • КРМ + [(КЭМ + 1)/2], у = КВВ, 6 = КЭМ, 77= КРМ, f = £ + 2 1- 2 • КВВ, i f + 5 • КВВ, к = 1 + КРМ, Х = к + КРМ. Тогда значения массива МОМ могут быть записаны с помощью следую¬ щих операторов DATA: 1) DATA МОМР / .. . / для 12 двухбайтовых элементов: три текстовые константы по два символа — имя модуля ИМОД, 6 целых чисел ВЕРМОД, КВВ, КРМ, КЭМ, ТМОД, ДВВ и три нуля для резервного поля; 2) DATA MVID I ... I для КВВ текстовых констант по 8 символов, содержащих матрицу МВИ; 3) DATA OVVD I... I для КВВ строк матрицы ОВВ; 4) DATA RRM /.../, RRMM /.../, NEM I ... I для КРМ целых чисел РРМ, для КРМ целых чисел РРММ и для КЭМ целых чисел НЭМ. Для передачи массива МОМ системе управления модулю нужно перепи¬ сать массив MOMD длины а в массив МОМ, служащий формальным аргу¬ ментом программного модуля. Пример составления массива МОМ приведен в § 4. § 2. МАССИВ ПАРАМЕТРОВ ВХОДНЫХ И ВЫХОДНЫХ МАССИВОВ МОДУЛЯ Массив МОВВМ используется модулем в двух случаях: 1)из МОВВМ извлекаются параметры входных массивов; 1)в МОВВМ заносятся пара¬ метры выходных массивов. Количество строк матрицы МОВВМ равно КВВ + КВВДОП. Первые КВВ строк МОВВМ соответствуют строкам массива МОМ, далее идет КВВДОП строк для дополнительных входов и выходов модуля. Строка матрицы МОВВМ имеет вид NN N NO\ N02 N03 НПС МВИ СМ ФПДООД ТЭ т Г1ВМ КФМД НОФБД НОМАСС NN, N — параметры части массива, находящейся в ООД (рис. 8.1). N01, N02, N03 параметры массива данных. Для матрицы N03 = 1, для вектора N02 = N03 = 1, для скаляра N01 = NO2 = NO3 = 1. МВИ, НПС — мнемокод вида информации и номер подсемейства массива. NB4 — длина массива в словах. СМ — целое число, поясняющее состояние массива: СМ = О 1 2 3 массив не найден; массив найден и подан на вход модуля; массив найден, но еще не подан на вход модуля; поле для выходного массива еще не отведено. ФПДООД — форма представления данных массива в ООД. ТЭ — тип элементов массива. Т - целое число, указывающее порядок перечисления элементов массива. ПВМ — параметр, указывающий вид части массива^ 137
находящейся в ООД: — 1 — в ООД находится только описание массива данных; ПВМ = 0—в ООД — весь массив; 1 — в ООД — 1-часть массива; 2 — в ООД — 2-часть массива; 3 — в ООД — 3-часть массива (см. рис. 8.1). КФМДМ — количество частей, на которые разбит массив данных. НОФБД — номер файла БД, откуда считан массив. НОМАСС - порядковый номер мас¬ сива, введенного или сформированного в текущей работе. Элементы массива МОВВМ для входных массивов данных используются в модуле следующим образом. Если в МОМ содержится МВИ = Л Т = О, ТЭ = ”_Л”, ФПДМОМ = ’_Л'\ то параметры МВИ, Т, ТЭ и ФПДООД в массиве МОВВМ содержат фактические значения этих параметров. Номера подсемейств НГ1С печатаются в сообщениях о выходных масси¬ вах модуля. Параметры N01,N02,N03 определяют размеры массива данных. Величи¬ ны NN, N и ПВМ описывают часть массива, находящуюся в ООД. Для вектора в ООД находится N компонент, начиная с (NN+ 1)-й. Для матрицы при ПВМ = 1 в ООД находится N столбцов, начиная с (NN + 1)-го, а при ПВМ = 2 в ООД находится N строк, начиная с (NN + 1)-й. Для трехмерной таблицы смысл параметров NN и N ясен из рис. 8.1. Если ПВМ < 0, то W = 0, 7V = 0, а если ПВМ = 0, то NN = 0, N = N01. Параметр СМ описывает результат поиска входного массива. Элементы строки МОВВМ для ненайденного входного массива равны нулю, кроме элементов МВИ, НПС и СМ. Если в результате выполнения модуля какой- либо входной массив портится, модуль должен устанавливать в МОВВМ признак СМ = 0. Элементы строки матрицы МОВВМ для выходных массивов используют¬ ся в модуле следующим образом. Параметры ТЭ, N01, N02, N03, NN, N заносятся в МОВВМ по мере вы¬ числения. Если выходной массив не сформирован, то модуль обязан уста¬ новить признак СМ = 0. Остальные элементы матрицы МОВВМ модуль изменять не может, иначе СУПП отметит ошибку с кодом 1112. Если для выходного массива модуль не занес в строку МОВВМ все или часть параметров ТЭ, 7VO1, N02, N03, NN, N, то по умолчанию полага¬ ется, что ТЭ = Ц2, N01 = 1, N02 = 1, N03 = 1, NN = 0, N = М)1 или N02 или N03 соответственно при ПВМ = 1, 2, 3; ФПДООД = СТ. Значения, принятые по умолчанию, заносятся в МОВВМ. § 3. ОБРАБОТКА МАССИВОВ ДАННЫХ ПО ЧАСТЯМ Входной или выходной массив модуля, для которого в матрице МОМ указано значение параметра ПВМ > 0, может быть обработан по частям. Это значит, что в начале работы модуля в ООД находится только первая часть входного массива. При этом параметр NN в МОВВМ равен 0. После того как первая часть обработана, в ООД на это же место считывается следующая часть массива. Для этого модуль должен вызвать системную 138
подпрограмму SBDSL с помощью оператора CALL SBDSL(I, & ппп), где I — номер строки матрицы МОВВМ для массива, а ппп — метка выхода из SBDSL в случае обнаружения ошибки. Параметры NN, N считанной части замещают в строке МОВВМ парамет¬ ры предыдущей части. Признаком последней части массива служит равенст¬ во NN + N = N01 (или N02, или N03) при ПВМ = 1 (или 2, или 3 соответ¬ ственно) . Если в ООД находилась последняя часть массива, то при обраще¬ нии к SBDSL будет снова считана первая часть. Для считывания частей массива в произвольном порядке используется подпрограмма SBD(I, & ппп). Перед обращением к SBD в МОВВМ уста¬ навливают параметры NN, N для нужной части. Если обрабатывается по частям выходной массив, то для записи очеред¬ ной части в БД используется подпрограмма ZBDSL(I, & ппп). После за¬ писи подпрограмма ZBDSL устанавливает в МОВВМ параметр NN для следующей части. Перед каждым обращением к ZBDSL модуль должен задать в МОВВМ размер части N. Рис. 8.2. Стандартные конструкции, использующие подпрограммы чтения и записи частей массивов данных SBD, SBDSL и ZBDSL 139
Последнюю часть массива обычно оставляют в ООД (обращения к ZBDSLhct). Если понадобится, то последнюю часть запишет в БД система управления пакетом. Запись частей массива в произвольном порядке не предусмотрена. На рис. 8.2 изображены стандартные конструкции, использующие под¬ программы SBD, SBDSL и ZBDSL. В некоторых случаях необходимо передавать с изменениями массив данных со входа модуля на выход, причем изменения возможно выпол¬ нить на том же месте, которое занимает массив. В этом случае, чтобы Рис. 8.3. Стандартная конструкция, использующая подпрограмму записи части массива данных ZZBDSL избежать перезаписи данных из входного массива в выходной, исполь¬ зуется следующий прием. Для выходного массива указывается в МОМ значение ПВМ - — 1. Входной массив изменяется, и для записи изменен¬ ной части пользуются подпрограммой ZZBDSL(I, J, & пип), где I и J - но¬ мера строк МОВВМ для входного и выходного массивов. Параметр 7V для измененной части записывается в J-ю строку матрицы МОВВМ. В конце работы модуль устанавливает в МОВВМ признак СМ = 0 для измененного входного массива. При попытке изменить входной массив без установки СМ = О СУПП в режиме самоконтроля фиксирует ошибку с кодом 2152. Стандартная конструкция с перезаписью массива с входа на выход мо¬ дуля изображена на рис. 8.3» § 4. СТРУКТУРА ИСПОЛНИТЕЛЬНОГО МОДУЛЯ ПАКЕТА Структура исполнительного модулу пакета АСТА изображена на рис.8.4. Исполнительный модуль оформляется в виде одной или нескольких под¬ программ. Аргументы основной подпрограммы исполнительного модуля (той, с которой начинается выполнение модуля) должны располагаться в заданном порядке: 1)КВО, МОМ, МОВВМ и, если есть, специальные 140
аргументы; 2) КВВ идентификаторов входных и выходных массивов; 3) КРМ идентификаторов рабочих массивов; 4) КЭМ идентификаторов массивов, объявленных эквивалентными входным, выходным или рабочим массивам модуля. Специальные аргументы используются тогда, когда основными входами пользоваться неудобно: 1)для модулей с переменным числом входов-вы¬ ходов специальными аргументами являются массивы Х4 (оперативная область данных), МА (массив адресов всех аргументов модуля) и скаляр КВВДОП (количество дополнительных в ходов-выходов) ; 2) для передачи модулю значений системных параметров и переменных; 3)для передачи модулю номеров наборов данных для записи сообщений. Переменная КВО управляет диалогом ’’СУПП — исполнительный мо¬ дуль”. Выполнение модуля начинается с того, что СУПП вызывает основную подпрограмму модуля со значением КВО=1. При КВО = 1 модуль передает системе управления массив МОМ. Получив эту информацию, СУПП отыскивает все запрашиваемые массивы данных, заносит их параметры в массив МОВВМ и вызывает исполнительный модуль второй раз со значением КВО = 2. При КВО = 2 исполнительный модуль, воспользовавшись данными из массива МОВВМ, определяет объемы рабочих массивов, параметры выход¬ ных массивов и заносит полученные величины в массивы МОМ и МОВВМ. Получив эту информацию, СУПП отводит в ООД поля для выходных и ра¬ бочих массивов и передает управление модулю в третий раз, с КВО = 3. При КВО = 3 исполнительный модуль выполняет обработку входных массивов и формирует выходные массивы. В случае обнаружения ошибки Рис. 8.4. Структура произвольного исполнительного модуля пакета АСТА модуль устанавливает значение КВО = 4 и прекращает работу. Получив это значение КВО, система управления фиксирует ошибку с кодом 1112 и уничтожает все выходные массивы модуля в ООД. Рассмотрим теперь случаи, в которых массив МОМ изменяется во время диалога СУПП и исполнительного модуля. В момент диалога, отмеченный значением переменной КВО = 2, в зависимости от результатов поиска вход¬ ных массивов и от параметров найденных входных массивов модуль может изменить следующие элементы массива МОМ: 1)ИМОД и ВЕРМ ОД, если реальный модуль представляет собой несколько формальных модулей (используется редко); 2)КВВ, КРМ, КЭМ, РРМ, РРММ, МВИ и элементы НГВВ, ТЭ, ФПДМОМ, Т, ПВМ строк матрицы ОВВ. 141
В момент диалога, отмеченный значением КВО = 3, модуль может вер¬ нуться к началу диалога с СУПП (к поиску входных массивов), установив значение КВО = 1. При этом допустимы любые изменения МОМ при усло¬ вии, что сумма величин КВВ, КРМ и КЭМ не возрастает. Если во время счета модуля выяснится, что объема рабочего массива недостаточно, можно вернуться к диалогу с СУГ1П, установив КВО = 2 и изменив вектор РРМ. Поскольку время, израсходованное системой управ¬ ления на подготовку входных данных, в этих случаях теряется, то к возвра¬ там в диалоге не следует прибегать без веских оснований. Перечислим правила написания исполнительных модулей пакета АСТА. 1. Массив МОВВМ и специальные аргументы могут быть использованы в модуле только при КВО = 2 или 3, а входные, выходные и рабочие масси¬ вы - только при КВО = 3. 2. В модуле не используются области COMMON. 3. В модуле используется стандартное управление печатью и стандартные форматы сообщений? а) управление печатью с помощью входного параметра УП: при УП <-1 печать отсутствует; при УП > 0 печатаютсясообщения об ошибках; при УП> 1 печатается краткое информационное сообщение об операции, выполняемой модулем; при УП > 2, 3, 4 печатаются результаты операций, причем чем больше значение УП, тем подробнее печать: при УП > 5 включается отладочная печать; в некоторых модулях печать, соответствующая значениям УП > 2, может отсутствовать: б) все информационные сообщения и сообщения об ошибках имеют вид ”ИМОД ВЕРМОД : текст сообщения”, где ИМОД и ВЕРМОД - имя и версия модуля, содержащиеся в массиве МОМ; в) номера наборов данных для информационных сообщений, сообще¬ ний об ошибках и для печати результатов передаются модулю с помощью специальных аргументов НОНИНФ, НОНОШ и ПОНРЕЗ. 4. В модуле выполняются все простые проверки входных данных, кроме тех, которые выполняет СУПП. 5. В модуле предусмотрена обработка по частям всех массивов данных, размер которых может превысить 1000 байтов. 6. Для выделения множеств столбцов и строк матрицы наблюдений МН используются массивы с мнемокодами видов информации ЙВ и ЙП с суф¬ фиксами В, Н, О, Ф, Э. При этом в одном модуле могут использоваться одновременно только следующие комбинации массивов ЙВ, ЙП: а)ЙВВ, ЙПВ; б)ЙВН, ЙПН; в)ЙВО, ЙПО, ЙВФ, ЙПФ, ЙВЭ, ЙГ1Э. Массивы ЙВ и ЙП всегда формируются системой управления пакетом. В заключение приведем описание и текст типичного исполнительного модуля пакета АСТА: модуля для вычисления выборочных средних значе¬ ний компонент вектора реализаций. Для того чтобы продемонстрировать возможности СУПП АСТА, снабдим этот простой модуль сложной схемой взаимодействия с системой управления пакетом. Массив МОМ содержит следующую информацию: ИМОД - СРЕДЗН, ВЕРМОД = 2, КВВ = 7, КРМ = 1, КЭМ = 0, ТМОД = 0, ДВВ = 0. Содержи¬ 142
мое матриц МВИ и ОВВ дано в таблице 8.1. Средние значения в несколь¬ ких группах строк матрицы наблюдений МН (классов) вычисляются^для тех столбцов МН, порядковые номера которых заданы в векторе ЙПВ. При этом используются только те строки МН, порядковые номера кото¬ рых заданы в векторе ЙВВ. Номера классов для строк МН содержатся в векторе НОКЛ. Если вектор НОКЛ отсутствует, то считается, что все строки МН относятся к первому классу. Выходом модуля служит матрица средних значений СЗ и матрица КВБПКЛ. Элемент КВБПКЛ (к, 0 равен количеству строк МН, принадле- Таблица 8.1 ИДЕНТИ¬ ФИКАТОР МВИ НГВВ ТЭ ФПДМОМ I ВВЫ ПМ ОТСМ ПВМ ВЛ 1 МН 1 Д4 СТ 1 1 1 1 1 1 X 2 ЙВВ 1 Ц2 СТ 1 1 2 1 0 1 JV 3 ЙПВ 1 Ц2 СТ 1 1 2 1 0 1 JP 4 НОКЛ 1 Ц2 СТ 1 1 1 2 0 1 NK 5 СЗ 1 Д4 СТ 1 2 1 2 2 2 SZ 6 КВКЛ 1 Ц2 СТ 1 1 1 2 0 1 KV 7 КВБПКЛ 1 Ц2 СТ 1 2 1 2 2 2 KVBP жащих /с-му классу, использованных для вычисления средних значений и не содержащих прочерков в /-м столбце. В модуле предусмотрена обработка по частям матриц МН, СЗ и КВБПКЛ. Первая часть матрицы МН содержит N столбцов. Для первого из них вычисляются средние значения в классах. При этом используется рабочий массив RSZ8 типа REAL*8. Затем полученные значения переносятся в первую строку матрицы СЗ и вычисляются средние значения в классах для следующего столбца. Для столбцов, номера которых отсутствуют в векторе ЙПВ, в матрицу СЗ заносятся коды, обозначающие ’’прочерки”. Эти коды передаются модулю с помощью специального аргумента ПРОЧДД. После того как обработка части МН, находящейся в ООД, заканчивается, получен¬ ные части матриц СЗ и КВБПКЛ записываются в БД и считывается следую¬ щая часть МН. Параметры входного вектора КВКЛ (количество векторов в классах) используются для определения количества классов KKL. С помощью ве¬ личины KKL определяются размеры выходной матрицы СЗ и рабочего мас¬ сива RSZ8. Если массив КВКЛ не задан, то размеры массивов СЗ и RSZ8 определяются по умолчанию, исходя из значения KKL = 10. Модуль проверяет условие max (НОКЛ(/)} < KKL, где I - количест- J < i < I во строк МН, a KKL - длина вектора КВКЛ. Если условие нарушается, то печатается сообщение об ошибке и работа прекращается. 143
Рис. 8.5. Блок-схема модуля СРГДЗН
Блок-схема алгоритма вычисления матриц СЗ и КВБПКЛ изображена на рис. 8.5 и 8.6. На рисунках обозначено: JP, JV - векторы ЙПВ и ЙВВ; NP. NV - длины векторов ЙПВ и ЙВВ; IP, IV - индексы элементов векто¬ ров ЙПВ и ЙВВ; I - порядковый номер столбца части МН относительно начала части; IPROCH, RPROCH — коды, соответствующие ’’прочеркам” для действительных и целочисленных данных; 98 - метка оператора KVO = = 4; К - порядковый номер класса. Далее следует текст модуля на алгоритмическом языке ФОРТРАН. SUBROUTINE SRED (KVO, MOM, MOVVM, 1 NFINF, NFOSH, NFREZ, IUP, RPROCH, IPROCH, 2 X, JV, JP, NK, SZ, KV, KVBP, RSZ8) INTEGER MOVVM (14, 1), MOM(l), MOMD(57) INTEGER*? JV(1), JP(1), NK(1), KV(1), KVBP(l), 1 MOMP(12), OVVD(7, 10), 12(2), D4 REAL *8 MVID(7), RSZ8(1) EQUIVALENCE (MOMD(l), MOMP(l)), (MOMD(7), MVID(l)), 1 (MOMD(21), OVVD(l)), (MOMD(56), IRRM), 2 1 (MOMD(57), IRRMMX), (14,12(1)) DATA MOMP/'CP', 'ЕД', '3H', 2,1, 1,6 * 0/ DATA MVID/'MH ЙВВ ', Рис. 8.6. Блок-схема подпрограммы SZ1 модуля СРЕДЗН 10. В.А. Кощеев 145
1 ЙПВ ', НОКЛ ', СЗ 2 КВКЛ КВБПКЛ 7 DATA OVVD/7*1, 7*'СТ', 'Д4', 3*'Ц2’, 'Д4', 1 2*'Ц2', 7*1, 1,3*0, 2,0, 2,4*1,2, 1,2, 1,2, 2 2,4*1,3*1,4*2,4*1,2,1,2,7*0/ DATA LMOM, KKLUM/57, 10/, 1 IRRM, IRRMMX /20, 0 /, D4 / Д47 GOTO (1,2,3), KVO С - - ФОРМИРОВАНИЕ МОМ 1 DO 11 I = 1, LMOM И MOM(I) = MOMD(I) GOTO 99 С ФОРМИРОВАНИЕ IRRM И МОВВМ 2 NO1 = MOVVM(3,1) KKL = MOVVM (3,6) IF (KKL. LE. 0) KKL = KKLUM IRRM = KKL + KKL MOM (56) = MOMD(56) 14 = MOVVM(11, 5) 12(1) = D4 MOVVM (11, 5) = 14 MOVVM (3,5) = KKL, MOVVM (4, 5) = NO1, MOVVM (3,7) = KKL MOVVM (4, 7) = NO1 GOTO 99 C ВЫЧИСЛЕНИЕ СРЕДНИХ ЗНАЧЕНИЙ 3 IF(IUP. GE. 1) WRITE (NITNF, 10) 1 (MOMP(I), 1 = 1,4) 10 FORMAT ( O', 3A2,13, ' ВЫЧИСЛЕНИЕ_ , 1 СРЕДНИХ — 3 НАЧЕНИЙ') N02 = MOVVM (4, 1) NV = MOVVM (3,2) NP = MOVVM (3,3) IP= 1 C1-- ФОРМИРОВАНИЕ ЧАСТИ МАТРИЦЫ СЗ 4 NN = MOVVM (1, 1) N = MOVVM (2, 1) KI =0 DO 47 1= 1, N IF (I. NE. JP(IP)) GOTO 45 IF (IP. LT. NP) IP = 1P+ 1 Cl.l - - ВЫЧИСЛЕНИЕ СРЕДНИХ ЗНАЧЕНИЙ ДЛЯ (NN + I - 1)-ГО СТОЛБЦА МН DO 42 К = 1, KKL KVBP(K1 + K) = O 42 RSZ8(K) = 0.0 DO 43 IV = 1,NV J = JV (IV) 146
K = NK(J) IF (К. GT. KKL) GOTO 97 S = X((J - 1)*N + I) 1F(S. EQ. RPROCH) GOTO 43 KVBP (KI + K) = KVBP (KI + K) + 1 RSZ8 (K) = RSZ8 (K) + S 43 CONTINUE Cl.2 - - ЗАНЕСЕНИЕ ВЫЧИСЛЕННЫХ ЗНАЧЕНИЙ В СЗ DO 44 К - 1, KKL SZ(KI + K) = 0.() 44 IF (KVBP (KI + K). GT. 0)SZ(KI + K) = RSZ8 (K)/KVBP(KI + K) . GOTO 47 C1.3 - ЗАНЕСЕНИЕ ’’ПРОЧЕРКОВ” В СЗ 45 DO 46 К = 1, KKL KVBP (KI + К) = IPROCH 46 SZ (KI + К) = RPROCH 47 KI = KI + KKL Cl - СФОРМИРОВАНА ПОСЛЕДНЯЯ ЧАСТЬ СЗ? IF (NN + N. GE. N01) GOTO 99 C3 СЧИТЫВАНИЕ НОВОЙ ЧАСТИ MH CALL SBDSL (1, <£ 98) C4 ЗАПИСЬ СФОРМИРОВАННОЙ ЧАСТИ СЗ MOVVM (2, 5) = N CALL ZBDSL (5, <£ 98) MOVVM (2, 7) = N CALL ZBDSL (7,dl 98) GOTO 4 97 IF (1UP. GE. 0) WRITE (NFOSH, 20) 1 (MOMP(I), I - 1,4), KKL, KKLUM 20 FORMAT ( _', 3A2, 13, КОЛИЧЕСТВО_ , 1 КЛАССОВ ^БОЛЬШЕ—/, 14,_ ПО_УМОЛЧАНИЮ_ , 2 _KKL_ = , 14) 98 KVO = 4 99 RETURN END §5.ИЗМЕНЕНИЕ СИСТЕМНОЙ ИНФОРМАЦИИ И ОТЛАДКА ИСПОЛНИТЕЛЬНОГО МОДУЛЯ При подключении нового модуля к пакету может возникнуть необходи¬ мость изменить следующие массивы системной информации: 1) ММВИ, МИВИ, ММСВИ, МИСВИ, МВИЭЛ - если модуль оперирует с информацией нового для пакета вида; 2) ММО, МИО, ММСО, МИСО, ОНО, ОПСО, МАКРО - массивы изме¬ няются для описания новых операций, реализуемых с помощью нового модуля; 3) ТИМ добавление имени нового модуля: 4) МВИО, СМВИО1, СМВИО2, СНМВИО если модуль должен вызывать¬ ся автоматически при появлении в ООД массивов некоторых заданных видов информации. 10* 147
Если массивы системной информации не хранятся в БД, то изменения осуществляются исправлением текстов модулей СУГ1П, содержащих эти массивы. Затем исправленные модули транслируются и выполняется редактирование пакета. Если массивы системной информации хранятся в БД, то возможна кор¬ рекция этих массивов в системном разделе с помощью операций НКОРР и ККОРР. Кроме изменений системной информации, для добавления нового моду¬ ля нужно включить оператор CALL в главный модуль пакета АСТА (см. главу IX). В заключение обсудим вопросы, связанные с отладкой модуля, под¬ ключаемого к пакету. Для экономии усилий системного программиста целесообразно, чтобы модуль был отлажен автономно. С этой целью нужно смоделировать следующие действия СУПП: 1)обращение к модулю с КВО = 1; 2)печать полученных от модуля значений КВО и МОМ; 3)формирование строк МОВВМ для входных массивов; 4)обращение к модулю с КВО = 2; 5)пе¬ чать полученных от модуля значений МОВВМ, МОМ и КВО: 6)обраше- ние к модулю с КВО = 3 и имитация действий подпрограмм SBD, SBDSL, ZBDSL, ZZBDSL; 7)печать полученных от модуля значений МОМ, МОВВМ и КВО. Все эти действия СУПП можно смоделировать с помощью отлаживающей программы, причем для отладки разных исполнительных модулей может использоваться одна и та же отлаживающая программа. Затем нужно проверить пару ’’отлаживающая программа - исполни¬ тельный модуль” на нескольких тестовых примерах, по возможности охватывающих все режимы работы исполнительного модуля. Наиболее важные из этих тестов можно включить в пакет вместе с модулем, до¬ бавив новую операцию ТЕСТЫ в таблицу описаний макроопераций МАКРО. Далее модуль подключают к пакету, сохранив отладочную печать, и выполняют в режиме самоконтроля сначала те же тестовые примеры, что и в автономной отладке, а затем - все операции, выполняемые с с участием нового модуля. ГЛАВА IX МОДУЛЬНАЯ СТРУКТУРА ПАКЕТА АСТА § 1. СИСТЕМА УПРАВЛЕНИЯ ПАКЕТОМ Пакет АСТА представляет собой одну программу, имеющую оверлейную структуру. Модули пакета написаны на языке ФОРТРАН IV для ЕС ЭВМ. Блок-схема основной программы (главного модуля пакета) приведена на рис. 9.1. Выполнение программы АСТА начинается с инициализации оперативной области данных (ООД). Затем в ООД записывается начальный список номеров модулей (НОМ,1), состоящий из одного номера, равного 1. 148
Рис. 9.1. Блок-схема главного модуля пакета АСТА В обозначениях вида (МВИ, НПС) через НИС обозначен цифровой код подсемейства массивов данных. Модуль с номером 1 - это интерпретатор предложений языка управле¬ ния пакетом (модуль ИЯ). Выходом модуля ИЯ служит новый вектор номеров модулей (НОМ,2). После того как СУПП выполнит все модули, перечисленные в (Н0М,1), проверяется, сформировали ли эти модули новый список (НОМ,2). Если сформировали, то начинается выполнение модулей из этого списка, а если нет — работа пакета заканчивается. Некоторые модули могут затребовать вызов другого модуля прежде, чем будет продолжено выполнение модулей из списка (НОМ,1). Для этого одним из выходов такого модуля должен быть скаляр НВМ (НЕМЕДЛЕН¬ НО ВЫПОЛНИТЬ МОДУЛЬ), равный номеру вызываемого модуля. Операторы CALL вызова функциональных модулей пакета объединены в группы по 20 или менее операторов в группе. В одну группу включены 149
операторы для вызова тех модулей, которые часто используются совмест¬ но. Номер модуля равен номеру группы, умноженному на 20, плюс номер модуля в группе без единицы. Каждая группа операторов CALL оформлена в виде подпрограммы с именем G CALLtf(X4, МА, MOD), где п - номер группы, Х4 - массив, служащий оперативной областью данных, МА - массив адресов аргументов вызываемого модуля, MOD - номер модуля в группе. Участок основной программы, вызывающий модуль по его номеру MOD, имеет вид I = (MOD D/20 + 1 GOTO (1,2, 3, ... , 20), I GOTO 1001 1 CALL GCALL 1 (X, MA, MOD) GOTO 1000 2 CALL GCALL2 (X, MA , MOD) GOTO 1000 Здесь метка 1000 - это выход из модуля, метка 1001 - ошибка ”непра- вильный номер модуля”. Кодошибки - 1031. Текст подпрограмм GCAL.L1, GCALL2, . . . имеет вид SUBROUTINE GCALL1 (X, М, MOD) INTEGER X(l), M(l) I = MOD - ((MOD 1)/20)* 20 GOTO (1,2, 3,4, 5, 6, 7, 8, 9, 10, И, 12, 13. * 14, 15, 16, 17. 18, 19, 20). I 1 CALL . . . (X (M( 1)), X(M(2)), . . . ) GOTO 99 2 CALL . . . (X(M(D), X(M(2)), . . . ) GOTO 99 99 RETURN END Операторы CALL различаются только именами модулей и количеством аргументов. § 2. АЛГОРИТМЫ БЛОКОВ ВМ1, ВМ2, ВМЗ Блок ВМ, реализующий диалог ”СУПП исполнительный модуль”, состоит из трех блоков: ВМ1, ВМ2 и ВМЗ (см. рис. 9.2). Блок ВМ1 обрабатывает ответ исполнительного модуля при КВО = 1 и состоит из блоков ВМ11, ВМ12, ВМ13 и ВМ14, выполняемых последова¬ тельно. При КВО = 1 исполнительный модуль передает системе управления пакетом массив описаний модуля МОМ. В блоке ВМ11 выполняются проверки массива МОМ. Все обнаруженные ошибки имеют код 3121. Блок ВМ11 работает только в режиме само¬ контроля. Блок ВМ12 заменяет коды ”_Л ” в массиве МОМ на фак¬ тические мнемокоды видов информации, заданные пользователем в матри- 150
[ Вызов модуля MOD J Рис. 9.2. Блок-схема блока вызова модуля ВМ це СМ. Коды ',__Лс1с2_ ”, где С] = И или Ц, с2= 1, 2 или 3, заменя¬ ются на фактические МВИ массивов идентификаторов элементов, найден¬ ные с помощью таблицы МВИЭЛ. Во время работы блока может быть за¬ фиксирована ошибка "не задан МВИ в матрице СМ” (кодошибки 1011). В блоке ВМ13 выполняется поиск согласованного множества входных массивов для каждой группы входов-выходов модуля. При этом исполь¬ зуются массивы МОМ, СМ и МОПС. Кроме того, определяется подсемейст¬ во, к которому следует отнести выходные массивы модуля. Если эго под¬ семейство новое, го в матрицу МОПС записывается новая строка. Пользо¬ ватель может присвоить подсемейству имя, которое запоминается в матри¬ це ТИПС. Наконец, в блоке ВМ13 формируются строки матрицы МОВВМ для всех входных массивов модуля. Во время работы блока могут быть зафиксированы ошибки: ’’входной массив модуля с ОТСМ = 1 не найден” (код 2112), "неоднозначное указа¬ ние семейства” (код 1011), "противоречивое указание семейства”, "разные имена подсемейств для одного подсемейства”, "одинаковые имена под¬ семейств для разных подсемейств” (коды ошибок 1011). В блоке ВМ14 выполняется обработка модулей с переменным числом входов-выходов. Блок ВМ2 обрабатывает ответ исполнительного модуля при КВО - 2 и состоит из блоков ВМ21, ВМ22, ВМ23 и ВМ24, выполняемых последова¬ тельно. При КВО = 2 исполнительный модуль, получив от СУПП параметры 151
входных массивов, передает СУШ1 параметры выходных массивов и объе¬ мы рабочих массивов. В блоке ВМ21 присваиваются значения, принятые по умолчанию, тем элементам строк матрицы МОВВМ для выходных массивов, которые не были сформированы в модуле. В блоке ВМ22 вычисляются объемы рабочих массивов переменной дли¬ ны и тех входных и выходных массивов, которые будут обрабатываться по частям. Если объема ООД не хватает, то делается попытка высводобить недостающий объем с помощью реорганизации ООД (слияния свободных полей ООД), перезаписи некоторых массивов из ООД в БД. В первую оче¬ редь в БД переписываются массивы, не нужные модулю, и во вторую - массивы, которые могут обрабатываться по частям, но находятся в ООД целиком или частью, объем которой может быть уменьшен. Массивы, ко¬ торые должны всегда находиться в ООД и не могут быть переписаны в БД, указаны в таблице МВИНВ. Если попытка получить нужный объем ООД не увенчается успехом, фиксируется ошибка ’’переполнение ООД” с кодом 3142. В блоке ВМ23 выполняется распределение ООД для всех массивов моду¬ ля и вычисляется вектор адресов МА. В блоке ВМ24 выполняется считывание в ООД из БД тех входных масси¬ вов модуля, которых не было в ООД. При необходимости изменяется форма представления данных (ФПД), порядок перечисления элементов и тип элементов входных массивов. Блок ВМЗ обрабатывает ответ модуля при КВО = 3 и состоит из блоков ВМ31, ВМ32, ВМЗЗ и ВМ34, выполняемых последовательно. При КВО = 3 исполнительный модуль передает СУПП сформированные выходные массивы. Блок ВМ31 переносит изменения матрицы МОВВМ, выполненные моду¬ лем во время счета, в описания массивов данных, находящиеся в ООД. В' блоке могут быть зафиксированы ошибки: ’’аварийное завершение ра¬ боты модуля” (признак ошибки устанавливает модуль, присвоив значение КВО = 4, код ошибки - 1051), ’’недопустимое изменение МОВВМ” (код ошибки 1021). Блок ВМ32. Если модуль имеет выходной массив НОМ или выходные массивы, упомянутые в таблице МВИО, то формируется список новых номеров модулей (НОМ, 2) . Блок ВМЗЗ выполняется, если задана передача имени подсемейства, которому принадлежат входные массивы модуля MOD, тому подсемейст¬ ву, в которое включены выходные массивы модуля MOD. Блок ВхМ34 уничтожает в ООД массивы МОМ, МОВВМ, МА и др., став¬ шие ненужными. § 3. СТРУКТУРА РАЗДЕЛА ОПЕРАТИВНОЙ ПАМЯТИ В разделе оперативной памяти ЭВМ, выделенном пакету АСТА, должны уместиться программа АСТА, точнее, самый длинный из путей оверлейной структуры, и оперативная область данных. Оверлейную структуру программы АСТА, т.е. разбиение программы на части, перекрывающиеся в оперативной памяти ЭВМ, можно формировать 152
по-разному, в зависимости от объема раздела оперативной памяти (ОГ1), отведенного для программы. Опишем ту однообластную оверлейную струк¬ туру, которая занимает небольшой объем (рис. 9.3). В этом случае в ОП одновременно должны находиться следующие части программы: 1) главный модуль программы АСТА; 2)одна из подпрограмм GCALLn; 3)один из модулей ВМ1, ВМ2, ВМЗ; 4)один вызываемый испол¬ нительный модуль. Одновременно с модулем ВМ2 должны находиться подпрограммы SBD, SBDSL. Если исполнительный модуль состоит из нескольких подпрограмм, то подпрограммы, вызываемые во время счета модуля, могут размещаться, начиная с адреса А, В или С (см. рис. 9.3), в зависимости от того, исполь¬ зует ли модуль подпрограммы SBD, SBDSL (считывание данных по частям) и ZBDSL (запись данных по частям). Исполнительные модули следует объединять в оверлеи примерно одина¬ ковой длины, для того чтобы сократить число оверлеев при фиксированном объеме ОП и уменьшить частоту смены оверлеев во время работы пакета. Если позволяет объем ОГ1, то для того, чтобы сократить время, затра¬ чиваемое на смену оверлеев в ОП, можно разместить все модули СУПП в оперативной памяти последовательно, так чтобы в ОП сменялись только оверлеи, содержащие исполнительные модули. Если используется многообластная оверлейная структура, то во вторую область можно поместить подпрограммы SBD, SBDSL и ZBDSL, а в третью - блоки ВМ1, ВМ2 и ВМЗ. Рассмотрим структуру оперативной области данных (ООД) — одномер¬ ного рабочего массива программы АСТА с идентификатором Х4. В начале массива Х4 находится поле значений системных переменных. Мнемокод вида информации этого поля — СИПЕП. За полем СИПЕП в ООД разме¬ щаются физические массивы данных (ФМД). Каждый ФМД представляет собой массив данных или часть массива данных и состоит из описания 153
физического массива (ОФМД) и собственно данных. Между ФМД в ООД могут возникать промежутки. За последним ФМД следует свободная часть ООД. Гсипег r 1 1 1 I ФМД t АПФМД t АСВООД Поле системных переменных СИПЕП разбито на четыре подполя: СИПЕП 1, СИПЕП2, СИПЕПЗ и СИПЕП4. Подполе СИПЕП 1 содержит переменные, описывающие состояние ООД, в частности, АПФМД - адрес поля для ФМД, А1ФМД — адрес первого нестертого ФМД, АСВООД - адрес начала свободной части ООД. Подполе СИПЕП2 содержит адреса ФМД, содержащих системную ин¬ формацию, которая относится в равной степени ко всем описаниям работ, в частности, АПРКО — адрес массива программных констант ПРКО, АСИПАП — адрес массива текущих значений системных параметров пакета СИП АП, АЗСИПАП — адрес массива значений системных параметров пакета, принятых по умолчанию, ЗСИПАП, АЗСИПАР - адрес массива значений системных параметров работы, принятых по умолчанию, ЗСИПАР, АСМВИО1, АСМВИО2, АСНМВИО - адреса массивов СМВИО1, СМВИО2 и СНМВИО, и т.д. Подполе СИПЕПЗ содержит адреса ФМД системной информации, кото¬ рая относится только к выполняемой в данный момент работе и уничто¬ жается в конце работы, в частности, АБСР — адрес массива БСР, АМОМ — адрес массива МОМ, АМОВВМ - адрес массива МОВВМ, АМА ~ адрес массива МА, АОР - адрес массива ОР, АМОИС адрес массива МОГ1С И т.д. Подполе СИГ1ЕП4 содержит адреса ФМД системной информации, кото¬ рая относится только к выполняемой в данный момент работе и не уничтожается в конце работы, в частности, АСИПАР — адрес массива текущих значений системных параметров работы СИП АР, АСИПЕР — ад¬ рес текущих значений системных переменных работы СИПЕР, АОСР - адрес оглавления системного раздела базы данных ОСР. Поясним содержание некоторых из перечисленных массивов системной информации. В массиве ПРКО хранятся программные константы пакета, т.е. такие константы, значения которых не могут быть изменены без переделок модулей пакета. В частности, АСИПЕП1, АСИПЕП2, АСИПЕПЗ, АСИПЕП4 - адреса подполей поля СИПЕП: АКСИПЕГ1 - адрес конца поля СИПЕП; КСИПЕР — количество системных переменных пакета; КСИПАП — количество системных параметров пакета; КПРКО — коли¬ чество программных констант пакета; ДЛООД — длина ООД, т.е. размер массива Х4; ДЛСОВВ — длина строки матрицы ОВВ в массиве МОМ; ДЛСМОВВМ - длина строки матрицы МОВВМ; KCALLG - количество операторов CALL в группе GCALL; МККВВМОД - максимальное коли¬ чество входов-выходов исполнительного модуля; МКФБД - максимальное количество файлов БД. 154
В массиве СИПАП хранятся текущие значения системных параметров пакета, в частности, НОТ — номер активного терминала (зарезервировано для последующих расширений СУПП). В массиве СИПАР хранятся текущие значения системных параметров работы, в частности, УСП1 - УСГ16 — параметры, управляющие системной печатью; УП, УП2 — параметры, управляющие печатью исполнительного модуля; РЕЖИМП — значение параметра РЕЖИМ; НОН — номер набора данных, содержащего описания работ пользователей; НОНИНФ — номер набора данных для информационных сообщений; HOHO11I — номер набора данных для сообщений об ошибках; НОНРЕЗ — номер набора данных для печати результатов; МКДЛИПС — максимальная длина имени подсемейства в байтах; параметры алгоритма, распределяющего ООД для массивов исполнительного модуля. В массиве СИПЕР хранятся текущие значения системных переменных работы, в частности, НОРА — номер работы; СИРА - признак ’’работа снята / работа не снята”; КОШ - код ошибки. § 4. СИСТЕМНЫЕ МОДУЛИ ПАКЕТА Модуль ИЯ (интерпретатор предложений языка управления пакетом АСТА) вызывается системой управления пакетом автоматически в начале работы пакета. Модуль обрабатывает порцию предложений, которая начи¬ нается серией из одного или нескольких предложений ’’операция”, отлич¬ ных от операций КОНЕЦ РАБОТЫ, КОНЕЦ РАБОТЫ ПАКЕТА, и закан-' чивается либо предложением ’’данные”, либо предложениями КОНЕЦ РАБОТЫ, КОНЕЦ РАБОТЫ ПАКЕТА. Серия операций, отличных от опе¬ раций КР и КРП, в порции может отсутствовать. Концом порции предложе¬ ний может также служить конец набора данных, содержащего описания работ. Результатом обработки порции предложений указанного вида, т.е. выхо¬ дом модуля ИЯ, является вектор (НОМ, 2) номеров модулей, реализую¬ щих все операции, которые описаны в порции. Если порция заканчивается предложением ’’данные”, то выходом модуля ИЯ дополнительно служит массив данных и, возможно, массивы идентификаторов подмножеств этого массива, заданные в предложении ’’данные”. Фактически модуль ИЯ состоит из трех программных модулей ИЯ, ИЯИМ и ИЯД. Первым из этих модулей всегда вызывается модуль ИЯ. Модуль ИЯ. Сначала из набора данных с номером НОН, содержащего описания работ, в ООД, а точнее, в первую строку матрицы СТРМАКР, считывается одна запись длиной ДЛЗНД. Затем предложения языка управ¬ ления пакетом, записанные в первой строке СТРМАКР, просматриваются слева направо и выполняются следующие действия. Если прочитано предложение ’’операция”, то в массивах ММО, МИО, ММСО, МИСО, ОНО, ОГ1СО отыскивается описание этой операции. Если операция реализуется одним модулем, то его номер запоминается в (НОМ, 2) и читается следующее предложение первой строки матрицы СТРМАКР. Если операция описана как макрооперация, то во вторую строку матрицы СТРМАКР считывается строка массива МАКРО, содержа¬ щая описание макрооперации, и начинается чтение второй строки СТРМАКР. 155
Если во второй строке снова встречается макрооперация, то формируется третья строка СТРМАКР и т.д. Таким образом реализована обработка вло¬ женных описаний макроопераций. Предложения всегда читаются из последней строки СТРМАКР. Когда последняя строка заканчивается, то она стирается и продолжается чтение предыдущей строки с той позиции, на которой оно было прервано. Когда кончается первая строка СТРМАКР, то в эту строку считывается следую¬ щая запись набора данных НОН. Если идентификатор операции состоит из корня и суффиксов, происхо¬ дит ! объединение соответствующих строк матрицы МАКРО с учетом приоритетов суффиксов. Если прочитано предложение КОНЕЦ РАБОТЫ или КОНЕЦ РАБОТЫ ПАКЕТА, то номера модулей, реализующих эти операции, заносятся в вектор (НОМ, 2). Затем в (НОМ, 2) записывается номер модуля ИЯ и работа модуля прекращается. Если прочитано предложение ’’данные”, то мнемокод вида информации и идентификатор подсемейства (если он задан) запоминаются в ООД в виде массивов с МВИ = МВИПД и ИПСПД. При этом используются массивы ММВИ, МИВИ, ММСВИ, МИСВИ. Затем в конец вектора (НОМ, 2) записы¬ ваются номера модулей ИЯИМ, ИЯД и ИЯ и работа модуля прекращается. После завершения работы модуля ИЯ в ООД остается матрица СТРМАКР и вектор позиций элементов строк этой матрицы, начиная с которых нужно продолжить их обработку. Далее СУПП выполняет модули с номерами, перечисленными в векторе (НОМ, 2). Последним модулем этой последовательности снова оказывается модуль ИЯ, который продолжает обработку предложений матрицы СТРМАКР. Модуль ИЯИМ вызывается системой управления пакетом автомати¬ чески для обработки идентификатора массива, указанного в предложении ’’данные”. Этот идентификатор записывается в конец первой строки матри¬ цы СМ, описывающей используемые семейства массивов данных. Таким образом, пользователь может не указывать в СМ те массивы данных, которые он ввел после ввода матрицы СМ. Если в предложении ’’данные” есть имя подсемейства, то оно запоминается в матрице ТИСМ. Модуль ИЯД вызывается системой управления пакетом автомати¬ чески для обработки предложения ’’данные”. В модуле ИЯД предложение ’’данные”, содержащее в общем случае метки элементов, управляющие коды, числовые и текстовые константы, преобразуется в массив данных и в таблицы идентификаторов подмножеств этого массива. Опишем теперь другие модули СУГ1П: НРАБ, ФСОР, ФМОР, ФОСМД, ФЛФ, ФЙСП, ФСМОПС, ФНОКЛ, ИНИСУМ и КРАБ. Модуль НРАБ реализует операцию НАЧАЛО РАБОТЫ. Выполнение модуля сводится к тому, что в ООД уничтожаются все массивы данных, кроме массивов системной информации и массивов из системного разде¬ ла БД. Кроме того, всем переменным, описывающим состояние текущей работы, присваиваются начальные значения, равные нулю. Модуль ФСОР вызывается автоматически после появления в ООД вектора ЗАДАЧА, содержащего идентификатор раздела БД. Цель вызова модуля ФСОР - считать в ООД оглавление ОР указанного раздела. Если 156
вектор ЗАДАЧА содержит идентификатор нового раздела, отсутствующего в БД, то этот идентификатор добавляется к списку имен разделов ТИР. Модуль ФОСМД вызывается автоматически после появления в ООД матрицы описаний используемых семейств массивов данных СЕМЕЙСТВА МАССИВОВ (мнемокод вида информации - СМ). Цель вызова модуля — преобразовать матрицу СМ в матрицу ОСМ и таблицу имен подсемейств ТИСМ, которые имеют более удобные для обработки структуры. Модуль ФЛФ вызывается автоматически после появления в ООД мас¬ сивов ЛФ, ЛФВ, ЛФН, ЛФО, ЛФФ, ЛФЭ, содержащих тексты логических функций. Модуль ФЛФ преобразует матрицы ЛФ в матрицы ЛТ, имеющие вид, более удобный для вычисления результатов логических функций. Модуль ФЙСП вызывается автоматически перед вызовом модуля, имеющего хотя бы один входной массив ЙВс или ЙПс, где с = В, Н, О, Ф, Э, при условии, то в ООД находится хотя бы один из массивов СИВс, СЦВс, СИПс, СЦПс, ЛТс, МВ или МП, который не был еще обработан модулем ФЙСП. Цель вызова модуля ФЙСП - преобразовать совокупность масси¬ вов СИВ, . . . , МП, указывающую подмножество столбцов и строк матрицы наблюдений МН, в векторы ЙВс и ЙПс, которые удобнее использовать в исполнительных модулях. Модуль ФСМОПС вызывается для того, чтобы считать в ООД масси¬ вы МОПС, НОПС, ТИПС, НОСМОПС, НОСТИПС и МОПСМВИ, описываю¬ щие логические связи между массивами раздела БД. Модуль ФНОКЛ вызывается автоматически после появления в ООД вектора ИМЯ ПРИЗНАКА КЛАССА или скаляра ЦИФРОВОЙ КОД ПРИЗНАКА КЛАССА. Модуль преобразует значения признака класса в массив НОМЕРА КЛАССОВ. Модуль КРАБ реализует операцию КОНЕЦ РАБОТЫ. Основное назначение модуля — зафиксировать в БД все изменения данных, выпол¬ ненные в работе. Незафиксированные изменения автоматически аннули¬ руются в момент начала следующей работы. ГЛАВА X ПРОЕКТИРОВАНИЕ СИСТЕМНОГО НАПОЛНЕНИЯ ПАКЕТОВ ПРОГРАММ. СОЗДАНИЕ АЛГОРИТМОВ В предыдущих главах пакеты прикладных программ рассматрива¬ лись прежде, всего с точки зрения пользователя. Этого было достаточно для того, чтобы увидеть, как пакеты программ используются, но недоста¬ точно для того, чтобы понять, как они устроены. В следующих трех главах пакеты программ будут рассмотрены с точ¬ ки зрения разработчика. В этих главах обсуждаются многие вопросы, с которыми сталкивается разработчик пакетов прикладных программ, и намечаются возможные пути их решения. 157
Для того чтобы отобрать для обсуждения возможно большее число вопросов, имеющих практический смысл, воспользуемся следующим приемом. Рассмотрим процесс конструирования некоторого пакета прог¬ рамм, обладающего заданным набором привлекательных качеств, и по¬ стараемся определить, какова должна быть структура системного напол¬ нения этого пакета. Обсуждение будем проводить на уровне идей, не уг¬ лубляясь в малосущественные детали и стараясь не злоупотреблять спе¬ циальной терминологией. Фактически те рассуждения, которые изложены в этой и следующей главах, были проведены во время проектирования пакета АСТА. Внима¬ тельный читатель сразу же обнаружит, какие из обсуждаемых вариантов конструкции были использованы в пакете АСТА, а какие — нет. Таким образом, содержание глав X и XI может служить некоторым обоснова¬ нием решений, принятых на этапе проектирования пакета АСТА. § 1. ЦЕЛЬ ПРОЕКТИРОВАНИЯ Предположим, что перед нами поставлена следующая задача: спроек¬ тировать, запрограммировать и отладить (скажем, на 98$^) системное наполнение некоторого пакета программ. При этом необходимо, чтобы выполнялись следующие условия: 1) полученный пакет программ должет быть очень удобен для поль¬ зователя-непрограммиста (математика, физика, экономиста, биолога, врача и т.п.); 2) полученный пакет программ должен быть очень удобен для проблем¬ ных и системных программистов, работающих с пакетом; 3) полученное системное наполнение должно быть универсальным, т.е. пригодным для разных вариантов функционального наполнения и разных ЭВМ. Эти пока еще расплывчатые представления о ’’хорошем” пакете бу¬ дут уточняться в ходе проектирования. А для начала сформулируем более точно, какой пакет программ может считаться удобным. Будем считать, что пакет является удобным для пользователя, если: 1) пакетом легко управлять; 2) функциональное наполнение пакета обеспечивает решение большого количества задач, нужных пользова¬ телю; 3) пакет надежен в работе, т.е. ошибки пользователя и сбои ЭВМ не приводят к потере значительных объемов данных или к потере инфор¬ мации, которую трудно восстановить. Будем считать, что пакет является удобным для проблемных и систем¬ ных программистов, если: 1) пакетом легко управлять при выполнении служебных операций (запуск и тестирование пакета, подключение новых модулей, модификация системного наполнения); 2) системное наполнение пакета содержит достаточное количество служебных модулей, нужных системному программисту; 3) пакет надежен в работе, т.е. ошибки поль¬ зователей или системного программиста и сбои ЭВМ не приводят к уничто¬ жению системной информации. Нужно подчеркнуть, что свойство пакета ’’удобность” не является аб¬ солютным качеством, а зависит от технологии работы с пакетом. Под технологией работы с пакетом программ будем подразумевать совокуп¬ 158
ность типичных цепочек действий, необходимых для работы с па¬ кетом . В свою очередь, технология, на которую рассчитан некоторый пакет программ, может оказаться удобной или неудобной для конкретной си¬ туации (лабораторной обстановки), в которой должен функционировать этот пакет. Поэтому, прежде чем проектировать ’’удобный” пакет прог¬ рамм, следует задать ту реальную обстановку, для которой пакет должен быть удобен. Ситуации, в которых функционируют пакеты программ, могут разли¬ чаться следующими факторами. 1. Количество решаемых задач у одного пользователя: а) одна (закон¬ чив решение одной задачи, пользователь переходит к решению следующей и к предыдущей задаче больше не возвращается); б) несколько (пользова¬ тель одновременно занимается решением нескольких задач, находящихся в разных стадиях; часты возвращения к старой задаче для повторения счета или решения нового варианта) . 2. Количество вариантов решения одной задачи: а) один (задача ре¬ шается только один раз, так как введенные данные допускают только одни способ обработки, имеющий практический смысл); б) несколько (задача решается многократно; варианты решения различаются алгорит¬ мами обработки, группировкой данных, подмножествами исходных дан¬ ных, функциональными преобразованиями данных и т.п.). 3. Объем исходных данных: а) мал (время ввода в ЭВМ — минуты, часы) ; б) велик (время ввода в.ЭВМ - недели, месяцы) . 4. Время решения одной задачи: а) мало (дни); б) велико (месяцы). 5. Квалификация специалистов, пользующихся пакетом (в вопросах, связанных с применением алгоритмов пакета, а не с программированием и вычислительной техникой): а) начинающие пользователи (не всегда могут оценить, корректно ли применение того или иного алгоритма в дан¬ ной ситуации); б) опытные пользователи (ясно представляют области применения, достоинства и недостатки используемых алгоритмов обра¬ ботки). 6. Объем, который занимают результаты решения одной задачи: а) мал (несколько страниц); б) велик (сотни страниц). 7. Требования к способу представления результатов: а) низкие (годятся любые распечатки); б) высокие (печать текстов и картинок высокого качества). 8. Характеристики используемой ЭВМ: а) быстродействие; б) объем оперативной памяти; а) объем внешней памяти; г) точность (количест¬ во значащих цифр), с которой в ЭВМ представляются числа, и др. Покажем на нескольких примерах, как меняются требования к систем¬ ному наполнению ’’удобного” пакета программ при изменении ситуации, в которой этот пакет должен работать. Если пакет должен обеспечивать одновременное решение нескольких задач одним пользователем, то нужно автоматизировать хранение и поиск данных. Если предполагается многократное решение одной задачи, то необходи¬ мо организовать хранение и совместную обработку результатов расче¬ та разных вариантов. Кроме того, желательно отслеживать структуру мно- 159
жества результатов, т.е. логические связи между данными (какие ре¬ зультаты относятся к какому варианту) . Если объем исходных данных может быть велик, требуется очень тща¬ тельно проектировать модули передачи данных между внешней памятью ЭВМ и обрабатывающим модулем. Кроме того, предпочтение следует отдавать ’’быстрым” алгоритмам обработки данных. Возможно, понадо¬ бится принять меры к сокращению объема данных за счет устранения избыточности (сжатие данных) и оптимизировать размещение наборов данных во внешней памяти ЭВМ. Пакет, рассчитанный на пользователей-неспециалистов (по тем мето¬ дам обработки данных, которые реализованы в пакете), должен иметь повышенную защиту от неправильного использования алгоритмов па¬ кета. Например, защиту от некорректного применения статистических методов, использование которых возможно только при выполнении оп¬ ределенных предположений. В ситуации, когда важны хорошо оформленные результаты решения задачи, пакет, не имеющий генератора отчетов и модулей выдачи резуль¬ татов на графопостроитель, может оказаться малопригодным. В пакете, предназначенном для ЭВМ, в которой числовая информация представляется малым количеством значащих цифр, особую важность приобретает контроль за накоплением ошибок округления. Закончим на этом рассмотрение примеров. В остальных параграфах этой главы опишем, каким образом можно сконструировать пакет, удоб¬ ный для некоторого множества технологий, включающего описанные выше варианты, кроме разве что самых крайних ситуаций. § 2. УПРАВЛЕНИЕ ПАКЕТОМ Начнем с обсуждения того, каким образом можно построить пакет прог¬ рамм, которым сможет легко управлять пользователь-непрограммист. Легкость управления пакетом может быть обеспечена простой логичес¬ кой схемой пакета (моделью пакета), простым и гибким языком управ¬ ления, наличием развитой системы оказания помощи пользователю в про¬ цессе работы с пакетом, понятной и лаконичной формой представления результатов, наличием краткой и понятной документации. Рассмотрим все эти вопросы подробнее. Логической схемой пакета программ будем называть некоторое опи¬ сание устройства пакета, возможно, не вполне соответствующее действи¬ тельности, но тем не менее достаточное для того, чтобы правильно им пользоваться. Для примера можно привести следующее описание, которое может служить логической схемой телевизора: ’’для включения телевизора нужно нажать эту кнопку; для того чтобы изменить громкость, нужно покру¬ тить ту ручку и Т.Д ”. В логической схеме пакета программ, предназначенной для пользова¬ теля-непрограммиста, должны быть обозначены связи между действия¬ ми пользователя и соответствующими ответами пакета. Внутреннее уст¬ ройство пакета нужно отразить в логической схеме только в той мерс, в которой это необходимо для понимания указанных связей в общих чертах. 160
На рис. 10.1 изображена простейшая схема произвольного пакета прог¬ рамм. На этой схеме пакет представлен в виде двух частей: 1) систем¬ ное наполнение пакета воспринимает команду пользователя и вызывает исполнительный модуль (ИМ), соответствующий этой команде; 2) функ¬ циональное наполнение пакета состоит из множества исполнительных модулей, реализующих решение того круга задач, для которого создан пакет. Схема на рис. 10.1 нуждается в уточнении, так как из нее не ясно, ка¬ ким образом пользователь отдает команды и откуда берутся обрабаты¬ ваемые данные. Для выяснения этих обстоятельств рассмотрим сначала язык управления пакетом (ЯУП) . Язык управления может считаться простым, если его легко освоить. Очевидно, что пользование любым языком предполагает неко¬ торые умственные усилия. Поэтому, желая свести трудности овладения языком управления пакетом к минимуму, нужно взять один из языков, которым пользователь уже владеет, и приспособить этот язык для управ¬ ления пакетом программ. Расположим некоторые языки, которыми средний пользователь может владеть, в порядке возрастания трудностей, возникающих при их исполь¬ зовании: а) родной разговорный; б) родной литературный; в) ломаный иностранный; г) литературный иностранный; д) разговорный иност¬ ранный. Для начала попытается записать команды, управляющие пакетом прог¬ рамм, с помощью самого легкого языка этого ряда: родного разговор¬ ного языка. Содержанием команд, управляющих пакетом, служат данные и указания того, что нужно сделать с этими данными. Например, для пакета прикладных статистических программ содержанием команды Рис. 10.1. Простейшая схема произвольного пакета программ может служить’’вычислите среднее значение следующих чисел: 10, 15, 20,. . . , 100”. Для того чтобы эта фраза могла быть использована в качестве команды ЯУП, нужно обеспечить одну и ту же реакцию пакета на различные фразы, имеющие тот же смысл; например ”посчитай-ка среднее: 10, 15, . . . , 100” и т.п. Простейший способ сделать эго таков: запомнить слово ’’среднее” и любую фразу, в которой встречается это слово, интерпретировать как команду вычислить среднее значение последовательности чисел. Все остальные слова в фразе будут необязательными и могут использо¬ И. В.А. Кощеев 161
ваться для удобства пользователя-непрофессионала. Но и профессиональ¬ ный пользователь может воспользоваться этим свойством ЯУП, если, например, он желает произвести эффект на публику, наблюдающую за его действиями, или при составлении текстов заданий, предназначенных для чтения, или наконец, просто для собственного удовольствия. Итак, получилось следующее. Пользователь отдает команды програм¬ мам пакета с помощью фраз русского языка, содержащих ключевые сло¬ ва, данные и произвольные слова, не влияющие на работу пакета. Во мно¬ гих случаях этот способ управления пакетом окажется прост и удобен. Рассмотрим теперь команду, которая использует много входных дан¬ ных: ’’напечатать график изменения среднесуточных январских температур: — 10, —15, —14, . . . —5; высота графика равна 60; ширина графика равна 120; точки на графике изображать символом ”0”; начало оси ординат — 1 января; интервал оси абсцисс — 2 дня. Фактически эта фраза состоит из нескольких фраз. Первая из них содержит данные и указывает опера¬ цию, а остальные содержат только данные для этой же операции. Для того чтобы упростить написание таких команд, определим фразы (или, будем говорить, предложения ЯУП) двух видов: фразы, опреде¬ ляющие данные (предложения ’’данные”), и фразы, указывающие опе¬ рации с данными (предложения ’’операция”). Фразы, одновременно ука¬ зывающие операции и задающие данные, запретим. Тогда первая фраза предыдущего примера может быть записана гак: ’’напечатать график; заголовок — среднесуточные январские температуры; значения темпера¬ тур: -10,. . . ,-5; . . § 3. ПРЕДЛОЖЕНИЕ ’’ОПЕРАЦИЯ” Рассмотрим большой набор исполнительных модулей, реализующих различные операции обработки данных. Согласно рассуждениям, изло¬ женным в предыдущем параграфе, для каждого модуля нужно подобрать уникальное, т.е. не совпадающее ни с одним из ключевых слов для других модулей, ключевое слово. Как это сделать? Для того чтобы искомым набором ключевых слов было легко пользо¬ ваться, достаточно потребовать, чтобы легко запоминалось соответствие ’’ключевое слово — операция обработки данных”. Вообще говоря, прог¬ раммы пакета могут подсказывать пользователю подходящие в тот или иной момент работы с пакетом'ключевые слова. Но, тем не менее, не сле¬ дует упускать возможность сделать ключевые слова легко запоми¬ нающимися. Для этого нужно, чтобы: 1) каждое ключевое слово точно и однозначно отражало содержание операции, выполняемой соответствующим модулем; 2) структура множества ключевых слов была аналогична или, по край¬ ней мере, похожа на структуру множества соответствующих операций; 3) каждое ключевое слово имело простое и краткое написание. Можно видеть, что для достаточно большого набора модулей едва ли удастся подобрать множество ключевых слов с указанными свойствами. Поэтому придется предположить, что каждому модулю пакета соответст¬ вует не одно ключевое слово, а уникальная последовательность ключевых 162
слов. Порядок слов в ключевой последовательности может не иметь значения. Рассмотрим теперь множество операций обработки данных, реализован¬ ных в некотором пакете программ. Если это множество достаточно полно отражает тот раздел знаний, алгоритмы которого реализованы в пакете, то структуры множества операций и этого раздела знаний совпадают или сходны. Например, на рис. 10.2 изображена структура множества алгорит¬ мов численных методов, построенная с помощью оглавления 20-й главы ’’Справочника по математике” [28]. Если каждому из пронумерованных прямоугольников схемы на рис. 10.2 поставить в соответствие один модуль, то для полученного набора модулей можно выбрать следующие ключевые последовательности слов: 1) линейные уравнения: 2) нелинейные уравнения; 3) разностные уравне¬ ния; 4) интегральные уравнения; 5) обыкновенные дифференциальные уравнения; 6) дифференциальные уравнения с частными производными; 7) аппроксимация ортогональными полиномами; 8) аппроксимация отрез¬ ками ряда Фурье; 9) интегрирование; 10) дифференцирование; 11) интер¬ поляция; 12) Монте-Карло. Это множество последовательностей слов имеет структуру (рис. 10.3), которая совпадает со структурой, изображенной на рис. 10.2. Действитель¬ но, если двигаться по схеме рис. 10.3 вдоль стрелок, начиная с вершины схемы, и выписывать слова из встречающихся на пути прямоугольников, то независимо от выбора пути всякий раз будет получена одна из ключе¬ вых последовательностей слов (с точностью до порядка). Следовательно, схема рис. 10.3 эквивалентна множеству перечисленных выше.ключевых последовательностей, но ориентироваться по ней легче. Таким способом можно образовать множество ключевых последователь¬ ностей для набора модулей, имеющего произвольную иерархическую струк¬ туру. При этом, вместо того чтобы знать все ключевые последователь¬ ности, достаточно знать слова, из которых они образуются (а их гораздо меньше) и способ их формирования. Так, пользователь, научившийся составлять ключевую последовательность ’’аппроксимация полиномами Чебышева”, не затруднится составить последовательность ’’аппроксимация полиномами Эрмита”. Заметим теперь, что ключевые последовательности слов, полученные описанным способом, не всегда удовлетворяют третьему свойству, т.е. не всегда имеют простое и краткое написание. Действительно, модулю, который находится на п-м уровне иерархии, соответствует ключевая после¬ довательность, состоящая не менее чем из п слов, часто весьма длинных. Возможных решений тут несколько. Во-первых, наряду с полными ключевыми последовательностями можно разрешить использовать и сок¬ ращенные (мнемокоды). При этом желательно, чтобы правила пере хода от последовательностей слов к мнемокодам были просты и одинаковы для всех последовательностей. Рассмотрим возможные варианты таких правил. 1. От каждого слова ключевой последовательности сохраняются первые к букв. Число к = 1,2,3,. . . выбирается так, чтобы никакие две разные ключевые последовательности не имели одинаковых мнемокодов. Недос¬ татком этого способа является то, что получающиеся мнемокоды плохо 11* 163
Рис. 10.2. Структура множества алгоритмов численных методов
напоминают слова, из которых они получены, и часто неблагозвучны (но крайней мере, для к <2). Пример: ”АП ПО ЧЕ”. 2. Для каждого слова придумывается индивидуальное сокращение. Пример: ”АПГ1Р П ЧЕБЫШЕВА”. Если эти сокращения придуманы искусно, то получаются легко читаемые мнемокоды. С другой стороны, при исполь¬ зовании мнемокодов по памяти (что, конечно, не обязательно) может возникнуть неопределенность: например, как сократить слово ’’класс” - КП или К? Во-вторых, можно разрешить.пользователю придумывать свои ключевые слова взамен или наравне с принятыми в пакете. В этом случае пользова¬ тель, часто использующий операцию ’’аппроксимация полиномами Эрмита”, может заменить ее мнемокодом ”Э”. § 4. ПРЕДЛОЖЕНИЕ ’’ДАННЫЕ" Перейдем теперь к предложению ЯУ11, которое содержит данные, пред¬ назначенные для обработки модулями пакета программ к предложению ’’данные”. Вообще говоря, кроме собственно данных, это предложение могло бы содержать и описание данных, состоящее из описания структуры данных, имен элементов структуры, и некоторую служебную информацию, необ¬ ходимую для управления данными. Кроме этого, предложение ’’данные” могло бы содержать операторы формирования и преобразования данных. Обсудим все эти варианты. Служебная информация в предложении ’’данные” рассматривается в главе ХЕ Начнем со структуры данных. Наиболее простыми и наиболее распрост¬ раненными структурами данных являются следующие стандартные струк¬ туры: 1) скаляры (отдельные действительные числа) или символы: 2) числовые векторы (последовательности действительных чисел) или строки символов: 3) числовые или текстовые матрицы (двумерные таблицы, в каждой строке которых помещается числовой вектор или строка символов). Элементами стандартных структур служат компоненты вектора и ком¬ поненты, строки и столбцы матрицы. Часто используются и другие, более сложные, структуры данных. Не¬ обходимость использовать нестандартные структуры данных возникает по следующим причинам: 1) если нестандартная структура привычна Д1я круга пользователей, которые работают с пакетом: 2) если структура удобна для программирования исполнительных мо ду'л ей пакета: 3) если использование этой структуры позволяет хранить данные в компактном виде. Прежде всего необходимо выяснить, в какой мере системное наполне¬ ние пакета должно зависеть от используемых структур данных. С этой целью рассмотрим крайние случаи. 1. Модули системного наполнения пакета ’’видят” ту же структуру дан¬ ных, которую видит пользователь и используют программы пакета. Это означает, что модули системного наполнения могут преобразовывать данные 166
с учетом структуры, например передавать программе пакета только один или несколько столбцов матрицы или исправлять указанную компоненту вектора. Такая обработка данных системными модулями (на уровне элемен¬ тов структуры) очень удобна и часто без нее нельзя обойтись на практике. С другой стороны, попытка учесть все структуры данных, используемые в программах пакета, может привести к чрезмерному усложнению моду¬ лей системного наполнения. Кроме того, при подключении к пакету новых исполнительных модулей, использующих данные новой структуры, воз¬ никает необходимость изменять системное наполнение пакета, что нежела¬ тельно. 2. Другой крайний случай. Модули системного наполнения пакета рас¬ сматривают все вводимые данные как числовые векторы или строки сим¬ волов, т.е. как данные одной простейшей структуры. Это не мешает поль¬ зователям и программам пакета видеть и использовать истинную структу¬ ру данных, но все преобразования данных, учитывающие их структуру, теперь должны выполняться только программами пакета. Например, для тою чтобы подать на вход некоторой программы один столбец матрицы, нужно сначала подать на вход другой программы вектор, содержащий всю матрицу и описание структуры этого вектора (тоже вектор или ска¬ ляр) , получить на выходе второй программы вектор, содержащий отобран¬ ный столбец, и подать его на вход первой программы. Достоинствами этого варианта являются простота системного напол¬ нения и независимость его от используемых структур данных. К недос¬ таткам следует отнести негибкость управления данными: системное на¬ полнение пакета не может непосредственно оперировать с элементами структуры данных, например, для стандартных структур со строками и столбцами матриц. Остановимся на следующем компромиссном варианте: пусть системное наполнение пакета "видит” только небольшое число основных структур данных, применяемых пользователями, а все остальные структуры исполь¬ зуются только программами пакета. В случае пакета программ для статис¬ тической обработки данных основными структурами данных являются ст а н д а р г н ы е ст ру к т у р ы. Рассмотрим два способа описания структуры данных: 1) описание сов¬ мещено с данными в одном предложении ЯУП - предложении ’’данные”; 2) структура данных описывается с помощью специального предложения ЯУП ’’структура данных”, а собственно данные записываются в виде векто¬ ра в предложении ’’данные”. Следующий пример иллюстрирует оба способа описания структуры. Синтаксис ЯУП. использованного в примерах, сейчас значения не имеет. Пример 4.1.Описание структуры данных. Первый способ: ”это мат¬ рица; 1-я строка: 1.1 2.1 4.1; 2-я строка: 1.0 3.2 4.5”. Второй способ: ’’структура данных - матрица, состоящая из двух строк и трех столбцов; Данные: 1.1 2.1 4.1 1.0 3.2 4.5”. Достоинством первого способа является то. чго совмещение данных и их структуры делает предложение ’’данные” более наглядным, легко чи¬ таемым, что приводит к сокращению числа возможных ошибок. Достоинст¬ вом второго способа является большая компактность предложений ’’дан¬ ные”, что демонстрируется следующим примером. 167
Пример 4.2. Описание структуры данных. Первый способ: ’’это век¬ тор; 1-я компонента: 1.1, 2-я компонента: 2.1, .. . , 5-я компонента: 4.5’'. Второй способ: ’’структура данных - вектор из 6 компонент; данные 1.1 2.1 . . . 4.5”. Возможны и промежуточные варианты, например часть описания струк¬ туры можно поместить вместе с данными (грубое описание структуры), а часть - выделить в особое предложение ’’структура данных” (уточне¬ ние структуры). Окончательный выбор способа описания структуры данных зависит от конкретного набора используемых структур и особенностей тех дан¬ ных, которые обычно встречаются при работе с пакетом. Обсудим применение операторов генерации и преобразования данных внутри предложения ’’данные”. Необходимость использовать средства ге¬ нерации и преобразования данных возникает тогда, .когда в данных, кото¬ рые нужно ввести в ЭВМ. усматривается какая-нибудь закономерность. Например, предложение ’’данные” ’’номера равны 1, 2, 3. 4, 5, 6, 7, 8, 9” хочется записать в виде ’’номера равны целым числам от 1 до 9” или ’’но¬ мера равны 1 - 9”. В этих случаях часть предложения ’’данные” ’’целые числа от 1 до 9” является оператором генерации данных. Примером опе¬ ратора преобразования данных может служить фраза ’’далее следуют 10 чисел, совпадающих с числами, введенными ранее в 7-ю строку этой мат¬ рицы”. В некоторых случаях могут оказаться полезными более сложные опе¬ раторы преобразования данных, например ’’значения следующего столбца матрицы равны логарифмам значений предыдущего столбца” или ’’значения следующего столбца матрицы равны значениям предыдущего столбца, сло¬ женным с независимыми реализациями случайной величины, распределен¬ ной по нормальному закону с нулевым средним и единичной дисперсией". Возникает допрос: зачем усложнять модули системного наполнения, выполняющие обработку предложений ’’данные”? Не проще ли преоб¬ разовать уже введенные данные с помощью специальных операций, т.е. модулей функционального наполнения пакета программ? Действительно, многие преобразования данных легче оформить в виде отдельной программы пакета. Но усложнение системного модуля ВВОД может быть все же оправдано в том случае, если пользователю значительно проще выполнить преобразование данных одновременно с вводом данных, а не в два приема. Подводя итог обсуждению языка управления пакетом, можно сделать вывод, что для управления пакетом необходимы предложения двух типов: предложение ’’операция” и предложение ’’данные". И пока не ясно, пона¬ добятся ли предложения других типов. На самом деле предложение ’’операция” можно легко превратить в пред¬ ложение ’’данные” вида ’’операция: вычислить средние значения” и тем самым обойтись только одним типом предложений. Такое упрощение структуры ЯУП может оказаться полезным при проектировании транслято¬ ра ЯУП (см. главу XI). но, вероятно, создаст дополнительные трудности при изучении ЯУП. поскольку при этом будет замаскировано принципиаль¬ ное отличие предложения, с помощью которого вводят данные, от предло¬ жения. с помощью которого выполняют операции с данными. 168
§ 5. ОПИСАНИЕ РАБОТЫ Рассмотрим теперь вопрос о структуре описания работы (задания), за¬ писанного на языке управления пакетом, т.е. о структуре совокупности предложений ’’операция” и ’’данные”, которые описывают некоторый ал¬ горитм обработки данных. Каким образом нужно объединить предложения "операция” и ’’данные” так, чтобы получить текст описания работы, кото¬ рый бы однозначно и одинаковым образом интерпретировался пользова¬ телем и модулями системного наполнения пакета, был краток, не содержал информации, несущественной для пользователя, но в то же время был ле¬ гок для чтения? Если полагать, что смысл любой операции ясен из вида предложения ’’операция”, т.е. легко определяется по ключевой последовательности слов, то возникает только один вопрос, касающийся предложения ’’операция”: а какие данные используются при выполнении конкретной операции из опи¬ сания работы? Обычный способ разрешения згой неопределенности состоит в том, что данным присваиваются имена, а в предложении ’’операция” перечис¬ ляются имена данных, которые используются при выполнении этой опе¬ рации. Этот способ хорош, но только до тех пор, пока невелико количест¬ во аргументов операции, невелико количество предложений в описании работы и мало множество имен данных, в котором нужно отыскивать имена для подстановки в предложения ’’операция”. Если хотя бы одно из этих условий не выполняется, то написание и увязывание между собой аргументов предложений ’’операция” в описании работы превращается в утомительную процедуру, при которой совершается много ошибок. Оказывается, что существует способ избавить пользователя от выпи¬ сывания аргументов операций, что существенно упрощает текст описания работы и уменьшает вероятность совершения ошибки при составлении описания. Суть этого способа состоит в том, что каждому массиву данных (матри¬ це, вектору или, в частности, скаляру) пользователь или специальный мо¬ дуль пакета присваивает некоторое описание того, в каких операциях этот массив можег участвовать, а в каких - нет. Далее фиксируется формаль¬ ный конструктивный алгоритм, с помощью которого можно опреде¬ лять, является некоторая конкретная комбинация входных массивов данных допустимой для данной операции или же выполнение операции с данным набором входных массивов будет логически неправильным. Все это позволяет организовать автоматический поиск входных масси¬ вов каждой операции из описания работы. В общем случае процедура ав¬ томатического поиска отбирает одну или несколько комбинаций входных массивов данных. Каждая из этих комбинаций является логически пра¬ вильной и только пользователь может указать, какая из них ему нужна. Эта информация является минимально необходимой для выбора одного из возможных вариантов выполнения операции. Подробно автоматический поиск входных массивов описан в главе XII , для целей же данного параграфа достаточно считать, что в предложении ’’операция” отсутствуют имена используемых данных, а все входные мас- 169
Рис. 10.4. Уточненная схема произвольного пакета программ
сивы операций отыскиваются автоматически. Окончательный выбор комби¬ нации входных массивов делает пользователь с помощью предложения ’’данные”. Вид этого предложения обсуждается в главе XI. Вопрос, которым мы сейчас займемся, таков: как определить множест¬ во массивов данных, среди которых осуществляется автоматический поиск входных массивов для произвольной операции из описания работы? Во-первых, ясно, что искомое множество должно содержать массивы данных пользователя-автора описания работы, полученные во время вы¬ полнения его предыдущих заданий и оставленные на хранение (напри¬ мер, записанные на магнитную ленту). Во-вторых, искомое множество должно содержать все данные, введенные в этой же работе с помощью предложений ’’данные” и сформированные в этой же работе с помощью предложений ’’операция”. При этом естественно полагать, что речь идет только о предложениях ’’данные” и ’’операция”, предшествующих в описа¬ нии работы тому предложению ’’операция”, для которого определяется искомое множество массивов. Теперь настал момент, когда можно уточнить схему, изображенную на рис. 10.1 (рис. 10.4) . Из схемы рис. 10.4 видно, что пользователь состав¬ ляет описание работы, состоящее из предложений языка управления паке¬ том. Модули системного наполнения вызывают исполнительные модули, соответствующие каждому из этих предложений. Результат,, полученный после выполнения исполнительного модуля, помещается в оперативную область данных (ООД) на временное хранение. Специальный модуль ’’об¬ работка предложения ’’данные”” осуществляет передачу данных из текста предложения ’’данные” в ООД. Другой модуль - ’’запись в базу данных”-- переписывает данные из ООД в базу данных (БД) на постоянное хранение. На входы исполнительных модулей могут быть поданы данные как из ООД, так и из БД. Дальнейшее уточнение схемы рис. 10.4 произойдет в главе XI. § 6. УСЛОВНЫЙ ОПЕРАТОР На этом общее описание ЯУП можно было бы считать законченным, если бы не вызывал некоторых сомнений тот факт, что в полученном языке отсутствуют предложения, соответствующие таким полезным опера¬ торам алгоритмических языков, как условный оператор ^оператор цикла. Отсутствие оператора безусловного перехода, как известно, считается дос¬ тоинством. Определим предложение ’’условныйоператор” вида: ’’если справедливо условие У, то выполнить последовательность предложений ЯУП Г11, а если условие У не справедливо, то выполнить последовательность предложений П2”. Здесь условие У - это некоторое утверждение, касающееся указанных в нем данных, причем в момент составления описания работы пользова¬ тель не знает, выполняется это утверждение или нет. Разные условные опе¬ раторы могут различаться условиями У и последовательносгями предложе¬ ний П1 и П2. Пример 6.1. Компоненты У, ГП и Г12 условного оператора. Условие У: ’’допустимо считать, что компоненты вектора Z распределены по нор¬ мальному закону”. Последовательность предложений Ill описывает алго¬ 171
ритм статистической обработки компонент вектора /применимый только к данным, распределенным по нормальному закону. Последовательность предложений П2 описывает алгоритм обработки, не использующий предпо¬ ложения о нормальном распределении данных. Попробуем представить произвольный условный оператор в виде не¬ скольких предложений ’’операция” и ’’данные”: ’’условие У: . . . ; 1-я последовательность предложений: . . . ; 2-я последовательность предложений: . . . ; проверить условие и выполнить одну из последовательностей предложе¬ ний”. Первое предложение ’’данные” содержит строку символов, описываю¬ щую условие У некоторым заданным образом (каким именно — сейчас не имеет значения). Второе и третье предложения ’’данные” содержат последо¬ вательности предложений ЯУП, ьГоторые нужно выполнить соответственно в случае справедливости условия У и в противном случае. Пусть модуль, вызываемый с помощью предложения ’’операция”, -- ’’проверитьусловие и выполнить одну из двух последовательностей пред¬ ложений” - работает следующим образом. Входами модуля служат текст условия У, тексты последовательностей предложений П1 и П2 и массивы данных, с помощью которых проверяет¬ ся справедливость условия. Выходом модуля является текст выбранной по сл е дов а гел ьно ст и п ре дл о же н и й. Тогда для того чтобы последовательность указанных четырех предло¬ жений была эквивалентна выполнению условного оператора, необходимо, чтобы последовательность предложений с выхода этого модуля была включена в текст описания работы сразу же после предложения ’’прове¬ рить условие . . .”. Таким образом, если при проектировании системного наполнения пакета предусмотреть возможность изменения текста описания выполняемой работы (гой части, которая еще не была выполнена) модулями пакета, то не понадобится вводить специальный условный оператор. Точнее, условный оператор можно было бы и определить, но сделать так, чтобы транслятор ЯУП преобразовывал любой условный оператор в рассмотренную последо¬ вательность предложений ’’данные” и ’’операция”. Ниже будет показано, что такая особенность системного наполнения пакета окажется полезной и в других ситуациях. Рассмотренный прием в принципе позволяет использовать и вложенные условные операторы, т.е. включать в последовательности II1 и П2 другие условные операторы. Но, вероятно, будет благоразумнее запретить исполь¬ зование вложенных условных операторов, чтобы не усложнять описание работы. Рассмотрим теперь оператор цикла: ’’выполнять последовательное»'- предложений И многократно: перед каждым выполнением проверять ус¬ ловие повторения цикла У; если окажется, что утверждение У не справед¬ ливо, го прекратить выполнение данного оператора цикла”. Ясно, что для реализации оператора цикла с помощью предложений ’’операция” и ’данные” можно воспользоваться приемом, описанным выше. Действительно, получаем следующие предложения, эквивалентные опера¬ тору цикла: 172
’’последовательность предложений: . . . ; условие У: . . .; выполнять последовательность предложений до тех пор, пока справедли¬ во условие; ”. В этом случае выходом модуля, проверяющею условие повторения цик¬ ла, является либо входная последовательность предложений, к которой дописано предложение ’’выполнять последовательность предложений до гех пор, пока справедливо условие повторения цикла” (если условие справед¬ ливо) , либо пустая последовательность предложений (если условие не справедливо). Если выходная последовательность не пуста, она добавляется в текст описания работы вслед за последним выполненным предюжением. При этом входными данными некоторых операций из последовательности П на z-м цикле могут служить выходные данные других операций на преды¬ дущем (Z 1)-м цикле. Таким образом оператор цикла и условный оператор можно заменить эквивалентной последовательностью предложений ’’операция” и ’’данные”, если предположить, что некоторые исполнительные модули могут генери¬ ровать последовательности предложений ЯУП, которые включаются в текст описания работы сразу же за предложением, вызвавшим этот модуль. § 7. РЕЖИМЫ РАБОТЫ С ПАКЕТОМ И ХРАНЕНИЕ ДАННЫХ Дальнейшее уточнение языка управления пакетом отложим до главы XI, а сейчас займемся обсуждением двух вопросов: выбор режима работы с пакетом и способы хранения данных. Основными режимами работы с пакетами программ являются пакетный режим и диалоговый режим. Рассмотрим работу пакета программ в пакетном режиме. Каждый поль¬ зователь составляет одно или несколько заданий, которые содержат опи¬ сания работ. Задания всех пользователей собираются в один пакет, и опера¬ тор вводит этот пакет в ЭВМ. Задания из пакета обрабатываются последо¬ вательно и результаты выполнения каждой работы печатаются на АЦПУ. Полученная бумажная лента разрывается на части и каждому пользователю вручается часть с результатами выполнения его заданий. Проанализировав полученную информацию, пользователь составляет новые задания, и цикл повторяется. Промежуток времени между сдачей подготовленною задания на ЭВМ и получением резулыатов часто заранее не известен и может ме¬ няться, в зависимости от загруженности ЭВМ и других факторов, от десят¬ ков минут до нескольких суток. Основным недостатком работы в пакетном режиме является низкая производительность труда пользователя, обусловленная большим вре¬ менем ожидания результатов и невозможностью вмешаться в ход выпол¬ нения задания. Так, получив долгожданные результаты, пользователь часто узнает, что его задание не выполнено из-за пустяковой ошибки в описании. Исправив ошибку в доли секунды, пользователь отдает задание на ЭВМ и снова переходит в состояние ожидания. Возможны и более драматические ситуации. Обычно работу по форми¬ рованию пакета заданий, вводу его в ЭВМ и другие bciiomoi атсльные дейст¬ 173
вия поручают оператору ЭВМ. Если оператор ошибается (из-за того, что ’’капризничает” ЭВМ или по другим причинам), то пользователь, получив долгожданные результаты, может узнать, что его задания выполнены не в том порядке, в каком нужно, или что задание, исправляющее ошибки в данных, выполнено дважды. Последствия при этом могут быть настолько тяжелы, что известны случаи, когда в пакетах программ предусматрива¬ лась специальная защита от многократного внесения одних и тех же ис¬ правлений. Рассмотрим теперь работу пакета программ в диалоговом режиме. В этом случае пользователь часть своего рабочего времени проводит за дисплеем, на экране которого он набирает описания работ и видит ответы программ пакета, в том числе сообщения об ошибках и результаты выпол¬ нения операций обработки данных. С помощью этих сообщений пользо¬ ватель пытается исправлять свои ошибки до тех пор, пока не добивается желаемых результатов. Если время между посылкой команды и ответом ЭВМ (время реакции пакета) мало, то за одно и то же время пользователь в диалоговом режиме может выполнить гораздо больше заданий, чем в пакетном режиме. Но если время реакции пакета велико, из-за того что велико количество од¬ новременно работающих за дисплеями пользователей или из-за большого времени счета программ пакета, то, работая с дисплеем, пользователь большую часть своего времени тратит на ожидание ответа. В этом случае выполнить такие задания в пакетном режиме окажется удобнее. Поэтому ’’удобный” для пользователя пакет программ должен иметь оба режима работы: пакетный и диалоговый. В этом случае становится возможным в диалоговом режиме выполнять задания, имеющие неболь¬ шое время счета, и отлаживать описания сложных работ, а в пакетном режиме - выполнять уже проверенные задания, требующие большого вре¬ мени счета. Вернемся к пакетному режиму и рассмотрим некоторые его варианты. Если используется пакетный режим, обеспечиваемый операционной системой ЭВМ, то каждое задание пользователя записывается с помощью двух языков: языка управления пакетом программ, на котором состав¬ ляется описание работы, и языка управления операционной системой ЭВМ, на котором описываются используемые наборы данных и вызовы программ пакета. Если используется пакетный режим, обеспечиваемый пакетом программ, го каждое задание пользователя состоит только из описания работы, запи¬ санного на языке управления пакетом программ, а вызов главного модуля пакета осуществляется оператором ЭВМ с помощью стандартного задания, написанного на языке управления операционной системой ЭВМ. Достоинст¬ вом этого варианта пакетного режима является го, что пользователь из¬ бавлен от необходимости знать язык управления заданиями операционной системы. Рассмотрим теперь некоторые варианты диалогового режима. Если пакет программ управляется с помощью ’’меню”, то на каждом шаге диалога на экране дисплея появляется список возможных в данной ситуации команд. Пользователь просматривает список и набирает номер или код выбранной команды на клавиатуре. 174
Если пакет программ управляется с помощью команд, то на каждом шаге диалога пользователь набирает код нужной команды с помощью справочника или наизусть. Преимущество первого способа управления в том, что пользователь не должен помнить или отыскивать в словаре текст команд. Кроме того, вместо набора текста команды достаточно набрать одну или две цифры (порядковый номер строки меню, содержащей выбранную команду) или, для некоторых пакетов, указать строку меню свето¬ вым пером или курсором. Достоинства второго способа управления пакетом особенно заметны тогда, когда количество возможных команд велико. В этом случае для отыскания нужной команды требуется ’’перелистать” несколько страниц меню, так как на экране дисплея обычно помещается не более 10-20 ко¬ манд. Особенно досадно бывает многократно искать, листая меню, одну и ту же команду, которую пользователь давно уже знает наизусть. Поэтому целесообразно использовать оба способа управления паке¬ том. разрешая пользователю на каждом шаге диалога выбрать гот спо¬ соб, который ему более удобен в данный момент. Теперь обсудим вопрос охранении данных во внешней памяти ЭВМ. Хранимыми данными могут быть исходные данные, управляющая информация и результаты выполнения программ пакета. Возможны сле¬ дующие варианты: 1) данные не хранить: 2) хранение данных каждого пользователя - дело амого пользователя; 3) хранить данные всех поль¬ зователей в базе данных пакета. В первом случае пользователь лишен возможности передавать данные от одной своей работы к другой. Поэтому он вынужден всякий раз начи¬ нать обработку данных с самого начала, что приводит к напрасной трате машинного времени, особенно при сложной, многоступенчатой обработке информации. Во втором случае оказывается возможным запоминать результаты выполнения операций, чтобы не вычислять их повторно в будущем. Для этого пользователь должен на языке операционной системы ЭВМ описы¬ вать свои наборы данных и для каждой операции из описания работы указывать, какие из наборов данных нужно использовать в этот раз. С ростом числа просчитанных вариантов растет количество наборов данных и соответственно уменьшается уверенность пользователя в том, что он точно знает, что, где и под каким, именем у него хранится. 1 Наконец, в третьем случае хранение, поиск и обработка многочислен¬ ных результатов работы программ пакета перестает быть проблемой. Данные всех пользователей хранятся в одной базе данных, которая опи¬ сана в стандартном задании вызова главного модуля пакета. Способы указания используемых данных и записи данных в БД могут быть упрощены до предела и выполняться со всеми возможными про¬ верками. 175
§ 8. ПОЛНОТА НАБОРА ПРОГРАММ И КОНТРОЛЬ ЗА ДЕЙСТВИЯМИ ПОЛЬЗОВАТЕЛЯ Закончим на этом обсуждение тех средств, которыми может быть обес¬ печена легкость управления пакетом, и рассмотрим другие качества паке¬ тов программ, удобных с точки зрения пользователя. Пусть дан пакет программ, которым легко управлять. Назовем мощ¬ ностью пакета программ P(Z) наибольшее количество различных алго¬ ритмов обработки данных, которые можно реализовать с помощью вы¬ полнения цепочки из / программ пакета. Одна и та же программа может входить в цепочку несколько раз. Очевидно, что, при прочих равных усло¬ виях, чем больше мощность пакета, тем он удобнее для пользователя, по крайней мере, до тех пор, пока используется вся мощность пакета. Возни¬ кает вопрос: каким образом может быть достигнута высокая мощность пакета программ? Ясно, что мощность пакета растет с увеличением количества программ /V. Если зависимость мощности пакета от количества программ линейна, то едва ли можно надеяться на создание пакета программ, удивляющего разнообразием возможных алгоритмов обработки данных. Для того чтобы получить нелинейную возрастающую зависимость мощ¬ ности от N (в пределе — экспоненциальную), нужно обеспечить совмести¬ мость входов одних программ пакета с выходами других. При этом резуль¬ таты выполнения одной программы могут быть поданы на вход второй, выходы второй - на входы третьей и т.д. Тем самым окажется возможной многоэтапная обработка данных, и количество алгоритмов, реализованных в пакете, будет значительно больше количества программ. Действительно, если выход каждой программы пакета может быть подан на вход любой другой (это предельный случай), то количество различных цепочек про¬ грамм длины I будет равно 2 1. Рассмотрим следующий способ составления списка программ, вклю¬ чаемых в пакет: 1) выпишем названия всех основных алгоритмов решения того круга задач, для которого создается пакет; 2) добавим к полученному списку программы, обеспечивающие за¬ данную технологию работы с пакетом: 3) перечислим все имеющие смысл цепочки этих программ, в которых результаты выполнения одной программы являются исходными для дру¬ гой: 4) если окажется, что для существенного увеличения числа цепочек в пакет нужно включить некоторую вспомогательную программу, сде¬ лаем это. Например, добавим в пакет npoi рамму, преобразующую выход¬ ные данные одной программы к виду, пригодному для передачи на входы других программ пакета. Такой способ формирования функционального наполнения пакета обеспечивает высокую мощность проектируемого пакета программ. Следующее свойство пакета, которое нужно обсуди г ь, это наличие средств контроля за действиями пользователя и оказания помощи поль¬ зователю в процессе работы с пакетом. Предположим, что пользователь изучил описание пакета и, пользуясь таблицей ключевых слов, которую 176
он достал из кармана или увидел на экране дисплея, составил описание работы и ввел его в ЭВМ. Если описание работы составлено правильно, то пользователь получает верные результаты и, довольный, продолжает работу. Если в описании ра¬ боты есть ошибки (синтаксические или логические), то возможно следую¬ щее развитие событий : 1) ошибки обнаружены модулями пакета и работа не выполняется; 2) ошибки не обнаружены модулями пакета, работа выполняется и пользователю выдаются неправильные результаты; 3) ошибки не обнаружены модулями пакета, при попытке выполне¬ ния работы возникает ситуация (программное прерывание), из-за кото¬ рой операционная система ЭВМ прекращает работу с пакетом. . В первом случае ничего страшного не происходит. Модули системного наполнения должны достаточно вразумительно объяснить пользователю, в чем состоит его ошибка и, возможно, предложить несколько вариантов ее исправления. В очевидных случаях возможно автоматическое исправ¬ ление ошибки. Поскольку остальные два случая хуже, желательно, чтобы система контроля за действиями пользователя обнаруживала все его ошиб¬ ки, которые в принципе можно обнаружить. Пример 8.1. Рассмотрим алгоритм обработки предложения ’’опера¬ ция”. На вход обрабатывающего модуля подается текст предложения, а на выходе должен появиться номер модуля, выполняющего указанную операцию. Алгоритм обработки состоит в последовательном сравнении слов входного текста со словами из таблицы ключевых последователь¬ ностей. Если во входном тексте обнаружена одна ключевая последователь¬ ность, то ее номер и является номером модуля, реализующего операцию. Если во входном тексте не найдено ни одной ключевой последовательнос¬ ти, то это -- ошибка пользователя. В простейшем случае ответом пакета может служить сообщение ’’неизвестная ключевая последовательность”, в более сложном - передача пользователю нескольких табличных ключе¬ вых последовательностей, наиболее похожих на входную, с просьбой выб¬ рать из них нужную или ввести новую. Наконец, если во входном тексте найдено несколько ключевых последова¬ тельностей, то эго может быть расценено как несколько предложений ’’опе¬ рация” или пользователю может быть предложено выбрать одну из них. Вернемся к анализу трех возможных последствий ошибок пользователя в тексте описания работы. Если реализовался второй случай и пользователь получил неправильные результаты, го возможны три варианта продолже¬ ния: 1) пользователь не замечает, что результаты неверны, и, довольный, продолжает работу; 2) пользователь замечает, что результаты неверны, и не знает, что ему делать дальше; 3) пользователь замечает, что результаты неверны, просматривает описа¬ ние работы, находит ошибку и исправляет ее. В первой ситуации остается лишь констатировать, что для пользования данным пакетом квалификация пользователя недостаточна. Если нельзя обеспечить более надежный контроль, го, видимо, следует ограничить доступ к пакету неспециалистов. 12. В.А. Кощеев 177
Во второй ситуации пользователь может запросить помощь, вызвав спе¬ циальный модуль пакета, который в простейшем случае проинформирует пользователя о возможных типичных ошибках в данной ситуации, а в более сложном — выполнит дополнительные проверки описания работы и полу¬ ченных результатов. Третья ситуация особых пояснений не требует. Несколько слов о наиболее тяжелом следствии ошибки пользователя, когда операционная система ЭВМ прекращает работу с пакетом. При этом вызов модуля, оказывающего помощь, возможен только при повторном выполнении того же задания в отладочном режиме. Как правило, такая ситуация возникает при работе небрежно запрограм¬ мированных модулей. Программирование модулей пакета будем обсуж¬ дать в главе XI. Еще одна проблема, имеющая отношение к ошибкам пользователя, — безопасность хранения данных. Если повторить формирование какого-либо массива данных, хранящегося во внешней памяти ЭВМ, — долго и сложно, то целесообразно принять меры к тому, чтобы этот массив не был уничто¬ жен в результате ошибки пользователя. (Защита данных от сбоев ЭВМ и ошибок оператора ЭВМ рассматривается в главе XI.) Для этого нужно обеспечить недоступность данных одного пользователя всем остальным, а операции, уничтожающие или изменяющие данные, выполнять только после получения пароля от пользователя. Важно также, чтобы у пользователя не возникало сомнений насчет того, что же произошло с его данными в результате работы, выполнение которой было прервано из-за ошибок. Одно из самых простых правил, с помощью которых легко устанавливать судьбу данных, таково: если в описании работы обнаружена ошибка (неважно, в конце описания или в начале); то все выполненные в этой работе изменения данных, хранящихся во внеш¬ ней памяти ЭВМ, аннулируются. Помимо простоты, это правило обладает и другими полезными свойствами, в частности, оно побуждает пользователя разбивать длинные описания работ на последовательность более мелких. В заключение — несколько слов о документации. Пакет программ не будет удобен для пользователя (кроме разве что разработчиков), если он не будет снабжен описанием, причем описанием полным и имеющим ясную структуру, которая позволяет быстро находить нужное место. Принято разбивать описание пакета на три части: 1) описание для администратора, в котором описывается та польза, ко¬ торую может принести внедрение пакета программ, и внешние условия, которые требуется обеспечить для нормального функционирования пакета; 2) руководство пользователя, в котором описываются приемы работы с пакетом, назначение и смысл отдельных операций, реализованных в пакете; 3) руководство системного программиста, в котором приводятся све¬ дения о запуске и тестировании пакета, о подключении новых исполнитель¬ ных модулей и другая информация, нужная для поддержания пакета в рабо¬ тоспособном состоянии. Каждой из этих трех частей, в свою очередь, придается ясно видимая структура, позволяющая легко ориентироваться в содержании части. 178
§ 9. КОНТРОЛЬ ЗА ДЕЙСТВИЯМИ СИСТЕМНОГО ПРОГРАММИСТА Рассмотрим теперь, какими качествами должен обладать пакет про¬ грамм, ’’удобный” для системного программиста. С точки зрения системного программиста, пакет программ — это про¬ граммное средство,- которое нужно поддерживать в работоспособном со¬ стоянии, не зная в деталях, как оно устроено. Последнее обстоятельство сближает системного программиста с рядовым пользователем, поэтому многие качества пакета, делающие его удобным для пользователя, приятны и системному программисту, а именно: 1) легкость управления пакетом, в частности, наличие системы оказания помощи системному программисту; 2) полнота набора модулей, обеспечивающих выполнение операций, нуж¬ ных системному программисту; 3) надежность пакета, в частности, развитая система контроля за дейст¬ виями системного программиста, обеспечение безопасности и секретности хранения системной информации. В то же время наличие у системного программиста обязанностей, кото¬ рых не имеет пользователь, приводит к появлению дополнительных требо¬ ваний к пакету, удобному с точки зрения системного программиста: 1) простота запуска пакета на ЭВМ; 2) простота тестирования и отладки как новых, так, возможно, и старых модулей пакета, включая модули системного наполнения. Легкость управления пакетом и контроль за действиями системного программиста достигаются теми же средствами, которые обсуждались вы¬ ше при рассмотрении аналогичных качеств пакета по отношению к пользо¬ вателю. Набор служебных модулей, необходимый системному программисту, может состоять из следующих групп модулей: 1) модули, облегчающие запуск (генерацию) пакета; 2) тестовые модули для системного и функционального наполнений пакета; 3) модули, обеспечивающие работу пакета в отладочном режиме; 4) модули, информирующие о состоянии наборов данных пакета, разме¬ щенных на устройствах внешней памяти ЭВМ; 5) модули, обеспечивающие полное и частичное копирование и восста¬ новление наборов данных пакета; 6) модули, обеспечивающие автоматическое извлечение всей уцелевшей информации после появления дефекта носителя информации (сбойной дорожки на магнитном диске или сбойных записей на магнитной лен- те), и др. Процедура запуска нового пакета программ на ЭВМ обычно состоит из следующих этапов: 1) создание библиотек, содержащих тексты модулей пакета, и распечат¬ ка документации на пакет, хранящейся на магнитной ленте; 2) трансляция и редактирование исходных модулей и создание библио¬ тек загрузочных модулей; 12* 179
3) создание постоянных рабочих наборов данных и каталогизированных процедур вызова программ, которые нужны для работы пакета: 4) присвоение параметрам пакета конкретных значений, выбранных с учетом характеристик ЭВМ (объем оперативной памяти и др.) и характе¬ ра задач (объем базы данных и др.), для решения которых генерируется пакет; 5) выполнение тестовых заданий, демонстрирующих работоспособность созданной копии пакета. Простота запуска пакета будет достигнута в том случае, если магнитные ленты, на которых записаны тексты модулей и документация, содержат также тексты всех заданий, необходимых для выполнения перечисленных выше пунктов. При этом системному программисту останется только обес¬ печить правильное чтение лент и присвоить параметрам пакета нужные значения. В принципе, имея развитую систему генерации пакета программ, позво¬ ляющую отобрать нужное подмножество модулей функционального напол¬ нения и сформировать для него таблицы системной информации (в частно¬ сти, таблицу ключевых последовательностей слов для предложений ’’операция”), можно из одного и того же набора магнитных лент генериро¬ вать большое количество пакетов, имеющих различные области при¬ менения. Такую систему уже можно назвать системой автоматического проектиро¬ вания пакетов программ (САПР ПП). С помощью САПР ПП каждая груп¬ па пользователей может сгенерировать для себя пакет программ, в наиболь¬ шей степени удовлетворяющий целям, которые поставлены перед группой. Рассмотрим теперь, каким образом можно сделать проще процедуру тестирования и отладки пакета программ. Под тестированием пакета обыч¬ но понимают решение с помощью программ пакета набора фиксированных задач, результаты решения которых известны, с целью выявления ошибок в программах или демонстрации отсутствия оных. Отладкой называют процедуру, с помощью которой по результатам неправильно решенных тес¬ товых задач отыскивается то место в программе, которое нужно исправить, для того чтобы тестовые задачи решались правильно. Иногда термины ’’тестирование” и '’отладка” используют в несколько ином смысле. При нынешнем уровне развития теории и практики программирования выполнение исчерпывающего тестирования сложной программы - дело, которое кажется нереальным. Действительно, для полного тестирования программы, вообще говоря, нужно найти такой набор тестовых задач, при решении которых каждый оператор программы хотя бы один раз срабаты¬ вает в каждом из возможных для него режимов. Но и в этом случае нет никакой гарантии, что после правильного решения всех тестовых задач в программе не останется ошибок. Любая новая задача, при решении которой операторы программы будут работать в повой ком¬ бинации режимов, которая не встречалась при решении тестовых задач, может быть решена неправильно из-за ошибки в программе. Однако ситуация не столь безнадежна, как может показаться. Выход состоит в том, что нужно научиться среди астрономического числа комби¬ наций режимов работы операторов программы отбирать только те комбина¬ ции, которые действительно нужно проверить. Строго говоря, нужно дока- 180
загь, что если отобранные комбинации режимов срабатывают правильно, то и все остальные возможные комбинации тоже сработают правильно, С другой стороны, проектировать и программировать программу следует так, чтобы количество комбинаций режимов работы операторов, которые необходимо проверять, было как можно меньше. По сути дела, принципы модульного и структурного программирования являются ответом (в пер¬ вом приближении) на вопрос, как этого добиться. Итак, пусть набор тестовых задач, полностью или почти полностью прове¬ ряющий пакет программ, искусно составлен. Системный программист поль¬ зуется этим набором после каждой новой генерации пакета, после измене¬ ний, внесенных им в модули системного или функционального наполнения, а также всякий раз при возникновении сомнений в правильности работы пакета. Кроме того, этот набор тестовых задач, естественно, может быть использован разработчиками в период создания пакета программ. Для тех и других важно, чтобы можно было легко отобрать и выполнить любое количество тестовых задач из этого набора. Если каждая задача представлена в виде описания работы, записанного на языке управления пакетом, то набор тестовых задач может представлять собой колоду перфокарт, набор данных на магнитной ленте или диске. В этом случае для выполнения части тестов из набора нужно вручную отобрать нужные перфокарты либо с помощью специальных программ отобрать нужные записи набора данных на ленте или диске. Намного больше удобств для системного программиста и разработчиков пакета дает система автоматического тестирования, встроенная в пакет программ. Такая система представляет собой набор модулей системного наполнения пакета, которые генерируют тестовые входные данные для про¬ веряемых модулей и сравнивают результаты выполнения модулей с тем, что должно было получиться на самом деле. Вызываются тестовые модули с помощью обычных предложений ’’операция” языка управления па¬ кетом. Усилия, затраченные на создание системы автоматического тестирования большого пакета программ (незначительные по сравнению с общим объемом работ по созданию пакета), окупаются повышением производи¬ тельности труда разработчиков и системных программистов, которое о бъ ясн я е тс я с-1 е ду ющи м. Во-первых, тестовые модули могут в цикле генерировать многочислен¬ ные комбинации тестовых входных данных, явное выписывание которых было бы чрезвычайно скучной работой. Тем самым один тестовый модуль может быть эквивалентен большому набору тестовых задач. Во-вторых, для того чтобы убедиться, что тестовая задача решена пра¬ вильно, часто необходимо сравнить большое количество чисел или симво¬ лов с эталонным текстом. В системе автоматического тестирования такое сравнение о с у ще ст в л я ет ся авто м ат и че с ки. Предположим, что проектируемый пакет имеет встроенную систему автоматического тестирования. Тогда для выполнения всех тестов или не¬ которой их части системному программисту достаточно ввести в ЭВМ пред¬ ложение ’'операция” вида ’’выполнить тесты ... ”. Если тестовые задачи решены верно, то ответом системы тестирования може] быть единственное сообщение ’’тесты выполнены правильно”. Если результаты некоторых 181
тестовых задач не совпали с эталонными, то система может напечатать все фактически полученные (неправильные) результаты. На тот случай, если анализ полученных данных ничего не даст, желатель¬ но предоставить, системному программисту возможность выполнить любой тест в отладочном режиме, при котором печатается информация о работе модулей системного наполнения пакета. Поскольку отладочная печать всегда присутствует в текстах модулей пакета на этапе разработки, то целесообразно сделать ее аккуратно и оставить в качестве средства оказа¬ ния помощи системному программисту и разработчику при создании сле¬ дующих версий пакета. На этом закончим обсуждение качеств пакета программ, удобного для системного программиста, и рассмотрим пакет программ с точки зрения его универсальности, в смысле пригодности для эксплуатации на различ¬ ных ЭВМ и с различным функциональным наполнением. § 10. УНИВЕРСАЛЬНОСТЬ СИСТЕМНОГО НАПОЛНЕНИЯ Универсальность системного наполнения желательна с точки зрения эко¬ номии труда разработчиков пакетов программ и усилий пользователя по овладению методами работы с пакетами. При перенесении пакета программ с той ЭВМ, на которой он был отла¬ жен (инструментальная или базовая ЭВМ), на другую могут возникнуть следующие проблемы: 1) на новой ЭВМ объем оперативной памяти меньше и программы паке¬ та в ней не умещаются; 2) на новой ЭВМ другая операционная система, которая не оказывает программам пакета нужных услуг, например отсутствует транслятор с того языка, на котором написаны некоторые модули пакета, или же в нем реализованы не все операции (операторы или макрокоманды), которые использованы в модулях пакета, отсутствуют стандартные библиотечные модули и т.п.; 3) на новой ЭВМ отсутствуют устройства, используемые программами пакета, например магнитные диски, графопостроитель или матричный процессор. Для того чтобы упростить решение этих проблем, можно предпринять следующее. В о-п е р в ы х, потребуем, чтобы программы пакета легко настраива¬ лись на фактический объем оперативной памяти (ОП), а минимальный объем, в котором еще может работать пакет, был по возможности меньше. Кроме того, позаботимся о том, чтобы изменение объема ОП, отведенной для пакета, мало сказывалось на предельно допустимых объемах данных, которые могут обрабатываться программами пакета. Для этого нужно организовать обработку данных по частям. При такой обработке в ОП на¬ ходится только часть массива данных. После того как обработка этой части закончена, в ОП считывается следующая часть, и т.д. Для обработки данных по частям важен вопрос об объеме порции дан¬ ных, считываемой в ОП. Чем меньше этот объем, тем меньше оперативной памяти требуется для работы программы, но тем большее число раз прихо¬ дится обращаться к устройству внешней памяти, на котором хранится 182
массив данных, для прочтения всего массива. Хотя суммарный объем про¬ читанной информации и одинаков при чтении массива за один прием или в несколько приемов, полное время чтения массива по частям обычно ока¬ зывается существенно больше за счет того времени, которое тратится на подготовку устройства к чтению, например на подвод головок магнитного диска. Если объем оперативной памяти не позволяет считать массив целиком, то другого выхода нет, и приходится жертвовать быстродействием. Если же объем ОП достаточен для хранения всего массива, то обрабатывать этот массив по частям нерационально. Поэтому желательно сделать так, чтобы объем обрабатываемой порции массива данных определялся автоматически, исходя из объема ОП, выделенной пакету программ. В о-в т о р ы х, для того чтобы уменьшить зависимость пакета программ от операционной системы ЭВМ и набора доступных внешних устройств, примем следующие меры: а) будем программировать модули на языке вы¬ сокого уровня, трансляторы для которого входят в состав многих опера¬ ционных систем; б) части программ, которые требуют написания на маши¬ нозависимых языках, оформим в виде небольшого числа отдельных легко заменяемых модулей; в) предусмотрим возможность работы пакета без некоторых внешних устройств с отключением соответствующих функций пакета. Обсудим теперь качества пакета программ, ’’удобного” для подключения новых модулей функционального наполнения. Можно различать два варианта подключения нового модуля к пакету: подключение ’’лишь бы работало” и эффективное подключение. Для под¬ ключения ’’лишь бы работало” достаточно обеспечить вызов нового модуля и передачу на его входы нужных данных. Однако использование програм¬ мы, подключенной таким способом, может оказаться малоэффективным по следующим причинам. 1. Дублирование вычислительных процедур. Возможно, что некоторые подпрограммы нового модуля или их части выполняют действия, аналогич¬ ные действиям других модулей, уже имеющихся в пакете. 2. Новый модуль — ’’белая ворона” в пакете. Возможно, что новый мо¬ дуль не будет удовлетворять некоторым соглашениям, принятым для моду¬ лей пакета, например формату сообщений об ошибках или формату вход¬ ных параметров. 3. Потеря части данных, формируемых в новом модуле. Если не органи¬ зована передача модулям системного наполнения тех данных, которые формируются в подключенном модуле и выводятся на печать, то эти дан¬ ные не могут быть использованы другими модулями пакета. 4. ’’Эгоистическое” использование оперативной памяти. Если в новом модуле для передачи данных между подпрограммами используются общие области или некоторые рабочие массивы не упомянуты в списке формаль¬ ных аргументов модуля, то ОП, израсходованная на эти цели, не всегда может быть использована для размещения данных при вызове других моду¬ лей пакета. Отсюда видно, что эффективное подключение нового модуля к пакету программ может потребовать значительных изменений текста модуля, 183
например замены частей модуля обращением к подпрограммам пакета, программирования обработки данных по частям и др. Для того чтобы такие переделки были как можно менее болезненными, следует стремиться минимизировать количество требований к формату подключаемого модуля. Желательно также, чтобы большая часть этих пере¬ делок могла быть формализована и, следовательно, автоматизирована. Кроме этого, для тестирования взаимодействия системного наполнения пакета и подключаемого модуля можно иметь специальную отладочную версию пакета, состоящую только из модулей системного наполнения и одного нового модуля, которым по очереди могут служить подключаемые к пакету модули. Если в этой версии предусмотреть еще и вызов подклю¬ чаемого модуля в исходном виде, то одновременно можно сравнивать результаты выполнения переделанного модуля с исходным, т.е. автоматизи¬ ровать тестирование модуля, подключаемого к пакету. ГЛЛЯ/1 XI ПРОЕКТИРОВАНИЕ СИСТЕМНОГО НАПОЛНЕНИЯ ПАКЕТОВ ПРОГРАММ. ЭТАП ПРОГРАММИРОВАНИЯ В этой главе будет продолжено рассмотрение вопросов проектирования пакета программ, обладающего заданным набором качеств. § 1. ЭТАПЫ ПРОЕКТИРОВАНИЯ ПАКЕТА ПРОГРАММ В предыдущей главе было пояснено, что системное наполнение пакета программ, удобного с точки зрения пользователя и системного програм¬ миста, должно удовлетворять следующим требованиям: 1) системное наполнение содержит достаточное количество служебных модулей, нужных системному программисту: 2) язык управления пакетом содержит предложения четырех типов: "данные”, ’’операция”, "условный оператор”, ’’цикл”, из которых два по¬ следних могут быть сведены к двум первым: предложение ’’операция” содержит ключевую последовательность слов или мнемокод, однозначно указывающие операцию, и может содержать другие слова, не имеющие значения для модулей системного наполнения; предложение ’’данные” содержит данные, описание структуры данных, операторы преобразования и генерации данных, служебную информацию; 3) реализован автоматический поиск входных данных операций; 4) реализованы пакетный и диалоговый режимы работы с пакетом; в диалоговом режиме на каждом шаге диалога пользователь может по своему выбору управлять пакетом либо с помощью команд, либо с помощью меню; 5) данные всех пользователей хранятся в специализированной базе дан¬ ных пакета программ; обеспечена безопасность хранения данных; 184
6) в состав системного наполнения входит система контроля за дейст¬ виями пользователя и система оказания помощи пользователю при работе с пакетом; 7) обеспечена простота генерации нужной версии пакета; 8) частью системного наполнения является встроенная система автомати¬ ческого тестирования пакета; 9) обеспечена простота внесения изменений в пакет, в частности, подклю¬ чения новых модулей функционального наполнения; 10) реализована обработка больших массивов данных по частям; 1 1) реализована настройка программ на фактический объем оперативной памяти, выделенной дня пакета; 12) большинство .модулей написано на языке высокого уровня; модули, написанные на машинозависимых языках, легко заменяемы. В предыдущей главе мы заботились прежде всего о пользователях и си¬ стемных программистах, которым придется работать с пакетом программ. Теперь настало время подумать и о разработчиках. Каким образом спроек¬ тировать, запрограммировать и огладить модули системного наполнения, удовлетворяющие внушительному списку требований, перечисленных вы¬ ше, причем с минимальными затратами труда? Во-первых, для этого нужно придумать очень простую модульную струк¬ туру системного наполнения пакета. Во-вторых, нужно определить очеред¬ ность разработки модулей таким образом, чтобы как можно раньше полу¬ чить работоспособный пакет, обладающий минимумом перечисленных выше качеств. Затем, добавляя в порядке очередности недостающие моду¬ ли, можно будет построить пакет программ, обладающий полным набором нужных свойств. В-третьих, нужно продумать способ тестирования и отлад¬ ки пакета на всех стадиях его создания так, чтобы за один пробный пуск пакета получать информацию о возможно большем количестве ошибок в модулях. В-четвертых, нужно зафиксировать соглашения о правилах написания модулей, о способе хранения различных версий текстов модулей в библиотеках, о документировании этапов отладки и т.п. После всего этого можно приступить к проектированию модулей первой очереди системного наполнения. § 2. МОДУЛЬНАЯ СТРУКТУРА ПАКЕТА ПРОГРАММ Рассмотрим подробнее перечисленные этапы проектирования пакета программ. Простая модульная структура системного наполнения пакета будет полу¬ чена в том случае, если удастся представить системное наполнение в виде набора небольших по размерам модулей, слабо зависящих друг от друга и имеющих простые логические схемы. Обычно модуль, написанный на языке высокого уровня, считается не¬ большим, если его текст помещается на одной странице (до 50 строк). Однако иногда можно допустить двух-четырехкрагное увеличение объема модуля, если это приведет к более простой модульной структуре, напри¬ мер, за счет объединения группы модулей, сильно зависящих друг от друга, но слабо зависящих от остальных модулей системного наполнения. 185
Интуитивно понятие зависимости модулей связано с тем, насколько изменения одного модуля влекут за собой изменения остальных модулей пакета. Пусть дано отлаженное системное наполнение некоторого пакета программ. Предположим, что возникает необходимость изменить один из его модулей. Целью такого изменения может служить: Г) формальное изме¬ нение текста, не затрагивающее алгоритм модуля, например структуриза¬ ция модуля, внесение комментариев, замена идентификаторов переменных, объединение нескольких переменных в массив и т.п.; 2) преобразование алгоритма модуля, не затрагивающее зависимость выходных величин моду¬ ля от входных, например-оптимизация модуля, увеличивающая быстродей¬ ствие или уменьшающая размеры модуля: 3) преобразование алгоритма, изменяющее зависимость выходов модуля от его входов, но не затрагиваю¬ щее общее назначение модуля; 4) изменение модуля, в результате которо¬ го меняется его назначение. В идеальном случае изменения одного модуля не приведут к необходи¬ мости переделывать остальные (зависимость отсутствует). Будет хуже, если изменения повлекут за собой переделки всех модулей, которые вызы¬ вают измененный модуль или вызываются им (слабая зависимость). И будет совсем плохо, если изменения модуля приведут к переделкам и тех модулей, которые непосредственно не связаны с измененным (сильная зависимость). Итак, что же можно предпринять для уменьшения зависимости модулей друг от друга? (Рассматриваются модули, написанные на языке высокого уровня, для определенности -- на языке ФОРТРАН IV.) Что касается формальных изменений текста, то нужно рассмотреть толь¬ ко изменения формальных аргументов модуля и его входов, например изменение типа и длины аргументов, изменение имени модуля и др. Осталь¬ ные из перечисленных формальных изменений не потребуют переделок других модулей пакета. Очевидно, что замена имени модуля и его типа приводит к переделке только тех модулей, которые вызывают измененный модуль. Изменения же формальных аргументов могут вызвать переделки всех тех модулей, кото¬ рые используют переменные и массивы, являющиеся фактическими аргу¬ ментами хотя бы в одном из операторов вызова измененного модуля. Для уменьшения зависимости модулей при формальных изменениях текста имеет смысл принять следующие меры: 1) продумать порядок сле¬ дования, тип, длину, размерность формальных аргументов, а не брать пер¬ вый вариант, пришедший в голову; 2) сократить до минимума количество переменных и массивов, передающихся с помощью формальных аргумен¬ тов между тремя и более модулями. Рассмотрим теперь переделки, приводящие к изменению зависимости между входами и выходами модуля. Как отыскать все преобразования остальных модулей пакета, которые нужно выполнить для того, чтобы вновь получить отлаженный пакет? Пусть Л -- некоторое множество значений входных переменных и масси¬ вов модуля, содержащее по одному значению для каждой входной пере¬ менной и по одному массиву значений для каждого входного массива. Обозначим через В(А) множество значений выходных переменных и мас¬ 186
сивов, полученное при подаче множества А на входы этого модуля до вне¬ сения исправлений: А -+В(А). Множество выходных значений для изменен¬ ного модуля обозначим через В (А ) -. А ->В (Л). Для некоторых из возмож¬ ных входных множеств А выходные множества В(Л) и #(Л ) совпадают, а для некоторых — не совпадают. Рассмотрим все такие варианты входных множеств Л, для которых множества В (А) и В (А) не совпадают. Если бы удалось ’’проиграть” работу пакета при подаче на вход измененного модуля каждого из указанных вариантов входного множества Л и сравнить резуль¬ таты работы пакета с тем, что должно быть, то было бы возможно отобрать подмножество Ло всех таких вариантов входного множества Л, Ло С Л, при которых получаются неправильные результаты. Далее можно было бы выяснить, почему они неправильны, очертить множество возможных исправлений, которые могли бы устранить эти ошибки, и выбрать из этого множества подходящий вариант изменений остальных модулей пакета. Таким образом, для того чтобы упростить поиск тех исправлений моду¬ лей пакета, которые влечет за собой изменение зависимости между входами и выходами одного модуля (т.е. для ослабления связи между этим моду¬ лем и остальными) , в принципе нужно стремиться к тому, чтобы уменьшить объем множества Ло. Описать, как это можно сделать на практике в общем случае, трудно, поэтому ограничимся лишь вышеприведенными абстракт¬ ными соображениями. Изменение модуля, в результате которого меняется его назначение, проще представить в виде двух операций: удаление старого модуля и добав¬ ление нового. Очевидно, что при удалении старого модуля нужно изменить все модули, вызывающие удаляемый. Эти изменения состоят в удалении операторов вызова старого модуля и, возможно, добавлении команд, связывающих переменные и массивы, которые служили фактическими аргументами удаленных операторов. При добавлении нового модуля к пакету, наоборот, изменения состоят в добавлении операторов вызова нового модуля и, возможно, удалении команд, которые ранее связывали переменные и массивы, являющиеся фактическими аргументами добавленных операторов. Итак, для того чтобы уменьшить зависимость модулей пакета друг от друга, нужно для каждого модуля пакета А оценить количество модулей, которые потребовалось бы исправить при изменении Д, и выбрать такую модульную структуру, для которой полученные количества окажутся меньше. Для определения числа модулей, зависящих в указанном смысле от лю¬ бого модуля пакета, можно воспользоваться правилом: модуль В зависит от модуля Д, если входы В могут измениться при изменении выходов А. Это правило дает верхнюю оценку числа зависимых модулей. Обсуждение модульной структуры системного наполнения пакета Программ завершим рассмотрением логических схем модулей. Для того чтобы модульная структура была проста, желательно, чтобы модули имели Простые логические схемы, т.е. чтобы при рассмотрении их взаимодействия было возможно использовать максимально упрощенные представления о зависимости выходов модулей от их входов. 187
Примером модуля с простой логической схемой является модуль (назо¬ вем его ’’поиск”), на входы которого подается имя массива данных, а на выходе появляется адрес этого массива в оперативной области данных (ООД) или - если массив в ООД отсутствует - число, равное нулю. Противоположным примером может служить модуль ’’поиск 2”, на вход которого подается имя массива данных, а выходом служат две целые переменные 1А и К такие, что: 1) если массив найден в ООД, то К = 1, а значение JA равно адресу массива в ООД; 2) если массив не найден в ООД, то выполняется поиск этого массива в базе данных; если массив найден в БД, то К - 2, а значение 1А равно физическому адресу массива в БД; 3) если массив нс найден в БД, то выполняется поиск этого массива на ар¬ хивной магнитной ленге; если массив найден в архиве, го К = 3, а значе¬ ние IА равно адресу массива в архиве; 4) если массив не найден в пунктах 1,2,3, то К = 0, 1А = 0. Модуль ’’поиск 2” можно превратить в модуль, имеющий практически ту же логическую схему, что и модуль ’’поиск”, если потребовать, чтобы в модуле ’’поиск 2” массив, найденный в БД или на архивной ленте, был переписан в ООД, а затем его адрес был присвоен выходной пере¬ менной IA. Таким образом, в общем случае для упрощения логических схем имею¬ щегося набора модулей может потребоваться как замена одного сложного модуля несколькими простыми, так и объединение некоторых модулей. § 3. ПРОГРАММИРОВАНИЕ И ТЕСТИРОВАНИЕ ПАКЕТА ПРОГРАММ Определим очередность разработки модулей и способы тестирование пакета. В набор модулей первой очереди включим: 1) транслятор языка управления пакетом, обрабатывающий только пред¬ ложения ’’операция”; 2) модули системы управления пакетом: 3) тестовые модули для всех модулей первой очереди. Тестирование этой версии пакета будем выполнять, подавая на вход транслятора предложения ’’операция”, вызывающие тестовые модули. Набор тестовых модулей должен обеспечивать проверку всех основных це¬ почек модулей первой очереди. Как только количестве.) ошибок в результатах работы модулей первой очереди уменьшится настолько, что окажутся возможными подключение и отладка оставшихся модулей, подключим модули второй очереди, затем третьей и т.д. в следующей очередности. 1. Модули второй очереди: модули транслятора, обрабатывающие пред¬ ложения ’’данные”, модули системы управления базой данных для записи и считывания данных. 2. Модули третьей очереди: модули транслятора обрабатывающие при¬ ложения '’условный оператор" и "опера ;ор пик ia”. мо дули СУБ Ji ;хтя кор¬ рекции данных, 3. Модули четвертой очереди: модули разгрузки и за1р\зки базы дан¬ ных, остальные модули СУ1И1. 188
Затем можно подключать по одному или группами служебные модули системного программиста и модули функционального наполнения. Одно¬ временно с добавлением модулей г-й очереди нужно добавлять к пакету соответствующие тестовые модули. Для того чтобы обеспечить высокую скорость отладки пакета, примем следующие меры: 1) включим в каждый модуль пакета операторы проверки входных дан¬ ных и операторы-” ябеды ”, печатающие предупреждающие сообщения, если при работе модуля возникает ситуация, которая, по мнению разработчиков, не должна была бы возникнуть: 2) обеспечим устранение последствий ошибок, т.е. сделаем так, чтобы результаты работы модулей часто '’сбрасывались” и счет начинался с начала следующего варианта; при этом окажется возможным за один пробный пуск пакета выполнить большую последовательность тестовых примеров, причем ошибки, обнаруженные в одном из тестов, не помешают работе сле¬ дующих тестовых примеров; 3) включим в каждый модуль условные операторы, печатающие всю су¬ щественную дчя отладки информацию о работе модуля и управляемые с помощью специальных входных параметров ’’управление отладочной печатью”. Все это позволит за один пуск программы получать информацию о боль¬ шом количестве ошибок за счет ’’распараллеливания” тестов и, следова¬ тельно, резко сократит сроки отладки пакета. Соглашения о правилах программирования модулей могут фиксировать: 1) используемые языки программирования; 2) используемые структуры операторов; 3) способ передачи данных между модулями; 4) правила об¬ разования идентификаторов; 5) форматы печатаемых сообщений; 6) ис¬ пользование комментариев в тексте программы; 7) правила оформления текстов модулей и др, В качестве используемых струк гур операторов обычно берут структуры, разрешаемые принципами структурного программирования. Однако, по-видимому, для удобства программистов следует значительно увеличить количество разрешенных структур, добавив структуры, которые очевид¬ ным образом с помощью незначи тельных усложнений могут быть сведены к стандартным. Например, структура ’’цикл с двумя выходами” neiKo превращается в структуру ’'цикл с одним выходом” Оператор б< ^условною перехода (SOTO будем употреблять только тог¬ да, когда это необходимо для реализации стандартных структур с помощью операторов языка ФОРТРАН. Правило "доля операторов GOTO нс должна превышать 1ST’*, которым иногда пользуются, представляется слишком у Прон генным. Разумные правила образования идентификаторов, например использова¬ ние одного н гого же индентнфикагора дчя одной переменной во всех моду¬ лях, облегчают чгение текстов программ. Эгу же цель- преследуют правила оформления текстов модулей, например использование пробелов внутри операторов, "огступы” для выделения пиктов и т и. Унификация формаюв печатаемых сообщений всех модулей пакета облегчает чтение распечаток результатов. 189
Обычно считается, что хорошо комментированный модуль должен иметь одну строку комментариев на три оператора. Это требование продиктовано желанием совместить текст модуля и текст описания модуля. В тех случаях, когда такое совмещение явно не удается (имеющихся комментариев все еще недостаточно, чтобы понять, как работает модуль, но уже более чем достаточно, чтобы сделать невозможным связное чтение операторов моду¬ ля), видимо, лучше разбивать текст модуля строками комментариев на блоки, а описания всех блоков помещать либо в виде комментариев в нача¬ ле модуля, либо совсем отдельно - в документации на пакет. § 4. ПЕРЕДАЧА ДАННЫХ В ПАКЕТЕ Определим теперь модульную структуру проектируемого пакета про¬ грамм. Для этого выделим гу часть модулей системного наполнения, кото¬ рая обеспечивает вызов модулей функционального наполнения, а остав¬ шиеся системные модули оформим по образу и подобию модулей функцио¬ нального наполнения. Получаем следующую структуру пакета программ. Пакет программ со¬ стоит из набора исполнительных модулей (ИМ) и системы управления набором исполнительных модулей (СУНМ). В свою очередь, набор исполни¬ тельных модулей состоит из функциональных исполнительных модулей (ФИМ), входящих в функциональное наполнение пакета, и системных ис¬ полнительных модулей (СИМ), являющихся частью системного наполнения пакета. Такая структура обеспечивает универсальный и весьма гибкий способ связи между собой большого числа модулей пакета, как функциональных, так и системных. Роль системы управления набором модулей сводится к тому, чтобы вы¬ полнять исполнительные модули, для чего необходимо: а) обеспечивать возможность работы модуля, выделяя необходимое ко¬ личество оперативной памяти для входных, выходных и рабочих массивов модуля; б) подавать на входы модуля нужные входные массивы; в) передавать управление модулю, обеспечивая обработку по частям тех массивов данных, которые не помещаются в оперативную память целиком; г) обеспечивать возможность дальнейшей обработки выходных массивов модуля, приписав им необходимую служебную информацию и выполнив другие действия. Прежде чем рассмотреть алгоритм функционирования СУНМ, нужно об¬ судить реализацию передачи данных в паке те программ. Перечислим основные направления, в которых передаются данные в па¬ кете программ рассматриваемого вида: 1) от предложения '’данные” ко входу модуля; 2) от выхода одного модуля ко входу другого; 3) от внешнего носителя информации ко входу модуля; 4) от выхода модуля к внешнему носителю информации. СУНМ должна обеспечивать передачу данных только от одною модуля к другому, поскольку для передачи данных в других направлениях могут существовать специальные исполнительные модули пакета. 190
Массивы данных, сформированные одним модулем, но еще не поданные на вход другого модуля, могут находиться либо в оперативной памяти ЭВМ (ОГ1), либо на некотором устройстве внешней памя¬ ти (ВП). Наиболее быстрый способ передачи данных между модулями должен использовать только ОП. Однако если объема ОП недостаточно для одно¬ временного хранения всех передаваемых данных, необходимо часть данных размещать во внешней памяти, по возможности минимизируя количество рбращений к ВГ1. Поскольку было бы неоправданно ориентировать СУНМ только на малый объем ОГ1 или только на большой объем, будем предполагать, что СУНМ стремится использовать весь объем ОП, находящийся в ее распоря¬ жении, и пользоваться ВП только тогда, когда объема ОП недоста¬ точно . Рассмотрим теперь способы размещения массивов данных в ОП и ВП. Назовем оперативной областью данных (ООД) связный объем ОП, пред¬ назначенный для размещения массивов данных. Для целей этого параграфа будет достаточно считать, что ООД представляет собой одномерный мас¬ сив Х4 и что существует способ определить, находится ли в ООД конкрет¬ ный массив данных d, и если находится, го найти его адрес в ООД, т.е. но¬ мер i элемента массива Х4, содержащего первый элемент массива d. Кроме того, существует способ поместить в ООД новый массив d} (при этом может возникнуть ситуация ’’переполнение ООД”) и стереть любой из находящихся в ООД массивов данных. Предположим, что исполнительный модуль я оформлен в виде подпро¬ граммы 5 (возможно, вызывающей другие подпрограммы). формальными аргументами которой являются, в частности, все входные массивы моду¬ ля g. Если все входные массивы данных модуля g находятся в ООД и извест¬ ны их адреса А ] , ..., А т , то для того чтобы подать на входы g нужные мас¬ сивы, достаточно вызвать подпрограмму 5 с фактическими аргументами Х4(/1!), ..., Х4('4ш)- И вообще, распределение ОП для всех массивов модуля g (входных, выходных и рабочих) состоит в вычислении их адре¬ сов А, в ООД и обращении к основной подпрограмме g с фактическими аргументами вида Х4(/1, ). Как уже упоминалось, ВП используется для передачи данных между мо¬ дулями только в том случае, если для этого не хватает объема ОП. Естест¬ венно предполагать, что ВП представляет собой продолжение ООД, и сохра¬ нить для ВП ту же логическую структуру, которую имеет ООД. Однако если пакет программ имеет интерфейс с некоторой универсальной базой Данных, то существует возможность воспользоваться этой БД в каче¬ стве ВГЕ Рассмотрим еще один вариант. Пусть в пакет программ включены моду¬ ли системы управления некоторой специализированной базы данных, пред¬ назначенной только для использования системой управления пакетом Программ. Тогда при работе с пакетом может быть создана БД, в которой Могут храниться (постоянное хранение данных) любые массивы данных, введенные пользователем или полученные в результате выполнения опера¬ ций, таблицы системной информации и другие системные данные. Кроме то- 191
го, эта БД может быть использована в качестве расширения ООД дчя вре¬ менного хранения данных. Достоинства последнею варианта очевидны: 1) пакет, имеющий соб¬ ственную систему управления базой данных (СУБД), представляет собой единое целое, не зависящее, например, от других (универсальных) БД: 2) база данных для пакета программ может быть достаточно проста и приспособлена в максимальной степени для нужд СУММ. С другой стороны, наличие в пакете собственной СУБД не исключаш возможности иметь модули, обеспечивающие интерфейсы с универсаль¬ ными БД. Рассмотрим простейшую логическую структуру БД, удобную для систе¬ мы управления проектируемым пакетом программ. Поскольку в БД же¬ лательно одновременно хранить множества массивов данных, принадлежа¬ щие нескольким пользователям, то естественно рассмотреть логическую структуру БД, изображенную на рис. 11.1. База данных такой струк1уры представляет собой множество независи¬ мых разделов, каждый из которых содержит все массивы с/1, ...,<// , вве¬ денные пользователем или полученные в результате выполнения некоторых цепочек операций, относящиеся к одной и гой же задаче. Кроме того, в каждый раздел могут входить и массивы служебной информации, описывающие логические связи между остальными массивами раздела. Один из разделов БД может использоваться в качестве системною и со¬ держать таблицы системной информации. Рассмотрим теперь передачу данных между модулями в том случае, когда используется ВП. Пусть некоторый входной массив модуля у не мо¬ жет быть целиком помещен в ООД. Тогда существуют две возмож¬ ности. 1. Поместить в ООД только часть входною массива и передать ее адрес модулю х рассмотренным выше способом. При этом модуль у должен иметь возможность управлять сменой частей массива в ООД и получать 192
информацию о том, какая именно часть входного массива находится в ООД и данный момент. 2. Передать модулю g адрес входного массива во ВП. При этом модуль g должен самостоятельно считывать нужные ему данные. Разумеется, второй вариант следует немедленно забраковать, поскольку делается, по существу, то же самое, но программирование модуля g услож¬ няется. На самом деле существует еще один способ использования ВП — так на¬ зываемая виртуальная память. В этом случае при программировании моду¬ лей исходят из того, что объем используемой (виртуальной) ОГ1 равен сум¬ ме объемов фактической ОП и ВП, а обмен данными между ОП и ВП осу¬ ществляется операционной системой ЭВМ. Этот способ использования ВП часто оказывается менее эффективен по быстродействию, чем рассматриваемый, поскольку в рассматриваемом способе обмен данными между ОП и ВП управляется модулями и, следова¬ тельно, для каждого конкретного модуля g может быть выбран свой, оптимальный для данного g способ обмена. С другой стороны, ничто не мешает использовать виртуальную память при работе СУ НМ, в которой предусмотрена передача данных с помощью ВП. Для этого нужно задать объем ООД, равный объему виртуальной па¬ мяти, и СУММ перестанет использовать ВП дря передачи данных между модулями. Пусть теперь некоторый выходной массив модуля g не может быть помещен в ООД целиком. В этом случае С У НМ выделяет объем ООД, до¬ статочный для хранения только части выходного массива, а модуль g дол¬ жен иметь возможность управлять записью готовой части массива во В Г1. Таким образом, для передачи данных СУНМ должна использовать опе¬ ративную память, а если объема ОГ1 недостаточно, то внешнюю память. В качестве ВП используется тот раздел специализированной базы данных пакета программ, которому принадлежат передаваемые данные. Рассмотрим использование БД в качестве расширения ООД. В том слу¬ чае, когда объема ООД недостаточно для хранения всех массивов вызы¬ ваемого модуля, можно высвободить часть ООД, переписав некоторые массивы из ООД в БД. В первую очередь в БД могут быть переписаны массивы, не используемые модулем, и во вторую — входные массивы мо¬ дуля, находящиеся в ООД целиком или частями, объем которых можно уменьшить. Такие манипуляции с массивами данных увеличивают время работы СУНМ, но зато фактический объем ООД ограничивает размеры обрабатываемых массивов в меньшей степени. Перейдем к вопросу о хранении системной информации в БД. Систем¬ ная информация может храниться либо в БД, либо в текстах модулей СУНМ. При инициализации пакета и в режиме работы без БД удобно ис¬ пользовать второй способ, а в режиме работы с БД - первый, так как системную информацию в БД можно корректировать обычным способом, так же, как и массивы данных пользователей, без перетрансляции модулей пакета. Возможно и объединить эти варианты. Пусть системная информа- 13. В.А. Кощеев 193
ция хранится в текстах модулей и при инициализации пакета переписывает¬ ся в БД.: В БД системная информация может корректироваться временно или постоянно, причем сохраняется возможность возврата к исходному со¬ стоянию, для чего нужно повторить запись этой информации из текстов модулей в БД. После того как накопится много изменений системной ин¬ формации в БД, оказавшихся полезными, можно внести эти изменения и в тексты модулей. В оставшейся части этого параграфа обсудим проблему восстановления информации в БД после сбоя ЭВМ или неправильных действий оператора ЭВМ. Будем рассматривать только такие сбои ЭВМ и действия оператора, влияние которых на содержимое. БД можно смоделировать, прекратив выполнение одного из модулей пакета в произвольный момент времени, при условии, что во время чтения данных, оставшихся в БД после сбоя, не возникает ошибок типа ’’сбой информации при чтении”, ’’физическая запись не найдена”. Очевидно, что в такой постановке опасны только незаконченные измене¬ ния данных в БД, если при возобновлении работы пакета эти данные будут использоваться так, как будто изменения были завершены нормально или не были начаты. Поскольку сбои ЭВМ случаются довольно часто, то жела¬ тельно избавляться от их последствий автоматически, простым повторе¬ нием незаконченной работы с самого начала. Для того чтобы увидеть, как это можно сделать, рассмотрим некоторую работу, изменяющую данные в БД. Первый вариант. Предположим, что измененные данные записы¬ ваются не в БД, а в рабочий файл, и в конце работы переписываются из этого файла в БД. Сообщение ’’конец работы” печатается в тот момент, когда формирование рабочего файла закончено и в метке файла установлен признак ’’файл сформирован”. Тогда работы, прерванные до появления этого сообщения, нужно повторять заново с самого начала. Работы, пре¬ рванные после появления этого сообщения, т.е. в момент перезаписи из ра¬ бочего файла в БД, повторять не нужно, если СУНМ в начале каждой рабо¬ ты будет проверять, сформирован ли рабочий файл. Если файл сформиро¬ ван, то СУНМ перепишет его в БД и сотрет признак ’’файл сформирован” в метке рабочего файла. Недостатки этого способа - лишняя перезапись данных и усложнение алгоритмов СУНМ, так как искать входные массивы для модулей теперь нужно и в БД и в рабочем файле. Второй вариант. Объединим рабочий файл и БД. Пусть все изме¬ нения в БД выполняются так,'что исходное состояние данных в БД остает¬ ся нетронутым, а измененные данные записываются на новое место с при¬ знаком ’’новая версия”.* Тогда в момент окончания работы печатается сооб¬ щение ’’конец работы”, в БД устанавливается признак ’’зафиксировать изменения”, после чего старая версия данных уничтожается, а у новой вы¬ ключается признак ’’новая версия”. Затем в БД выключается признак ’’зафиксировать изменения”. В начале каждой работы СУНМ проверяет, нужно ли фиксировать изменения в БД, и если оказывается, что нужно, то повторяет изменение признаков состояния у старой и новой версий данных. 194
Недостатком этого способа является то, что необходимо программиро¬ вать переключения признаков состояния и, что более существенно, в этом случае нельзя изменять данные на старом месте. Но зато, с другой стороны, всегда можно восстановить старую версию данных. Описанные методы автоматической ликвидации последствий сбоев можно усовершенствовать различным образом, например присваивать признак ’’новая версия” не всему массиву данных, а только измененной части. При этом в конце работы потребуется внести измененную часть внутрь старой версии всего массива. ГЛАВА XII ФОРМАЛЬНОЕ ОПИСАНИЕ ПАКЕТОВ ПРОГРАММ В этой главе описывается один из возможных подходов к построению формальной теории пакетов программ. Как известно, формализация разде¬ ла какой-либо науки состоит в том, что фиксируется математически точное описание модели изучаемого объекта и того аппарата, с помощью которого этот объект исследуется. Если построенная формальная модель отражает существенные черты изучаемого объекта, то на ее основе формальными методами возможно получать результаты, имеющие важное практическое значение. От формальной теории пакетов программ можно ожидать ответов на сле¬ дующие вопросы: какие могут существовать пакеты программ, как их сравнивать между собой и, в конечном счете, как построить пакет про¬ грамм, обладающий некоторыми заданными свойствами или, быть может, оптимальный в некотором заданном смысле. В первых четырех параграфах данной главы описана формальная модель пакета программ. В следующих трех параграфах рассмотрены частные слу¬ чаи этой модели, соответствующие различным типам реальных пакетов. § 1. МОДЕЛЬ ПРОГРАММЫ Для того чтобы построить формальную модель какого-либо объекта, полезную с практической точки зрения, нужно отразить в модели сущест¬ венные свойства объекта (иначе из модели нельзя будет вывести ничего, кроме тривиальных результатов). Однако этих свойств не должно быть слишком много, иначе полученная формальная теория окажется сложна и неработоспособна. Поэтому рассмотрим произвольный пакет, состоящий из набора программ и системы управления этим набором, и отберем тот минимум свойств, который нужно отразить в модели. Начнем с построения модели программы пакета. Произвольную програм¬ му пакета представим в виде некоторого объекта, имеющего входы и вы¬ ходы. Если на входы этого объекта подать определенные массивы информа¬ ции, то с его выходов можно снять другие массивы информации. V1 13* 195
Такого описания программы явно недостаточно, поскольку на каждый вход реальной программы должна подаваться не любая информация, но информация заданного назначения, имеющая определенный смысл. Поэто¬ му следует уточнить понятие ’’массив информации”. Будем полагать, что массивы информации характеризуются не только геми цифровыми или текстовыми данными, которые в них содержатся, но и назначением, смыслом этой информации. Например, массив ’’вектор коэффициентов линейной регрессии” представляет собой последователь¬ ность действительных чисел, имеющих смысл коэффициентов линейной регрессии и предназначенных, в частности, для вычисления оценок перемен¬ ной регрессии. Массив ’’вектор выборочных средних значений” в принципе может содержать те же числа, но назначение их будет уже совсем другое. Итак, уточненная модель программы пакета такова. Программа пакета — это объект, имеющий в общем случае несколько входов и несколько выхо¬ дов. Для каждого входа задан вид информации, которую нужно подавать на этот вход, а для каждого выхода задан вид информации, которую можно снять с этого выхода. Дадим формальное определение. Пусть V — некоторое конечное мно¬ жество различных элементов, называемых видами информации. Определение 1.1. Пара g = (Ивх, Ивых),где Ивх и Квых - произвольные подмножества И, называется модулем. Множества Ивх и Ивых содержат виды информации, заданные соответ¬ ственно для входов и выходов модуля. Например, модуль, вычисляющий средние значения чисел, записанных в столбцах матрицы наблюдений (ис¬ пользуются только заданные строки), характеризуется парой (Квх = ~ {МН, НСТР}, Ивь1х = {СЗ } ), где элементы множества V обозначены следующими сокращениями: МН — матрица наблюдений, НСТР — список номеров строк матрицы наблюдений, СЗ — вектор средних значений столб¬ цов матрицы наблюдений. Таким образом, полученная модель описывает только виды информации, подаваемой на входы модуля, и виды информа¬ ции, снимаемой с его выходов, но не описывает алгоритм формирования выходной информации. Рассмотрим'теперь некоторое конечное множество модулей ('= = ^ых). i Заметим, что множество G содержит сведения не только о входах и выхо¬ дах отдельных модулей, но и о возможных связях между модулями. Дейст¬ вительно, если для выходов одного модуля заданы те же виды информа¬ ции, что и для входов другого модуля, то эго означает, что выходная ин¬ формация первого модуля может служить входной информацией для второго. Вообще говоря, в наборе G могут находиться разные модули, имеющие одинаковые множества Ивх и КВЬ1Х (обе пары { Ивх, Квх}, { ^вых, ^вых J одинаковы или только одна из них). Наборы модулей G удобно описывать с помощью графов. Напомним те из определений теории графов, которые используются в этой главе [40, 57]. Ориентированным графом называется пара Г = (И, G), где Г - множест¬ во элементов, называемых вершинами графа, a G - множество упорядо¬ ченных пар (и, v')-, v Е V,v'E И, называемых дугами графа. Произволь¬ 196
ная последовательность вершин и дуг графа вида V1, (^1, , (l>2 - Vз), . . . , V[_s(«|- I , У/), v, называется ориентированным маршрутом. Ориентированный маршрут, в котором все дуги различны, называется ориентированной цепью. Ориен¬ тированная цепь, в которой все вершины различны, называется ориенти¬ рованным путем. Ориентированная цепь, в которой первая и последняя вершины совпадают, а все остальные различны, называется ориентирован¬ ным циклом или контуром. Пусть каждое из множеств Ивых, i = 1, . . . , /, состоит из одного элемента. Тогда множество G можно представить в виде ориентированно¬ го графа Г - (И, G), вершинами которого служат элементы множест¬ ва видов информации К а дугами - модули набора G. Модулю gz- = = ({ ^вхЬ { увых)) соответствует дуга, выходящая из вершины и входящая в вершину иВЬ1Х. Для того чтобы включить в рассмотрение модули, не имеющие входов или выходов, добавим к множеству вершин V еще одну вершину, обозна¬ чаемую ф и соответствующую фиктивному виду информации ’’информации нет”. Тогда модуль, не имеющий входов, но имеющий выход (например, модуль ввода исходной информации) g = ( {ф},{ ивых}), изображается дугой ф модуль, имеющий вход, но не имеющий выходов, (пе¬ чать данных) g = ({ивх } , { ф} ), изображается дугой ивх ->ф. Определение 1.2. Степенью модуля g - (IZBX, ИВЬ1Х) называется сумма количеств элементов множеств Ивх и ИВЬ1Х, обозначаемая1) I ^вх I +1 Ивых I. Поскольку | 1вх | 1 и | Ивь1х | > 1, то степень любого модуля больше или равна двум. Пример 1.1. На рис. 12.1 изображены графы множеств модулей и 6/3, содержащих всевозможные модули степени 2 с различными па¬ рами (Ивх, Ивых) для | И| = 2 и | И| - 3. Количество модулей в наборе v | равно | И|2. Подобно тому, как любое множество модулей второй степени можно представить в виде ориентированного графа, так и любое множество моду¬ лей произвольной степени можно представить в виде ориентированного ультраграфа [15, 16, 23]. Дадим определения. Ориентированным ультраграфом Y называется пара (И, G), в которой К конечное множество, a G — конечное множество упорядоченных пар 1 ) Количество элементов любого конечного множества А обозначаем через I А I 197
Рис. 1.2.2. Луга (Гвх, ИВЬ1Х) ультрагра фа Y подмножеств V: ~ {gi ~ (^вх > ^вых), /= 1, ; ^вх с И, ^ых с V. Элементы множества V называют¬ ся вершинами, а элементы множе¬ ства G называются дугами. Дуга S = (^вх, ивых) ультраграфа У выходит из множества вершив Квх и входит в множество вершин ^вых> что изображается на рисунке, в виде так, называемого графа Кенига (рис. 12.2). Кенигово представление, или граф Кенига, ультраграфа У = (К, G) есть граф Г = (V + G, А) , вершинами которого служат вершины V, изображае¬ мые кружками, и ребра G, изображаемые точками. Каждая дуга g - = (Твх> ^вых) ультраграфа изображается на графе Кенига набором дуг (и, g), (у > &) Д, выходящих из всех вершин-кружков и, v G Квх, и вхс дящих в вершину-точку g, и набором дуг (g, и), (g, v) Е А, выходящих ю вершины-точки g и входящих во все вершины-кружки и, v Е Увых. Пример 1.2. На рис. 12.3 изображено кенигово представление ультра графа У = (К, (7з) множества модулей G*, содержащего всевозможны модули степеней не выше четвертой, различающиеся множествами Кв; И ы х Для | И | — 3. 198
Сформулируем несколько утверждений, непосредственно вытекающих из способа построения ультраграфа произвольного набора модулей G. Утверждение 1.1. Количество дуг графа Кенига (gz, и), входящих в про¬ извольную вершину-кружок и, отличную от вершины ф, равно количеству модулей gt набора G, формирующих информацию вида v. Количество дуг графа Кенига вида (gj. ф) равно количеству модулей набора G, не имею¬ щих выходов. Утверждение 1.2. Количество дуг графа Кенига (у, gz), выходящих из произвольной вершины-кружка и, отличной от вершины ф, равно количест¬ ву модулей gf набора G, обрабатывающих информацию вида v. Количество дуг графа Кенига вида (ф, gz) равно количеству модулей набора G, не имеющих входов. § 2. МОДЕЛЬ ПАКЕТА ПРОГРАММ В предыдущем параграфе было показано, что произвольный набор модулей ^={gr(V'x, И'ых). / = 1,. . . ,/} может быть представлен в виде ориентированного ультраграфа Y = (И, G). Поскольку все ультраграфы, рассматриваемые в этой книге, — ориентиро¬ ванные, то прилагательное ’’ориентированный” в сочетаниях ’’ориентирован¬ ный ультраграф, маршрут; ориентированная цепь” будем для краткости опускать. Отберем теперь среди всевозможных множеств модулей G такие мно¬ жества, которые могли бы служить моделями наборов программ реальных пакетов. Для этого потребуем, чтобы множество модулей G удовлетворяло следующим условиям: 1) с помощью набора модулей G можно получить информацию любого вида, принадлежащего И; 2) информация любого вида, принадлежащего И, может быть использо¬ вана (обработана или распечатана ) хотя бы одним модулем из G; 3) любой из модулей набора G может быть выполнен. Смысл этих условий состоит в том, что множество V не содержит нефор- мируемых видов информации, любая информация, полученная в пакете, может быть обработана или распечатана, а в наборе G нет модулей, которые нельзя выполнить. Первые два условия можно легко записать формально: U х “ U Ы х ~ _ ( Ф } > i ■-= 1 / = 1 где через V - {ф} обозначено множество, полученное из множества И уда¬ лением элемента ф. Для того чтобы формализовать третье условие, нужно сначала опреде¬ лить действие ’’выполнить модуль”. С неформальной точки зрения выпол¬ нить программу — это значит подать на ее входы нужные массивы данных и обеспечить все необходимые условия для ее работы. Поскольку условия работы в рассматриваемую модель не входят, ограничимся первым требо¬ ванием: для выполнения модуля нужны все массивы информации видов о, и G Ивх. А так как в рассматриваемой модели массивы возникают толь¬ 199
ко на выходах модулей, то отсюда следует, чго для выполнения модуля g = (Увх> ^вых) с Hix ^(01 нужно сначала выполнить модули, форми¬ рующие каждый из видов информации и, v Е Гвх, и только модуль, не име¬ ющий входов, с 17вх = {ф }, может быть выполнен без каких-либо условий. Дадим определение. Определение 2.1. Модуль# = (Евх, Ивых) называется выполнимым в на¬ боре модулей G = { #z = (К£х, К£ых), i = 1, если либо Ивх = { ф }. либо существует множество модулей G = {£z = (Ивх, KjbIX)j’ = 1,, / G С G, такое, что Ивх с U Чых и каждый #z отличен от g и выпол- i -1 ним в G. Утверждение 2.1. Пусть ч G= <g/ = nz'x, Г'ых), ,/} - произвольный конечный набор модулей. Если в наборе G нет ни одного модуля с Ивх = { ф}, го в наборе G нет ни одного выполнимого модуля. Доказательство. (От противного.) Предположим, что в G выпол¬ ним модуль g 1 = ( Ивх, Ивых) . Так как по условию И в х Ф{ ф }, го по опре¬ делению 2.1 существует подмножество модулей G\ С G, не совпадающее с G и такое, чго каждый модуль из G\ выполним в G\ . Выберем произволь¬ ный модуль #2 = (ТвХ, Ц?ых)>#2 £ ('ь и аналогичным рассуждением по¬ лучим, что существует подмножество G2, G2 CG\ CG модулей, выполни¬ мых в G2. Поскольку множество G конечно и в последовательности G D Gx D G2 D . . . нет совпадающих множеств, на некотором шаге полу¬ чим, что существует Gfl, состоящее из одного выполнимого модуля gn ~ ~ (^вх’ ^вых) и Ивх (0) • По по определению 2.1 такой модуль не яв¬ ляется выполнимым. Полученное противоречие доказывает утверждение 2.1. Покажем, как с помощью определения 2.1 можно отыскать все модули, выполнимые в произвольном наборе модулей G. Сначала отберем все модули из G, не имеющие входов. Полученное мно¬ жество обозначим через Gx : «I = { gi- gi <= G, ^х = { ф } } . Если множество Gx пусто, то в G нет ни одного выполнимого модуля. Теперь найдем все модули #z с Евх с U ЕВЬ1Х, г^с Л ' множество / е- 7( индексов модулей, принадлежащих G} : Ц - {i: gf Е G\ }. Обозначим £ СЫмС и } и/2 = {/: g,- £ Gi UG, } . ' Л Построение закончим, как только очередное множество G„41 окажется И пусто (п > 0). Ясно, что по построению все модули из ’ U G{ выполни- 7 - 1 мы в G. Такая процедура называется ранжированием. Множество модулей Gf будем называть /-м смежным классом. По по¬ строению смежные классы нс пересекаются: Gz п G, = ф, i # /, следова¬ тельно, количество смежных классов конечно Утверждение 2.2. Пусть Gj (i = 1, . . . , п + 1: п > О’) - смежные классы конечного набора модулей G и пусть Gj . . . , GH непусты, а Gn> j пусто 200
п Тогда множество U 6\- содержит все выполнимые в наборе G модули i I (в частности, пусто, если в G нет выполнимых модулей). Доказательс т в о. Предположим противное. Пусть в G сущест- п вует выполнимый модуль g = (Ивх, Ивых) ugf U Gf. Тогда Ивх i = 1 и существует ih G Квх, U Иных- Поскольку, по предположению, / е 1„ g ВЫПОЛНИМ В G, ТО существует модуль gx = (Свх, Иных) такой, что g} ^g п и Е 1ВЬ1Х. Так как vx U Ивых, то#! £ U и выполним. Это / G - I значит, что существует t>2 Е ^вх> v2 ^'вых> • • • и т.д. Получаем по- / G I п следовательность различных модулей gx, g2i • . . , выполнимых в наборе G п и не принадлежащих объединению U Gf. Поскольку G конечно, то либо i -- I на некотором шаге будет найден модуль gk, не выполнимый в 6\ либо по¬ следовательность #i ,...,#к будет содержать все модули из 6\ не принад- п лежащие U 6\. В последнем случае модуль gk также не может быть вы- i - I полнимым в наборе G. Это противоречие и доказывает утверждение. Определение 2.2. Пусть И -- заданное множество видов информации. Набор модулей G - { g= (Ивх, Ивых), / = /} назовем пакетом модулей, если: О и И'х-И; и С'ых = V- {ф} или Г; i - i i ~ I 2) любой модуль #z выполним в G. Согласно утверждению 2.2 пакет модулей G можно представить в виде объединения неперссекающихся непустых наборов модулей 6\, . . . , Gn. Рис. 12.4. Наборы модулей, не удовлетворяющие определению пакета модулей Пример 2.1. На рис. 12.4 изображены наборы модулей, не удовлет¬ воряющие определению пакета модулей. Штриховыми линиями показаны модули, которые нужно добавить в набор, чтобы превратить его в пакет модулей. Прежде чем сформулировать утверждение, отвечающее на вопрос, как по виду ультраграфа набора модулей G определить, является ли набор G 14. В.А. Кощеев 201
пакетом модулей, дадим следующие определения, обобщающие извест¬ ные понятия теории графов. Определение 2.3. Последовательность дуг (Ивх, ЕВЬ1Х), . . . , (Ивх, Ивых) ультраграфа Y = (V, G) называется слабым маршрутом, если все пересе¬ чения И,/*1 О КвЫХ,/ = 1, ...,/ — 1, непусты. Эта же последовательность /+1 _ 7 дуг называется сильным маршрутом, если Гвх q U Ивых,/= 11. i --- 1 Если ультраграф Y есть ориентированный граф, го любой сильный марш¬ рут является слабым, и наоборот. Сильный маршрут в ультраграфе не обя¬ зательно является слабым маршрутом. Слабый маршрут в ультраграфе также не обязательно является сильным маршрутом. Определение 2'.4. Слабый маршрут, в котором все дуги различны, назы¬ вается слабой цепью. Сильный маршрут, в котором все дуги различны, на¬ зывается сильной цепью. Определение 2.5. Слабым контуром называется слабая цепь ( Евх, Ивых),... . . . , (Рвх, ИВЬ1Х), для которой пересечение Kjx П Евых непусто. Сильным i контуром называется сильная цепь, для которой Квх g U Евых. Дуга i = 1 ультраграфа (Ивх, Ивых) называется петлей, если пересечение Ивх П ИВЬ1Х непусто. На рис. 12.5 изображены петли, сильные и слабые контуры ультраграфов. Из определения 2.4 следует, что если к сильной цепи (Евх, Ивых),.. . . . . . , (4ВХ, И^ых) дописать между /-й и (/ + 1)-й дугами произвольную ду- / ГУ (^вх> ^вых) такую, что Евх с U РВЬ1Х, то полученная последователь 7=1 СЛАБЫЙ КОНТУР Рис. 12.5. Петли и контуры ультраграфа СИЛЬНЫЙ КОНТУР 202
рис. 12.6. Минимальная сильная цепь, свя¬ зывающая дугу gj с дугой х4 \ ность дуг также будет сильной цепью. В частности, все модули пакета модулей образуют сильную цепь. Определение 2.6. Сильная цепь Кв’ых) (ГД, КВ*1Х) называется минимальной сильной цепью, связываю- щей дугу (ГД, ИВ'Ь1Х) с дугой (Кв*. КАЫХ), ссли ПРИ Удалении любой се ду¬ ги (К/х, / = 2. ..., к 1, получает¬ ся цепь, не являющаяся сильной. На рис. 12.6 изображена сильная цепь. Дуги этой цепи, нс минимальную сильную цепь, связывающую дугу с дугой gA, показаны штриховыми линиями. Утверждение 2.3. Для того чтобы набор модулей G=U = (>Z'X, ^ых), /=!....,/} входящие в являлся пакетом модулей, необходимо и достаточно, чтобы соответствую¬ щий ультраграф Y = (И, G) обладал следующими свойствами: 1) в каждую вершину v Е И (кроме вершины ф) входит хотя бы одна дуга и из каждой вершины v Е V (включая вершину ф) выходит хотя бы одна дуга; 2) Для каждой дуги g Е G в ультраграфе Y найдется хотя бы одна силь¬ ная цепь, выходящая из вершины ф и содержащая дугу g. Доказательство. Докажем достаточность. Пусть ультраграф Y = (1< G) набора модулей G обладает указанными свойствами. Тогда / объединение U И^х состоит из всех вершин, из которых выходит хотя / - 1 7 / бы одна дуга, т.е. U = V. А объединение U 17вЫХ состоит из всех 7 = 1 7 = 1 / вершин, в которые входит хотя бы одна дуга, т.е. U Иных ~ V ~ {Ф} i = 1 или V. Следовательно, первое свойство пакета модулей из определения 2.2 Для набора G выполнено. Покажем, что выполнено и второе свойство, т.е. чго любой модуль g Е G выполним в G. Пусть g - произвольный модуль из набора G и пусть #1 , • • • , gti, g, • • • - множество модулей, образующих сильную цепь, выхо¬ дящую из вершины ф и содержащую дугу g. Такая цепь существует по усло¬ вию утверждения. По определению сильной цепи и из того факта, что первая дуга цепи &i = (^вх» ^вых) имеет = (ф), следует, что все модули gf и модуль g выполнимы в (7, (/ = 1, . . . , и). Достаточность утверждения доказана. Докажем необходимость. Пусть Y - (И, G) - ультраграф пакета моду¬ лей G, a v — его произвольная вершина, и Е И Из определения пакета моду- 14" 203
I лей следует, что и G U Квх, т.е. что из вершины v выходит хотя бы од i = 1 на дуга. Если v произвольная вершина, не совпадающая с ф, v G V — (ф }. / то из определения 2.2 следует, что v Е U Рвых, т.е. что в вершину v вхо / =• 1 дит хотя бы одна дуга. Пусть g = (Ивх, Евых) - произвольная дуга ультраграфа Y, Представим п пакет модулей О’ в виде объединения смежных классов G = U (это i = 1 всегда возможно, см. утверждение 2.2) и пустьg Е Gki 1 <к Построим последовательность модулей { модули из в любом порядке {мо¬ дули из Gk_r в любом порядке },g. По определению смежных классов набора модулей эта последовательность является сильной цепью (не обяза¬ тельно минимальной) . Необходимость утверждения доказана. § 3. ФУНКЦИОНИРОВАНИЕ ПАКЕТА ПРОГРАММ В предыдущих параграфах была описана модель произвольного пакета программ — пакет модулей G. Теперь нужно расширить полученную модель, включив в нее описание работы пользователя с пакетом. Дадим опреде¬ ление. Определение 3.1. Пусть G = { gz = (Евх, ^вых), / = пакет модулей. Последовательность модулей gz,. . . , gi^gi; £ GJ - (не обязательно различных) называется выполнимой в пакете G цепочкой, если'каждый модуль gi{ выполним в наборе модулей {g7j . . . . , < / = 2, . . . Д, а модуль g^ не имеет входов: - {</>} ■ В дальнейшем не будем пользоваться '’двухэтажными” индексами. Запись £i, . . . ,gm будет означать произвольную последовательность моду¬ лей пакета G (не обязательно m первых). Утверждение 3.1. Модули любой выполнимой в пакете G цепочки, состо¬ ящей из различных модулей, образуют в ультраграфе Y = (К, G) сильную цепь, выходящую из вершины ф. Справедливо и обратное утверждение. Доказательство очевидно. Определение 3.2. Выполнимая в пакете G цепочка gj = (Ивх, Ивых),. . . . . . , gn} = (Ив"х, Р’вых) называется простой, если все пересечения Ивых О п ^ых? 0’ z = 1,. . . , т\ / = 1, . . . ,т) пусты. Поставим в соответствие произвольной простой цепочке г, t = ~ {gi, , g,n}, множество d(t), определенное следующим об¬ разом. Элементы множества d(t) будем называть массивами информации или массивами данных. Каждому выходу v Е 1ВЫХ (Z = 1, . . . ,т) каждо¬ го из т модулей, входящих в цепочку t, соответствует один элемент мно¬ жества d(t), а именно массив информации вида и. Поскольку цепочка I проста, то в d(t) содержится не более чем по одному массиву каждого вида информации. Множество d(t) можно изобразить в виде ультраграфа r=(J(z),r). 204
В реальном пакете программ множеству d(t) соответствует множество результатов, полученных при выполнении последовательности модулей Sm- Заметим, что такое определение множества результатов пред* полагает, что в пакете отсутствуют модули, уничтожающие данные. Пусть ti и t2 - две простые цепочки. Как определить результат после¬ довательного выполнения цепочек 11 и Естественно считать, что результатом выполнения цепочек Ц и / 2 явля¬ ется объединение множеств d(tx) и <7(г2). А поскольку при объедине- нии из каждой пары равных массивов остается только один, го вопрос лишь в том, какие из элементов множеств d(tx) и d(t2) нужно считан равными. Определение 3.3. Два массива данных, полученные при выполнении це¬ почек модулей г 1 и t2 (не обязательно простых), назовем эквивалентными, если эти массивы получены на одном и том же выходе одного и того же модуля g, g Е tXig Е г2, причем в обоих случаях на входы модуля g (если они есть) были поданы попарно эквивалентные массивы данных. Из определения 3.3 следует, что массивы разных видов информации всег¬ да неэквивалентны и что реальные массивы данных, соответствующие эк¬ вивалентным массивам, всегда совпадают. Можно видеть, что неэквивалентным в смысле определения 3.3 масси¬ вам на практике иногда могут соответствовать одинаковые массивы дан¬ ных. Такое совпадение может быть случайным либо может объясняться особенностями алгоритмов модулей, которые не учитываются рассмат¬ риваемой моделью пакета программ. Итак, результатом выполнения двух цепочек tx и t2 будем называть множество d(tx) ^dKt2), формируемое с учетом определения 3.3. Теперь опишем модель множества результатов, возникающего при работе с паке¬ том программ, сначала при использовании только простых цепочек, а за¬ тем для произвольных. Определение 3.4. Две простые цепочки t} и t2 будем называть эквива¬ лентными тогда и только тогда, когда порожденные ими множества d (t!) и d(t2) содержат попарно эквивалентные массивы данных. Пусть То -- наибольшее множество простых цепочек, не содержащее ни одной пары эквивалентных цепочек. Для того чтобы перейти к множеству, содержащему не только простые цепочки, определим сумму простых цепочек. Суммой k, к’> 1, простых цепочек t ] , . . . , tк назовем цепочку {11, . . . , tk} , которую иногда будем обозначать t j + . . . + tk. Цепочка {G, . . . , tk }, порождает множество массивов данных d(t \. . , tk) = к ~ U c/(rz), которое может содержать несколько (обязательно неэкви- / = I валентных, так как лишние эквивалентные массивы уничтожаются при объединении) массивов одного и того же вида информации. А. , к ? Дне суммы простых цепочек X Г - и S будем называть эквива- / = I i - 1 Рентными, если множества d (Z J, . . . , ) и d (t ?, . . . , tк ) состоят из чбпарно эквивалентных массивов. 205
Пусть Т - наибольшее множество цепочек, которые являются сум¬ мами простых цепочек из То, не содержащее ни одной пары экви¬ валентных сумм простых цепочек. Определим на 7’операцию сложения: А | к,, к' S t} + 2 /? = 2 tf, (I) / = 1 i -- I i - 1 з где S — сумма простых цепочек, принадлежащая Т и эквивалентная / = 1 ki / сумме простых цепочек t j + . . . + tk) + t2 + . . . + tk , ; S t f E T'j - 1,2,3. i = 1 Утверждение 3.2. Множество T является коммутативной полугруппой относительно операции сложения (Г). Доказательство. Во-первых, множество Т замкнуто относитель¬ но операции сложения (1) по построению. Во-вторых очевидно, что операция (Г) ассоциативна и коммутативна. В-третьих, роль нуле- к вого элемента в Тиграет пустая цепочка, обозначаемая { ф) : S /,• + { ф } = / - I А А = S tj для любой суммы S tЕ Т. Следовательно, Т - полугруппа. i = 1 i = 1 Множество Т не является группой потому, что результатом объединения двух непустых множеств d{t i) и d(t2) нс может оказаться пустое множест¬ во. если, конечно, в пакете 6’ нет модулей, порождающих "антимассивы" данных. На практике множеству Г соответствует набор всех возможных после¬ довательностей простых операций (г.е. реализованных в виде простых цепочек модулей), которые могут быть выполнены при работе с пакетом программ. Множество всех возможных результатов (множество множеств мас¬ сивов данных), которые могут быть получены при работе пакета моду¬ лей описывается ультраграфами вида Y =( d(ti, . . . , tк), {г j, . . . .• /к }) . где {G, . . . ,tk] - произвольный элемент множества Т. В ультраграфах У = . , tk), {t I, . . . , tk } ) (или, короче, У = (J; ttj) вершинам соответствуют различные массивы информации из множества d(t j /А). а дугам - различные выполнения (вызовы) модулей па¬ кета G. Множество вершин, из которого выходит дуга g, есть множество массивов данных, поданных на входы модуля g во время вызова, опи¬ сываемого дугой g, а множество вершин, в которые входит дуга g, есть множество массивов данных, полученное в результате этою выполнения модуля. Следовательно, в ультраграфс Y - (d\ Г], . . . , tк) зафиксирована ис¬ тория образования каждого массива данных из множества d (t i , . . . , t k), достаточная для того, чтобы повторить формирование всего множества результатов d (t j, . . . , Г А.) заново. Закончим на этом формальные построения и попытаемся извлечь из полученной модели полезные результаты. 206
Рис. 12.7. Дуги ультраграфа У= (J; Г1?... ...» *к) ’ соответствующие вызовам моду- ля? = ((«,, , {иэ} ) Рис. 12.8. Запрещенные пары дуг ультра¬ графа Y = (J; G,..., fjt) b Пусть tx + . . . + tk - некоторая сумма простых цепочек модулей и пусть модуль g = (Евх, Ивых) входит в состав более чем одной цепоч¬ ки ti9 например g G ti9 i = 1, . . . , ki\ kx ^k. Рассмотрим ультраграф Y = (J; rx, . . . ,/>), изображенный на рис. 12.7. Предположим, что на рисунке показаны дуги, соответствующие всем вхож¬ дениям модуля g (для определенности g = ( { их, и2 } , {и з} )) в сумму t\ + . . . + tk, т.е. всем выполнениям этого модуля. Возникает вопрос, можно ли судить о том, имеет ли практический смысл вызов модуля, опи¬ сываемый некоторой фугой ультраграфа У, не зная содержания входных массивов и алгоритма модуля? Рассмотрим сначала очевидные случаи. Из определения эквивалентности массивов информации (определе¬ ние 3.3) следует, во-первых, что нельзя получить эквивалентные масси¬ вы на выходах двух разных модулей (рис. 12.8, ”а”) и, во-вторых, нельзя получить эквивалентные массивы, вызвав одни и тот же модуль дважды и подав на его входы множества массивов, не являющихся попарно экви¬ валентными (рис. 12.8, ”б” и ”в”). Предположив дополнительно, что не имеет смысла повторный вызов модуля с одними и теми же входными данными (рис. 12.8, ”г”)> получим набор запрещенных комбинаций дуг ультраграфа У = (d; 7Х, . . . , t к), изображенный на рис. 12.8. Заметим, что ситуация, показанная на рис. 12.8, ”в”, означает, что выход¬ ной массив информации вида и3 не меняется при изменении входного массива информации вида их. Если реальная программа обладает таким свойством, то ее целесообразно представить в виде двух формальных модулей^ц = ( {и2} , {и3} ) и #!2 = ( { U1, и2} ,{14} ).После такой замены ситуация, изображенная на рис. 12.8, ”в”, уже не возникнет. Перейдем теперь к менее тривиальным случаям. Кроме запретов на комбинации дуг ультраграфа Y - (d; . . . , tk), накладываемых опре¬ делением эквивалентности массивов данных, существуют запреты, дик¬ туемые логическими связями между массивами данных. Рассмотрим простейшие примеры таких запретов и попытаемся описать их формально. 207
Рис. 12.9. Улыраграф У,, описан¬ ный в примере 3.1. Вершина ф для наглядности изображена дважды <р Рис. 12.10. Ультраграф ¥2. опи¬ санный в примере 3.2 Пример 3.1. На рис. 12.9 изображен ультраграф Y = (J; { g j, g2, #4, #5 } ), где gi и g2 — модули ввода различных матриц наблюдений МН] и МН2, £з и g4 - модули ввода различных списков, содержащих названия переменных НП] и НП2, относящихся к матрицам наблюдений МН] и МН2, соответственно, a gs — модуль печати матрицы наблюдений вместе с соответствующими названиями переменных. На рисунке изобра¬ жены все дуги, описывающие различные вызовы модуля g$. Штриховыми линиями показаны дуги, соответствующие вызовам модуля g5, которые приведут к появлению неправильных результатов (матрица наблюдений будет напечатана вместе с ’’чужими” названиями переменных) . Пример 3.2. На рис. 12.10 изображен ультраграф У2 = (<7; { gx, g2, g3, ga , gs } ) , где g ] - модуль ввода матрицы наблюдений МН, g2 и g3 - модули ввода различных списков номеров строк матрицы наблюдений НСТР] и НСТР2, g4 — модуль, вычисляющий для каждого столбца матри¬ цы наблюдений среднее значение СЗ чисел, находящихся на пересечении этого столбца со строками, указанными в списке НСТРА: х к = S х,•.•;/= 1. .. N. 1 i^Ik где 1к - множество номеров строк, заданное в списке НСТРА, к = 1, 2: N — число столбцов матрицы; g5 - модуль, вычисляющий для каждого столбца матрицы наблюдений выборочную дисперсию Д чисел, находя¬ щихся на пересечении этого столбца со строками, указанными в списке НСТРд : ' 208
На рисунке показаны все дуги, соответствующие различным вызовам модуля g5. Штриховыми линиями изображены дуги, описывающие вы¬ зовы модуля g5, при которых будут получены массивы Д3 и Д4, не яв¬ ляющиеся, вообще говоря, выборочными дисперсиями. Действительно, компоненты массива Д3 равны d:= S (xz..-xh2, где xj = 2 /=1,...,/У. 7 /ел 7 /е г. Эти компоненты не являются выборочными дисперсиями, если х ¥= х2 , те. S Хц =# S хц хотя бы для одного /,/ = 1, . . . ,N. i е i, i^J2 Пример 3.3. На рис. 12.11 изображен ультраграф У3 = (<7; { gi, g2, g3, ^4,g5 ,g6 } ), где gi,g2,g3, g4,g5 - модули, описанные в приме¬ ре 3.2, a g6 - модуль коррекции матрицы наблюдений. Штриховой ли¬ нией показана дуга, описывающая вызов модуля g5, при котором, воз¬ можно, будут получены неверные результаты. Действительно, d• = S (х• • - х1 )2, где х1 = X £, / = 1, . .. , N, 7 I G / 7 i С-’: 1 1 а х1.. ,х2. - элементы матрицы наблюдений до и после коррекции. В примере 3.3 показана ситуация, часто встречающаяся на практике: после того как часть результатов уже получена, обнаруживаются ошибки в исходных данных. Ошибки исправляются, результаты пересчитываются, но спустя некоторое время обнаруживается (или не обнаруживается), что один результат нс был пересчитан (в примере 3.3 это вектор C3t), и из-за этого некоторые из полученных массивов относятся к исправленным Рис. 12.11. Ультраграф У3. описанный в при¬ мере 3.3 исходным даныым, другие - к неисправленным, третьи представляю! собой гибрид первых двух. Таким образом, рассмотренные примеры показывают, что в ультагра- фе Y - (d\ 11, . . . , Q), описывающем множество результатов d(t 1; . . . , Q-), полученное при выполнении цепочек модулей . . . . tk, возможны Дуги, которые соответствуют формированию неправильных с практичес¬ кой точки зрения результатов. В следующем параграфе найдем условие, которому удовлетворяют ультраграфы, не имеющие таких дуг. 209
§ 4. СЕМЕЙСТВА МАССИВОВ ДАННЫХ Итак, в предыдущем параграфе выяснилось, что необходимо сфор¬ мулировать критерий, позволяющий формальным образом устанавли¬ вать, соответствует ли некоторой дуге ультраграфа Y = (d\ G, . . . , t к) формирование ’’правильных” данных. Примеры, рассмотренные в конце предыдущего параграфа, показывают, что неверные выходные данные образуются в том случае, когда на входы модуля поданы ’’несогласован¬ ные” друг с другом массивы. Поэтому начнем с того, что определим мно¬ жество массивов данных, непротиворечивое в том смысле, что любая комбинация массивов этого множества может быть подана на входы мо¬ дуля и при этом всегда будут получены правильные результаты. Определение 4.1. Множество массивов данных d(7), порожденное прос¬ той цепочкой t, называется непротиворечивым, если либо цепочка t сос¬ тоит из одного модуля, либо t = { Г1 , # } , где# - некоторый модуль паке¬ та G, а множество d(t i) непротиворечиво. Смысл этого определения заключается в том, чго множество массивов, которое получено на выходах произвольного модуля пакета G, не имею¬ щего входов, всегда непротиворечиво. Кроме того, любой модуль g па¬ кета G сохраняет непротиворечивость множества массивов данных, не содержащего нескольких массивов одного и того же вида информации. Определение 4.2. Простая цепочка t модулей называется максимальной в G, если не существует другой простой цепочки 11, отличной от t и содер¬ жащей все модули, перечисленные в t. Определение 4.3. Множество массивов данных S назовем семейством, если оно порождается максимальной простой цепочкой модулей t: S =d(t) . На практике семейству массивов данных соответствует множество всех результатов, полученное из одних и тех же исходных данных, кото¬ рое содержит не более чем по одному результату каждого вида инфор¬ мации. Ясно, что семейство массивов не будет содержать неправильных ре¬ зультатов, если модули пакета G таковы, чго понятие ’’непротиворечи¬ вость” множества массивов данных, описываемое конструктивным оп¬ ределением 4.1, окажется эквивалентным неформальному свойству ’’сог¬ ласованность” массивов данных. Утверждение 4.1. Семейства массивов данных могут пересекаться, но одно из них не может быть вложено в другое. Другими словами, для любых двух различных конечных семейств мас¬ сивов данных 51 и 6’2 таких, что 51 А 52 яА ф , существует массив, принад¬ лежащий 51 и не принадлежащий 52, и существует массив, принадлежа¬ щий 52 и не принадлежащий 51. Доказательство. Предположим,чго 5i С 52 и 51 У- 52. Тогда в 52 существует массив вида информации i?j, которого нет в 51. Следова¬ тельно, в цепочку, порождающую 52, входит модуль #1 = (Г^ Ивых) и i>i £ И^ых- Далее, так как 51 С52 и 52 — семейство, то в 51 вообще нет массивов информации вида гд. Так как цепочка, порождающая 51, максимальна, то модуль gx не может быть добавлен к ней. Это значит, что либо в 51 нет массива инфор¬ мации хотя бы одного из видов и, v е Ув1х, например v2 G Ивх (эти мас- 210
сивы есть в S2), либо уже есть массив информации хотя бы одного из видов и,и е Гв’ых. В первом случае снова приходим к выводу, что в S2 есть массив еще одного вида информации и2, отсутствующего в Si. Поскольку S2 конеч¬ но, то рано или поздно будут перечислены все такие , v2, . • . , vki и тогда окажется, что модули g1} . . . ,gk возможно добавить к цепочке t х, порождающей Si, и возникает противоречие с тем фактом, что цепочка t\ максимальна. Во втором случае получаем противоречие с условием Si CS2. Утверж¬ дение доказано. Теперь возможно сформулировать условие, которому удовлетворяет ультраграф Y - (d; ti9 ... , tk) множества результатов d, не содержа¬ щего неправильных данных. Определение4.4.Ультраграф Y = (d; , tк) назовем правильным, если любая его дуга соединяет массивы данных, принадлежащие одному семейству. Вернемся к примерам 3.1, 3.2 и 3.3 и выпишем семейства массивов, изображенные на рисунках 12.9, 12.10 и 12.11. Пример 4.1. На рис. 12.9 изображены следующие семейства массивов данных: OMH^HTIr, 2)МН1,НП2; 3)МН2,НП1; 4)МН2,НП2. Ультра¬ граф У1 удовлетворяет определению 4.4, но второе и третье семейства не являются согласованными множествами массивов данных. Это проти¬ воречие объясняется тем, что модули g!, g2, g3, g4 определены так, что понятие непротиворечивости множества массивов данных не совпадает с неформальным свойством согласованности множества массивов, а имен¬ но: цепочки модулей {gi,g4} и {g2,gi } не порождают согласованных множеств. Если представить пару модулей {gi, g3} в виде одного модуля £1з = ({ Ф } , {МН, НП } ), а пару { g2,g4} - в виде модуля g24 = ( {ф}, Рис. 12.12. Ультраграф >'$. описанный в при¬ мере 4.1 {МН, НП} ), то модули gi3,g2 4,g5 уже i*e будут нарушать согласован¬ ности множества массивов, а ультраграф Kj (рис. 12.9) превратится в ультраграф Y5, изображенный на рис. 12.12. На этом рисунке штриховыми линиями показаны дуги которые нужно удалить, для кого, чтобы полученный ультраграф оказался правильным. Эти дуги описывают запрещенные вы¬ зовы модуля g5. Перейдем к рисунку 12.10. На нем изображены два семейства масси¬ вов: 1)МН, HCTPj, C3i, Д1;2)МН, ПСТР2, С32, Д2. Дуги, показанные 211
штриховыми линиями, соединяют массивы, не принадлежащие одному семейству. Эти дуги описывают запрещенные вызовы модуляg5. На рисунке 12.11 изображены два семейства массивов: 1) МИНИСТР, СЗ], Д]; 2)МН2, НСТР, С32 , Д2 (массивы С32 и Д2 не показаны) . Дуги, описывающие получение неверных результатов, соединяют массивы, не принадлежащие одному семейству. Таким образом, для того .чтобы исключить формирование неправиль¬ ных массивов данных, нужно потребовать так определять модули пакета, чтобы формальная непротиворечивость множества массивов была всегда эквивалентна согласованности этого множества, а при работе с пакетом использовались только такие цепочки модулей, которые порождают множества результатов, описываемые правильными ультраграфами y=(J; На этом закончим рассмотрение общей модели пакета прикладных программ. В оставшейся части главы изучим частные случаи этой модели, соответствующие следующим классам пакетов программ'. 1) пакеты программ класса ЕВ (Единственная Версия) с обработкой единственной версии массива каждого вида информации v, v G V; 2) пакеты программ класса ПВ (Последняя Версия) с обработкой только последней версии массива каждого вида информации и, v G И; 3) пакеты программ класса ВВ (Все Версии) с обработкой несколь¬ ких версий массива каждого вида информации и, v G V. § 5. ПАКЕТЫ ПРОГРАММ КЛАССА ЕВ Для того чтобы получить модель пакета класса ЕВ (формирование только одного массива каждого вида информации и, и G И), добавим в общую модель пакета программ, описанную в предыдущих парагра¬ фах, следующий постулат: ’’все массивы одного и того же вида информа¬ ции v эквивалентны”. Добавление этого постулата немедленно приводит к следующим упро¬ щениям модели. Во-первых, в пакете модулей класса ЕВ не содержится более одного модуля, формирующего информацию вида и, v G И. В противном случае появилось бы несколько модулей, формирующих один и тот же массив данных, что противоречит определению эквивалентности массивов. Во-вторых, в пакете класса ЕВ не могут содержаться модули, имеющие вход и выход, соответствующие одному и тому же виду информации v , поскольку эти модули оказались бы невыполнимыми. С другой сто¬ роны, такие модули и не нужны, гак как в любом модуле g = (Ивх, Евых) элемент v , принадлежащий одновременно Евх и Евых и не совпадающий с элементом ф, можно безболезненно исключить из множества ИВЬ1Х, по¬ скольку в пакете класса ЕВ массив информации может передаваться с входа на выход модуля только без изменений. Определение 5.1. Пара g ~ (Евх, ЕВЬ1Х), где Евх с Е, Евых с И, пере¬ сечение Евх А Евых пусто либо равно {ф} , а V — конечное множество, называется простым модулем. Определение 5.2. Набор модулей G = {g< = (Евх, Евых),/ = 1, . . . ,/} называется пакетом модулей класса ЕВ, если выполняются следующие 212
условия: 1) и и;х = V; и ив'ых = V - { ф } или И; i = 1 i - 1 2) каждый модуль g. выполним в G\ 3) каждый модуль gf. прост; 4) каждое пересечение Ивых О ИВЬ1Х, i Ф j , либо пусто, либо состоит из единственного элемента (ф } . Утверждение 5.1. Для того чтобы набор модулей G = (gi^AV* < V1 ). г = 1} был пакетом модулей класса ЕВ, необходимо и достаточно, чт