Джордж, Лю - Численное решение больших разреженных систем уравнений (947498), страница 48
Текст из файла (страница 48)
Такой интерфейс представляет собой попросту слой подпрограмм между пользователем, у которого предположительно имеется необходимость в решении разреженной системы уравнений, и подпрограммами,' 4 В.2. Вазисяая структура пакета 5РАй5РАК 31! реализующими методы данной книги (см. рис. В.!.!). Этот интерфейс вместе с подпрограммами, которые он обслуживает, составляет пакет, которому мы дали название БРАКЬРАК (Пеогпе )979а).
Помимо подпрограмм нз глав 4 — 8 и подпрограмм интерфейса, 8РАКЬРАК содержит также ряд служебных подпрограмм для печатания сообщений об ошибках, изображений структуры разреженных матриц н т. д. Интерфейс выполняет ряд функций. Прежде всего он освобождает пользователя от всякой заботы о оаспоеделении памяти Рнс. В.1.1. Схематическое нзоорзжепне компонент пзкетз 5РАк5РАК.
для массивов. Вся память распределяется интерфейсом в границах задаваемого пользователем одномерного массива; при этом применяется техника, сходная с той, что описана в в А.З. Устанавливается также контроль правильности порядка прн вызове подпрограмм интерфейса. Кроме того, пользователю предоставляются удобные средства приостановки и последующего возобновления вычислений. Наконец, имеется развернутая диагностика ошибок.
Назначение последующих параграфов — дать краткий обзор различных возможностей БРА)хБРАК; они отнюдь не являются инструкцией для пользователя. Подробная инструкция для пользователя и указания по «наладке» пакета поставляются вместе с ним. Необходимую информацию читатель может получить у авторов. й В.2.
Базисная структура пакета 8РАРЗРАК Для любого из методов, описанных в главах 4 — 8, взаимодействие пользователя и ЬРАКБРАК при решении системы Ах = Ь охватывается следующей схемой: ШЯ Приложение В. оРАКЗРАК: Пакет длл раэреженных матриц Шаг ! (Ввод структуры), Пользователь задает пакету структуру ненулевых элементов матрицы А, обращаясь к соответству. ющим подпрограммам интерфейса. Шаг 2 (отпорядочение и распределение памяти), Выполнение в программе пользователя оператора вызова специальной под- ч~р(нецииро Ванне Бризрк тэвесм 1М13(1, Я, 3) тмнои(1, мн, ш, Б> 1М1111(М18, 11, 11, Б) 1мсы)(мсы), сы), з) 11ЕМО(З) Вуоу апрукагурат (Шог 1) 'йпорлУотение и раснреУеленае ) наматии ГШаг 2. Сншел еимУолоУ х и ! раав неннет рис.
В,ЗА) оноих((з> ПЧАШ (1, 1, ЧАЬПЕ, З> ПЧНОН (1, Мтн, 1И, ЧАЬОЕЗ, З> тнмат((М11, 11, 11, чаьокз, Б)! 1МВ1(1, ЧАЬОЕ, 3) 1МВ1В1(М1, 11, ЧАЬПЕЗ, Б) 1МННБ(ННЗ, З) Вуек мошрицм (Шог 3) Вбод нроУош чааоей сШиг б) Разложение и решение (Шаги 4,и 6) Босое!(3) программы служит для пакета указанием на необходимость вычисления упорядочения и формирования структуры данных для л., Шаг 3 (Ввод матрицы). Пользователь задает числовые значения элементов А, обрашаясь к соответствуюшим подпрограммам интерфейса. Шаг 4 (Разложение А).
Вызов специальной подпрограммы служит для пакета указанием на необходимость разложения А в произведение !.Е,т. Шаг 5 (Ввод правых частей). Пользователь задает числовые значения компонент Ь, обращаясь к соответствующим подпрограммам интерфейса, (Этот шаг может быть выполнен до шага 4 и объединен с шагом 3.) Шаг б (Решение). Вызов специальной подпрограммы служит для пакета указанием на необходимость вычисления х, исходя из полученной на шаге 4 матрицы !.
и вектора Ь, введенного на шаге б. Рнс. В.2.!. Наэааиия некоторых подпрограмм интерфейса иэ пакета оРАйв- РАК. Р В.З. Головная программа иольвоватвля 3!3 Названия некоторых подпрограмм интерфейса вместе со списками аргументов и общими функциями приведены на рис. В.2Л. Детали можно найти в последующих разделах.
В В.З. Головная программа пользователя — пример ЗРАВЗРАК распределяет всю память в границах единого одномерного вещественного массива, который нам удобно будет обозначать через 3. Помимо этого массива пользователь должен задать и его длину МАХЗ, которая передается пакету через общий блок ~ЗРКЦЫ), содержащий четыре переменных: СОММОЬ) /ЗРКЦЗК/ МЗО(АГ1, 1ЕЕК, МАХЗ, Ь)Е(1Ь)З Здесь МБО(.'1т(,— указатель уровня печати, используемый для управления количеством информации, которая печатается пакетом. Вторая переменная 1ЕКй — индикатор ошибки, посредством которого программе пользователя сообщается об ошибках, найденных пакетом. Переменная Ь)ЕЯЬ)5 — это число уравнений, устанавливаемое пакетом. Приводимая ниже программа показывает, как используя БРАКЗРАК, решить систему уравнений Ах = Ь профильным методом главы 4, Рассматриваемая система имеет порядок 1О и симметричную трехдиагональную матрицу А.
Все диагональные элементы А равны 4, наддиагоиальные и поддиагональные элементы равны ( — 1), все компоненты вектора Ь равны 1. Цифра 1 и буква к в именах некоторых подпрограмм интерфейса указывают, каким методом должна решаться задача. Здесь мы должны отметить, что ЗРАКБРАК позволяет решать как симметричные, так и несимметричные системы. В последнем случае предполагается, что структура матрицы А симметрична и что не нужен выбор главного элемента для обеспечения устойчивости (см. упр. 4.5.1). На рис. В.З.1 указаны методы, входящие в состав пакета.
ПРОГРАММА, ИЯЛЮСТРИРУКНЦЛЯ ИСПОЛЬЗОВАНИЕ ВРАЯВРАК . совке 1агкиза1 изоьчь, тики, млхз, неона иелп з(260) САЬЬ ЗРКЗРК мякз вза ВВЕСТИ СТРУКТУРУ МАТРИЦЫ . ДИАГОНАЛЬ ВСЕГДА ПРЕДПОПЛГЛЕТВВ НЕНУЛЕВОЙ Т.К. МЛТРИЦА СИММЕТРИЧНЛт ВВОДИМ ТОВЬКО позиции поддилгонлльных элементов. СЛ1.1. 13ВЕОН ОО 1ОО 1 . З, гв 314 Приложение В. ЗРА)(ЗРАК: Пакет для разряженных матриц САЬЬ 1М11( 1, 1-1, $ ) СОМТ1МСЕ САУЛ. 11$))0( $ ) 100 С С С НАЙТИ УПОРЯДОЧЕНИЕ И РАСПРЕДЕЛИТЬ ПАМЯТЬ ° ° САН.
ОапнА1( $ ) С С С ВВЕСТИ ЧИСЛОВЫЕ ЗНАЧЕНИЯ. (НИЖНИЙ ТРЕУГОЛЬНИК). 00200 1 1, 10 1Р ( 1 .01.1 ) САП. 1МА111( 1, 1-1, -1.0, $ ) СА13. 1МА111( 1, 1, 4.0. $ ) СА).1. 1МВ1( 1, 1.0, $ ) сомт1МСЕ 200 С С С С С РЕШИТЬ СИСТЕМУ. Т.К. МАТРИЦА И ПРАВАЯ ЧАСТЬ СИСТЕМЫ УЖЕ ВВЕДЕНЫ т ТО ПОДРЯД ВЫПОЛНЯЮТСЯ РАЗЛОЖЕНИЕ И РЕШЕННЕ ТРЕУГОЛЬНЫХ, СИСТЕМ. САУЛ. $0ЬУЕ)( $ ) С С С С ВЫВЕСТН НА ПЕЧАТЬ РЕШЕНИЕ, НАХОДЯЩЕЕСЯ В ПЕРВЫХ 10 ПОЗИЦИЯХ РАБОЧЕГО МАССИВА 3. ИЯ1ТЕ(6, 11) ($(1), 1 ° 1, 10) Роамлт(/ 10Н зоьпт1ОМ /, (5Р10,$)) 11 С С С ВЫВЕСТИ НА ПЕЧАТЬ СТАТИСТИКУ СОБРАННУЮ ПАКЕТОМ. САЬЬ РЗТАТ$ $ТОР ЕМС опоил) л / Ссылка Осясаснс Рис.
В.3.1. Методы, входяп(ие в состав пакета $РАк5РАК Подпрограмма оркоРК должна вызываться до обращения к какой-либо части пакета. Ее роль состоит в инициировании некоторых системных параметров (например, логического номера печатающего устройства), присвоении значений тем переменным А 1 А 2 А 3 А 4 В 3 В,( а А 6 В 6 В 6 Упорядочение Упорядочение Упорядочение Упорядочение Упорядочение Упорядочение Упорядочение Упорядочение Упорядочение Упорядочение ПСМ; симметричная 4 ПСМ, несимметричная 4 1(УР симметричная А 1тл)Р несимметричная 4 И(ет симметричная А ПЯТ несимметричная А )ЧР симметричная А МР несимметричная А РМР,симметричная А ((МР, несимметричная 4 Гл.
4 Гл. 4 Гл. 1 Гл. 7 Гл. 6 Гл. 6 Гл. 8 Гл. 8 Гл. 6 Гл. 5 э В.4 Краткое описание основных подпроерамм интерфейса Згв (например, указателю уровня печати), которые не определены пользователем, и выполнении некоторых машинно-зависимых функций (например, запуск программы измерения времени). В программе пользователя 5РР5РК следует вызывать только один раз. Заметим, что единственная переменная в общем блоке ~5РК()5К), которой пользователь должен присвоить значение,— это МАХ5. В пакете имеется подпрограмма интерфейса, именуемая Р5ТАТ5, к которой пользователь может обратиться за информацией о памяти, времени, числе операций и т.
д. прн решении системы. Предполагается, что подпрограммы, составляющие 5РАК5РАК, оттранслироваиы и помещены в библиотеку и что пользователь может обратиться к ним из фортранной программы, как обращаются к стандартным библиотечным подпрограммам Фортрана 5Щ СО5 и т. д, Обычно пользователю нужна лишь небольшая часть подпрограмм 5РАК5РАК. й В.4. Краткое описание основных подпрограмм интерфейса В,4.А Модули для ввода структуры матрицы 5РАВ5РАК должен знать структуру матрицы, прежде чем он сможет определить подходящее упорядочение для системы.
В 5РАВ5РАК имеется группа подпрограмм, которые предоставляют пользователю разнообразные способы информирования пакета о расположении ненулевых элементов, т. е. передачи ему пар индексов (1, !) таких, что ап чь О. До вызова любой из этих подпрограмм ввода пользователь должен обратиться к подпрограмме инициирования, называемой 1ЯВЕО!ч, которая сообщает пакету, что предстоит решить систему с новой структурой. а) Ввод ненулевого элемента, Чтобы сообщить 5РАЙ5РАК, что матричный элемент аи нв равен нулю, пользователь просто выполняет оператор СА1.1. 11ч1! (1, 3, 5), где 1 и Л вЂ” индексы ненулевого элемента, а 5 — рабочий массив, описанный пользователем и эксплуатируемый пакетом.
б) Ввод структуры строки или части строки. Когда известна структура строки или части строки, то может оказаться более удобной подпрограмма 1!чй0%. Соответствующий оператор— СА) 1. [Х!(0% (1, !41й, И, 5), где 1 обозначает номер рассматриваемой строки, 1й — массив, содержащий столбцовые индексы всех или части ненулевых элементов 1-й строки, И!й — число индексов в !К, а 5 — описанный 3>6 Прилоаеение В.
8РАЦБРАК Пакет для разреекеннмк матриц пользователем рабочий массив. Индексы могут быть расположены в массиве 1(< в произвольном порядке, и строки также можно вводить в любом порядке. в) Ввод структуры подматрицы, ЬРА(<ЗРАК позволяет пользователю вводить структуру подматрицы Оператор вызова имеет вид: СА1Л. 11( 1л 1Л (Ы1Л, 11, Л, 3), где в(1,) — число вводимых пар индексов, а П и Л вЂ” массивы, содержащие эти индексы. г) Ввод заполненной подмагрицы. Структура матрицы будет вполне известна, если заданы все ее заполненные подматрицы, В тех случаях, когда такие подматрицы легко определить, полезна подпрограмма !г!СЩ.
Она вызывается оператором СА1.1. 1В)СЩ (1чСЩ, СЩ, Ь), где !)С٠— порядок подматрицы, а С٠— массив, содержащий индексы подматрицы. Так, чтобы сообщить пакету, что подматрица, соответствующая индексам 1, 3, 5 и 6, заполнена, достаточно следующего текста: сьо<» - > сз.<>< 2 > 3 с>л><з> . з сь<><я> - в сльь <нс>>><я, с>л>, з> Какую именно подпрограмму ввода применить, зависит от обстоятельств, в которых пользователь получает структуру матрицы.