logo search
Informatics

9.5. Библиотеки стандартных программ

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

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

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

Обращение к подпрограмме осуществляется с помощью оператор CALL, имеющего в описании подпрограммы следующую структуру:

CALL <имя подпрограммы> (список формальных параметров)

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

Указание в описании подпрограммы перечня внешних подпрограмм необходимо для того, чтобы установить их наличие в БС1

данной ЭВМ, так как в некоторые моменты времени они могут отсутствовать. Описание подпрограммы может снабжаться замечаниям>

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

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

как константы в этом же списке.

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

Точность вычислений большинства подпрограмм в значительной степени зависит от числа значащих цифр, доступных для арифметических операций. Для повышения точности пользователь может работать с вариантом подпрограмм удвоенной точности. Оператор удвоенной точности языка ФОРТРАН включены в каждую из этих подпрограмм в виде карт комментариев.

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

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

Статистика - пробит-анализ; дисперсионный анализ (факторное планирование); корреляционный анализ; множественная линейная регрессия; шаговая регрессия; полиномиальная регрессия; каноническая корреляция; факторный анализ и т.д.

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

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

Если пользователь работает в других версиях языка ФОРТРАН, имеющих более широкие возможности, он использует элементы этого языка, отсутствующие в языке БАЗИСНЫЙ ФОРТРАН. Например, некоторые версии языка ФОРТРАН содержат возможности кратного входа в подпрограмму. Используя их, некоторые подпрограммы пакета объединяют. В качестве примера приведем объединение подпрограмм GMADD и GMSUB (сложение и вычитание общих матриц):

SUBROUTTINE GMADD (A, B, N,

DIMENSION A(l), B(l), R(l)

K=0

ENTRY GMSUB (A, B, R, N, M)

K=l

10 NM=NXM

DO 40 l=l, NM

IF(K) 20,20,30

20 R(1)=A(1)+B(1)

GOTO 40

30 R(I)=A(I)-B(I)

40 CONTINUE

RETURN

END.

Такое объединение подпрограмм не влияет на программу пользователя, обращающуюся к этим подпрограммам, но сокращает общий размер используемой памяти.

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

Многие подпрограммы пакета SSP написаны в двух вариантах: обычной и удвоенной точностью. Некоторые подпрограммы содержат инструкции для работы с данными удвоенной точности в текст подпрограммы на исходном языке. Операторы для работы с удвоенной точностью включаются в каждую подпрограмму в форме карт комментариев. В большинстве случаев вариант подпрограммы с удвоенной точностью может быть получен удалением перед компиляцией символа <С> столбца карты (карт) с оператором DOUBLE PRECISION. В некоторых случаях даются дополнительные инструкции: например, заменить SQRT на DSQRT, ABS на DABS или задать новые константы.

Использование подпрограмм с удвоенной точностью требует детального знания правил языка ФОРТРАН, касающихся вычислений c удвоенной точностью. Приведем некоторые из них: 1

1. Имя любой действительной переменной или массива, содержащегося в списке аргументов оператора CALL, вызывающего подпрограмму с удвоенной точностью, должна быть описана с помощью оператора DOUBLE PRECISION в вызывающей программе. Например, если подпрограмма обращения матрицы MINV из пакета SSP неизменена в вариант удвоенной точности, а программа пользователя содержит оператор

CALL MINV (ARI,N,DET,MYI,MY2),

ARI - имя массива (действительный, удвоенной точности массив);

- размерность (целая переменная); DET - определитель (действительная, удвоенной точности переменная); MYI - рабочий вектор массив целых чисел); MY2 - рабочий вектор (массив целых чисел), то в начаале программы пользователя должен быть оператор описания

DOUBLE PRECISION ARI, DET

Остальные переменные оператора CALL являются целыми переданными и их не следует включать в оператор описания.

2. Любая задаваемая пользователем функция, названная в операторе CALL при обращении к подпрограмме с удвоенной точностью пакета SSP, должна быть запрограммирована как функция удвоенной точности. Например, для решения дифференциального уравнения методом Рунге-Кутта по подпрограмме RK2 используется функция