Текст
                    ПРОГРАММИРОВАНИЕ,
ОТЛАДКА
И РЕШЕНИЕ ЗАДАЧ
НА ЭВМ ЕДИНОЙ СЕРИИ
ЯЗЫК ФОРТРАН
Для студентов вузов
	DO 10 I - 1, М
		DO 2 0 J -- 1 , N .

.  	NEW( I,J)=OLD(J, I )
. . 20 . . . . CONTINUE

. . 10 . CONTINUE


ПРОГРАММИРОВАНИЕ, ОТЛАДКА И РЕШЕНИЕ ЗАДАЧ НА ЭВМ ЕДИНОЙ СЕРИИ ЯЗЫК ФОРТРАН Под редакцией И. А. Кудряшова Допущено Министерством высшего и среднего специального образования СССР в качестве учебного пособия для студентов вузов Ленинград ЭНЕРГОАТОМИЗДАТ Ленинградское отделение 1988
ББК 32.973 П78 УДК 681.3.06(075.8) Рецензенты — кафедра прикладной математики Московского инженерно-строительного института (зав. кафедрой В. В. Кучеренко} v\Jl. Н. Королев 2405000000-104 051 (01)-88 268-88 ББК 32.973 ISBN 5-283-04381-9 © Энергоатомиздат, 1988
ПРЕДИСЛОВИЕ По мере внедрения ЭВМ в практику и привлечения к программированию боль¬ шого числа людей стало очевидно, что нельзя использовать при программировании только машинные коды. Появилась необходимость в языках программирования, кото¬ рые были бы удобны для пользователей, обладающих различной квалификацией. Последние 25 лет стали эпохой интенсивного развития языков программирования. Разработаны и реализованы сотни языков высокого уровня. К настоящему времени каждый из языков становится специализированным в фактической области его при¬ менения. Несмотря на большое разнообразие языков программирования, только около десятка из них можно считать общепризнанными. Преимущественное использование какого-либо языка программирования определяется: ясностью, простотой и согласо¬ ванностью понятий; стройностью и наглядностью структуры программы, написанной на данном языке; естественностью приложения; легкостью расширения; обеспечен¬ ностью пакетами прикладных программ; эффективностью реализации программ, написанных на данном языке,и др. Язык Фортран является самым старым из применяемых в настоящее время язы¬ ков программирования. Он приспособлен для научных, математических вычислений, располагает достаточно удобными средствами для ввода и вывода информации и удов¬ летворяет перечисленным выше требованиям. Для увеличения возможностей языка Фортран разработана расширенная версия этого языка [20, 47]. В последние годы интенсивно внедряются в практику малые машины, где язык Фортран также находит широкое применение. Заметим, что языку Фортран посвящено много работ. Однако они, по мнению авторов, не обладают достаточной наглядностью и лаконичностью и их часто оказыва¬ ется трудно использовать для получения различного рода справок при написании и от¬ ладке программ. В предлагаемом читателю пособии кратко, в плакатной форме изло¬ жены основы языка Фортран и его применение для написания программ и их отладки. Это позволит использовать книгу не только при изучении языка, но и в качестве спра¬ вочника пользователя ЕС ЭВМ. При описании конструкций языка в пособии используются синтаксические диа¬ граммы. Известно, что пакет прикладных подпрограмм на языке Фортран, эксплуатиру¬ емый на ЕС ЭВМ, содержит большое количество подпрограмм, к которым можно обращаться из программ пользователя [27—29, 36]. Эффективное использование пакетов возможно лишь в том случае, если пользо¬ ватель осведомлен о его содержании, о функциональном назначении подпрограмм и о способах обращения к этим подпрограммам. Поэтому в заключительном разделе пособия приводится руководство по использованию подпрограмм, реализующих мето¬ ды линейной и матричной алгебры [2, 6, 41, 42, 44] и численного анализа [1,2, 10, 13, 18, 23, 24, 39, 40, 46], т. е. подпрограмм, к которым пользователю приходится наиболее часто обращаться при решении научно-технических задач. Отзывы и пожелания просьба посылать по адресу: 191065 Ленинград, Марсово поле, д. 1, Ленинградское отделение Энергоатомиздата. Авторы
а о Q. н о о с го ¥ CD X СО >Х -О ф ct о Q. ф с Ct X го 5 го - П ой с; ф ю о Q. С О X 00 го Q. О 2 с; с: го * 1 II + I * ’3' о со со -0 о_ е S С\1 г^- ZT Т- CD О LD О Z ZD LL. Н Ш —I СО N “ Q сг > X LD О -э О X CQ — О_ 5? < X О > ш _д СО Ш ZT 2 ш _Q X LD Ш X X с; о CALL — вызвать DATA — данные DOUBLE *) двойная PRECISION^ точность | EQUIVALENCE - эквива’ лентность FUNCTION — функция INTEGER — целый PRINT — печатать RETURN — возврат WRITE —писать X го -0 х >х 5 X го Ct -0 X о X -П н го ый ный эгра ф 1- ct 5 X го X Q. О с; ю 1 с; с о толни оха - -фор • неяв - пауз ф со н о ф С Ct О С < * I - ВЫ! > 1 н 1 1— 1 ш ещ 1 ш н ос < СО со < X 1 Н о 2D 1 z Q ш _j О Z 111 ОС —1 < _1 I- о_ О О о_ О- < 2Э О LL «Е ш О О О ас ос -J О со СО D СП Ct го X шаг наза общий - размер с; >х го а =г ф -г И1И X ф 2 X * о о тг тать анов BACKSPACE - 1 Z о о о DIMENSION - END FILE - koi 1 FIND-на IF — есл NAMELIST —ст READ — чи i STOP - ост >х 1 го I- -□ 1- а >х -0 03 -г- Q. S _0 го J3 >Х Ю х IGN — присвоит! NUE — продол ж LE — определит ND — конец 3NAL — внешни ТО — перейти AL — логически — перфорирова перемотка в о< ном направлен ASSI CONTI FINE Fl ш EXTEI GO LOGIC PUNCH EWIND - ш ос О Служебные слова являются неделимыми символами алфавита. 4
CD x X о T cd I 00 CD О 1 H 2 X о о ю CD X о * СО CD О X -О си CXJ + Г* со 00 00 *4- ’3’ OJ 00 О". СТ) CXI хГ 00 хГ С\1 7 со г^. СТ) см 00 ш -О со О сс о S ст -о CD О X I- X CD О. -8- х zf о со н о CD □" X О >х о X >х о со Ct V/ J3 X X с; С[ J) н о CD >х о X X Z X о. с X о со X CD * CD X X CD X jD X CD н X со н о >х CD I X CD X If X •е -а СП о * CD CD I «- сч CD CD об X н о CD О m Nn ш ш 2D 00 ОС -I Н < CXI Г- CXI х £ о о sq X X Q_ С О о со X н о о X 5
1.3 ПЕРЕМЕННЫЕ Переменные (элементы массива) Запись в программе X BIN (7,B,Y) -O о ¥ s I s I > co" Г"*-" индексированные Математическая запись i X , «к X <5 ,g простые Запись в программе X АМАХ ALFA - Математическая запись X X си Е со 3 ются INTEGER*4/ остальные - REAL*4 ' • 2. Оператор неявного описания типа IMPLICIT- 3. Операторы явного описания типа. См. 1.2 (о количестве цифр мантиссы). 2) *4 _ указатель длины в байтах. 6
Индексированные переменные* являются элементами некоторого Значения индексов однозначно определяют поло¬ упорядоченного множества — массива* жение элементов внутри массива. Массив в целом обозначается идентификатором, а каждый его Элементы массива записываются в памяти после- элемент обозначается тем же идентификатором, справа от которого довательно так, что быстрее изменяется первый ин- о о < LD < < 0L S I ф ш 10 ф I X '—’ 00 I О < ■—' ф с; CQ < X О S ct с о —«. ф о о го 04 1 Q. 2 < г V—- оГ со г CN 09* _г 04 04* 09* 3,1,3), 1 О О О о 04 CN 04 04* 04 04* 04 09 04* О О О О С\Г 04 1,2,2: 09 О О о о J J и zf s I го Z S I го о X о I Q. с со ф 1— о Q. • о Ф X X -0 н ш tr* СО х -0 LX- X X ю Q- CL ф I ш О X со ф £ -J о ф со X X о Z) 3* со X ф Ct о 2 >х о о о =* ф ф" о .п х X 00 н о X с; ф Ct со X _г о d I о со < I о. ф X X ф Q. с Q. 1_ о ш ОС 2 * 1 о. со X о 1 с со I X ос Q. ф о. с о ”го со ш ОС о ф X со со X >х о 111 со -И Н о СО > О х с о. ф о о X у ф со о >х I I >х X о О -0 Ct X X X □. ф 5 со со I X 00 -0 С1 £ о со X о. ф со о L- о т О -J со со со с; о го го со < ZJ CL «=1 CJ о Q. X О X ¥ I т. ф Ct о го Q. |_ Ct X X О СО о —1 о X X I с X о о. с m 1- о > о. 1— ф о LO со V/ го Q. Z о 0_ ш CL о * ф d V/ 1— со о. I X 04* о. ф —— с 09 \// 2 > СО ГО СП X X го X со X х X ct ф Q. <=[ ф с* X _□ О X о ф о zr 7
1.5 ВСТРОЕННЫЕ ФУНКЦИИ ЯЗЫКА ФОРТРАН Значение функции | Диапазон Любое значение указанного типа о = 1Л>0 см V V/ X V/ о см СМ X см V — о V/ X V/ о V/ см X X V/ гр -180.218 174.673 г— СМ о LO г* V/ V/ см X X V/ V/ 00 ™ I о 00 7 О LO 00 L0 Г- V/ X V/ 00 со СМ об I О) LO 00 1Л к v/v' «V/ оо к со | см об г* 1 V/ X V/ 7 V/ см X X V/ 1 с X Н 00 — ос ОС ^г ОС 00 ОС *t СЕ 00 ОС 00 о со о ^t ОС 00 ОС 00 о со О ’t- ос 00 ОС 00 о со г— о ’St ОС 00 ОС 00 о со о ’t- ОС 00 ОС 00 о со О Аргументы | I о со си с го S d Любое значение указанного типа -0 1 О ¥ ф с; с о * о ю 2 с; 1- х ф > |_ Q. то О А\ X Любой комплексный аргумент 00 г^ со ^t V/ >< СО00 *t”cM ;v см ч А со© __• »Л см ’-I см х 2< о А X о + о S N О А X о + о % N оо СМ V V о ш СМ V V со к • со см г* V V/ -Н СМ 2S2S — со Г*. • СО «п ’t- см Г- VV/ г-н СМ X X с S Н 00 — ОС ОС 00 о СО о 00 ОС 00 о со о ’t- ОС 00 ОС 00 о со 6 *t- ОС 00 ОС 00 о со о ’t- ОС 00 ОС 00 о со 6 ’t- ОС 00 ОС 00 о со О Имя СО СО S2 со m 5 < << со со < о со со < Q о н ё со н ОС о со О н ОС С со о 1— ОС о со Q о о_ X ш о_ X ш О 0_ X ш О CL. X ш О О о о -J < о о -J Q о о -J о о о -J Q О о 5 о -_1 < о о о -J О о о о -J о о § 0 О и со Z. (Л а z СО о Z со 0 О Математическое определение V II X см см * + II N II X ч II X ч II X ч QJ II X N <Ъ II X _с II X N _с ь Cl II X >< о СП о II X N о СП _о ь Q. II X 2< с (Л II X _Х|_ с СЛ II X Функция ф h d зг о то о г Ю со < -0 > О Н 5 то о о. й" d о го X m X го н X ф X о с о X о )S и Q. ТО го с; Т >S и £ к и О о > х X О 8
Значение функции | Диапазон | I г V V г Z см X X Z V/ X V/ гр <-* V/ X V/ 1 k|CN V/ X V/ к|см 1 к V/ X V/ о к|™ V X V/ к|см 1 к V/ X V к 1 V/ X V/ 1 ь- V/ X V/ -1 </< 1 с X Н st ОС 00 ос 00 О CD 6 st ос 00 ОС st ОС 00 ОС St 00 ОС ОС st ОС 00 ос St ОС 00 ОС st ОС 00 ОС st ОС 00 ОС St ОС 00 ОС st 00 ОС ОС Аргументы X о со со tz СО X d 'к 00 см V ~х "к о см V V со к о 2 st СМ Г" VV 2S х -г? оо к О CD vv * ч 'к 00 СМ V X "к о ш СМ V "х 'к 00 СМ V "х 'к о •Л см V "х V/ V V/ V со с X 1- 1- X S-! >< L-ш >х о ю 2 с; си с Н О з© 1- 1 Q) о > О. о. * СО J. ю LU 2 ос с; со со 00 LD г* V V со со со LD V V та X X 1- 1- X 1 -J > < Jr ш >х о со 2 t; с X Н st ос 00 ОС 00 О CD 6 st ОС 00 ОС st ОС 00 ОС st 00 ОС ОС St ОС 00 ос st ос 00 ОС St ОС 00 ОС st ОС 00 ОС st ОС 00 ОС st 00 DC DC X со о о со о о О со О О о СО О О О О < н z < н Q < н о о z < н о о о Z — (Л О О ос < со о о ОС < О z < Н < Z < н < 0 СМ Z < н < см Z < н < Q т Z со т Z со Q т со о о X со о о о H о Математическое определение 2s СП О о II X N сл О О II X 2< о +~» II X 2< СП +-» о II X з с СП О 1_ си II X 2$ со О о о 1_ си II X з СП -м о си II X СМ з CD ■Н О 1_ со II X X 1 0) 1 X QJ 1 СЧ1 1 X 1 0) + >< 0) г СМ 1 X x x 1 + X X <ъ Qi II X Функция о > X S о о ьг о X ф 1_. X со Н CJ X ф L. X со н о X о > X X о * CL < о > X X о о * * о. < о X ф 1_ X со ь- * О. < X Ф О 1— Ш X о СО С— Н > * CL о. У < >х X * о ф X > 5 z о s Ю О о. ф с X L_ эх X У S о 3" >■ X X с; х о 2 ю о cl у. ф с X L_ >x X * о Ф о s J X L_ o x VO та CL >“ Ф c X i— >X X О о у о н 2 ф та 3* с£ X та та со CL Ю >Х Ф X i_ zf c; ¥ та X m > О -& x о X X X 3- * Ф о о ф 3" ф ф ф X ф X X 5 О 5 о. ф X о о 3" о * -8- та X !— X 1 СП о. ф н см О X X со "Ъ н + та X X ф X L_ | 5 > II ь 1_ CL N 0. < X СО х с£ со Q. m st st оо оо cd -ctcco^ 9
1.5 ВСТРОЕННЫЕ ФУНКЦИИ ЯЗЫКА ФОРТРАН I Значение функции I Диапазон -1 1 CN V/ X V/ о > л > 09S880 V/ X V/ о '4- CN О I Любое значение указанного типа с Н R4 00 ОС R4 00 ОС м- ОС 00 ОС ОС 00 ос R4 00 ос сч R4 со ос R4 ос 00 ОС Аргументы | Диапазон | I Любой аргумент типа REAL Гх LD г< ио V X V сч «л сч I С\1 tn г- О СО т— о CN V ч V о Любое значение указан¬ ного типа О % Любое значение указан¬ ного типа с S I- сс 00 ОС м- ос R8 "3- ОС 00 ОС ST ОС 00 ос R4 1 R4 R4 00 ОС R4 00 ОС ’3- ОС Имя ERF [ DERF ERFC DERFC I GAMMA | < < о Q < < о < DLGAMA FLOAT I- < О —1 LL 0 IF IX HFIX | SIGN ISIGN DSIGN DIM J IDIM 1 SNGL DBLE — Математическое определение Ъ I нч II X II л к I LL Q) ОС 8 X Ш НЧ - II " X •§ 3 I QJ I 8 ’—>о II X II f •— Q> L. i С \ II 8<—‘О X с II Преобразование х в форму с плавающей точкой Преобразование х в форму с фиксированной точкой 2s сч с (Л II X сч X \ С *Ё 1 ч” II X Преобразование из длинного формата в короткий Преобразование из короткого формата в длинный Функция Интеграл вероятности Г амма-функция Логарифмическая гамма-функция Присвоение знака Положительная разность 10
| Значение функции I Диапазон Любое значение указанного типа с S Н ’s- ст ’si- DC 00 О С16 00 о С16 ’S- ос 00 ОС *s- кГ ОС м- ос 00 ОС ’S’ ОС ос 00 ос ос Аргументы I Диапазон Любое значение указан¬ ного типа о % см X Любое значение указан¬ ного типа с S Н 00 О 00 о ОС 00 ОС С8 С16 ’S’ ОС оо ОС ’S- ос ОС 00 ОС ос ’S- ОС 00 ОС ос ’S- ОС 00 ОС i Имя REAL AIMAG CMPLX DCMPLX CONJG DCONJG О О о О < 1 aOIAId 1 о X < X < О X < < X < < г- X < О I ONIIAI | Z 2 I ONIIAIV | г- Z Z < I LNIIAia | 1 IN 1 | н Z < I 1NIQI | Математическое определение N Ф ОС II X N Е II X см * + II X СМ X I II In II X " <4 — X см * 1 1 "О ’-'I см g ,*< lx, — 1 f * X 11 с X 2s X го Е II X с: Ч з с Е II X 2< 5 с О) <л II X Функция Получение действительной части комплексного числа Получение мнимой части комплексного числа Формирование комплекс¬ ного числа из двух дей¬ ствительных чисел Получение числа, комп¬ лексно сопряженного данному Остаток от деления Максимальное значение Минимальное значение Усечение до целого го Q. Ю Ф !_ tz ГО m ОО О о ’S- ’S- со оо со — ОС ОС о <- 11
ОС О > .AND. > .NOT. = н о ш _j ш ш О = О ш Н + I ГО * CXI - * * - Вычис¬ ление функций о Операция I РАНГ Сложение, вычитание со Умножение, деление СХ! Возведение в степень Вычисление функции О Операция Ранг 12
ОБОЗНАЧЕНИЯ УМНОЖЕНИЕ, ДЕЛЕНИЕ, СЛОЖЕНИЕ, ВЫЧИТАНИЕ Операнд В 016 со * о 016 016 С*16 С*16 016 00 * о 00 * о 00 * о 00 * о О16 00 * о со * о 00 * ОС 00 * ОС 00 * ОС 00 * ОС 00 * ОС со * о 016 * ОС * ОС * ОС ^1- * ОС 00 * ОС 00 * о со * о см * * см * * ОС 00 * ОС со * о С*16 ^1- л * ’3- * ОС 00 * ОС ор б со г— * о I Операнд А * см * * ОС 00 * сс 00 б С*16 СО JD х с; го <3- * * * * * * с; го 2 —1 —1 —1 -I -1 -1 d X го т— г— т— CLqq * * * * * * Q —1 -J —1 —1 —1 -1 О СЕ ос ОС ОС ас ци Н н О О О О го О. ф О и о 2 О Q Q О с О < < < < d X ГО ’чГ ^г г— г— О.< 1 1 * * * * Ф -J —1 -J _| С О со о с X I- го X X X С[ О 1 N J0 Т ш с: ш I— о ф 00 «=[ u X ш _- го S X Н X >5 т =Г го ш го \о о_ ф со ш СЕ аз 00 о х со ГО S о 1- CZ го cj н Г- 00 _Q Ф .0 с; Ф с[ X ГО 1 го о. ф с ф О- Ч го >х о ОС X X О X X >х ш ш < е; х см о _| —1 □_ о d ф X ш < о s § >Х I— 2 ш О о с о. X ф 1 1 ОС 1 О 1 —J 1 1- с 1 1 02 1 1 ОС 1 О 1 1 с * < N Операнд В | R*8 Г R*8 00 * ОС со * ОС 00 * ОС 1 1 R*4 R*4 R*4 R*4 00 * ОС 1 1 см * * см * R*4 R*8 00 * о 016 ’3’ * * '3- * * ос R*8 00 * о 016 Операнд * см * R*4 00 * ос 08 016 В целях экономии оперативной памяти и машинного времени нецелесообразно использовать различные типы данных в одном выражении. 13
s X та 6 со ф s zr s та I— о * X о. та 00 £ 00 I- о CL X x Ф ф ct j? о О О х > С[ о -0 та О ¥ <=[ Ф ¥ та о X о го 00 00 J3 о ф I о. DC ГО ю о X та 1- та о s н та X та X X та ь~ о CL 1_ О CL ф с о X CJ 2 of X С X > о $ и? 1— о а X ™ f X у. н ф X 1 00 1 о X та с s Q. и м е *■ та В н CJ >х о та X CL X ф X S? =г с[ со С X о х -0 о ь- н с ГО X о * С та та н X * ф ф ю н S g о О ф £ ю Z ф О X CL V) S -0 со X ф ct * X X та Г" ф у > ю Ф ю ф о о |_ ф о X X та I о о Q. 1- ю X — l_ Q. ф та О 2 Q. та ct X 2 5 С X та О |_ О X -0 X 1— О Z) ос CQ Z) СЛ о н та О. Ф X 5 та V LL У. С 5 2 та со о * О О m та О. х 00 о >х CL |_ о О X X 1_ О О О. 1— та X о о 1— X ф о. С ср та у с та та та 00 го о с CL ср Q. X х 3 О О. О 00 ф н н о н X н ф та О. н та та CL J3 : л Q. -D н ф с о О. ф С Ф с о X -О X - 3 ф 3* I- о го го го CJ 2 5 5 о 5 5 2 го го го О. О. CL >х 1_ 1— 1_ 5 о о О о I CL о. CL ¥ со с с X со го с* С[ о X о О о X 1_ X С X 14
Указывают действия и (или) порядок их выполнения. Обеспечивают информацию для компилятора о величинах процессе трансляции преобразуются в машинные команды. и их св°йствах. В процессе трансляции машинных команд не о <2. 2. 5 § 03 гт ш оз аз аз аз с: £ о Z оэ О. О. О. о о |_ О 1_ О |_ о 'О * ш Q. О. Qi о. < Q. о Cl —I < > £ 03 & с d о с С «=[ о с с Ct О С 1- < Q £ 03 & £ & аз е* £ S. Q) <§ <§ <§ О ф — о! o' н JD Ф ОС ф * о Z СЕ о Н со LL Z СЕ О_ с; ф D о л- I— о __ S у S 1_ ш LU LU ъ со О t; СЕ СО 2D в: Н СЕ ф ф" S Z СЕ D < CL ш СЕ £ у * Ь~ ш' сГ £ О о ф ш СЕ Ш Z) О < < ш 5 S н ’ *1 1 Z О- СО СЕ ф —1 1 н V аз ct О X Ф с Ct ф Q. с -0 I со о 1 аз с; с аз m о аз н аз CL 00 аз 1_ О О о аз I- о О. с; ¥ £2 СО с: ю ф о о S -0 О о аз с с > ZT со со со О. о с X ф □- ф £ о с -Д -О Ю -О н -Q ю ф X О 5 Q. о I- аз О. ф С о со о о. о н аз о. ф с о X -Q J3 ф ОС 5 Ф ОС I q Н < I О с; О с с -0 СЕ О -D СО Ф LL со I О. -О 03 t; о О 1- аз О. Et S ф X с аз СП О о У -0 е; о н 00 15
< Ol < S ci ш S * О ш < h- I о _n Q_ ш □_ c >s о 03 Q. l_ 03 s Ct oi I m 1 x c; 5 X X о о о c X 03 с H ф -0 J3 I co X X X x О ф о X 1- X ф o Ф Q. о Ф cz d 5 g > Ct Ф о X _ О. ф | '2 О оз > X X О. Х н О у ф S ь Ф 3 2 ю > о х н J3 3“ с; S со 03 о. с 16
1.11 ОПЕРАТОР НЕЯВНОГО ОПИСАНИЯ ТИПА CL¬ UJ О_ с Ф CD _о >х -0 У X о I > х X X ю X >х ф о Ct о m m X >н d D X г* о 1- О I X ID о 2 си н Q. X X 1 ф I Ф ф LU X X d ф —* X X Н н О о _1 —1 □_ о_ Z см СЕ < и ш ZT S о < н I S о 17
Эти операторы определяют тип и длину переменных, массивов и функций с указанными в операторе идентификаторами, отменяя для них действие принципа умолчания и оператора IMPLICIT; позволяют указывать размерность и границы измерений массивов, а также задавать начальные значения переменных и массивов до выполнения программы. _а о_ ш С • - >■ CO S S S o vo CL o си I s s оз zf m I zf X X h- s S X М CL О O 1- > o c; c[ 03 X 03 CL 03 CL l_ н 1- c i— oc о o s 1- * О X X s o o X ОС CL L_ s CL rz c О c Ф Ct X о 00 18
1.13 ОПЕРАТОР ОПИСАНИЯ МАССИВОВ Оператор DIMENSION описывает структуру массивов (размерность и верхние границы индексов по каждому измерению), если она не указывается в предшествующих операторах.явного описания типа или в операторе COMMON. Сведения, содержащиеся в опера¬ торе DIMENSION, используются транслятором при распределении памяти для массивов. -Q О_ Ш S Q. EZ ОС S т ш =Г < т со о ш о < о_ О н < о_ ш О cj S m С о Ф го Q. 1_ О Q. С ct О с со X X го * о с; о Ct S CD ф Q. го С О со О о Q. 0) S Z с со с: ш X S о S -П Е го б X X го J3 Q ф zf 5 3 X го СО го со о 1_ S о о го го zf S д X го 1— О. о 1— о X X Q. X ф X X со Q. го ф Q. со < < CL I- < С[ □с < о ш т S о < н I S о I го со го X J3 X X ф х ф 5 -D СО CL о Q. S.I 2 ш о 1- о с ф о — ф Ct * о £ о с га го н а го Q. о Q. о 1- го 1_ О О. 2) Ct н го Q. L. О Q. с £ со ф С S го о С 00 со О ш го S го CL о Ct н о I— ф ГО О 5 £ ¥ 19
1.14 ОПЕРАТОР ЗАДАНИЯ НАЧАЛЬНЫХ ЗНАЧЕНИЙ Оператор DATA осуществляет инициализацию значений переменных, массивов и элементов массивов перед выполнением про- > о о со сл со С\1 сл о 00 сл о - I LO сл 2 т_" о_ г ОС ф Z I ф ф S I Ф ф Q. Ф ф I с СО О TRUE L0 со N 5 хГ N ’st N г>. N § о < id о < т_ о < о < о о < о о < о ос си ф I S т I О) ф ф ф о. I ф со 20
переменная или элемент массива типа INTEGER, REAL а — переменная или элемент массива типа LOGICAL или COMPLEX; ф S I ф * си Q. -О аз ф О * о ф 5- S 1_ о с: -Q Ф I Ф си Q. _п аз ф о 5 -8- s Q. си аз -Q ш Z) ОС m < О_ О н < О- Ш С о -О CL¬ UJ 0_ с N + о CN 00 * ОС oZ I * Н н о Н + ОС О со * < I X Z — I О LL + со II X II X II > X Q ll см со Г-’ см со < О О 21
1.16 ОПЕРАТОРЫ ПЕРЕХОДА СО • о ■ ' г< • £2 • ь? X • _i • О н ОС ; Н О : О СО II • О О О о л- : с? * ОС Ь- о_ ■ L0 4- сл I • сл * X сл о || • сл ■ II II < О CL • < • ОС X г*. 00 с: о со X X Et та а АС X >х . ч. -Q =f Ф ф С о X С Zj О. с ч X у. О 2 с о X н с > — ф си ф о Cl о Хн X ф X х Е ф 1— с; си ф Q. ф ф о d х у. Ф £ О О 00 о С Q. п о с X ф го Г) ь- ф § Е X го X. -D с; X го н ф го X >х 8g X X о н CL о 2 Ct ф о н о. ф X о 1- го X X CL Ф о о с з- ф -О Q. го □Z > Н го о. н ф о Q. го I ф го С X о О. • V со с m о с 1- < 1 < а_ □ 9 О О ос Ь о 1- X ш а. ЕЕ < 1-» о_ о ш X Ш о_ < Q- Ш ш s с ш С с Z О С о ф Ct О 2 О X с X X CL С СЭ 1- о CJ ф о. X го О < ¥ ф ф о 1— Ct н ш > со J3 о X 1- с :> X с ст < □_ ш о X 22
Название Вид Обозначения Действие Пример УСЛОВНЫЙ а — арифметическое выражение Передает управление оператору: АРИФМЕТИЧЕСКИЙ IF(а)ть т2, /п.типа REAL или INTEGER; с меткой т1 при а < О, IF (А**2-В**2) 9,3,8 ОПЕРАТОР ть т2, т3 — метки выполняв- с меткой т2 при а = О, мых операторов с меткой т3 при а > О IF (PSI) 20,35,40 Со о н (П CL аз О LL н го Q. О. Ф о С 1- о со Q. сГ X X о ф С я 1 ОС о н ф > о. X X я Q. о ф о X L- X -0 1- X С о X 1_ о • х • О CN тГ CN CN X X я о о ф об 1 О * LO со X □г X X 3" X • н *3- + cxi 1 ’4’ + X О О _а ф ф * х X * + DQ s : X X О X >- CN ф -Я- и LL LL II н II II а. рис > о > со (0 OJ о 00 К »s Q- _0 * о т о 1- m ш < О X а_ X Ш и X |_ о С о CZ 23
В1/ХИ1П ОНЭ I 14 Lf >4 ИГ1 эпннэжоид □ XX О О со сч с: СП с: сч с: с[ s СП S X S 1.18 ОПЕРАТОР ЦИКЛА 0^5 Si0 Ю оз О . |_ CL о ш х со ю D о < к Е о Q Е о Q с; ф я 1 •; 1 сч ф 1 СП г— ф 5 с: -0 I- с: ф zf то Л X ш ф X £ X с: £ ф Q. сГ X ф ф -0 с 00 ф S S ф 1- л ф ф X и Zf С о X 1- о. С ВНХИП OLf9J_ >\ : -лл <ч с <г о н < о_ ш С О в О _ Q V о л I- ф о ю S то — U ? 2 ОС S * ф О Ф X > m о. о 1= со ОС т* I Q. ■=[ О ф Л X ш Ф ос 1- ф I CZ с; Е 3 ш Ъ =Х s з ф S = >sj= О O1Z - UD Z- о 20 О сО 24
1.19 ВСПОМОГАТЕЛЬНЫЕ ОПЕРАТОРЫ УПРАВЛЕНИЯ т— с о н << н н о I с о < о о гъ о о о < 2 о -- m LU * н ш ш ZT _||_ _1 о Z) D LU '—• * Z Z L0 T о СО СО II н н н 2 о о О о о ш ш LU О LL н LL о о со со CO D Э D о о < < < см о. о CL DC S X d о О о н т X п- X 1— ф X т ф о X I ф CD с: ф Q. X I— 3 ф ф Q. Ф 00 и О 00 q О -9- С 1- X О tz 1— о ф Э" у. X гГ 1- Ф Q. ф X Q. Ф о н ф 00 о ф х си ОС С LL Ф * Q. 1“ d ОС с; Ct ¥ 00 X 00 н О ф Q? о о о о 00 ОС О 1- ОС о н о >х ф ОС * X О н Ф d о m (0 1— ф ф d =г со о ф с- ° £ Ct (X s ф X OP I 111 CL О X ф н < £ н < 00 CL¬ с Q_ со UJ О Ш ф (Z ct cz т о О CL (Z о CL < Q_ o co о 1- О 1- < T < CL < CL Ш I— LU IZ о c о о о 25
s н 8 X I- X ш с: х со о о. о I- < CL ш о о см ZD о ш CL о н аз CL ф с О X S X ш ОТ < I со о L0 О < а_ О Н < О. Ш EZ О d S оа со + Ас FX > LL ОТ + А X Q(3) + Ас СО 0(2) А < О - — со + А со от < С (5) ОТ + от А < о со ОТ от + А < о LO от + от от А < О от + от А < о СО см см + от А < 00 см г— + от А < со .—. г— + от от А < 00 .—. А < 00 — 11 03 + от А 00 + р А г*. + со А со + S А L0 + со А + из от А со + от А см + S V— А + S Ас -к 6 - — от + АС N н СМ + А г— + А от ос от от от о + А СЕ ОЗ + А О (Г от от" от ОТ + А ОЗ ОТ + А ОТ ОТ от СО + А > от от ОТ + А ОТ со от от от ^Г + А > от от ОТ + А S от от от СМ + А > от от + А е от от А > от от — аз о н I ф ф с; ф m о аз s о о аз х S |_ > О. et S S I- ос аз С 00 2 S X ф 5 5 о . у — S со 26
m о .0 ОС ГО о с; Го ,5 н > ct хо£ 2 о гос2 ля £ з ф X X ф н н X 2 о 3 ф Ф X ф I го * о <- 00 X. о О' н >\ о JD X 2 с _ о h- о X аз О -0 X го о У _ X с ф ГО s о о ю X го ГУ х со О чг л> 1 О 2 > 1 и ф 2 2 -о е 1- г~s Ф S 2 н ф О' , „ I О”-1 о > л X СХЗ с ч—' со х X X и. U. Ь- н о ф н го 00 X х" о н го го о X ф > X со X X У X о 27
-о _а с; >s Q. X ф У аз О е h- аз < X со со а. аз о ш I с; с et ф аз О Q.-& с CXJ ф С\1 ct си S f— о X аз о X >s >s о аз X ■е X Q. Ф о S zf аз О Q. X Ф С аз О X со >Н 03 X ■е о h- > Ф Q. Ф 03 со О S X со X аз о X аз с I- о X о > н аз ф с[ X О X со m н о -0 m ф аз ct > О о СО о со 28
—J ш < о с X Q- 1_ X IX со н О О о_ х ш го С | Q X tz ю S 5 ф о О о >х ОС Q [= CL ф S О О н V— Го го CL 1_ ю I ш S «_ Q. О о I Ф CL со о ш О с С сс ■J CL О 2 о LL Ф 5 S >х о > X с со о ш >х t ф >s S Н о I 5 & S I < сс I о с ф СО о Q. ф X о г>. У го s Ф го ф X о 5 Q. d о ем го о го О I О 1- ф с с II о L— о Z 'S Q * го с ш Cl £g го о ГО X Q.IX * Ф о о £ ,— h- г? Q IX Ф ГО У Q 29
н СО Ш < 1.24 ОПЕРАТОРЫ ВВОДА-ВЫВОДА ПОСЛЕДОВАТЕЛЬНОГО ДОСТУПА >х X I ф з* Ф X СП о Ю О .д О ф X I ф з- 03 X СП 03 Т >х >х JD -О X X I- I- 03 03 Q. Q. о о е е с( X 00 ф Q. О н 03 о. ф с о со о о ф X •=t ф О. о с о Q. о О X Н 03 с; с 03 о. X 03 СП О ■е Q. >х 03 •е 03 -& * о Ф СП со с С X Ct о >х е£ о Q. -0 О m X X 00 _п 3" СО со CI о 1- >х )Х о со Q. J3 .0 со 03 X X ¥ н н >х 03 х 03 03 _д X —- CL Q. со ф с[ О о X с; О СО -П -8- о ф ■е о ф н ¥ X >х 03 ■е 00 LQ ш е со ф“ ф ф X ф ct со X Ct о о ф О X Ct X СО ф ф со 03 о. -0 ср Q. ф с X о о с ф X с > Ct X о X 1 со ф X о m СП ф i? н X о Ф оз <2 с[ Ф >х Q. Ф ф -Q- о X с ф СП > X X Ct о X с о с =г со ф ¥ ф ф •» о > 5 X х X х о о * О. X X ф * о СО с о X О Ф о X 2 1- ¥ о > * о. X о с о X X 1 30
00 ф Ю со I- I со I— о X о * ОС со с; ф ZT < d о m -D CQ S н о о I т ш ш о о о ■0 о и < ьг S е S ZT ш с о о tz Выводимые значения *** (ошибка) 121 4.50000 ******* -23.4580 -0.4Е-04 —0.3700Е—04 0.3410Е 04 Специ¬ фика¬ ция LO LO Ч Ч Ч 22 ± Г< 1< 2 Z ZZ Z Ш Ш 11 ш ш ш Значения переменной -145 +121 4.5 -4.5 -23.458 -0.000037 0.000037 +3.41 Введенные значения -10071 726 -46.752 -46.752 ошибка 8.678-105 8.678-105 —12.544-101 Специ¬ фика¬ ция СО О СО О <2 r< i< о г< г- 2 LLLLLL Ш Ш щ Входные данные -10 71 7264 -46.752 -46.752 -14321 8.678Е5 8.678Е5 -12544Е+1 СО со со с о с £ с X X х S X н X н о со о о о |_ CD 1— Н |_ о о о н о X CL X )Х X X X X о X ф <□ ф 4 ф СО X! СО а со 1- X н 2 ь- Ф "tT ф со ф - СО d I О Ф о ф Ф х X. со со с со g □- 1 ф I о ■i tx Ъ ф • h- Тз >х т В: Ш о. о -S- £ х о’5 f о со со ао н m d со 31
1.26 ВИД НА БЛАНКЕ ВВОДИМЫХ ДАННЫХ ПРИ ФОРМАТНОМ ВВОДЕ 32
2 Под ред. И. А. Кудряшова 3 CD ] 00 О сл зо Д Q ] Z < 3Z и Z II о ш гг II ш z ш ш обоб О об об 00 об а о S •е S =г со S СО 00 о с LD СО 5 СО сс о с; н 33
* си S S S CD □■ ¥ =г со а? * I > си Q. н CD ¥ tn ¥ си -8- 5 . си ГТ п £ СП о О. ОС X со н о CD s X CD 5 >х CD CO Q. со Ct kD О CL Q- X н Ф O 1— О Ь— co CD СО Q. co Q. CD CD со X Q. с О 1- S 5 >s _£J O CO S CD CD el l_ о CD О' a: X In S н X О ¥ x со _fl co -а tn Q. L_ ОС CD О о Q. н 1 X 2 CD со X J— со s О Ф -0 X CD Ф X CO X CD Q. CD X CL » CD £ X X CD S s ZT ¥ X CO > Q. L_ -e О a X -□ X co 1- ф Q. co -0 Ct X X 34
ф та ОС У Ct си ф S I О. со ф ■►. с X >s -0 ОС ф S н о ф I та си ф с; а У та 10 та I О ОС < о ш т S о < н т О о о z 2 35
х ш X x X 3 Ш I OQ ОС X < о Ф о 2 2 X о > со -П с; о > О. d < a. L_ О Q. X EX О с о Ш s x < CD О CO JO cq О c о s Q_ О н < D_ LU X О ст X I ш □" < т со о L0 О < 0_ О н < о_ ш С о =Х X со с оз 03 03 < z ОС ш Н X ш О ш _□ X X < со X CD О □_ О F— < CL Ш С О о со О о_ X О х ос X т ш zr < I со О LQ О < о_ О н < Q. Ш С о CI X со Q- о н < о_ ш X о < CL О н < о_ LU С о ш х со Н о >х ш 1 03 I 03 ф Q. X О -е J3 X I X X 03 СО X 03 ¥ У о < > о ф ZT X н < ф £ CL 03 1_ -9- < 03 X Q. 1_ > Ct d О £ □с О. ф < С ct О £ ф о ш с X X ф со н X X ф и X 1— ф ф < d со 03 со 1- о н X Q. о s X с с» S и > н 03 ф Q. н 03 н ф со ф 03 Ct ф X IX £ 03 Q. 00 о. Ф 03 03 X X 03 с н X о > -0 X X 5 I а_ | оЗ s a с < О & 36
_ о GJ -& CD О сч о" Cl S II _ о Ct Gj >s CD S I CD Q. О o' X. II CD S I GJ CD c; LD о s 2Г О _Q II m — 2^ OCN CL CD o£_ X —11- LUCZ.C\J . A 2 * - " c\i S Q- < z2 * ±<5T 37
1.32 ПРИМЕР ИСПОЛЬЗОВАНИЯ ПОДПРОГРАММЫ-ФУНКЦИИ И ПОДПРОГРАММЫ-ПРОЦЕДУРЫ ЗАПИСЬ ПРОГРАММЫ НА БЛАНКЕ Составить программу для решения уравнения ерх + 2х — q = О на интервале (0, р/2) для р = 0, 2 (0, 1) 1 и q = 0,. . 12 методом деления интервала пополам, оформив вычисление корней уравнения f (х) = О на заданном интервале (а, Ь) методом деления интервала пополам в виде подпрограммы-процедуры. КЛЮЧ 1 2, ,4, ,6 7, , ,10 , ,13, , ,16 i jf9, , Й , ft , a ■ Д , ,54, , ,37, , /Щ , Д , Д6, , 49, , 52, , й , Я , Д1, , , FJ, , TO 72 7Д I , I . . 30 //Р.ТОО 1 1 i 1 °,2,4| №. I 11. 1 I 1 1 1 1 1 I 1 1 ЕЛЕ,С! I F.OiRT.qqLq^PAjRM .|LKE|D=L,ET | | | | | | | | | | | , I 1 1 1 1 1 1 / /fiW I,N, , ДО 1 1*1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I 1 1 1 1 1 1 1 1 1 1 1 1 1 С i 1 i i *11*1 *. I*. i*l *, 1*, ,4 ,4 14 .4 ,4 14 ,4 ,4 14 ,4 .4 14 .4 ,414 ,1 .414,4 ,414.4.414,4 1 1 1 1 1 1 1 с ||,, *. 11 > 11.1 >1111111! 111 .nWiVI i ЛР,О,Г1РЛТ14 I,, 11,1,, 11,1,, 1.,. I.. 1 1 1 1 1 1 1 с , 1 , , *. I₽IE n .q, м i ,(W?) i ,* .. 1.. 1. с 1 1 . 1 4 Дн Я1 1 !Pi г i Л 1 ,Q п AttM i МИ ДЭДМЧ i ,* 1 1 1 1 1 1 1. с ill, *, „ |P,E^3jO,^b|H , даад , tfVW i •,, i,, i,, i 1 1 1 1 1 1 1 с 1 1 11 *i i*l *. I*i .*1 4 14 ,4 >4 14 ,4 ,4 14 .4 ,4 14 .4 ,4 14 ,4 ,414,4 ,414,4 .414.4,414,4 ,* 1 1 1 1 1 1 1 I 1 1 1 nl1 ЦТЭДф i l^i’iN 1111111.1111.11111111111111111111.. 11111111111111 1 1 1 1 1 1 1 1 1 1 1 1 1 |К ЕДЦ I 1 . ’i4. 11.. l. 11111.11.11.. 11.11. i.. 1. 111.. 11 1111- nlC O,M|M(O(N| i |Ц . 111111111.11111111111.) 111.111111111111111111111 1 I 1 1 1 1 1 1 1 1 1 1 1 Iе i-i 1W1 111111111111111 i 111111111111111111.11111.1111.11. 1 1 1 1 1 1 1 1 1 1 1 11 lR Е/Ш, OlW>l iliiliiliiliiliiliiliiliiliiliiliiliiliiii.il 1 1 1 1 1 1 1 ! Hl I 11 Iе (WJll 2|F|1(0|-15,), 1 l( 1 ! 1 1 1 ! 1 1 1 1 1 , 1 1 1 1 1 1 1 1 1 1 j J 1 | | | | | 1 1 | | 1 1 | | , | 1 1 | 1 1 1 1 1 1 1 1 .1.1 0, 1 ,6, | I| H iiliiliiliiliiliiliiliiliiliiliiliiliiliili.il ill. 11 i 12 4 6 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 72 73 80 38
12. л, 7| I I1 D . fl. i .1 , ,”,, R , fl, , fl , fll , fl , fl , Я . ,43. , fl , Iй, , fl , fl, , fl, , fl 1 fl 1 fl . fl ключ 72 73 80 i i i . . l r . 111 I I I ■ |P-4 l.+lOp.ll*.!, I i i I . i I i i I i i I i i I i i I i i I i i I i i I i i 1 i i 1 . i 1 i i 1 i i 1 . i 1 i ..l.il. <1.1 I I I i |Ц0.1 5i 1 Л l=. JI,.M i i | i i | i i | i i | i i | i i | i i I i i I i i 1 i i 1 i . 1 i f 1 i i 1 i . 1 i .1.1 I I I 1 1 1 1 f =iN“t liiliiliiliiliiliiliiliiliiliiliiliiliiliil.ili.il 1 1 1 1 1 1 1 1 1 1 1 I I I 1 1 1 1 f =Q|/i2( liiliiliiliiliiliiliiliiliiliiliiliiliiliiliili.il JJ, 1 1 1 1 I I I . J . ! |C AjLlLj , iBJpSlEjC^f p^|, Ph ЕРЗь EJAI, MJ) I i i I i . I i i I i i I i i I i i 1 i i 1 i . 1.11, . 1.. I I I . 1 , , F R.I|N.T| | |2j,|PHIQ|,|X| | i f | i i | j i | i f | i i | f i | i i | i i | i i | i i | i i J i i 1 i i | i 1 1 1 1 I 1 1 1 |2. . I I I , 1 , , |F O.RlMATlG^Fiei.|1|,iMl§-|6|)| i I i i I i i I t i I i i I i i I i i I i . I i i I i i I i i I i i I i f 1 1 1 1 1 1 1 1 . . I I I , 1 , , |G O|T|Oj | |5, | | | ( | | | | | j | | j | | | | | | | | | | ( | | | | | | | | j | | | | | | ( | | | | | | | ( 1 I 1 1 1 1 1 1 $ | I I I , 1 , i IP |ЩМ.Т| I i4H|Pi,iQl 1111 11111 i 111111111111111111111 11.111111111 1 1 1 1 1 1 1 , и,, I I I i 1 , i f OjR^ljA.Tj(|2|F|8,. |1|H Дн«-<^В|Е|Т||1нК|0|Р|ЦЕ|Й|11), , | ( , | | , | , , | , ( | | , | , , | ( ( 1 1 1 I 1 1 1 , .5, , 1 1 1 , |C,0P|T 1 1 1 1 1 1 1 i j 1 1 f 1 1 1 1 1 1 1 1 1 1 1 1 1 i 1 1 1 1 1 1 1 1 1 1 1 1 ! 1 i 1 1 1 1 1 ! 1 1 1 .. 11.1. 1|6,, 11 |С 0|N|T|I|N|U Ef 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1.. Wl . 1.. 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1111 Ж T.IlQN, 1 FjUjN((|X|)| i I i i I i j | i i | i i | i i | i i | i i | i i | i i | i f | ! i | i f | i ( | f j | j i | i 1 1 1 1 1 1 1 с 1 1 1 1 *11*1 *. 1*. .*1 *> 1*. 1*1 ft, 1*! ,*l 1*1 1*1 ,«i 1*, ,*l 1*1 ft ,*l ft 1*, 1*1 1*1 ft ft 1ft ft ft ftl 1*1 1*1 * 1 1 1 1 1 1 1 Е 1 1 1 1 1x1 ■l.i.1.11.. i 1 i i 1 i i 1 i i 1 AOftniPlOjFjPiAjM/HiAj-^yrtKlUfllifll i i 1 i i 1 i i 1 i . 1 i i 1 i i 1 i i 1 r* 1 1 1 1 1 1 1 с , 1 , , *1 № я, i ,bml ЦС(П,Е,Н|ЦЯ, | ,3,ЦА,Ч,Е|Н,И,Я| , ДЕ.ВДЙ, , |ЦА,С|Т,И, | ,3,АДДЦЦ0,Г|д , |УР,АаНЕ|НИЯ| ,* 1 1 1 1 1 1 1 с 1111 iuIJA , IX, ,-| ,АР|Г,УМЕ,Н,Т| , ,<ЦУ,НИЦЦИ , , 1 . . 1 , , 1 , , 1 . . 1 , , 1 , , 1 , , 1 , , 1 , , 1 ,* 1.1.. 1. с 1 1 1 1 il£± *, I*. i*l *1 1*. 1*1 ■*, 1*1 1*1 ft 1*1 ft ,*, 1*, ft ,*, 1*, ,*| ft 1*1 ft ft 1*, ft ,*, |*1 ft ,*, |*, ft 1* 1 1 1 1 1 1 1 l!1 1 j lJ E^.l PnjQjn^l 1 11.. 1 1. 1. . 1 11 11 11. 11 1. 11 111 1 1111 1 111 I 1111 |. 1 1( | ) 1 1 1 1 1 1 1 1 1 1 1 j lJC 0/H|M,01N| PplQ 11111111.11.. 1.11111111111111111111111.11.111.11111 1 1 1 1 1 1 1 -1111 i i f U,Nr,E,X|P (|Р]*Л) 1^1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I | | | | | 1 1 | | 1 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 lL 1 1 □.JR E,T|U,R^| -L 1 1 1 1 1 I 1 1 I 1 1 1 1 i 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 EffiL 11111 -1 1 1 1 1 1 1 1 I 1 1 1 1 1 1 1 1 1 I 1 1 1 1 1 1 1 1 1 1 I 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I 1 1 1 1 1 1 I 1 1 1 1 1 1 1 1 1 . 1.. S,U,B|R W.I.N|E -LjBiIjSl^Ci^Fj^Ai.jfi jEj^SbiEjT^T,Xj„*|)| , , | , , | , , | , , | , , | , , | , | | . j | , . | . 1 1 1 1 1 1 1 с ■ 1 ■ . * 1*11*1 *! 1*, ft 1*. I«i ft ft ft 1*1 ,*, ft ft ft ft, ft ft, ft ft ft, ft ft ft,.ft ft ft, ft, ft ,* J j dL xlii 1 11. ■ i ■ ■ i. ■ |ЦОДЦР.О|Г1ра^мл|-,п,Р|О,цедуаа , i . , i f . i , , I . . i . . i . . i .* .. 1. . 1 . 1 2 4 6 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 7273 80 39
1 2 4 6 7 10 131 ( 16 19 22 25 , p8 31, , ,34, , 37, , 40 , 43, , 46, , 49, , , fat , ,58, , ,61, , 64 , 67 f 70 72 ключ 73 8(1 1 1 . . ■ 1 1 . c , I 1 1 *1 1 1 ЗЫНИР 1ЕНИЯ1 , HA. , ИНТЕРВАЛЕ! , X А..ВЙ ■ . КОРНЯ. 1 ФУНКЦИИ, 1 F/Ю■ I ■ , 1 f .1 1 ., Il 1 1 1 1 *111 i 1 i i 1 , 1, , HEТРДРМ, , ДЕЛЕНИЯ,, ИНТЕРВАЛА!, ПРПРЛАМ1 ,, 1 ,, 1,, 1, , JJL . J nJ 1 1 1 1 *11 1 i I i i F rl ИМЯ, РРДПРРГРАММЫ, h ФУНКЦИИ1 hi ВЫНИСЛЯЮИЛЕЙ, [ЗНАМЕНИЕ, 1 F 1 1 1 1 1 1 1 г 1 111 *111 1 1 1 < 1 , | ФУНКЦИИ, I., KPPEHB, КРТРРРЙ, ИЩЕТСЯ, t, , 1, , 1 ,, 1 ,, 1,, h.i JJL 1 1 1 1.1J—L. 1 1 ! 1 *111 ! 1 nA -| ЛЕВАЯ! ГРАНИЦА, PАДАННРГР1 ИНТЕРВАЛА, ,;l. , 1 ,, 1 , , JJL 1 1 l.i^Ln 1 1 1 1 *111 , 1,, в rl ПРАВАЯ, ГРАНИНА! ЗАДАННРГP, ИНТЕРВАЛА, t,, 1 ,, 1,., 1 ■ ,.П 1± 1111111 1111 *111 , 1 rl ЛРЛРУИТЕЛВНАЯ, KPHPTAHTAkЗАДАНЗШАЯ1 РКРННАНИЕ, ПРРП ,, ..LL .111111 ill. *111 1 1111 , | MECCA! РРИРКА, КРРНЯ, Bl CPPTBETPГВИИ, Cl УРЛPBHEMl , , I, , nll.il Г» ! 1 1 1 *111 ! 1 1 1 1 , I АВВШК)), Al EPB, UPHHPCiTВ, ЗНАМЕНИЯ, ФУНКЦИИ) d ,, 1,, -ЬД ill uli. ■» <1.1 *! 1 1 1 i FTP п ЛРЛРУИТЕЛВНАЯ, KPHCTAHTAl ., ВАДАЮШАЯ, РКРННАНИЕ! ПРРг, 1 Г i i 1 Ji 1 < ■» .11. *1 1 1 , 11 ,1 , i MECCA! ЛРИСКА, КРРНЯ, »i ЕСЛИ, ДРСТИГНУТАЯ.ДЛИНА, ИНТЕР? .* .11.11, c .11! * 1 i i 1 1 1 III . | ВАЛА, МЕНЬШЕ! ИЛИ, РАВНА, EK АIТРЯ МРРТЬ. ВНАНЕНИЯ, КРРНЯ) !А 11 1 1 1 1 1 2 .Ill *1 | | , 1, ,K п ВШНИРЛЕНВРЕ1 ЗВАНЕНИЕ1 КРРНЯ 1;, I,, I,, I,, I,, 1,, 1,, 1,, 1 Г ll 1 i 1 1 1 3 fill *. 1 1 1 1 ! 1F П рррЕДЕЛЯЕТ, МЕТКУ, ВдаНВАЮШЕГР, МРДУЛЯ1., НА, КРТРРУЮ, , 1 Г 1 Jl ill 3 1111 *1 1 1 Jul , | РРУ1ДЕРТВЛЯЕТРЯ1 ВРВВРАТ, ИЗ, ПРДРРРГРАММЫ! ., ЕСЛИ, НА, , 1 F . 1 1 < 1 1 1 з 1111 *1 1 1 1 1 . 1 1 , 1 КРНДАК, ЗАДАННРГР, ИНТЕРВАЛА! ФУНКЦИЯ, ИМЕЕТ, РДИНАКР,- If 1 1 1 1 1 1 1 з 1111 *1 1 1 .1111 11 Pi?Ti 11 11 111 1 1111111 11 1 111 1 1 11111 11 1 11 11111 111 If 1 1 1 1 1 1 1 з 1111 * 1 ri *. Ai M ‘, К, М А, К, М A, A, Al A, A, Al A, A, Ai A, A, Al A, A, Al A, A, Al A, A, fir 1 1 1 1 I 1 1 1111 , ,P Fl Ail 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1111 ,,P Fl UP ) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ! 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1111 ,,P Fl Bi 1 1 1 I 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ; 1 1 1 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . Illi Jl till 11У Fl F(P ' 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 1 i i i 1 i ! J. Jl з 1111 41P ’PPEEK к, НЕРРРРАДЕНИ?13НА1<Р₽, ФУНКЦИИ I HAl КРНДАК, ЗАДАННРГР, 1,, 1 1 1 1 1 1 1 з till ‘Tit* ЧЕРВА ]Al ,, 1,, 1,, 1,, 1,, 1,, 1, , 1,, 1, , 1 ,, 1 , , 1,, 1, , 1, , 1,, 1,, 1,, И ! J. Jl .III J Jtpryi» ?рр?рр|^ Plllllllllllllllllllllllllllllllllllllllllll.il i i 11 i i i uJL ML Ь 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ! 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 111 1 . ■ 1- 1 1 I 1 1 1 1 Г 1 Г1 1 I I I I 1 1 1 I I I 1 I I I I I I 1 I I I I 1 1 1 I I I I 1 I 1 1 I 1 I I I I I I 1 I I I I I I I I I 1 1 I I 1 1 1 1 ; I J 1 2 4 6 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 7273 Я0 40
1 2, ,4. ,f 7I | |1 0 . fl ■ .1 , ,19, , Д , Д , ft , fl , ft , fl, , fl , ,43, , ft , ,49, , ft , « , И , ft , М , fl , Д ключ 1 Ll-L-g , i?q ((I -i Q 11 J i 111 J i J i J i J i 11111111 1111111 J 1111 11 1111111 . J 1 J 1 . I < < (,!' j 1 j 1 J 1 111 J 1 J 1 J 1 J 1111 J 111 1111111 J 1111 J 1 J 1111 . 1 J 1 J 1 C, I, , *(*i I | qqqqqqqqqq , im iw^m ммадч i,, J J 1 J 1 C i I i i ** 1 Ш I i3hWH 1 J 1 J 1 J 1 J 1111 J i 11 1111111 J 11111111111 Iv -1 J 1 J 1 fill 1 1 1 fJ(lW JQ I'lQ 14Q J 1 J 1 J 1 J i J 1 J 1 J 111 1 J 1111 J 1 J 1111111 J 1 -1 11 1 J 1 , iqq ,(ll J Л I j 11.11 J 1 J 1 J 1111 J 1 J 1111 J 111 1111 J i 11 1111111111 J 1 1 J 1 J 1 1 1 1 1 III' ,1 (W1 j 1 j 1 J 1111 J 1 J 1111 J 1 J 111 i 11 1111 J 1 J 111111 1111 J 1 J J 1 J 1 1111 l(|C qTiq, i= Q 11 J 1 J 1 J 1111 J 1111 J 111 j J 111 1111 J 1 J 111111111 1 J 1 1 J . J 1 , I4Q nl[ rf J 1 J 111 1 J 1 J 1111111111 11111111111 1111 J i J 111111111 1111 . 1 1 1 1 J 1 1111 nil ,=f W 1 11111 1 J 1 J 1 i 11 J i 111 111 J 111111 1111111111 J 111111 i J 1 . 1 J 1 J 1 c J!. *1*111’ P,qqW A 10qm ,qqqHHМЧ iqp,qq.qqq/| IUQ4QK4 ЛОЧИЯ .OQ .ЗШ4Ч4-, Iv 1 1 1 1 J 1 1 1 1 1 *1*1 lh W W 1 i 11 i 111 11 111 i i 1 i 111 J 111 i 11 i 11 i 11 i J i J i 111 11 i i И-* 1 1 1 1 1 1 1 i |ЗД 1111 F((|^( W) -ЛЧ IQQ1Q JQ 11 1 11111 1111 11 1 11111 1 J 1 J 1 111 11 1 J 1 ..1,(1, c , I, , 111 , l^E J 1 J 1 111 111 111 J 1 11 1 111 11 111 i 111 J 1 J 1 J 1111 111 11 1 J 1 1 J 1 J 1 Q.1111 111 1 1*1*( |Г p.qqE,^ ixqqqqqq ,qqqil4AW iqqqt|.qqQ4 lOqqQM ,44449.04 ,. h< J 1 1 1 J 1 C i 1 i i 111 11*1*1 IJ ЛИНЕ) |ИИ 11 EiР|1ЗДЛА 1 J 1 1 1 1 11 1 11 1 11 1 J 1 1 1 1 J 1 J 1 J 1 J 1 11 11 1-^ 1 J 1 1 1 1 ■ i.. 111 ill ill F| (|A^S| (jIJCl)i-IQT| iQQTjQJQiJiJiiliiliJiiliJiJiJi 1 J 1 1 1 1 C i 1 < i 1 ! 1 (lol i 1Ej J i J 1 J 1 J 1 1 1 1 11 1 J 1 11 1 11 1 J 1 1 1 1 J 1 J 1 J 1 1 1 1 J 1 1 J 1 J 1 , 1ВД 1 ! 1 Jul J 1 1 IBEJURJ 1 J 1 J 1 J 1 11 1 J i 11 1 1 1 i J i 1 1 i J 1 J 1 J 1 1 1 1 J 1 1 J 1 1 1 1 ■ 1 >. EjNfl 11111 J 1 J 1 J 1 J 1 J 1 J i J 1 11 1 11 1 11 1 1 1 1 J 1 1 1 1 J 1 J 1 J 1 1 1 1 J 1 1 J 1 1 1 1 Z*I 11, 1 1 1 Jill J 1 J 1 J 1 J 1 J 1 J 1 J 1 11 1 11 1 11 i 1 1 1 J 1 1 1 1 J 1 J 1 J i J 1 J 1 1 J 1 1 1 1 //IGI0l.,s Y,W 1 inn .1 *J 1 J 1 1 1 1 1 1 1 J 1 J 1 J 1 111 11 1 11 1 1 1 1 J 1 J 1 J 1 J 1 J 1 J 1 J 1 1 J 1 1 1 1 Q .100,1 1111 2JQQ0IC 1J 1 J 1 1 1 1 1 1 1 J 1 J i J 1 111 11 1 11 1 1 1 1 J 1 J 1 J 1 J 1 J 1 J 1 J 1 1 J 1 1 1 1 K1 1 < I LL 1 . 1 1 1 1 1.. J 1 J 1 J 1 J 1 J 1 J 1 J i 111 11 1 11 1 J 1 J 1 J 1 J 1 J 1 J 1 J 1 J i 1 J 1 1 1 1 //. 1 ■. XJjL. Jill J 1 J 1 J 1 J 1 J i J 1 J 1 111 1 1 1 11 1 i 1 1 J 1 J 1 J 1 J 1 J i J 1 J 1 1 J 1 1 1 1 J 1 1 J-lL. J.ll, J 1 1 1 1 1 1 1 1 11 J 1 J 1 J 1 11 1 J 1 1 1 1 J 1 J 1 J 1 J 1 1 11 J 1 J 1 J 1 1 I 1 1 1 1 2 4 6 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 7273 80 41
си Q. О I- си Q. CD С О =5 S CQ т ш о т -О с; ш Н S I о с о CJ о С2 ш S т ш З’ < о_ LQ О 42
BLOCK DATA - отдельный программный модуль, используется для присваивания начальных значений переменным и массивам, входящим в именованные общие области COMMON. (Не разрешается инициализация переменных и массивов, входящих в неименован¬ ные общие области.) X < Q Q. с > >х со < Н о X Т X о о < ф ф 5 ф О О. О. Ф С х о ОС 00 1- ф ГС □_ СхГ т— О. Ф С X X ф X н о о о ф I ф ГС ф ф ю о Z о о 5 >Х * ф ф 00 О. л ф с LLJ |_ О О. I л ГС El ю о ОС < LO с ф X Ct зг ф н о Ф X о < с X ф >х о 1- ш ГС < I- О ГС о > ю о < Z Ф н 2 со X >х ф Q ш □Q ф о СО ф ю X ф о со ф о X X d s 00 л ГС О С о X X X 5 X ф 5 ф О. Ct о ф X 1- о Q. ф 1_ -О ко ф с ГС ко О о. ГС ф о с I- с ф ct о X X О X н с ф гс X X ко о ф 1- о х ф со У ф Z о X с X X ш о ф н X о а z: z ф о о л о. о ГС Ct о х о ел ш —1 < X о У 1- ф m Z ш > < 1 о. ф х" D 1- Q о с _о О < Z о о X Б ш Q ш л 5 со CL 1_ О О. С для всех объектов общего блока, даже если некоторым из них не присва- начальные значения операторами явного описания иваются начальные значения. типа (COMPLEX и REAL). 3. В одной программе может быть использовано несколько подпро-. грамм BLOCK DATA. 43
Операторы отладки дают возможность пользователю локализовать ошибки в исходной программе. Они позволяют: проследить за последовательностью выполнения операторов программы, за изменением значений переменных или массивов; контролировать выход значений индексов массивов за объявленные границы. Операторы отладки отдельно или в комбинации с операторами Фортрана объеди¬ няются в пакеты отладки и помещаются в программной единице (программе или подпрограмме) перед оператором END. о ГО I го ■ х Ф с; Q. о s X О ф го з- о CZ о. ф со —- 1— о Q. Ф £ < CL С Б со С X 5 о I ф ис 5 ф Q. Ф С го S Ct X X со ГО ф £0 X X х о ф о си ю о ОС о о X ОС о о. Q. —' Q. о н ф с о О Н ГО X го го — Q. X Q. Ф I Ф ф С ф С о X х ф о £ ф о I ф Q. ю сс X Ф X о I сс с ф го I к х х г- Ф * го С; то СО X X ф з- о го го го ф ГО О о (_) го О * о. с О. го X го < > н ф го со го 00 О 1- X о ОС го С[ о < го |_ о LAJ о с * ~~ Cf LL в J- о 5 1. < ° го о о >- X с X см ОС н 1 н X ° ш о ш о < -J п о со о. EZ О D < < С/Э CQ Н сс сс Ш < н н Б Q 44
< с; н о со о о. О н < СЗ- UJ С О ОС X < со О со -О с; О с: о S о. ш X Q- 00 О О- О Н < CL¬ UJ d О X _□ т 3“ о < с; н о -Q Н О LQ < CL ос н X < СО О о_ о_ О е о сз_ О О о о СМ СМ LD СО ш О. о о о о о о < о ш ш см 00 st о 00 St о 00 St о о о & о" 00 см LD 00 < < о о о ш ш ш ш 'si¬ ш ш '3- ш т ш st ОС ОС о о 00 о о О о ll о о II о о о II н н о о Q < < < < < < L0 < со < О) 00 00 со о ОС СЕ ос ОС —' СЕ ОС ОС Z) ОС D D Q II с5 ш н н Н н о I- н О н со н о со со сЗ < £ об а с аз J) X ГО го го Ъ го Q- |_ О Q. С >х о X аз о х о О О D СО Ш О X X X ф * о с; о < X с; X X го X с; аз ф о X X аз о ф го о о го го с X < X X го Sr аз *< го 00 X О л о * >х о о ф о с£ Ф о сс * X 5 О CL X н ф го ГО 1- Q. X Ф О X о J0 X Q. с £ X ГО го X I ф 3- ф Q. о о го X 1- го го CL го а- -I-- х X го О. Ф 1_ о о. с аз X о о х О ® аз 3 2D х: о X С о аз го ¥ го -Q СО JJ см * аз ф со > 1- о го 3" )Х X X □.го _о 5 > ¥ X X го * 2 > го у. ф 3- го X X X О Ф Q. CL ю X a Q. 1— 2 * + со го I о > о CL J0 1- о £ J3 X X т X го х X н ф 00 о 3- 1 S X X о го CL н ф с 1 . го < 00 X > а. го аз X гО ю < 1 X о ш о X ю □ го го о О < н аз ОС 2 2D н со < § I та g оо 00 ч со СМ < CZ 'st LL го с О см * * CD н 1— >х J3 С >х о 00 00 О О А 2 со Q. CL о ОС 00 о со II 11 ч * * Ф н н см" 7 -э 5 + ш D 2 + и < |±Г CD < ОС X 00 со ш аз т— * 3Z Р “3 < CD О ш 2 + II СЕ Z LL LL < со * II ш LD 7 о см О 1— Z о X Z 7 со ь— СО Н О О ш О Ш > < 1 н о LJ СО Z V см ID Z Q см Q CD Н st < CD _1 CL 2D CD CD «и п ОС ш г^. аз Н < 00 _1 О 03 г- < L0 < СО О аз ш о О II О < н ш Н ОС Н ОС Z Z) О О ОС Q о О CD со Q < Н < Н Q ш со Б О CD «— о см 00 st LD см см ш О < ос н аз ID СО о Z) СО Q Ш Q ш 45
ОС d D О J3 I- го I 2 со ф -0 X d О аг СП 2D X го X о. ф с: х ф 5 ф ОС СП CD о. X =г о I JO i— ф с го н I £ о V ю о d ГО о X ф -0 со о с; О 3 U- < О е 1- го о. ¥ ф а го О. о Т 00 ф с: X L. О X го О. У. ГО о го го Н CL С d у. |_ < У. го о с; X О Q- CL L— О * >х ф > I с: со го X го 1- 5 X □- со о го ГО о. 2 X о. CL I С го н > d о. с н ф 3 X о X о н ю о о ф х о ф X о > X о. X d о 3 > м о. I- d о н * > го 3 о. d X ф m с о. о о о н 5 d о i_ о у -0 о ф d d о 1- -0 н =Г < о S в = а* о- « d s х X d -0 ю о о d т ф X у о d 3 X ш л о _ X о СЕ Z О X ф d го с < * < X X X ф d о d ш 5 >х О d ф X о_ X о Z н Q-\Z X 2 -а н S ОС го о X Р О х О 3" -0 со го о. L_ о S с « _J О < > * d о о го о. X X го ZD d 3 го X о X X со ш X о о. о н X 2 d о d ос X X го > го о. ф d ф ф н о X с d го с о о го о описатели формата - FORMAT; предложения - NAMELIST; предложения - DEFINE FILE. с О со го О. |_ О о. с d О С 46
oc s T Ш £ s c: LO Q_ C >s о m о. ш c oooooooo о о о о СО о о ОсГо Т" 47
1.38 ЗАДАНИЕ НА КОМПИЛЯЦИЮ, РЕДАКТИРОВАНИЕ И ВЫПОЛНЕНИЕ ПРОГРАММЫ НА ЯЗЫКЕ ФОРТРАН ос S ф о I с; о С £ е s S V со О со CL си Q. си ■=£ О С X X X X X X II ш 00 си со Q. d -О О 0 X н > * * S си О с[ * О. d СО s F >S X “ о -О -П CL X X с I s -О S X X си ОС СО Q. < со Ю со О_ со X 00 о Q. X S 2s S н S X ф О. со Н С У X со ш X о Q. си -J .п С и > с[ О ф о ш X о с X X д -О CL (Л (Л л < II Z * СЛ о о ос S * о_ L- гл Q о V оо Q О. Q z □ Q С р ш £ > ? о -J СЛ СС СЛ ш Q Q ш ш < > ОС СЛ “ 6 н V -J -J -J о 48
1.39 НЕКОТОРЫЕ СИСТЕМНЫЕ КОДЫ АВАРИЙНОГО ЗАВЕРШЕНИЯ (ПРЕРЫВАНИЯ) ЗАДАЧ В ОС ЕС 49
_п 1— ф о О то X с _а х о X со ф 1- то о о. ю с то Q. -0 I- о X с о. ф X со X о =г Q. ¥ X > -О н X СО то н о со о ш =ХШ ф CL Ф С ¥ о ю X 3 о X X я то то X с; то О с; ос с; то х ю о ф X ¥ о ю X 3 о X Q о. о I- то Q. Ф С О >Х -О I у О d то х I- о > то CL 1_ О О. с со ш X JQ X X то ct X -О X Ct о X > со X ю то X J3 I- X Q. ф со о CL [= о 00 D со о D со ш Q Q. О н то О. ф С О >х -О х □* о ct то X н о > го Q. 1_ О а с со -0 н X со го н о со д' X ф * л =г X X то О. N N N .—. N -0 N N X X N го N CL 1— >х о N1 о * N N 1— ф I о н N [£ >х N X ф N «=С 3 N ф 2 N СО J3 X X го ТО то со то с; ““ с о о J3 со с с X > о 1- X Q. L— с[ X о ¥ X ю го X I 3 3 Ct о о CN у. ф 3 -0 £ X 5 X го ф CL X 1_ о о X Q. -8- X о X zf * Q. го го CL о X ф с: 1- X о >х X ф ф X и X X X X 2 о ф го EZ X со е; го _0 m о с X с X м о 50
ГЛАВА ВТОРАЯ СРЕДСТВА ОТЛАДКИ ПРОГРАММ И ЛОКАЛИЗАЦИЯ ОШИБОК 2.1. ОТЛАДКА ПРОГРАММ, НАПИСАННЫХ НА ЯЗЫКЕ ФОРТРАН Отладка представляет собой процесс поиска и устранения ошибок. Как правило, время, затрачиваемое на работы, связанные с отладкой, составляет около половины всего времени, необходимого на разработку программы. К решению вопроса мини¬ мизации этого времени можно подойти двумя способами: а) путем уменьшения числа ошибок, допускаемых при разработке алгоритма и составлении программы; б) путем ускорения поиска и исправления ошибок, имеющихся в программе. Приемы и способы, позволяющие уменьшить число ошибок в программе, заклю¬ чены в основных современных методах разработки модульного и структурного про¬ граммирования. Общие положения по отладке программ приведены в работе [3]. Этап отладки программ можно разделить на следующие три стадии: контроль правильности программы; локализация ошибок; исправление ошибок. Контроль правильности программы — это процесс выявления самого факта на¬ личия или отсутствия ошибок, который, в свою очередь, производится в несколько приемов: контроль текста алгоритма и программы без предварительной постановки на ЭВМ; распечатка текста программы, введенной в ЭВМ с внешних носителей информации, и сверка ее с исходным текстом на бланках; синтаксический контроль, осуществляемый компилятором и редактором связей; алгоритмический контроль по результатам выполнения программы. Операционная система (ОС) ЕС ЭВМ имеет разнообразные средства, обеспечи¬ вающие успешную отладку программ. Их можно разделить на системные средства и средства языков программирования (языковые средства) . Системные средства являются принадлежностью системных программ (управляющей и обрабатывающих) и функционируют независимо от программиста и характера решаемой им задачи. Резуль¬ татом работы системных средств могут быть информационные и диагностические сообщения, а также дампы. Эта информация позволяет выявлять в программе синтакси¬ ческие и логические ошибки. Локализация ошибок — это процесс установления характера и точного места ошибки в исходной программе. Ошибки в программе приводят к прерыванию и аварийному завершению какого- либо шага задания (компиляции — FORT, редактирования — LKED или выполнения — GO), либо к завершению программы с получением неверных результатов. Основой локализации ошибок, приводящих к прерыванию выполнения шага задания, являются диагностические сообщения, выдаваемые компонентами ОС, и системный код завер¬ шения (COMPLETION CODE - SYSTEM ) . Диагностическое сообщение состоит из идентификационного номера и поясня¬ ющего текста. Первые три буквы идентификационного номера являются префиксом, определяющим системную программу, выдавшую сообщение: IEY — префикс сооб¬ щений компилятора; IEW — префикс сообщений редактора связей; IHC — префикс обслуживающих программ обработки ошибок библиотеки Фортрана. Код завершения классифицирует причину аварийного завершения и дает общее описание характера ошибки. Наиболее часто встречающиеся системные коды аварий¬ ного завершения и возможные причины их возникновения приведены на плакате § 1.39, а их подробный перечень содержится в работе [38 J. 51
Все возможные диагностические сообщения на шаге выполнения программы будут приведены в § 2.8 [31]. На шаге выполнения программы информации об ошибке, предоставляемой опе¬ рационной системой, часто оказывается недостаточно для выявления ошибки. Текст диагностического сообщения хотя и содержит номер оператора исходной программы, при выполнении которого произошло прерывание, но на самом деле этот оператор может не содержать ошибки. Часто оказывается, что прерывание или зацикливание — это лишь внешнее проявление ошибки, которая находится совсем в другом месте программы. Локализация ошибок в программе на шаге выполнения осуществляется путем получения и анализа промежуточных тестовых результатов. Для выявления ошибок также полезно знать специальные отладочные средства языка программирова¬ ния, на котором написана программа. В Фортране такими языковыми средствами, обеспечивающими успешную отладку программ и позволяющими локализовать допущенную ошибку, являются: отладочный пакет и сервисные программы библиотеки транслятора. По принципам работы средства локализации могут быть разделены на следующие четыре типа: аварийная печать; печать в узлах; слежение; прокрутка. Реализация этих средств в Фортране осуществляется операторами DEBUG и АТ (невыполняемые операторы) и TRACE ON, TRACE OFF и DISPLAY (выполняемые операторы). Подробные сведения об их применении приведены на стр. 44, 45, а листинг, иллюстрирующий использование этих операторов при отыскании ошибки, приведен на рис. 2.20. Аварийная печать — печать значений переменных в момент возникновения ошибки, приводящей к аварийному завершению. Такая печать может быть осуществлена при использовании сервисных программ OVERFL (проверка возникновения переполнения порядка и исчезновения порядка), DVCHK (проверка деления на ноль) , PDUMP (отла¬ дочная печать данных с продолжением выполнения программы) и DUMP (отладочная печать данных, если после печати необходимо закончить выполнение программы поль¬ зователя) . Печать в узлах — печать значений величин в выбранных программистом местах программы (узлах), осуществляемая либо обычными операторами, либо при помощи отладочного пакета: DEBUG АТ < метка оператора > DISPLAY < список имен> Слежение — печать имен и значений указанных переменных сразу после присваива¬ ния им значений (арифметическое слежение) и (или) печать меток указанных поме¬ ченных операторов и имен процедур перед их выполнением (логическое слежение) . Арифметическое слежение осуществляется отладочным оператором DEBUG с режимом IN IT: DEBUG I NIT « список имен » Логическое слежение за выполнением подпрограмм осуществляется путем вклю¬ чения в эту подпрограмму отладочного оператора вида: DEBUG SUBTRACE Логическое слежение за выполнением помеченных операторов обеспечивается оператором DEBUG с режимом TRACE и с помощью операторов TRACE ON и TRACE OFF, расположенных в двух соседних операторах АТ: DEBUG TRACE AT < метка 1 > TRACE ON AT < метка 2 > TRACE OFF 52
где < метка 1 > и < метка 2 > — метки операторов, определяющих начало и конец отслеживаемого участка программы. Прокрутка — средство локализации, позволяющее получить наиболее полную информацию о вычислениях, производимых на некотором участке программы (ариф¬ метическая прокрутка) или о последовательности выполнения операторов на этом участке (логическая прокрутка). При арифметической прокрутке печатаются резуль¬ таты выполнения каждого оператора присваивания на заданном участке программы. Осуществляется арифметическая прокрутка отладочным оператором DEBUG с режи¬ мом IN IT, если для него не задан список имен переменных: DEBUG IN IT. Логическая прокрутка осуществляется операторами DEBUG TRACE, AT, TRACE ON и AT, TRACE OFF аналогично тому, как это выполняется при организации логического слежения. Существует возможность контролировать вЬ1ход значений индексов элементов массивов за объявленные для них границы. Контроль индексов задается режимом SUBCHK в операторе следующего вида: DEBUG SUBCHK < список имен массивов > Если список имен опущен, контроль индексов осуществляется для всех массивов, входящих в соответствующие программные модули. Отладка программ, и особенно локализация ошибок, по своему характеру явля¬ ется творческой работой. Условием быстрой локализации ошибок является глубокое знание языка программирования,, четкое представление о структуре программы, умение использовать возможные отладочные средства (как языковые,так и систем¬ ные) , знание особенностей реализации, приемов отладки на конкретном языке. При выполнении задания операционная система формирует информацию о его прохождении. Эта информация включается в листинг, который выдается на печать. Для осуществления успешной отладки программист должен: знать структуру выда¬ ваемых листингов; уметь найти в листинге необходимую информацию об ошибке, используемую для ее локализации; знать возможные причины наиболее часто встре¬ чающихся прерываний; уметь разобраться в системных сообщениях об ошибках, по¬ являющихся в листингах. Чтобы помочь пользователям ориентироваться в сообщениях операционной систе¬ мы, далее в пособии приводятся листинги, полученные на ЕС ЭВМ в различных ситуа¬ циях, возникающих при прохождении задания. На примере одной и той же программы рассматриваются наиболее типичные ошибки, допускаемые начинающими програм¬ мистами и выявляемые в процессе отладки. Всего приведено двадцать листингов (рис. 2.1—рис. 2.20). В §2.2 разъясняется упрощенная схема листинга завершенного задания с получением верного решения, а в § 2.3 этот листинг подробно анализируется. Далее рассматриваются листинги, полученные в результате допущенных в программе различных по характеру ошибок. Эти листинги разделены на три группы: листинги с ошибками в операторах языка управления заданием (§ 2.4, рис. 2.3- 2.5) ; листинги с синтаксическими ошибками, выявляемыми на шаге компиляции (§ 2.5, рис. 2.6-2.8); прочие листинги с типичными ошибками, выявляемыми на шаге редактирования и на шаге выполнения задания (§ 2.6, рис. 2.9-2.20). Последний листинг (рис. 2.20) иллюстрирует использование отладочных опе¬ раторов. 2.2 ОПИСАНИЕ УПРОЩЕННОЙ СХЕМЫ ЛИСТИНГА ЗАВЕРШЕННОГО ЗАДАНИЯ На рис. 2.1 приведена упрощенная схема, поясняющая структуру и содержание листинга завершенного задания с получением верного решения. Как видно, листинг состоит из пятнадцати частей. Каждая часть обозначена цифрой в левом верхнем углу. 53
1Г> СТА оо СТА ао 04 • • « • • * • о Q CQ О Q О О Й PH н о О 00 04 Рч X 04 00 о О • о pq еч о X Pd Еч Pq о Рч Рч см — ол 04 О О О о о о о о ил pq О ста О pq О СТА • СТА • я о <4 СТА • СТА ♦ о < СО • СО • СТА PH 04 04 04 • • н • • м > 3 м 2- PH pq • • Q • • X * <4 * pq * • < S • .§ . 3 • Еч * • pq • еч оо Cd * • Еч -О cd О X SOO Рч pq pq Рч ьч О pq о Еч О PH • см pq О и О *04 О • О О * о о о О * о • ы • Еч • ы Еч < ЕН 00 * о о о о О pq т— О т— • 04 < о • О PH СТА • СТА 04 04 pq О Еч Cd • Pd PQ • Q О S S Рч 00 pq О pq — СО о г- О о О О о о ОС ЕС FORTRAN ... RUNGE ... RAGE 0002 * OPTIONS ... СПИСОК ОПЦИЙ И ДАННЫЕ О МОДУЛЕ •.. RUNGE * STATISTICS * ... 54
a d д > М д Д Д д < Д М ы О S д д д д Рч >» >> м 8 И з е 4Р д д д 5 1 о < д со < д д ° я >» < Д Д О 5 Д О Д^ СО a s Д Рч О >> д 8 д д д м д^< 8 о > 3 Рч 8 Д < н д ЗД и 1-1 о ё § д о ом Рч о < м < 8 « д м @ д д н м О со о О Р О О Д Рч о Ен Рч о о н д Рч Д Рч д мм мм д з д >> щ < Д <3 со о со О со м о о Рч о о о о 1Г\ о ЦГЧМЭ CM CM О о СП СП см см 1Г\ чО см о СП см * Рч Ен CQ Рис. 2.1. Упрощенная схема листинга завершенного задания М 3 о ЕН 1-4 •’З- г— • • • • • д • S 00 < О м д Рч о о S М Ен Рч 8 • 00 • м д • о • и о • Г~"< 1 • со д д м 1-1 н чг* см 1 д г— я Ё Рч с- М • м м М О nr-s - Рч М чеЧ- - И 55
Первая часть схемы содержит основные операторы языка управления заданием JOB и ЕХЕС. Оператор JOB сообщает операционной системе о начале описания задания. Оператор ЕХЕС указывает имя каталогизированной процедуры, под управлением которой будет выполняться программа пользователя. Следует заметить, что в нашем задании используется каталогизированная процедура FORRGCLG. Эта процедура в от¬ личие от широко применяемой процедуры FORTGCLG включает в себя помимо трех основных шагов — компиляции (FORT) , редактирования (LKED) и выполнения (GO) еще два дополнительных шага перекодировщика — TOLM и TOLML. Перекодировщик осуществляет перевод сообщений компилятора (шаг TOLM) и редактора связей (шаг TOLML) с английского языка на русский. За главными операторами языка управления заданиями на схеме расположены листинги шагов задания, из которых состоит рассматриваемый листинг. Листинги шагов следуют друг за другом в порядке выполнения шагов и на схеме представлены следующими частями: со второй по седьмую части — листинг шага компиляции (FORT, TOLM); с восьмой по одиннадцатую части — листинг шага редактирования (LKED,TOLML) ; с двенадцатой по четырнадцатую части — листинг шага выполнения (GO). Листинги шагов задания имеют одинаковую структуру и содержат следующую информацию: операторы ЯУЗ шага задания (для шага FORT — вторая часть, для шага LKED — восьмая часть, для шага GO — двенадцатая часть); листинг обрабатывающей программы, выполняемой на соответствующем шаге, текст которого определяется заданными в операторе ЕХЕС опциями (для шага FORT - четвертая, пятая и шестая части, для шага LKED — девятая часть, для шага GO — три¬ надцатая часть); сообщения планировщика заданий о времени выполнения каждого из шагов задания, которые обозначаются префиксом IEF (для шагов FORT и TOLM — третья и седьмая части, для шагов LKED и TOLML — десятая и одиннадцатая части, для шага GO — четырнадцатая часть). Надо заметить, что для данного задания листинг компиля¬ тора содержит информацию о каждом из трех транслируемых программных модулей: MAIN — главном модуле (четвертая часть), RUNGE — подпрограмме (пятая часть) и DERIV — подпрограмме-функции (шестая часть), причем информация о каждом из этих модулей по содержанию разделена на две страницы, помеченные в соответству¬ ющих частях схемы номерами справа (PAGE 0001 и PAGE 0002), где на первой стра¬ нице расположен текст модуля, а на второй странице — данные об этом модуле. Листинг редактора связей для шага LKED представляет собой управляющее предложение редактора и сопровождающий его текст. Листинг шага выполнения (GO) состоит из результатов решения задания, выданных на печать по запросу из программы пользователя. Заканчивается схема пятнадцатой частью, в которой находятся сообщения пла¬ нировщика заданий о времени завершения всего задания. 2.3. ОПИСАНИЕ ЛИСТИНГА ЗАВЕРШЕННОГО ЗАДАНИЯ С ПОЛУЧЕНИЕМ ВЕРНОГО РЕШЕНИЯ ЗАДАЧИ Поясним подробно листинг завершенного задания (рис. 2.2), последовательно со¬ поставляя фрагменты листинга соответствующим частям упрощенной схемы (рис. 2.1) . Первые три строки листинга соответствуют первой части схемы и содержат основ¬ ные операторы языка управления заданием — JOB и ЕХЕС. Параметры оператора JOB, находящиеся в первых двух строках, имеют следу¬ ющие значения: РТ000220 — имя задания; (РТ0002) — учетная информация о задании; 56
о 1ГЧ о ип со со СП СП со 00 00 00 СП СП СП СП со 00 00 00 CXJ СМ см см A В О «— >■— А * ИХ X < РЗ < < Рч О X СО Рч * о о о < О • • а * Ен С X СО S ДМММРчРч Дж ч— 3 СЛ Рч СП СП ♦ X + Ен X ы РЗ х < м < В м о м ж о. •» А сп сп * S • Ен s Э рз ВазхааВх* М ф со •к м X о о * см X ММ со х м д с Н §* X ф • о О * ы II X М Рч Д X РРЖ ф S к рэ О 00 00 * * р X м х s В X Д <Х МММ* о м о Д со §В х ж Рч X I S Рч о 1 Ен * В •0» X м м x<x<pqxox* н а сл X Рч * Рч В х м в рзрхрмяож > а S а II А < О * Р-. X X О РЗ 1 1 ж а —'X с; В А М Ен Ен * О Рч 1 1 1 1 1 1 X * X о —> К А СЛ СЛ М" * Рч х В Рч сл ж М о А — гм •» о А 00 * В S X X >» а М ж А <— X • см Рч О w • * О X Ен с X < ж Х-^ •ЧГЧ см • н см * РЗ М X о рч *О К *> ж А О X Рч S о X о * О а М М X а ж < м 0_ о В м 1 * Ен с 3 о о ХХМХ>НСЛР^Ж X > X ЕН о < СО * X X А в М М Ж В < а Рч СЛ А А LT\ * со < го в < А Ж MACS Рч -ж * ж ЕН < ЕН В x^z О £ОО ЕН * ж X м < о A А Рч Рч сл * * * * * ж * ж ж жжжжжжжжж М В А Рч д X м А Рч Рч о X А СЛ М И в о II О 00 А А А см СЛ Рч X 1 СЛ СЛ X см СЛ СЛ О о < О • А А А Рч о А м Ен СМ СП ха- о О X X м-(*- г— О Ен pq О т— СП СП pq
0005 READ(5,1O)H 290010 0006 CALL RK1(DERIV,H,XI,YI,XF,YF,ANSX,ANSY,IER) 290015 0007 IF(IER.NE.I) GO TO 15 290020 C ELSE ***** ВВДАЧА РЕЗУЛЬТАТОВ РЕШЕНИЯ ПО ПП RK1 ***** 290025 О1/ЛО1ГХОиЛОЦЛОиЛОиЛОиЛОиЛСМ О(Л г->-ОО ОО 0(^0 О О OOOOOOOOOOOOOOw—T— о ооооооооооооооооо Ох ОХ СТ' Ох ОХ Ох ОХ Ох Ох Ох ох Ох Ох Ох Ох Ох СМСМСМСМСМСМСМСМСМСМСМСМСМСМСМСМЭД о Рч г-* - со • •к • 3 — см ЭД <о о Рч^ • • • со ЭД т— о О эд Н Рч ЭД т— Ен Ен х_х < ЭД •» Р X ч - х-х >> II о ЭД X ЭД эд СП > Рч эд •» • эд •» • ЭД • • X эд эд эд^ т— •* ЭД -оо HI W ЭД (S3 • Е >н_ о < •о ЭД р< ч — (XI эд НН нн ЭД X Hl ЭД С < X * >н о • • О — СО О эд ЭД 3 см ЭД*-* эд а •» а и ’х-х > С*Х <з > Рч я -эд HI • нн X гл X ЭД X -эд со Z—X • 09 РЗ ЭД — о * о о ЭД эд Р Ж — X НМ- GO ох о г- о о «- о о о о о о о о СМ СХ 1ГХф Г-СО ОХ О г- N О Г— Я— Г— Т— <— CXICXICXI^ ооооооооооо ОООООООООООО о V— OLCXOirxOirxO о*— т— N N СХ (*Х о о о о о о о о ОХ ОХ Ох ох ох Ох Ох W см о < см 1 см см см см см Рч * * * * * * * ♦ * * * ♦ 1 • * * ЭД **'"4 * со * ЭД —ЭД * см * ♦ • ♦ О —X * о * ЭД + ^* LTX * Я НН ♦ см • * ЭД^О* со ил * • •X ЭД * гл •— ♦ < -ЭД * «— 1 * X —* z—s * рЗ-ЭД* ох * эд + * ел ♦ Рч НН ЭД * о * О^О* Рч ^-Z * ЭД X ЭД* <г] II * * 00 * о a * О ЭД • ♦ эд эд * ЭД ЭД см * о эд о * *» нн о * Н ЭД р=3 * Q о UQ • * Рч о о ♦ <з г- 00 ♦ ЭД ЕН ЭД * о о * эд эд * 1-0 < * Ен ЭД * * РЗ ЭД<-х ★ ЭД эд О Ен О * ЭД ~ЭД ♦ и О < эд * * ЭД II ЭД р > ♦ < НН • * Q Рч -* Ен^ . * О Ен ★ Ен>и ♦ * ЭД см •»* >» - • * -О см X * х — *- * Ен ЭД ** 1 ни II * си эд нн * ЭД^нн * НН НН >ч * ЭД X ♦ ЭДЭД ** эд — эд ♦ О Р ни * >> Ез Рч эд эд * ЭД * W X * * •» Ен эд -* ЭД * эд 11 эд о эд * < эд эд * о эд эд -* =30 * ♦ р^ си эд эд о * О Ен X * эд эд Ен ЭД эд эд * Ен + * О НН ЭД ЭД о * ЭД Ен — * СП < ЭД ЭД эд * S О нн * *2 S * — * HI Йен эд * < =зх* О II Ен О о * S О II ♦ X < нн эд ♦ S X — * Р ЭД Ен Ен эд * <3 эд *- * СИ СП эд ♦ Рч Рч 4- * Р < О ’«4- * ЭД ЭДИ ♦ — ни ЭД ЭД ЭД 00 ЭД ♦ О ЭД^ * ЭД О О • • эд * Рч X * ЭД < СМ НН * эд эд * О * * ЭД НН о Ен * * ЭД Ен Ен О Q 1 ЭД * * > О О СП мэ О * ЭД ЭД ЭД * Рч ЭД О 1Г> Рн * * ЭД ЭД ЭД ЭД * ♦ < эд эд Ен ЭД * * эд эд эд * ♦ СИ си * * * * * эд ЭД ЭД СП СП ЭД нн >-н О О < НН НН ЭД СИ СИ Ен Ен Ен эд эд СИ СИ ЭД О О О О О о о НН нн О НН нн Ен Ен ЭД Ен Ен < < Рч Рч Ен Ен О ’T- см О О СП СИ ЭД о о * ♦ * * о о О о О о OI СМ и S о. ф S с; о С[ о о. с 58
♦STATISTICS* SOURCE STATEMENTS = 4,PROGRAM SIZE = 408 н- X И * ♦ Э * V_Z н- X 00 со * X * 00 X • О X • * <2 * • о OJ X м ои * х * ои X о ЕН о * >» * о • X о 05 • * * • X ° 00 < г- 00 * о * оо << г- о О 2 о * X * о о X <£ ♦ о * X И ** Зч X * 3 * X Ен X о Ел * X ♦ ел X < о о < * >» ♦ с о X X II X X ♦ X * X X II X X * S * х •» * X * О Ен X чо ♦ X * X X * ~о т— ♦ X * -о z—S. z—X \_O £ X * Ен * ЕнХ ’—OU \ оз х * S * 05 X Eh H ннм * X * Н ЕН X * * n- * * 1 X х ил ил EH о X * о • + И х - Х> * 9* Ел > х • О O О •* Ен ЕН * X * * ЕН + + Ен ел X X С X * X* • X X* >н >н + Eh X о п X X ♦ X * си X о - + X X X X X * <4^ * 4-Z X X > N *CU X О 03 X * Д* 03 X ЕН >ч x x x eh О X Ен X * СО * О О X -+ + + 03 х X О г*Л * * о 03 X X x X X * -X X х * * *х <✓' zx_x • ЕН 2 05 Ен * 9 X • О О О О ou О II X О X—Z * X* ЕЛ О II X s X X + X ЕН ЕН > * X * 1 X X О О О О — XX < Ен ЕН * X X *Х X X X Ен xi- Ен 03 ■н- X * о * х м- «—**** ^ X X со X < 05 О со X * X * X 00 х*3 X II X X X X + + Н ЕН х X • X * • ЕН X -►"Э II II II II >Н X см X о ои * И * ♦ си X CU СЛ Н" II II ЕН О о < о X ♦ X ♦ • о * II - ЕН ЕнННИ X— 1 * * X ЕН 1 О * * си 1 * * иЛ ЕН их иэ ЕнЕн О X кО ЕН * * II X иэ ЕЛ Ен • О х х its О О 03 ил Ел ♦ * > X ил О О они nQ > X X X о о * * X X X X II н X Ен X X X X X ♦ * X Ел х X X ои и II О X X Ен X X ЕЛ X * * X X X ЕЛ X X днхд X X 05 X X 03 X * * * Q X X 05 X X * * X X X 05 03 X X X X ЕН ЕН О О < ЕН ЕН ои X ЕН ЕН X X Ен (Л 03 ЕН Ен Ен Ел 05 05 X X X 05 05 X ООО X X X О О О ен ЕН О О о о X ЕН ЕН Ен Н X X ЕН ЕН ЕнЕн < < Ен Ен ол^илкоо—сосло»— ои С*Л иЛкО О X X Ел Ен и — ои ел О XX ОООООООя— T-W— — - _ _х О О 05 05 X ° ООО X О О оооооооооо о о о о ♦ * * * о ООО * * оооооооооо о о о о о О о ООО о О О о 59
LAO UH 1Г\ЧО 43 N N 04 OO о o> o> cn 04 04 04 X 1 1 1 1 1 1 1 1 1 1 а: ХХХХХХХХХХ о >> О 43 t— 00 »— 4D СОЮ 4-0- 04 со сп т— <о сп г— сн о— о ил СЗ о СП о о pq 04 СЛ С^- СП т— иЛ 04 СП 1Г\ г— о • си сн м- сл <— 0— СО спо г— сл со 04 СО 0 0—0 А 4- О г- 4-г-Ю * pq <! 04<ОиЛ4-С44-04004СО Z о Z ft сплоаююог~4-<-г- 1-1 • о hi О н § «— U> W— 4- Ю LA О Г~ 04 СЗ <1 о < О <1 Д 43 СО т— СП «— СЛ От- 04 <— »— т— ил Ен й с II II О 04 pq о о о х х v_x СО pq hi pq со II СО ЕН со 04 X < о- ы о N Ен <О Q о • HI < • а • о Еч СО Q — О о • о СО о О о HI 1 О pq т— т— 04 04 СЛ СЛ ”4- ил ил ил z X Ен Z X Z X О ООО СЗ о о СЗ сз о HI Hl О Н| 1 1 1 1 1 1 1 1 1 1 g Ен X Q pq X pq pq pq pq pq pq pq pq pq о X СО pq о pq о О 1ЛСПП-4- O’— 43 Г- СЛ »— X X X СЭ bd ил сл u> cn t— СП neo 4-П- о X Q о х 5 X и ОСПООчо спюю споо о о X Q ■—' о ct» pq 04 т— 4»-Ю4-СО T- Г— ил о о X СО о о о о X •— 04 «— О иЛ О «— СП О t— о HI о pq X ил -4- т— 04 ил О СЛ Г— 00 ”4- Q X о о X X pq о т- fQ т— ж— Ен 4-О4СН’— 43СЛСЛиЛ43'4- X X pq UH UH HI О pq pq ил ил ил ил S СЛОСЛ0043СЛ04304’— Eh Q ил ил О н СО Q ил ил Z ил ил <c CO О т— Т— X Ен о — х г— <■ < СЛ т— <— т- СЛ т- СП СПСП 4- 2 О • • fXi ct» co о • • X • • II II II W CO СП о\ со о 3 СП СП СП СП < О и 1 Ен X Ен X х-х 1 Ен Ен X т— 04 04 сл сл ил ил ил ил HI HI X X со X X W— Е-< X X X X о о о О О О СЗ СЗ о о СЗ • Ен Ен X < о HI О X СО X < о < о X 1 1 | 1 1 1 1 1 1 1 ил СО СО X Ен Ен X X HI X Ен Ен ■Ен Ен X X X X X X X X X X X о о Еч СО СО •» X Ен 00 X X СО X сл сл о- СП СО 04 00 43 о 04 X X X Ен X X X 43 СП о ил о ел ил 43 ил II о о О СО HI О 00 со т— W— ел г— сл сп о о X < с pq X X Ен X X Е СЗ 04 43 1— И- СП СП г— СП х<- СО HI HI X X О X >с »— 04 04 ,— т— сл т— 04 п- X Q X pq со >Н X HI X X о ил 04 ил о сл 43 СИ ”4- < со X X о X X с 04 СП т— 43 СЛ сл ил 43 xj- О О со S 11 о 3 X X СО X X Ен • сл О сл 00 43 СЛ о 43 04 Г— .. X X < 3 X Z * Ен X X X X X X Д О о со HI X О О Sd 1 О О X сл •»— «— СЛ »— сп СП СП ”4“ 60
'Петров' — идентификация программиста; MSGLEVEL= (2,0) — объем и содержание выводимых сообщений системы в про¬ цессе выполнения задания. Заключенные в скобки подпараметры имеют следующие значения: 2 — в листинг включаются только записанные в задании (входные) операторы ЯУЗ; 0 — в листинг не включаются сообщения о распределении устройств для наборов данных; Т1МЕ=10 — допустимое время работы центрального процессора для выполнения всего задания; CLASS=C — класс, в котором будет выполняться задание. Оператор ЕХЕС, записанный в третьей строке листинга, содержит следующую информацию: FORRGCLG — имя используемой в задании каталогизированной процедуры; PARM.FORT=SOURCE — параметр, указывающий список заданных опций ком¬ пилятора. В нашем примере — опция SOURCE означает, что листинг будет содержать текст исходной программы; PARM.LKED='LET,LIST' — параметр, содержащий список опций редактора свя¬ зей, где опция LET означает, что заданию предписывается "выполнение" до конца даже при ошибках с кодом возврата 8; опция LIST означает, что на печать выво¬ дятся управляющие предложения редактора связей (в данном задании — предложение LIBRARY). В четвертой строке листинга, соответствующей второй части упрощенной схемы, находится DD-оператор с именем FORT.SYSIN, добавляемый на шаге компиляции. Он описывает входной набор данных, в котором содержится исходная программа пользователя. Позиционный параметр * указывает на то, что исходная программа сле¬ дует во входном потоке непосредственно после этого оператора. Следующие три строки листинга, начинающиеся с префикса IEF, соответствуют третьей части упрощенной схемы. Это сообщения планировщика заданий о выполнении и завершении шага компиляции (STEP/FORT). Первая из этих строк с префиксом IEF142I означает, что шаг FORT закончился с кодом завершения — 0 (CODE 0000). Две следующие строки с префиксами IEF373I (START) и IEF374I (STOP) сообщают о про¬ цессорном (CPU) времени, затраченном на выполнение шага FORT (0MIN 01.97SEC) и об оперативной памяти, выделенной операционной системой для выполнения этого шага (90К). Рассмотрим фрагмент листинга (рис. 2.2) , соответствующий четвертой части схемы (рис. 2.1). Он состоит из двух страниц PAGE 0001 и PAGE 0002. Каждая стра¬ ница начинается с информационной строки со следующим содержанием: ОС ЕС FORTRAN ST 56-02.84 — сообщение о версии операционной системы; MAIN — имя модуля; DATE 08.02.84 (039) —15.50.28 — дата выполнения задания; PAGE 0001 — номер страницы. На первой странице (PAGE 0001) расположен текст главного модуля программы (MAIN), который состоит из 43 предложений (строк листинга). Числа справа от текста являются номерами предложений. Эти номера называются также ключами, иденти¬ фицирующими каждую строку задания в наборе данных (архиве), где оно хранится. В строках листинга с ключами 289900—289985 помещен основной комментарий к программе (признак комментария — символ С в первой позиции). Текст коммен¬ тария заключен в рамку из звездочек и содержит математическую формулировку задачи. В строках листинга с ключами 289990—290105 напечатан непосредственно текст главного модуля MAIN. Слева от текста программы в виде колонки четырехразрядных чисел (0001, . . .,0022) напечатаны порядковые номера операторов в модуле, присваи¬ ваемые во время трансляции. 61
На второй странице (PAGE 0002) модуля MAIN сразу за информационной стро¬ кой, которая имеет такой же вид, как и на первой странице (PAGE 0001),следуют четыре строки, содержащие системную информацию о модуле MAIN. В первых двух из них находится список действующих при трансляции опций (* OPTIONS IN EFFECT *), определяющих состав листинга. Здесь: ID — печать ссылок на операторы исходного модуля в сообщениях об ошибках; DKOI — кодировка исходной программы в двоичном коде; SOURCE — печать текста исходной программы; NO LIST — запрет печати объектного модуля в ассемблерной форме; NODECK — запрет перфорации объектного модуля; LOAD — направление объектного модуля во входной набор данных редактора связей; NOMAP — запрет печати плана распределения памяти для объектов исходной программы; NAME=MAIN — имя модуля; LINECNT=70 — число строк на странице листинга. В третьей строке находятся данные (* STATISTICS *) о длине модуля, где при¬ веденные записи истолковываются так: SOURCE STATEMENTS=22 — число операторов исходного модуля; PROGRAM SIZE=1382 — число байт объектного модуля. В четвертой строке (* STATISTICS *) помещено сообщение о том, что в ходе трансляции ошибок не обнаружено (NO DIAGNOSTICS GENERATED). Части листинга, соответствующие пятой и шестой частям упрощенной схемы, содержат информацию компилятора о трансляции следующих двух программных модулей: подпрограммы RUNGE и подпрограммы-функции DERIV. Эти части листинга по структуре совершенно аналогичны описанной ранее четвертой части схемы и со¬ держат: информационную строку с именем модуля (RUNGE или DERIV); текст модуля подпрограммы с порядковыми номерами операторов (слева) и ключами (справа) : ключи с 290110 до 290210 — текст RUNGE, ключи с 290215 до 2.90245 - текст DERIV; список опций, действующих при компиляции (* OPTIONS IN EFFECT*), дан¬ ные о модуле и о наличии или отсутствии ошибок, обнаруживаемых компилятором (* STATISTICS *). Замыкающая строка в шестой части схемы имеет вид: * STATISTICS * NO DIAGNOSTICS THIS STEP и означает, что в ходе трансляции всех модулей сообщения об ошибках отсутствуют. Следующий фрагмент листинга (рис. 2.2), соответствующий седьмой части упро¬ щенной схемы (рис. 2.1), содержит три строки, которые начинаются с префикса IEF и являются сообщениями планировщика заданий о завершении работы перекодиров- щика на шаге компиляции (STEP/TOLM). Информация в этих строках имеет то же значение и представление, что и в сообщениях IEF на шаге FORT (5—7 строки листинга на рис. 2.2). Следующие два оператора ЯУЗ в листинге соответствуют восьмой части схемы. С них начинается шаг редактирования. Эти операторы помечены ключами 290255 и 290260 и представляют собой модифицируемые или добавляемые DD-операторы шага LKED, подключающие необходимые библиотечные наборы данных (SSPFST). Параметр первого из этих DD-операторов DISP=SHR обычно записывают для системных библиотек; значение SHR указывает, что названный библиотечный набор данных су¬ ществует и в режиме мультипрограммирования может одновременно использоваться несколькими заданиями. Второй DD-оператор с именем LKED.SYSIN, добавляемый на шаге редактирования, аналогичен рассмотренному DD-оператору во второй части схемы (рис. 2.1). 62
Следующий фрагмент листинга соответствует девятой части схемы и состоит из пяти строк (рис. 2.2). В этих строках помещен текст управляющего предложения редактора связей и сопровождающая его системная информация. Здесь первая и вторая строки представляют собой заголовок листинга редактора, в котором указан объем оперативной памяти, отведенной редактору связей (128К) и заданные опции редактора LET и LIST. Поскольку в нашем задании используется опция LIST, то на листинге присутствует текст управляющих предложений. Стоящему в третьей строке такому предложению предшествует специальный номер сообщения IEW0000. В нашем примере управляющее предложение имеет вид: LIBRARY LIB (RK1) и помечено ключом 290265. В нем указано имя подпрограммы RK1, вызываемой из библиотеки SSPFST прикладных подпрограмм на языке Фортран. Стоящая за этим предложением строка (**** MAIN . . .) является сообщением редактора о записи созданного загрузочного модуля MAIN в соответ¬ ствующий системный набор дачных. Следующие три предложения листинга, соответ¬ ствующие десятой части упрощенной схемы, начинаются с префикса IEF. В этих предложениях находятся сообщения планировщика заданий о завершении шага редактирования (STEP/LKED). В следующих трех строках листинга, также начинающихся с префикса IEF, рас¬ положены сообщения планировщика заданий о завершении работы перекодировщика на шаге редактирования (STEP/TOLML). Эти строки соответствуют одиннадцатой части упрощенной схемы. Находящаяся за этими сообщениями строка листинга соответствует двенадцатой части схемы (рис. 2.1) и является оператором языка управления заданием, который применяется для ввода исходных данных на шаге выполнения задания. В нашем при¬ мере вводится одно числовое значение 0.1, которое в листинге не отражено. Фрагмент листинга (рис. 2.2) , соответствующий тринадцатой части упрощенной схемы (рис. 2.1), относится к шагу выполнения и состоит из 13 строк, в которых содержатся результаты решения задачи. В первой строке результатов напечатано вво¬ димое значение Н=0.1. Во второй — заголовки к четырем столбцам выводимой ин¬ формации: X (значение аргумента) ; решение по подпрограмме RUNGE; аналитическое решение; разница результатов между двумя решениями. Затем следуют десять строк числовых значений полученных результатов и в последней, 13-й строке — результаты решения по стандартной подпрограмме RK1. Следующие за результатами три строки листинга, начинающиеся с префикса IEF, соответствуют четырнадцатой части схемы. В этих строках находятся сообщения пла¬ нировщика задания о завершении шага выполнения (STEP/GO). Заканчивается листинг двумя последними строками с префиксами IEF. В этих строках помещены сообщения планировщика заданий о времени завершения всего задания (ОМIN 04.66 SEC) и о занимаемой задачей оперативной памяти (24 Кбайт). Рассмотренный листинг завершенного задания с получением верного решения и его упрощенная схема будут использованы в следующих трех главах для пояснений листингов, полученных в результате выполнений той же самой программы с допущен¬ ными в ней различными ошибками. При пояснении встречающихся в листинге сообщений об ошибках и о причинах их вызвавших, приводится фрагмент упрощенной схемы листинга, содержащий оши¬ бочное предложение. Это предложение для наглядности помечается слева знаком •, а конкретный символ, вызвавший ошибку, там, где это возможно, помечается внизу знаком .
ПРИМЕРЫ ЛИСТИНГОВ С О5Ш’5БКАМИ ГИРАТОРАХ ИЗЬ?КД УПРАВЛЕНИЯ ЗАДАНИЯМИ Рассмотрим группу листингов (рис. 2.3—2.5), полученных при наличии ошибок в операторах языка управления заданием. О таких ошибках свидетельствует сообщение с индентификационным номером IEF452I, с которого начинается каждый из этих лис¬ тингов: IEF452I < имя задания > JOB NOT RUN—JCL ERROR (задание не выполнено из-за ошибок в управляющих операторах задания). Пояснения к листингу на рис. 2.3. Сообщение с номером IEF612I означает, что процедура с указанным в операторе ЕХЕС именем FORRGCLC не найдена в системной библиотеке каталогизированных процедур SYS1 .PROCLIB. Ошибка допу¬ щена в операторе ЕХЕС (третье предложение задания) : Г1 //РТ000220 JOB ... // ЕХЕС FORRGCLC,PARM.FORT=SOURCE,PARM.LKED=LET tt В записи имени процедуры вместо FORRGCLG ошибочно указано FORRGCLC. Пояснения к листингу на рис. 2.4. В задании допущено две ошибки. Первое сообщение с номером IEF611I означает, что указанный шаг задания не найден в каталогизированной процедуре FORRGCLG. Ошибка состоит в нарушении последо¬ вательности шагов FORT и LKED при задании параметров компиляции и редактиро¬ вания в операторе ЕХЕС, где неверная запись имеет вид: Г1 //РТ000220 JOB . . . // ЕХЕС FORRGCLG,PARM.LKED=LET,PARM.FORT=SOURCE Д Порядок записи параметров PARM.FORT и PARM.LKED должен соответствовать порядку следования шагов задания в процедуре FORRGCLG, то есть оператор ЕХЕС . должен иметь вид: // ЕХЕС FORRGCLG, PARM.FORT=SOURCE, PARM.LKED=LET Второе сообщение с номером IEF605I указывает на то, что не найдено поле опера¬ ции в управляющем операторе задания. Ошибка допущена в записи DD-оператора: г-12 • //GO.SYSPN DD* гс Здесь между DD и * отсутствует пробел. Ошибочный оператор не распечатывается на листинге. Пояснения к листингу на рис. 2.5. Сообщение с номером IEF6211 означает, что оператор ЕХЕС содержит признак продолжения, но следующее предложе¬ ние не является его продолжением. Ошибка допущена при написании списка параметров в операторе ЕХЕС: Г1 //РТ000220 JOB . . . // ЕХЕС FORRGCLG,FARM.FORT=SOURCE, PARM.LKED-LET К 64
Наличие пробела после запятой перед текстом PARM.LKED=LET заключает этот текст в комментарий. В каждом из приведенных листингов встречается сообщение с номером IEF604I, которое является следствием ошибок, описанных ранее. Как видно из примеров приведенных листингов с ошибками в операторах языка управления заданиями, информация, выдаваемая на печать, содержит в себе лишь управляющие операторы и сообщения о имеющихся в них ошибках. IEF452I РТ000225 JOB NOT RUN-JCL ERROR //PT000225 JOB (PT0002 ),'ПЕТРОВА ’,MSGLEVEL=(2,0),TIME=10, // CLASS=C ’ // EXEC FORRGCLC,PARM.FORT=SOURCE,PARM.LKED=LET IEF612I PROCEDURE NOT FOUND //FORT.SYSIN DD* 290305 IEF604I INPUT STREAM DATA FLUSHED //LKED.LIB DD DSN=SSPFST,DISP=SHR 290665 //LKED.SYSIN DD * 290670 IEF604I INPUT STREAM DATA FLUSHED //GO.SYSIN DD * IEF604I INPUT STREAM DATA FLUSHED Рис. 2.3. Листинг с ошибкой в операторе ЕХЕС языка управления заданиями (ошибка в записи имени каталогизированной процедуры) IEF452I РТ000226 JOB NOT RUN-JCL ERROR //PT000226 JOB (PT0002),' ПЕТРОВ ',MSGLEVEL=(2,0),TIME=1 0, // CLASS=C // EXEC FORRGCLG,PARM.LKED=LET,PARM.FORT=SOURCE //FORT.SYSIN DD * 290715 //LKED.LIB DD DSN=SSPFST,DISP=SHR 290940 //LKED.SYSIN DD* 290945 IEF605I UNIDENTIFIED OPERATION FIELD IEF604I INPUT STREAM DATA FLUSHED IEF6111 OVERRIDDEN STEP NOT FOUND PROCEDURE Рис. 2.4. Листинг с ошибкой в операторе ЕХЕС языка управления заданиями (в списке параметров нарушен порядок следования параметров для шагов компиляции и редактирования) IEF452I РТ000225 JOB NOT RUN-JCL ERROR //PT000225 JOB (PT0002),' ПЕТРОВ ',MSGLEVEL=(2,0),TIME=10, // CLASSIC // EXEC FORRGCLG,PARM.FORESOURCE, PARM.LKED^LET IEF621I EXPECTED CONTINUATION NOT RECEIVED //FORT.SYSIN DD * 290990 IEF604I INPUT STREAM DATA FLUSHED //LKED.LIB DD DSN=SSPFST,DISP=SHR 291215 //LKED.SYSIN DD * 291220 IEF604I INPUT STREAM DATA FLUSHED //GO.SYSIN DD * IEF604I INPUT STREAM DATA FLUSHED Рис. 2.5. Листинг с ошибкой в списке параметров оператора ЕХЕС (наличие пробела после запятой перед PARM.LKED) 3 Под ред. И. А. Кудряшова
2.5. ЛИСТИНГИ С СИНТАКСИЧЕСКИМИ ОШИБКАМИ На рис. 2.6—2.8 представлена группа листингов с ошибками, выявленными на шаге компиляции. В целях экономии бумаги комментарии к модулям программы, предусмотренные структурным программированием, в рассматриваемых рисунках опущены. Информация об ошибках выдается в виде диагностических сообщений с префик¬ сом IEY. Сообщение об ошибке появляется в тексте модуля непосредственно за опе¬ ратором, в котором она обнаружена. Под символом оператора, начиная с которого он не может быть истолкован как правильный, печатается знак Я . Далее печатается текст сообщения об ошибках в этом операторе. В одной строке листинга может раз¬ мещаться до четырех сообщений, пронумерованных в соответствии с порядковым номером ошибки среди ошибок данного оператора: 01), 02), 03), 04). Сообщения об ошибках, которые невозможно указать в одном операторе (например, неописанные метки, незакрытые циклы DO), печатаются после текста исходного модуля. На листингах, полученных в результате допущенных синтаксических ошибок, появляется дополнительная информация по сравнению с листингом верного решения (рис. 2.2) . Эта информация расположена на второй странице (PAGE 0002) в строках, помеченных * STATISTICS* , в которых сообщается следующее: число выданных диагностических сообщений об ошибках в данном модуле; наибольший код серьезности ошибок. Перейдем к рассмотрению листингов с синтаксическими ошибками. Пояснения к листингу на рис. 2.6. В основном модуле MAIN допу¬ щены три синтаксические ошибки: г4 ОС ЕС FORTRAN . .. MAIN . . . PAGE 0001 0004 10 0012 0020 40 FORMAT(F5,1) XX DO 30 1=1,Н П WRITE (6,30) ANSX,ANSY И Сообщение с номером IEY0013I вызвано ошибкой в предложении 0004, где запи¬ сано F5,1 вместо F5.1, на что в листинге указывает символ XX- Сообщение с номером IEY0001I означает, что в качестве верхней границы пара¬ метра цикла вместо переменной целого типа незаконно используется переменная вещественного типа. Это сообщение вызвано тем, что в предложении 0012 вместо переменной N ошибочно написано Н. Сообщение с номером IEY0005I указывает на то, что в предложении 0020 оши¬ бочно записана метка 30, не являющаяся меткой оператора FORMAT (должно быть записано 50). Дополнительная информация о рассмотренных ошибках появилась в последней строке данных о модуле MAIN: г 4 — ОС ЕС FORTRAN . . . MAIN . . . PAGE 0002 ♦STATISTICS* 003 DIAGNOSTICS ‘GENERATED,HIGHEST .. . Здесь после слова * STATISTICS* следует число 003. Это значит, что в данном модуле было допущено три ошибки, а после слов CODE IS цифра 8 означает: ошибка настолько серьезна, что может сделать невозможным обработку на следующем шаге выполнения задания. 66
о * д * X н >^г СЛ * д /—< * ш М’ • * н ■> * 00 ' т— * •к д * • | * X о * о •к О см •* * со X еч * о о Д о 1/Л * д С * > т— СО • • * < еч * ш II г— 00 иЛ * «к д * pg г- о •* * X z-ч с=5 * X S • • * со О X ¥ н ч— д О * д Д СО * си Еч о ЕЧ * * с > д * о •* с • * •* * - д * X Q о * д * •е о Н •к * X X* д * г—х о •к Еч S о * * д — о. см Д о V— * д ** S * *00 с Д *■ * X н д й * Д • о II и 00 Р о * •к X Осо * *о □с Д Q О Д к— * н . - § с * г-ч см I Д Д о О * X н S д х д: * X н д ф > X о д * •*«— * * Д Д Д с*л X р ♦ н * о * • О <- ю Д • Д ’«з- ■*± н * X о д д • * см д — о О Q иЛ LTX с д * *Еч * CQ3 д S^-г > гл О (Л й О W— <г— X * д > 1 д S д «* •» —’ с О • • •» * -о н • д Еч н X гл X Д ол СГ\ > н * > 3 д о 5 • •* Q гл с’Л н — X * н д д * О с си Д о о д О *г-^ О Д z-Ч Q Д — О Й ^н см «— iZ ю CQ о О ”4- м- д О Н <- д д — s • х д □ д *Д X О д О 00 00 Q — X * □ о Q • Дю 1ЛО •» д * 1 о 40^ 3 Д Р ' ~ил X о Д о т— д д т— о Д'— д '-'Еч о Еч О 1 Ен Д О X Д с -- <г- Д о Д Д II X н + д > д < X а со К Д С Д —' ЁЧ •»х • 40's-г н с * н х 1 Еч § В II QCO 00 > Й Еч Д laE д Д^Еч Ен со X X Д Д н д X Еч Д Еч Еч • Е S V-Z Д О Д С S о § и II II II Д О * • Д Еч СО СО см д д с § и р д н Еч Д Еч S Ч гл И X Д Д X и ф •к О Р о Еч С Еч Е с д~ Д Н Е 2 т Д О 1 X д С О НДС д о с д о д О н X СМ • Д 40 Д Д Q Д глДОНОО^ДС Р г— О ^5. X ОЛ «— * о та о д д о о 1- т о < X X Еч Д СО Еч ЕН ЕЧ о Д ил чо Д Д ** < д д СО я- Н «— V— Н О £ОО Д Q д д Д CQ О Q Д W < г—Ч z—X О О д д Г— т— О Д Д Еч Д Д Еч О О О Д Н СО Д Д Д * ♦ \о II О СО Еч Еч О * ¥ см СО Д X 1 СО со д * * см СО СО * * О СО* н н н О <— см с*л * ил 40 Г- 00 ол о <— см * гл ил 40 г- со О Д Д Еч см гл ”3- Д о о о о * о ООО О<- Г- т— * V— г- т— к т— V— о ОХ д 'М- Г- Г— о о о о * о ООО о о о о * о ООО о о Ен Д О w— ГЛ с*л О о о о о * о ООО ООО о * о ООО о о Д д д д д о * *
0019 30 CONTINUE 290815 0020 40 WRITE(6,30)ANSX,ANSY 290820 * 104 о см * CM СЛ о * 00 00 о * О о о * 04 04 * CM см 2 * x-x о ♦ x~x * 40 2 * • * * я— * н * Рн * т— * LT4 * «ч 1Г4 * «» • * II СЛ * х * си • ♦ 2 LT4 * W— * • 1 * •» Х~X * 04 * 40 СЛ ♦ • О * ' X * <— -3- * И 00 * 2 • * «— см * х_х о * •ч • * - 00 * II о * X * СП 2 * 2 Ен * * Q * • • * т— * X ж СП * 2 * 2 О X 2 О Ен h in CH 2 2 о X * X * О * 2 * * «— см О * см см 2 * о о * о о о * О * * г-тотощотототот о orwn-inin^OkD >• t— оо ао 04 сп о ооосооосооооососооосоаососо сн ооосэоооооооооо о СП СП 04 СП СП СП СП СП СП СП СП СП 04 04 2смсмсмсмсмсмсмсмсмсмсмсмсм см о с 2 LC4 104 Q СИ Ен см О НОЙ О 2 • > 2 2 ао * •* 2 >02 X О 2 О о сп 2 х • 2 и 2 Ен * х-хх-х чХЭ Q 2 Ен )-Н «- см X О Ен ‘CH Q X Ен Ен — см 2 ♦ * -о см 2 ы LT4 LC4 ЕН Ен 2 О X • + CH 2 ы О О СЛх-х ы ы X X + + Ен сл 2 2 •» «ч X X + X О Q О X + 2 - pq 2 2 см см ~см ЕН о О рГ II < 2 2 * + + + и 2 Х'-' X X X X * 2 СП pq СП pq •Х-Х х_х х_х ^_х • 2 Ен 2 О О О О О см О м 2 2 2 2 2 2 + СИ -3 § О о X О О О О — 2 •*2 2 2 2 Ен 1-1 2 СИ <— ж * * * v_x 2 X О II Ен о РР 2Н2222++ и X i—1 2 *2 н п и и X X х-х Q 2 Ен Ен 1-10 2 *— см сл и II ы СП сп -^Ен pq * I! -- Ен Ен Ен Ен X X х_х Q < О 002 > LT4 1—I о Н 2 2 2 • О • О 2 О О см 2 2 он н смр > О О СИ LT4 2 2 сл 2 2 о 2 2 о ЕН *— см ж * * * оооооооосооооо о о ооооооооооооо о О ***********01) IEY011I ОТСУТСТВИЕ РАЗМЕРНОСТИ******************************************** 0015 RETURN 290905 0016 END 290910 ОС ЕС FORTRAN ST 56-02.84 RUNGE DATE 08.02.84(039)-15.43.55 PAGE 0002 Продолжение рис. 2.6 68
«— ИЛ О ИЛ О CM О «— СМ СМ ГЛ О О СП СП СП СП о о о о о о о СП СП о> о Pq см см см см М о о 2ч 2ч О UX "«Ct СП СП о о СП СП см см ИЛ 1ГЛ LT\ ПЛ • • о гл гл ад- ад- ад- 00 • • 00 1/Л ил СИ 7 7 1-1 z-> — ад СП сп ад 2ч W ГЛ с*\ ад и Р о о н; s О — ад о pq О ’Ч»- j=t ад О N 00 00 ад -г— 1-1 >н • P СИ Ен см см Э Ы о о о О Оч • • P 3 w со со ад •ч cd > о о ад X О pq О О си ад ад а pq и cd ЕН Ен § Р 2ч Ен < < ад ОН -сп Р >н « ад 00 о ад- ад ад ад ад о 1СЛ о о о Д 40 W I *о — ад z-~X >» ен ад О Ен е сп ад ад * ь-н ы ад • д ад ад •ч см =х о Р О ад * ■ ад > GO > X •» Ен ад ад ад ад и < ад и о ад о ад ад -* ад ад адад сп ад р Ен ад сп ад о ен ад — Ен «— о ад ад ад > 1 о си ад ад о ад — Г*Н -ад ад 2ч ад ад ад сп ад х ад О и Ен U •р ад X < ад * ад ад Ен Ен ад • СП СП ад О см ад ад О 00 ад и ад 00 ад ад ад ад • ен ад • О О см о ад ад см ад < о ад ад ен ад о * * ад ад 1 ад ад ад ад | ад ен О Р 40 ад ад ад адчо о о СП ИЛ ил ад ад т— ад ад о ад ад О ЕН Ен ад ад СП СП * * ад ад сп си ад ад ад ад о о < ад ад ад ад си сп ЕН ЕН Ен Ен ад ад сп си ад ад о о ад ад о о ад ад ен ен ад ад СП 2ч ад < и Р о О ад о ад о го -г— ад >н ад СП Ен ад о ад ад < ад •» ад > ад ад ад и о СИ ад и ад ад 2ч Ен О Ен -СП ад ад ад-ад -о ад ен ад ад си ад ад ад ад ад ад ад о рГпч ад - ■ ад ад •« ад ад ад II < СП о ад к > сп ад сп ад ад ад ад ад о ад ад ад ад сп ад ад о ад -р s ад ад си си о и ад о о X <нн Q Н Ен Н Н СП CH СИ Р < О О Ы pq ад s О О О х с < * * ад» ад ад ад ад о Р Р о о СП ад ад т— ил ад ад о о ад ад о о ад ад * * * ад ад СП СП СП ы н о о О 1-1 ад ад сп сп ад ад ад ад ад сп си со Ен Ен < -< 2ч 2ч Ен Ен О <- см гл ад- О oom/шоооод > * * * * о о о о ад о о о о о о ад о О ад ад ООН НН нн ы Ен ЕН ЕН Ен Ен <х; х <j 2ч ад ЕН Ен Ен О О 0Э СИ СП * * * * * ад СП ад сп СИ ад ад ы ад 1-Н ад < ад < ад Q о о о и о о о о о ад ад ад ад ад СП о СП о СИ о 40 ад о НН о ад ад о Ен о ЕН • ад • 1-Н • ад о ад о ад о ад о ад о ад о ад о О О ад о ад о ад О ад НН ы ад •х ад Рч о о о о о о ад ад ад СП СИ СП о ад ад ад ад ад ад» о 0ч 2ч < ад о 'О о о о о о о ад ад ад ад- ад- ад ад ’И- ад м- 2-1 ад- ад- 'И- ”М- •*± ад ил ил ад ил ил ад ил ил ад ил О — — ад — — ад <— т— ад» -- О • • ад • . ад • • ад • СП СП СП СП СП СП СП Р ел гл Ен ел гл Ен ел гл Ен гл ад о о Cd О ооО о о О о о ад- ад- ад: ад м- ■м- ад "4- ад ад- О 00 СО ен 00 00 00 00 оо II СП сп СИ I Ен ад < Ен X Ен < Ен ад ад сп ад ад ад ад ад р < о ад < О < О pq ад Еч ад >Ен Ен - •Ен Ен -ЕН Ен СП СИ - СП СИ СП СП СИ ад» ен О\\И ад. м ад ад X 2ч ад И СИ ад ад СП ад о ад ад О CH S S И ад Q Q Ен s о < р Д ад * pq pq ад ад SOOW 1 ад ад 1 о о 1 о ад ад ад ад ад ад ен Ен * о 2ч w ад ад \х^ 2ч\ ад ад ад pq р ад Ен ад ад ад ад; Ен ад ад ен ад 2ч Q Ен ад сп ад ад ад СП Pd pq сп ад ад сн ад ад ад ад сп Ен Ен Ен ЕН ад ЕН | сп сп ад >н 1 СП СП 1 сп сп ад 1 СП ад сп СИ ад ад ад • • ы НН н ад ад >н Ы 1-1 ад- г- г— ад ад о г— г- о г— г- • о г- »-глглададсмглс^смглглОсмгл адРчадрРададРчадРчРчОадРч pq MHWHN НЫНЧ\НН ННН\\НННННН\НН IEF374I STEP /GO / STOP 84039.1544 CPU OMIN 00.00SEC MAIN IEF375I JOB /РТ000226/ START 84039.1543 IEF376I JOB /РТ000226/ STOP 84039.1544 CPU OMIN 02.23SEC 69
I/O О I/O О >- 1ЛО * 1Л01Л01Л01Л * О 1/0 О I/O О I/O О I/O * С— СО СО СП О СП О * О я- ■ <— см см со со * 'Ч' I/O I/O 40 Г— Г— * СП СП СП СП О СП о * О О О о о о о * oooooooo * о о о о о с > 1— * W— • г— Т— W— «— т— * *— т— V— *— я— ■ «—»—<— * СП СП СП СП СП СП * СП СП СП СП СП СП СП * СП О> О> СП СП СП СТх СП * СМ СМ СМ СМ Р см 1 см * см см 1 см см см см см * см см см см см см см см * о * * * <q * * * р * * * * * * * * * * * И * * * О * со * * Р ♦ •— * * Р * • * * Р * * * * м- * * S * • ♦ * * UO * * * т— * * О ♦ о 1 * * Р * СП ^-х ♦ * • * СП * ♦ 3 * со * * и * а о * * д ♦ ЕЧ ’X-*’ ♦ z—х * * * \ р * * 00 * СП и * Z—X * • ♦ • ЕЧ * * о см * Г- * * и * И о * 1 X * о * •» со • ♦ * со ♦ X Еч * о Ю 00 * UO р * С * «— г— о * • < * Еч * II • * 1Г\ •к * И ♦ и W— р ♦ * X Z-X * 13 * о Еч * • со о * X * еч < * о р р ♦ СО ♦ ЕЧ р р * * <5 > * И * * ЕЧ * • •ь •» * И * S’-ь * о р р * * о о * X * с * * Еч * о * X* * И р * см И •* W- Р * * * ' Z Р * X ЕЧ * и д * II II 00 р * о * Х~ * о со * р Р о Р * Т- еч * 3 < ^-х * И И о О * \ X ио ЕЧ * И X * > X о * р *»— X * =3 * * и Р ■м- * X ЕЧ * о • * р • И 'М- Р * * X о Д * и • см ♦ о S Р 1/0 Ю ЕЧ * р -Еч * и 3 * со р о — — .-с * X К >~ * и р * < о • • * -О ЕЧ ♦ • и ЕЧ * * Р СП СП " > * еч > О Р * •» со * • - р со со еч их ЕЧ И * у—X и * Z-X * Р Р о о X § •— дн- Р^-х р * р т— о ЕЧ о X О О ”3- р и -- Х_^ * • X Р Р Xх—' С X о Р О 00 со р X РХ • ДР • и * чо ио о - * 1 о О И Р □ Р *1/0 z-sx_xp о * т— И и х^и X Еч О 1 Еч Р о ИХ Р ’-’-pop < Р II ЕЧ + И > g СО X Р Р 25 -X • Р LO S ЕЧ * ЕЧ X 1 Еч Il Р < О оо р > СО Р ЕЧ uoP р р Еч Еч Еч X X И М X Еч Р еч Еч • X < 3 ИО И и 3 РО|| II II II X • X Еч СО СО см Р Р Р < а Q р ЕЧ ЕЧ р § Еч 3 со »-) X М И О * О X О ЕЧ < еч р < р^ р ЕЧ Р <г Х“Х X О W 1 X g н<о И < И О < еч Р О X О ЕЧ см • И мэ Р ООррРОНО о см И СР СО о § х I/O о о * т— о X И о о о о X X X Еч Р СО Еч Еч Еч И о И МО И Р -* < р р со ЕЧ *- ЕЧ ЕЧ О О О Р Р X X Р а х О Р Р W <5 ^-х ^х. о О И р W— ч— Р s Еч И Р Еч О о О X * * * о- II О СО Еч Еч О * * * см СО XX 1 СО СО Р * * * см СО СО * * ♦ о < О *ННН О — см * со i/o <о г—ао СП * о ,— см со ЮчО * О Р X Еч СМ СО ”4- Р О о * о о о о о о о * т— х— «— т— »—«—«— * О О X Р хЗ-Г—Г- о о * о о о о о о о * о о о о ООО ♦ Еч X О со со О о о * о о о о о о о ♦ о о о о ООО * И р р р р О * * * WP р р ♦ * * \\ЕЧ ЕЧ ЕЧ * * * со о > ш Г'' о о >- ш 04 d s CL 70
о * 1НО1ГАО * ЦП CM ч— о ЦП О ЦП О ЦП О ЦП О UH О ЦП о 00 * 00 СП СТ к о * о о О «— ч— СМ СМ СП СП '^Н ЦП ЦП <о чО t— о * ООО * *— о О »— т— ч— ч— ч— ч— ч— ч— т— ч— * г— ч— ч— Ч * «— о О ч— ч— ч— ч— ч- - ч— ч— ч— ч— ч— ч— ч— СП ★ СП СП СП > СП * СП СП СП О> СП СП СП СП СП СП СП СИ' СП СП СМ * СМ СМ 0x1 Ох) * см РР РР Oxi СМ СМ СМ СМ СМ СМ СМ 0x1 см см см см * * о о * * < < ♦ * Д д * мэ * * • * * * * ч— ♦ * и * * Д * * ч— * СП СП * * 1— ч— * •X ♦ • • * •* * м- о "4- * II * СП * X * • со • * со * ЦП 00 ЦП * д * ч— ч— ♦ < * 1 со 1 * * * Z-X HI Z—X * •X * СП СП ♦ z-^. ♦ СП Д РР СП ♦ МО ♦ о < II Q о * •». □ * X—* Й О X—- * * О МО ■’3" * ч— * 00 Д о XI 00 * рр * • ••t*-1—I X • Z-X * Д * см S Q СО Ен см О * ч— * о д н| орр * Х^ * • Ен О Д • > * •х * 00 Д м < и 00 * * • О о о * Д > о д * II S ЦП Д 04 •* * X о рр а о о со РР X в О'. * со X ен 9 М II К Ен *• z-xz-^ хХЗ см * д <; С д Q МН <q н «—см \ J * < Ен Q д О Ен *со М X Ен Ен S ♦ z—x • • Д ад Д Д см РР •» * * -3- о. д * ч— S -О см Д HI цп цп Ен CD * ао X О м Ен И О X . .z^ + S * • д СО Д HI *Х О О СП-—Х X о * о HI рр Hl нн Д д + + Ен сп X Z—X ★ 0x1 д СП й ММ •» X X 4- Ен с; м * РР с «— О Q о - -X 4- о ч_х □ * Д X о о Д - РР РР д СМ СМ •‘СМ Q о * т- 00 о X Д а - н о о X РР РР РР Ен о. д * д с РР HI д РР II <0 Д Рч ~+ 4- + с > * сП < HI О Д м X X X X * * •X « *и н д со рр M РР X* ♦ сп X § см Д д Ен Д м О О О О см Z—X * • со д Z—X см О нн д РР д Д Д Д Д 4- о ♦ О Д и см о СО < м О м 40000- СМ о я- < о X •хД pt( Д (Д Ен •» д Д С"4 И ♦ РР Н4 РР СО л*\ ф ф ф ф X ' Д чО о — о Д * HI О II ЕН О РР д Д II д д д д + + о Ен UA • ♦ ЦП X < HI Д * >-э и и и и х х и с < РР - Хх < ч— М РР Ен Ен нод «- •— см СП II II Ен Ен § р мэ Х-Х X ■’3- СО 00 Ен РР * II — Ен Ен Ен Ен X X ы Д Д Д Ен П Ен 00 Q < О оо Д > ин 1-4 Д SOHK < и • Н д М Д • О О о лЬН § § см О О см К М о н Н см M Д HI Д Q о Д о Д < и X X 1-1 о д о HI Д 1 * ♦ о н 1 Д РР см II п О СП о Рч см РР UD Ен Ен О М мэ СО К Д X X М ,— о ЦП О О СО ЦП о о WW СП X X Рч Д о РР ООО РР Еч Рч Рч О Ен «— 1-1 СМ СП ’’З" HI СО М И со * * Д Д Д СО СО д <—X Z—X < нноо <; «— ч— Д HI HI м о о Ен СО СО Ен ЕН Ен * * Д д д со со Д * ♦ О о О Hl hi О * * Д Hl нн ЕН Ен Рч * * Ен Н < < г— * С0 СП О ч— * см О я— Д Д Ен Ен О’— СМ СП ЦП ЧО с— 00 СП О ч— см СП ч— * «— «~ СМ Ох) * см РР О О СО СО м о о о о о О ОООч— ч— ч— г— о * ООО о * о * * * * о о о о о о о о о о о о о о * ООО О * о О о О о о о о о о о о о о о о *. ♦ О о * * * ♦
un * О 1ГЧ CXJ «— о * LTX О 1ГХ CXJ H- * со со о О СП * СП О О О w— * W— W— о O W— * Т- CM СМ О w— * Я— о о <— Ж Т- V- Г- о o> * СН СН СН Ж ох ох ох CM * CM СМ pq Pq cxj * CM CM CXJ X * о О * о * < < * < * X X * X * * * * * * * * * * * ж * ел гл * с*х * я— я— * я * • • ж • * 'И co ж ■’З' * ■и •м- ж 40 * • 00 • ж • ГЛ * 1Г\ 00 LTX ж 1ГХ * V— я— ж г— ♦ 1 CH 1 ж 1 * Z—ч Hl ж X—ч * СН OX ж ох * с*л X eq СП ж с*х X * о <; и P о ж о < II * o ж * ’’Ж о pq и м- ж м- о X * 00 х О N 00 ж со X О N * * •r-х >ч • ж • —Г*- X * СМ Р* СП ЕЧ см ж СМ Р СИ * о < X о ж о < * • а S X • ж • О * 00 х < pq со ж со X * о X > о ж о •к X * bd О pq ж X о * pq о О CH X ж X и о * X pq II X Еч ж ЕЧ X II X s: < Р X X < ж < р X s Р О Еч -CH P Ж >4 р О ЕЧ Д X X ЧО pq ж 1 X X м- ■О — X ж -О X Еч pq о Ж ЕЧ Еч X s СН X HI ж ж СИ X e х HI ►X ж • hi X s X X Ж см X X X о p* ж О X pq х - pq ж СИ X - M О X ж о X э X х” 11 3 X >4 ж о HI X II X о X < - ж ж <д^ о X X pq си pq S Еч Ж Z-4 X сн ж д ФЕч-З ж ЕЧ X X X § о х х х > Ж 1 О HI X X сн о х р HI ж СП < X ■X X О X S X х pq ch S SX X X О о и X О Р ом О II X X < HI хж < S р pq X X X <г! • Р X X и X CH CH о Еч cxi •kjs? сн О □ О X 00 р” О СО HI X II X 00 р < X X х • х x pq x •Еч X • X х X > t—i р CXJ о о см О о hi р см о X Р о X < о X X ЕЧ р о X i—I W X 1 * * p HI 1 О 1 ж ж X r— X pq 40 Еч Еч О P 40 X OnPX W 40 Еч ЕЧ о о LCX О О CH 1ГЛ ,— LTX О О СП о pq Pq о X X >ч Рч Рч о >4 X X CXJ X ЕН Рч Рч о Еч X Еч X X x СН pq pq СП HI СП X X * * ж X X X СП СН X х X X сп х—ч. н ноо 3 Z-X X X о я— X HI HI X я— X X о Еч СП СИ ЕЧ ЕЧ ЕЧ о Еч СН СН X ♦ X х X СП СП М ж X X X сн * О ООНН о ж О о О X ♦ X х х X X X ж X XXX * Еч Еч <ц < ж X X < ♦ irx<o О X X Еч Еч о -- Ж см <тх -и о X X X w— * т— я— pq О О CH CH Wo Ж о о о X О О СП о * о о ♦ * * ж о ж о о о ж ж ж о * ооо О о ж о о о о * о О ж о * ж *STATISTICS* 001 DIAGNOSTICS GENERATED,HIGHEST SEVERITY CODE IS 8 ♦STATISTICS* 011 DIAGNOSTICS THIS STEP * ж 72
о CM CM cxj оч CM CM X X о о МЛ X X о о е • • а со а со со НЧ РР нч РР РР < РР <1} РР д Q д S о о НЧ о нч о и о О О рр д РР д Д со о СО о О о о о ом 1-4 о нч РР нч РР РР -4- Еч о Еч со Еч со со • НЧ • нч о НЧ о г— О РР о РР о Q о ,— О S3 о 525 • Д • • О О о О о ом О а О о о о о НЧ НЧ S Рч 2 Рч д Рч д д о О о О нч О нч нч РР РР о РР о о со СО СО о д Д Д Д д . Д д д о Рч <р Рч < РР < д д о О о О о о О о о о РР РР РР И ^4- СП со 'М- CQ ■’3- м- М* ■’З- Q ил ил х ИЛ ил д 1ГЧ ил Д ил ил ил ил О т— V— Д «— ч— Д я— т— д ч— Т— V— ч— О • • & • • « • д • • • • ОЧ Оч ач 04 ОЧ 04 ОЧ ОЧ ОЧ ОЧ Р СЛ СЛ Еч сл ел Еч ел ел Еч сл СЛ ел ел S3 о о к О о о О о о О о о о о О Д м- Д ■^г Д О 00 00 СО 00 00 00 00 00 00 00 00 II СО СО СО 1 Еч Рч < ЕЧ < ЕЧ < ЕЧ Еч Д Рч СО Д Рч ее д Д Д Q < О нч < о < о < о < О дннд -Еч Еч -Еч Еч ‘Н ЕЧ ЕЧ ЕЧ Еч СО СО СО СО СО СО СО СО СО СО Р Еч О СО 'W \\ рр Рч Д о- о- X Рч РР см см рр СО РР Д ом см СО X О д д Q о о со II Д РР РР Еч О о о < Д Д S3 * РР РР д д о о О О СО 1 X X 1 о о 1 О о ЕЧ ЕЧ Еч Еч РР РР Д Д Еч Еч * О о Д Д Д П Рч w РР w РР РР Р РР РР Q РР Еч Д Д Q S Н РЧ Рч Еч Д РР Д Еч рр рр cq со СО М РР 1-4 со РР РР СО РР РР СО РР РР о о Еч Еч И СО Еч Еч Еч Еч Д Еч Еч Д Д 1 СО СО нч X 1 СО СО 1 со со нч 1 СО со Д СО со ьч нч нч • ♦ НЧ НЧ НЧ 1-4 нч нч >ч нч нч нч н нч ом сл Q Q ом ел ОМ СЛ М" СО ом СЛ иЛчО м- г—г—РР РР о г— г- о о- г— • о Н- Г-" г~— г- '— сл сл X X см ел ел см сл сл О см СЛ СЛ СЛ СЛ Д Д Д Д Д Рч Рч Рч Рч Рч Рч О Рч Рч Рч Рч Рч МЧИ w РР РР РР И рр рр\рр РР РР РР РР нч нч нч W НЧ нч нч НЧ НЧ НЧ \ нч нч нч нч нч 73
/РТ000229 JOB (PT0002),' ПЕТРОВ ',MSGLEVEL=(2,0),TIME=1 0, 291515 / CLASSIC 291520 • HI HI СО О т— •* о М о &ч о я— »— < > < •к о о •» •» р Q • а X X Рч н о М М X «— Hl Hl о •к Рч •» • □ X HI co рэ о л-'s •* X о Рч ,— C\J "И HI о о о о X 1Г\ н о Рч * * •»,— X ’И ’’Ч' X * * HI W -Ч- нч •* * * X О Р 1Г\ 1Г\ Рч М Ы -Еч •* К н СО W м * * О СО н еч о * * Рч X 1 со со Рч * * СО * * о • HI 1-1 HI О «— <xi с*> * * 1ГЧ 40 Г'— со СП о М Н см ел х$- И о о о * * о о о о о о «— X « н-1— г— ООО * * о о о о о о о РР о о о о о * * ООО О ООО Рч Рч Рч Рч о * * М М И * * ннн * * 0015 Z=EXP(-X)*SIN(2.*X) 291610 0016 E=Z-VEC(I) 291615 0017 WRITE(6,20)X,VEC(I),Z,E 291620 0018 20 FORMAT(F10.3,3(1PE20.8)) 291625 0019 30 CONTINUE 291630 74
ltao lta * о * momomomomomom О СМ Я— LTA о 1ГА О см ГА "3- * m * ЮАаОАОГ'-Г—СООООАОАООя— я— см о О СМ ГА ГА Т#- о 40 40 40 * 40 * 40 40 40 4О 40 <0 vQ i0 <0 O'- C^“ Г"”■ 0"” г- о О Г— Г— Г— Г— о 4— 1 T— * я— * Я— 1 Я Я— V— я— я— я— я— я— я— я— ▼— я— О О я— я— я— я о СТА СТА СТА * СТА * ОА ОА СТА СТА СТА ОА ОА СТА СТА СТА СТА СТА СТА ОА ОА ОА ОА ОА CM CM CM * CM * СМСМСМСМСМСМСМСМСМСМСМСМСМ см М W СМ СМ СМ СМ м * * о О о * * < < с 40 * * Рч Рч Рч • * * ’’3- * * ,— * * * * Рч * * я— * * * * ГА ГА ГА •* * * «*л- М' • * * • • • 75
О ОЛ иЛ ил ел ел СЧ CXJ 00 о ’’Н- о о о pq и Cd Q Рч О Еч S S3 Еч pq co a H HH hP hP о Q Рч a • Pl pq •os. Еч ЕЧ w II <CO Р4 о о о о ил • • • CO СО со pq pq pq a Q Q Q HH О ни О 1-4 о 1-Н О О <* о С Й а О О О О О о и pq н Р1 нн pq 1-Н pq CO Еч СО Еч со Еч СО СЛ НН о нн о НН о Q о Q о Q о « • Й • S • о О о О о О о о О о О о о о СО СО Еч ЕН Ен Й Й СО G0 СО ООННН нн НН Еч Еч Ен Н ЕЧ < < < Рч Рч Еч Еч Еч О О 00 СО СО * * * * * о рэ СР СЭ РО ГЭ о Рч < Рч < Рч < Рч о О о О О о о и о pq pq pq ■*d- ил CQ ил ил CQ ил ил СР ил ил W •И- '<3- 'Н- -4- Q ил ил ил ил^ ил ил ил ил О ч— ч— CD я- г- :□ Ч— ,— ч— О • • Pd • «се; • • • • СЛ ел ел ел ел ел ел ел Q ел ел Еч ел ел Еч ел ел Еч ел ел о о се; О о о О о о О о о О ”<• ”3- ж 'М- ■М" ■’3- О со 00 СО со со со со 00 со со pq pq |-н со Pl pq со pq pq со pq pq Еч ЕЧ CQ со Еч Ен Еч Ен Ен Ен 1 со со нн >ч 1 СО СО 1 СО СО НИ 1 GQ СО pq со СО НН НН нн • • НИ НН НН НН НН НН >Н нн нн нн IEF375I JOB /РТ000229/ START 84039.1544 IEF376I JOB /РТ000229/ STOP 84039.1545 CPU OMIN 01.96SEC Окончание рис. 2.8 76
В подпрограмме RUNGE допущена одна ошибка: г5 ОС ЕС FORTRAN . . . PAGE 0001 RUNGE.. . 0002 REAL VEC Сообщение IEY011I указывает на ошибку в предложении 0014, именно на неза¬ конное употребление индекса после идентификатора VEC. Оно вызвано тем, что в этом предложении встретился элемент неописанного массива. Фактически ошибка допущена в предложении 0002, в котором при описании имени VEC пропущен указатель границ массива и это имя воспринимается как переменная (вместо REAL VEC(N) записано REAL VEC). В подпрограмме-функции DERIV допущена ошибка в записи имени функции: гб ОС ЕС FORTRAN... DERIV PAGE 0001 • 0002 DERIW=2.*EXP (-T) *COS (2.*T) —Y W Сообщение с номером IEY019I означает, что в подпрограмме-функции DERIV не присваивается значение имени функции (вместо DERIV записано DERIW). Сообщение об ошибке печатается после текста модуля DERIV и кроме номера с информацией содержит имя функции. Дополнительная информация о суммарном числе сообщений об ошибках во всей программе помещена в последней строке данных о модуле DERIV (замыкающем моду¬ ле программы) и имеет вид: г6 ОС ЕС FORTRAN . . . DERIV . . . PAGE 0002 ♦STATISTICS* 005 DIAGNOSTICS THIS STEP В нашем примере число 005 означает, что при трансляции программы было выяв¬ лено пять ошибок. Пояснения к листингу на рис. 2.7. В главном модуле MAIN допу¬ щено пять ошибок в следующих предложениях: г4 ОС EC FORTRAN . .. МА ГМ . . . PAGE 0001 0002 0005 0008 0009 XX REAL VEC(N) XX READ (5,1) H XX GO TO 40 CALL RUNGE (DERIV,H,XI,YI,K,N,VEC) 0021 FORMAT (/'РЕШЕНИЕ . . . ANSX=', (1 PE14,6, . . . Я Сообщение с номером IEY008I указывает на невозможность распределения памяти для массива VEC. В предложении 0002 вместо VEC (100) написано VEC (N). Эта причина вызвала сообщения с номером IEY013I в предложениях 0016 и 0017. В языке Фортран массивы с переменными границами разрешается использовать только в подпрограммах. 77
Сообщение IEY0002I после оператора 0009 вызвано отсутствием метки у этого оператора. Известно, что за оператором GO ТО может следовать только выполняемый оператор и он обязательно должен быть помечен. Сообщения IEY002I и IEY013I после оператора 0021 свидетельствуют о наличии двух ошибок. В этом предложении, во-первых, пропущена метка 50 перед оператором FORMAT и, во-вторых, в описателе поля вместо 1.РЕ14.6 записано 1.РЕ14,6 (вместо точки стоит запятая) . В предложении 0005 допущена ошибка в параметре оператора READ — вместо (5,10) записано (5,1), что вызвало появление неопределенной метки 1. Сообщение IEY022I печатается вследствие ошибок в предложениях 0005, 0009 и 0021, где пропущены метки соответственно — 1, 15 и 50, на которые есть ссылки в операторах — 0005, 0007 и 0020. Все неопределенные метки напечатаны за сообщением IEY022I. В подпрограмме RUNGE допущена одна ошибка: 5 — ОС ЕС FORTRAN . . . RUNGE . . . PAGE 0001 • 0014 2 VEC=Y « В предложении 0014 вместо VEC (I) =Y написано VEC=Y, поэтому массив VEC(N) воспринимается как переменная VEC. Сообщение IEY0007I вызвано появлением одинаковых имен для разных объектов программы. В подпрограмме-функции DERIV ошибочно записано предложение с номером 0001: Г-6 : ОС ЕС FORTRAN . . . DERIV . . . PAGE 0001 • 0001 FONCTION DERIV (T,Y) XX Сообщение IEY013I указывает на то, что ключевое слово искажено: вместо FUNCTION ошибочно написано FONCTION. Пояснения к листингу на рис. 2.8. В главном модуле MAIN допу¬ щено три ошибки: ОС ЕС FORTRAN... MAIN... PAGE 0001 0003 DATA N,K,XI,YI,XF,YF/10.,10.,0,5.'5,—1.9/ Й XX 0021 FORMAT ('... 0022 SUBROUTINE RUNGE... Сообщения с номером IEY014I означают, что в операторе DATA имеются несоот¬ ветствия типов переменных с присваиваемыми им значениями. Так, в предложении 0003 переменным целого типа N и К ошибочно соответствуют вещественные константы 10. и 10., в то время как они должны быть тоже целого типа 10 и 10 (без точки) . Сообщение с номером IEY013I вызвано несоответствием числа переменных и числа присваиваемых им значений (пропущено значение 0. в предложении 0003). Сообщение IEY009I вызвано нарушением порядка следования операторов. Оши¬ бочно пропущен оператор END в главном модуле MAIN, который должен следовать 78
за предложением 0021. В этой связи нарушена нумерация предложений в модуле MAIN и следующий модуль RUNGE не выделен как подпрограмма. 2,6. ЛИСТИНГИ С РАЗЛИЧНЫМИ ТИПИЧНЫМИ ОШИБКАМИ, ДОПУСКАЕМЫМИ НА ШАГЕ РЕДАКТИРОВАНИЯ И ВЫПОЛНЕНИЯ Рассмотрим группу листингов, полученных в результате наличия в программе некоторых допущенных типовых ошибок, обнаруживаемых или на шаге редактиро¬ вания (рис. 2.9—2.10) или на шаге выполнения задания (рис. 2.11—2.19). Поскольку листинги с различными допускаемыми ошибками в программе демон¬ стрируются последовательно на одном и том же примере, а программа при этом мало изменяется (искажены лишь отдельные предложения, в которых допущены ошибки, причем при разборе листингов эти предложения специально поясняются), то в задании для компилятора использована опция NOSOURCE, запрещающая печать текста модулей программы. В дальнейшем при рассмотрении листингов за основу принимается текст задания, приведенного на рис. 2.2 с учетом допущенных ошибок в каждом конкретном примере этой группы листингов. Пояснения к листингу на рис. 2.9. Сообщение с номером IEW0132 означает, что не найдена библиотечная подпрограмма RK1. Префикс IEW в сообщениях об ошибках свидетельствует о том, что эти предложения выдаются редактором связей. В задании ошибочно пропущены операторы языка управления заданием шага редактирования, которые должны были находиться за текстом программы и иметь вид: г8 //LKED.LIB DD DSN=SSPFST,DISP=SHR //LKED.SYSIN DD * С помощью этих, отсутствующих в данном примере операторов, должна под¬ ключаться библиотека SSPFST, содержащая стандартные подпрограммы и в том числе RK1. Пояснения к листингу на рис. 2.10. Сообщение с номером IEW0302 вызвано ошибкой в формате управляющего предложения редактора связей, указанного в сообщении. В этом примере — это предложение LIBRARY; неверная запись его в зада¬ нии, отраженная в листинге, выглядит так: г9 128К LINKAGE . . . IEW0302 LIBRARY LIB (RK1) Я Сообщение вызвано наличием пробела между именем LIB и последующей скобкой. Верное написание предложения следующее: LIBRARY LIB (RK1) . Второе сообщение имеет идентификационный номер IEW0132 и означает, что программа с указанным в сообщении именем (RK1) не найдена в библиотеке SSPFST. Это сообщение печатается вместе с сообщением IEW0302 и является следствием той же ошибки. Пояснения к листингу на рис. 2.11. Сообщение с номером IHC240I указывает на то, что произошло программное прерывание по операции (системный код завершения задания — 0С1) . В программе допущена ошибка: отсутствует явное объявление имени подпрограм¬ мы-функции DERIV как точки входа. В тексте главного модуля MAIN перед предложе- 79
/РТ000236 JOB (PT0002),’ ПЕТРОВ ’,MSGLEVEL=(2,0),TIME=1 0 , 31 7635 / CLASSIC 317640 XXX AO X X ООО OA SjS AO ОА LTA о о X о АО • см о X co x X X й S5 S o X pq X p HI ЕН ЕН о S —3 ЕН о 3 3 3 co Ен pq < о s S о pq o EH о со 55 ООО CM pq х < О о XXX co х pq pq eh СО СО СО II < § со Ен С— СМ ИА РД < ч— EH г— га x EH ’’3- Q • • • HI < X • Z Я— о «— co P X О о О ООО S Ен о О J О X X Ен X s X Ен ст х X X X НН НН НН Еч Q о ЕН о X СО X P CQ X и О О О НН СО pq < X О X Q X О p X co И о р о р со ’ р p Е х О X X X о Рч О Рч О Рч Р < о § о pq < Д о О о О о О X СО S о О о • о о о НН о X СО СТА ОА ОА СТА ОА X X pq • pq СТА О X pq х гагаХгагаХгагаен О pq pq рхЗ pq ГА -d- < Q СТА (ТАР LTA LTA Q 1Л1ЛОН X Q X Q LTA LTA X Х~ о — — О — — О’— — НН co X О — — p о • «О • • О • • Рч Рч co < х О • • X М* ОА СП О> ОА ОАОАСОО < Eh рГ* ОА ОА О Q (ТА ГА Q ГА (ТА Q ГА (ТА P СО Q ГА ГА Ен X Й ooSooSooCOEh О X о о О Р О Eh • Pl X О 'И a о О соооОсоаоооосоОрэ P о X О О 00 00 со HI < CO pq X co о 1 H Ip 1 EH ЕЧ Рч X 1 Ен < а XX x X HHHH EH Eh < X X II Q<OP<OP<OOQ 00 О н Р < О ЕН ХЕнЕнХЕнЕнХЕнЕн HI 55 < pq Ен Ен гу' Ен COCO EH CO CO EH CO CO X X Ен СО СО О Р P P pq p Р Рч О pq 5 О W • X X X Eh x < pq X X X О co X X X pq X x pq 55 HI < pq < X 1 Q Q о X COEHPCOSSCOPPO co Pq 00 S S о •» * pq p 55 < < P Q О ^OOBsOOBsXXFH О O pq X О О 1 X Q Рч Рч Ен Ен PPP P О pq вд Ен H * о Р X WPi WX \\H m X х w X о X pq pq s 3 pq P pq Рч S Ен НРЕнРчНЕнНРнН y— о co о EH fb X Q EH XXCOXXCOXXO X H CO И И co о со НН EH Ен Ен Eh < X Ен X см HHZ X >-< I CO CO 1 CO CO 1 CO CO X < ГА 1 CO CO H 1 00 X N pq ,— CO О • eh EHI—IEHEHEHEHEHEHEH CM ни i—1 X о HHH>1 EH X Ен см HA’tCAlCA’tNCAH-H TA < X 5 В: см га CO CM X & Г*— Г— t*— V— О P pq r— r— • о н о ГА ГА *— ГА ГА ГА ГА X о * к о Hl я— ГА ГА Q CM ХХХХХХХХХХ® * Ен S X X X О X XXXXXXXXcm W * p * и X X\X ЕН HHHHHHHHHt— EH * < * H HH\ EH IEF373I STEP /GO / START 84039.1540 IEF374I STEP /GO / STOP 84039.1540 CPU 0MIN 00.00SEC MAIN OK IEF375I JOB /РТ000236/ START 84039.1538 IEF376I JOB /РТ000236/ STOP 84039.1540 CPU 0MIN 03.95SEC Рис. 2.9. Листинг с ошибками, вызванными отсутствием DD-оператора, подключающего библиотеку SSPFST 80
//РТ000238 JOB (PT0002),' ПЕТРОВ ’,MSGLEVEL=(2,0),TIME=5, 318125 // CLASS=C 318130 // EXEC FORTGCLG,РАШ.FORT=NOSOURCE,FARM.LKED= LET 31813 5 //FORT.SYSIN DD * 318140 IEF142I - STEP WAS EXECUTED - COND CODE 0000 U> О 40 Г- СЛ СЛ OO 00 СЛ СЛ >s Ф co ОС CD и (0 CL >Н • н ■M- о х м о о X «— <о о о о 3 «— ол Ен X см (D о О н • О. Н X з; СЛ S > HI X м ни м НИ ос <3 о hi М < р <3 < 3 о Р Н о S ос со X о m О 'И н о О о _I M о Ен о м м з; м м сс 09 см М <з < 09 о СЛ 09 S CM 09 С9 S 40 НИ о оо I ил II СЛ X • Ен О ол ф ¥ • м <3 М М р • м • • л о r— S) Ен S Ен м «— Р о см q о М <3 X Ен О 23 о о ct 09 Q О м <3 О Ф □. 3Z3 НН X 33 О 33 33 С HI 1 О Ен Р HI ни н НИ о Ен СЛ М X 2 S 1_ o Р О > X О о о о ф -т Ен М Р X М м Z3 М сл М О О Ен м 2 М р О < 09 СЛ сс с p Р ни М р CD Р р р р со X Р — <3 Р X <3 О X <3 X X со о М 09 х О о О о О О о. с I—1 33 р СЛ о м > 04 о Рч X М о о X О О 04 о ф LT4 м о М зз 1 М ил ил ил ил ил F LC\ LT4 и М х <3 1 Р ил ил 33 ил ил ил ил со 5 T— r— М ЕН о -- — р «—»—«—«— о. • • Рч Рч СЛ 09 Ен О • • X • • • • о 04 o> 09 О <3 нч 33 ОЧ 04 04 04 04 04 -& ел ел ж Э Р ел ел Ен ел ел ел ел со о О & 09 Ен р 33 о о О о о о о м- xt- X г м Ен • М рЗ О 2; ^3- м- о CO 00 ГЛ о р Р о Ен Ен О CD СЮ CD СЮ СЮ СЮ * И Ен X НН < X Р <3 СЛ ю Ен М нн Ен 1 Ен < Ен Ен S X X 09 Рч М X Ен X СЛ X X X X X X 3 сон ОДД 09 X Р < о <3 О < О о Ен Ен Р НН Р М ЕН ЕН >Ен Ен Ен Ен о 09 09 * X М нн Ен СЛ 09 СЛ 09 СЛ СЛ Ен х м О М Р S WW HI х <3 О XX XX X X 1— М М Ен > м сю сю о S X О 09 й х X ел ел [Д 09 >н HI X HI м см см СЛ X X о о о 6 Ен Ен II О <3 09 Н 1 1 СЛ Р Р о о о XX Д* Ен X М Р <3 м м о о см ООО НН х О О X X 1 О О Ен Ен и ДДДД Р нн Р о о о мм* оо Д X S XX Р М М X X XXX X Х.ХХ.х'ч Q_ Q X X М Р м ХХРД М «■— о м м ЕнХХРЕнХХХХ ММ hi О нн 09 М М СЛ м м о о Н ЕН m 09 < X Ен см см Ен Ен X Ен Ен р р 09 09 Н >ч bd <3 ел о 1 09 09 Н 1 09 СЛ М 09 р X N т— ел 09 М Н • • нн см см нн НН о о Н ИНН м нннн n-eQ Д М о ел <3 X см ел -з- СЛ см ел ’М- ил чо г-г—ММ ел г- S О М Н Г-~— f>— 9 о н- е— н- е— ел ел^г X Sd о о * X нн HI — ел ел Q см ел ел ел ел дддд 00 ^>* Ен Д Д Д.О Рч Рч Рч Рч Рч М МХХ см ММ* Р мммхммммм н н\\ Я— 1-1 нн * <3 ННН\ННННН 81
нием 0001 должен быть записан оператор вида — EXTERNAL DERIV, в то время, как в приведенном примере соответствующий фрагмент листинга выглядит так: 4 ОС ЕС FORTRAN . , . MAIN . . . • 0001 REAL VEC (100) PAGE 0001 Пропуск оператора EXTERNAL DERIV вызвал изменение нумерации операторов в главном модуле MAIN. За сообщением об ошибке в четырех строках листинга приведен план обратной трассы. В плане содержится список имен программных единиц, выполнение которых не было завершено к моменту обнаружения ошибки, а также некоторая вспомога¬ тельная информация. Порядок размещения имен в списке (графа ROUTINE) противо¬ положен порядку, в котором происходили передачи управления. В первой строке указывается имя программной единицы, в которой обнаружена ошибка (RK1), в по¬ следней — имя главного модуля (MAIN). К вспомогательной информации относится внутренний номер оператора (графа ISN), содержимое регистров связи (графы: REG14, REG15, REGO, REG1) и адрес точки входа в главный программный модуль (ENTRY POINT). В строке плана обратной трассировки, соответствующей программной единице (подпрограмма RK1), указывается номер оператора (0005), посредством которого ей передал управление программный модуль с именем следующей строки плана (MAIN). В соответствии с соглашениями о связях между модулями регистр 15 содержит адрес входа в данную программную единицу; регистр 14 — адрес возврата в вызвавшую ее программную единицу; регистр 1 - адрес списка параметров передаваемых данной программной единице; регистр О содержит результат вычисления функции. В нашем примере (рис. 2.11) из приведенной в листинге обратной трассы видно, что ошибка произошла в стандартной подпрограмме RK1, которая получила управление от оператора 0005 главного модуля MAIN. Далее за обратной трассой в листинге следует группа сообщений, выдаваемых на шаге выполнения программы, с префиксом IEF — всего 15 сообщений, расположенных до сообщений планировщика задания о завершении шага выполнения, и еще пять сообщений с идентификационным номером IEF285I, расположенных после сообщений планировщика. Все эти 20 системных сообщений несут информацию операционной системы о распределении внешних устройств для данного задания. Пояснения к листингу на рис. 2.12. Сообщения с номером IHC210I вызваны тем, что ошибочно пропущен параметр Н при обращении к подпрограммам RK1 и RUNGE. Системный код 0С1 в сообщении IHC240I является следствием тех же ошибок. Сообщения об ошибках с префиксом IHC являются сообщениями системных обслуживающих программ Фортрана о программных прерываниях. В примере дважды допущена одна и та же ошибка: при обращениях к процедурам RK1 и RUNGE пропущен параметр. В программе ошибочно записано: 4__ ОС ЕС FORTRAN . . . MAIN . . . PAGE 0001 • 0006 CALL RK1 (DERIV,XI,YI,XF,YF,ANSX,ANSY,IER) H • 0009 CALL RUNGE (DERIV,XI,YI,K,N,VEC) Верная запись этих предложений должна иметь вид: 0006 CALL RK1 (DERIV, Н, XI, Yl, XF, YF, ANSX, ANSY, IER) 0009 CALL RUNGE (DERIV, H, XI, Yl, К, N, VEC) 82
ir> О Ш о -'З" Ш ШМЭ CM CM CM CM О in 00 00 ”3- ”4- ОЛ O> O> O CM CM CM CM СП O> CM CM . о О о О х х X а X СО СО СО О СО | о см СП — Ы о Ш 00 СО «— г- хо Ен о О г— о г- II • • • ьч • нч < о и V— о »—Р о X X ^s» о о о Р о • * о о 1—1 О о О см см Ен S Й о а о X о т— •» ы нч НН НЧ о X о о x-x Еч X S о О X о о о О о •» X X CM II X ’’4" см MD X—Z Q СО СО т— о> СП II X О X о Р о X р р р ■^4" 00 X X о СХ, о IX о X < X X ал X X о о о О о. О О О • о «— > • о о о X т— о см о x ^s- м- *4- -4- in СО ш ш о и см о X Ort X ■м- X X М- о X ^4" о О < Р in in Р 1П 1П Р m inp 1П 1П о CO X О ч— V— О г— Т— О — — Р «— «— S О • • О « • О • • X • • Еч СО СО Еч 00 СО •ъ ЕЧ СО СО со со X X X X Еч р Р X О\ \о w СО о\\ О X X X X X X о < со X X X X о г— X X со X X р о со О X X р X СО ЕЧ ЕЧ СП s S II 00 р р ЕЧ s S X X о < X X < X X р * < X X X X eg х см В= О О & О О СО X X 1 оо <! 1-н т— 83
чо CM p p S P p p P P p p p P p P о p P CO I—I P о p P P p p CO CO P co p CO P p p <4 И p p co P p p P CO p co p p p <4 P о о о о р р P •о о о о р 0 CO о о о о со <4 Q о о о о р Q ы О со со р р р 0 р • • • • • о • • 00 оо со со со 00 00 CM СМ см см см иЛМЭ см см о CM см см см см см см 4- о о о о о ил ил о о CM о о о о о — т— о о II р Q — — — р Р О О О р Р Р р р Р Р Р Р СП СП СЛ СЛ Р Р р р р • о о о • • • • • о о • • со * р р р о о о о о 4- 4- о о р И илмэ г*- о о о о о 00 00 о о о S о о о о • о • о • о • о • • о • о о О Р Р Р > > > > — > р > > о р р р р р р р со о СО р р р р О 00 • см • см • см • <4 • см *4 О • см • о см О О О О см S CMS см S см S см S Р Р СО см S см II см рррр- 0-0 — О Г— <4 О СО СО Р о — S О о РоР о Р о Р о Р Р о Р о Р о 4“ 4- 4- Р о р р р р ил II ил II ил II ил II ил П II ил II ил СО Р рррр- СО — СО — СО СО — СО СО — со — >4 Р <4 <4 <4 <4 Р ОРО POP О Р о О Р О Р со О О О О • S • Р • р • Й • S • р • р О О О О сн о> СП СП СП СП СП 1 о Р Р Р Р гл р гл Р с*л Р СЛ Р СЛ Р CQ р сл Р сл р р р р р О Р о Р о Р о Р о POOP Р о Р о р < <4 < <4 < СО 4-СО 4-СО 4-СО4-СО00РСО 4-СО 4- р • со 00 00 00 00 \\р оо 00 о о СО Р СО Р СО Р СО Р СО Р О Р СО Р СО О О н ОИОИО •! О>нОРРРО>нО>-| Р см см «— см СО > со > со > со >qq>PPQ>C0>C0 Р Р ил ил ил ил р р О <4 — — — — со со Р ы 1-4 Р 14 нн нн ЫРНРМРРЫНРРРЫЫРР Р см г- г— г— г— ил илилилилилилилилилслхгилилилилил Р ГЛ С*\ СЛ СЛ 00 00 00 00 00 00 оо 00 со 00 с— Г-00 00 00 00 00 Р см см см см см см см см см см см см см см см сл сл см см см см см р р р р р р Р Р Р Р Р Р р р р р р р р р р р ОР ннннм рНррр Р М Р Р Р Р Р р р р р ОНННННН Ы Р Р Р Р Р рррррррррр IEF285I VOL SER NOS= KAMA01. IEF375I JOB /РТ000228/ START 84039.1544 IEF376I JOB /РТ000228/ STOP 84039.1546 CPU OMIN 04.24SEC 84
//РТ000239 JOB (PT0002),' ПЕТРОВ ',MSGLEVEL=(2,0),TIME=5, 318400 // CLASS=C 318405 // EXEC FORRGCLG,FARM.FORT=NOSOURCE,PARM.LKED=LET 318410 //FORT.SYSIN DD * 318415 IEF142I - STEP WAS EXECUTED - COND CODE 0000 О LT4 40 40 00 00 СЛ СЛ X X X о 2 о о о о • о. 04 LT4 о о 04 X •& • X о 00 S S X СЛ X О о X X н hi X ы 25 о S < С Р < SO g о bi S • о 0) о О о т О о о о ХР Н X X X X X X X bi СЛ сл сл О X О 04 О 40 1 си XX о о HI о г— ■< Р r- м- ЕН о СО СО СО 00 О го со • • • HI • 04 04 04 041 X 1Г4 о н о — Р о СО 00 оо оо -- о 0) о о о X о 04 04 04 04 • о т О 04 C4J 04 04 О 04 S X X О X < < < < о • 00 CZ о X н HI HI р Р Р р о 0 04 bi s S CS X § О О О О О X г— о о о О о о о о о X о £ го о о о о X S X 1Г> Ю4 1ГМГ4 X со X СО 00 00 00 X н Q P о X О РР X X X X X X Х-4О н Рн о Рч о X < X X X X X ол m О о о о о о о •* 00 н о о X w— СТ4 о v— »— я— 04 04 N Л N N о • W— о X •н- X ’’З- X X X X о О о го LT4 иЛ Р L04 LT4 Р LT4 LT4 X LT4 1Г\ х х х х о X о X -- V- О — W— О г- X — X о S • • о • • О • • X • • S 04 О> 04 04 04 04 04 04 X X X X X J3 СЛ СЛ Р СЛ СЛ р СЛ сл Еч сл сл х х х х х г о о S о О X S о о О о о X X го ■’3- О X о *3- xj- X ”4’ ”4- р Р р р >ч СЛ го 00 со о оо со СЛ О 00 G0 00 00 X X X X X X 2 и сл о о о о X го X 1 X Рч 1 X < Ен •• S X X X X СЛ X Х£РХ Xо s' <од< О FH Р < О < О х X X X X X БнНИБн Ен Р X ЕН Ен -X Еч го V СЛ X X 09 СЛ X СЛ СЛ X X X X X X X ю Р Ен Р ХХРРРД S WO \ СЛ О \ \ ррррон 3 х Рч X X X X X X О X о X Рч X X X X X X о X СЛ х X ХХХХРС 1_ СЛ О X X ХХХХРО г X X 09 II 09 Р Р ЕН S P2IPZX S )- X X < X X S * < X X XX х х х х X X о О О О О СО X X 1 О О S XX X X Р Р X X Еч Еч * SSSS х WX \ Р Рч W Рч W < < < < 1 X X см И Р X X р X X X X РХ X X Ен X X Р Ен Рч X Ен Рч Рч РООООХОС см X X СЛ X X HI сл X X 09 X X О О О О < X S и Ен Ен XXX СЛ X X XX х X X X X X СЛ СЛ 1 СЛ 09 HI >ч 1 ■п X 1 X X X х х х X СЛ X 0_ X СЛ X о Н НН н HI ♦ • Hi HI X X X HI X X X X X X < 85
КО CXI P P О P P p Eh pq pq pq pq pq Еч P Еч co Eh Eh CO !—1 P О pq cn Eh pq pq CO CO P co P KO P P P >H pq >H W • pq pq И p CO P CO P — M P P pq V— т— СП о ы CQ CXI CXI V— (XI о о о о о Ен о о о о ЕН р EH pq о о о о pq о со о о о о со < о о о о о р Q м 3 со со р р р о р • • • • * о • • CJN СП СП СП СП СП СП СП СП СП СП СП (XI (XI СП СП о CXI CXJ CXI (XI (XI CKJ (XI о о о о о ин ип о о CKJ о о о о о «— ч— о о о о о о о о 0 • о о II P ,— г— ’—Ен Ен ЕН ЕН ЕЧ СП СП Ен ЕН p P о о о Р р р р р СП СП р р И • о о о • • « • • о о • • CO * Рч Рч Рч о о о о о -м- о о P II LfH КО Г— о о о о о 00 00 о о IEF285I VOL SER N03= T0M2 . IEF375I JOB /РТ000239/ START 84039.1541 TEF376I JOB /РТ000239/ STOP 84039.1542 CPU OMINO5.17SEC Окончание рис. 2.12 86
Пояснения к листингу на рис. 2.13. Сообщение с номером IHC254I означает, что аргумент функции COS (X) превысил максимальное число, модуль кото¬ рого больше или равен Р1*2**18, на что указывает напечатанное значение аргумента: ARG=0.1799999E47. Это сообщение вызвано ошибкой, допущенной в написании иден¬ тификатора переменной, что вызвало неприсвоенное значение параметра функции FONC. В предложении 0005 подпрограммы RUNGE неправильное предложение имеет вид: г 5 ОС ЕС FORTRAN . . . RUNGE.. . PAGE 0001 0005 Х=ХТ й Здесь вместо Х=Х1 записано Х=ХТ. Напечатанная в листинге обратная трасса указывает на то, что подпрограмма COS (X) получила управление от оператора 0002 подпрограммы-функции DERIV, кото¬ рая предварительно была вызвана оператором 0009 подпро» раммы RUNGE, а та, в свою очередь, была вызвана оператором 0009 главного модуля MAIN. План обратной трас¬ сировки дает возможность установить тот программный модуль, в котором обнаружена ошибка. В нашем примере таким модулем является подпрограмма-функция DERIV. Пояснения к листингу на рис. 2.14. Сообщение IHC219I означает, что загрузочный модуль содержит ссылку на несуществующий набор данных. Ошибка, допущенная в программе, заключается в неверном указании номера стандартного файла ввода, т. е. в главном модуле MAIN предложение 0005 имеет вид: Г 4 ОС ЕС FORTRAN . . . MAIN . . . PAGE 0001 0005 READ (3,10) Н й Здесь в операторе READ вместо ссылочного номера файла 5 записано 3. Обратная трасса указывает, что прерывание произошло в системном модуле с именем IBCOM. Этот модуль осуществляет ввод-вывод в задании на языке Фортран. Пояснения к листингу на рис. 2.15. Сообщение с номером IНС215I указывает на то, что произошло программное прерывание вследствие ошибки преоб¬ разования при форматном вводе числа. Ошибка допущена во вводимой информации — неверно изображено вводимое число: за оператором языка управления заданием шага выполнения //GO.SYSIN DD * вместо десятичного числа 0.1 записано О.1 (на месте цифры 0 стоит буква О). В обратной трассе указано имя системного модуля IBCOM (с помощью этого модуля осуществляется ввод-вывод информации). Пояснения к листингу на рис. 2.16. Сообщение планировщика заданий с номером IEF212I означает, что не найден набор данных с указанным именем. Ошибка допущена в операторе DD языка управления заданием шага редактиро¬ вания, в котором имя вызываемой библиотеки написано неверно и имеет вид: г8 • //LKED.LIB DD DSN=SSPFSI,DISP=SHR Й //LKED.SYSIN DD * Здесь вместо имени системной библиотеки SSPFST указано SSPFSI. Пояснения к листингу на рис. 2.17. Сообщение IHC217I указывает на то, что обнаружен конец набора данных, а список ввода еще не исчерпан. 87
1ЛО 1ЛО (HCAxt co co co РТ000238 JOB (PT0002).’ ПЕТРОВ ’.MSGLEVEL-(2,0).TIME-5. 31812 СП СП СП о LT> cn cn cn on oo co СП СП и • О т— т— О 00 S Й co X со о о о о HI HI pq 1-1 »— о о о о < Q * о о о о О X * • о о о о О 04 О о о о о О О О * pq о о о Q pq pq й pq 1—1 Рн О О О Рч CO co О СО Рч о hi о M- ко Ен о pq • • 1-Н • О о о о о о — Q о г- onQ <о о о X о * Т— а> LTK о О \ о Рч Рч Рч a X О X ' • т— о о о i—i hi 1-1 Э О N (\1 N (\1 S Рч 1ЛМ ОООт— о оО о 04 Рч О О О О о X о X X X г— о со 4Э 4D о Рч о Рч Рч чо W— < он г— о о о о о о II < со ч^- со о о о pq X Рч Рч Рч СП о сп СП СП СП X СП СП pq • о о о т— СП pq ”4- pq м- ■*± X о 04 04 04 о pq Q 1ГА 1Г\ Q 1Г\ LTA X НП LTA v_xpq 04 04 04 о Q LTA о г- т— о т— X т— т— с— X 44- UH 1Г\ о о г— о • • о • • X • • о • СП СП СП СП СП СП СП Q сп сП р сп сп ЕН сп СП pq X сп X о о X X о о о о о о>Х X о о X о X ч4- СП СО 04 СП СП о ■м- о СО со со о со со со ао о о о и со IEF374I STEP /GO / STOP 84039.1549 CPU OMIN 00.43SEC MAIN 24K IEF375I JOB /РТ000238/ START 84039.1549 IEF376I JOB /РТ000238/ STOP 84039.1549 CPU OMIN 04.20SEC >• -8- > Q. I- o cu 88
ЦЛ О UX о ЦЛ о C\J ЧО Г— г- w— я— '— сл гл 00 00 со со 00 00 '— я— «— »— W— псососо сл сл «— 00 со О О Рч Рч р р • О О О т— т— pq о о х о о X X X о о 40 «— 40 о о о о CXI я— СЛ (XI сл сл о о о а ■И" 25 а о р ьч FH • о о нч < о < О о о < о X pq о о 00 си о о О •^т О О О м О ЕЧ pq pq pq сл еч pq сл 00 СЛ сл ^СЛ ил 00 00 о г- ил Г— II г- 1— г- сл чо о II • pq < • ■’И о • • ,— X еч «— о о -И о ы < о • сл сл о о нч СЛ Р О т— V— еч р PZ pq О V— р р 1—1 1 О ЕЧ си о о ЕЧ Ы — Еч Еч X о pq о Р О О о * X Еч pq Q CXI II pq СЛ Pq 40 — Р ДРД г- 00 сл Il W о о Р о р ’’И 00 О р дэ X X сэ си Р —< о си о сл си си X X о О pq сл о о • СЛ Т— ООО > • о t-u^S О о Т— О сл Р1 00 СЛ XZH сл о pq о о о СО W— X & Н (XI (XI ни о pq pq см гл си о о pq сл сл cxi сл О < Р о о О ЕЧ CQ р о о Р о о о о 00 Рч О т— pq еч О — — оо- — -- — S •* О • • си си сл О • • Р О • • • • * м СЛ СЛ слои; сл сл Р нч сл сл сл сл - о Р 40 40 х Р 40 40 СЛ СЛ Р 40 40 40 40 •си о О X СЛ Еч X о о ЕЧ CQ о о о о CQ Р О дин • О ’’fr ЕЧ о ”4- О О о СО 00 СЛ О Р Р о О СО 00 р S О 00 00 со со CU СЛ II EU < СО 6 X О 1 ЕЧ си Ен Рч 1 ЕЧ си ЕН 1 ЕЧ ЕН М X си си 00 си pq еч си х Рч р си си си си 5 и Р <4 О ЕЧ О Р СЛ Р < о pq р <с О < О X pq Еч Еч Р ЕЧ pq ЕЧ н р pq Еч Еч Еч Еч • X Еч СЛ СЛ * X Еч СЛ СЛ pq pq Еч СЛ СЛ 00 00 - о О Еч pq Р х Еч р Рч О WW о\\ р < О W W CXI ♦ pq Рч Еч pq < 00 Ен pq со оо о S X си О сл X о сл СЛ X сл сл о к. м сл а ЕЧ pq о pq cxi cxi о < сл си о Р о о н х сл Еч Еч II О СЛ pq СЛ Р Р pq сл р СЛ О о си -* <с си X X ♦ Еч pq Р < pq pq Р Т— <q о о о О О СЛ ы О О X X ЕЧ О О Еч Еч X Р X X Р Р Р Р о XX* Еч О Р О о о О си си X О Р си W Р pq си w Р О ЕЧ о CU W w о о X Р pq Р О со < Рч pq Р X S Еч си CU Q Си pq о Еч CU Р Р си ЕЧ II сл Еч Рч CU CQ СО О Ъ еч СЛ pq pq м ’■•n ЕЧ СЛ pq pq ЕЧ о сл pq pq О О 00 II О СЛ ЕЧ ЕЧ СО СЛ < Еч Еч Еч р Еч Еч Еч Р Р слСЛ Рч X 1 СЛ СЛ ЕН X X 1 СЛ 00 ЕЧ X ы Рч 1 СЛ СЛ (XI 00 00 х сл X N 00 о о О < О • еч НН • ‘ ЕЧ EU ЕЧ ЕЧ ЕЧ ЕЧ X ЕЧ-< си ЕЧ ЕЧ ЕЧ HI ЕН ЕЧ о X X Еч CXI сл 'Ир Д х < си cxi сл СЛ слСО О CXI сл М- ил 40 о о X CU xj- г- г- м pq О н- г- • — X X СЛ”И-Г'-Г^Г'-С"- Еч НО т— сл сл X X X * X т— сл сл О cxi О си Т- Т— сл СЛ СЛ сл CU И X X X X X 00 * Еч рч Рч Рч О О X Еч О Рч Рч X X X W W м нн\\ CXI * Р pq pq pq\ х си Р pq pq pq pq pq pq w W еч ЕЧ ЕН W г- * < ннн\ ЕЧ ЕЧ pq HHH HHH Рис. 2.14. Листинг с ошибкой в указании номера стандартного файла ввода 89
/РТ000220 JOB (PT0002),' ПЕТРОВ ’fMSGLEVEL-(2,0),TIME=5» 281405 o its о о irx -- СХ 00 00 Г— 00 co co CXI CXI CX CX CXI X X X о о о о сп 1ГХ LCX О 00 00 СХ о о • о о а S СО 0 о о hi hi 1-1 РД н • о о <* О о о S О РД Р Р О « Рч Рч О о о О и РД РД 0 РД СО со со о СО CXJ 00 ХЭ 1—1 о их со со (XI н- Еч о — РчРч ♦ • • м • «-Р т— о — Р о *- Рч о о о & о • О CQ О О сх сх д Д О 0 н о ▼— hi 1-1 1-1 HI Рч о о Е-« S Рч РД о о о О о Р и Н о ’Ч'ХЭ Q СО Г— о СП РД о Р О 0 о 0 0 0 рд сх сх хэ X О Рч О Рч о р < Рч Еч о CQ т— Р о О О о о о о О о • О сх о ♦ о о о pq О сх о о CXI СХ СХ сх сх Д сх сх И о ° S PQ сх сх pq СХ СХ РД сх сх сх сх Коо РД Р о о Р о о Р о о 0 о о д Р Рч о —о г~ О — <-0 «— т— о О О • • О • • О • • 0 • • О pq* о> о> СП СП СП СП СП СП 0 о Q (лелД сх сх Р сх сх Еч СХ СХ 0 СО Р ат; о о S о о Д 25 о о О о о HI 0 Р О О ■’З- <м- ж О О О 00 00 О 00 00 СО О 00 00 со со HI О 0 РД Рч РД Рч СО РД Рч 0 0 Р Рч II q<OQ<OH Р < О < О Еч pq Еч Еч pq Еч Еч Д pq Еч Еч *Еч Еч Р Рч Еч СО СО Еч СО СО * Еч СО СО СО со р pq О 0 0 Еч 0 < 0 Рч О WO \\И О W \\ О 0 • РД и Рч pq 0 pq С Я х Рч X 0 О pq и СО pq д 0 < СО о □ 0 HI о о О =5 О О со 25 X i О О Hl т— 0 р Рч Рч Еч Еч Р р 0 0 Еч Еч * Еч Еч 02 о о р Рч Рч р Рч Рч К Р О HI Рч 0 рд РД Р pq pq Р pq О СП < РД 0 X Еч Рч Рч Еч Рч Рч Р 0 Еч Рч Рч Еч Рч Рч Р > « II Еч о 0 HI со pq pq СО РД РД HI СО РД pq СО РД pq 25 ЕЧ СО II О со ЕЧ Еч Еч Еч CQ СО ЕЧ Еч Еч Еч 0 о L0 Рч X 1 со со 1 СО со HI X 1 со СО 1 СО со Hl о X HI 1 X) со 0 со со О О < Q • HI HI н 1-1 HI HI • • HI HI HI HI HI HI X HI < Рч HI 0 РД Еч сх сх 'X- сх сх Р р сх сх сх сх ■’З" со ох CQ сх о X 0 ’X- г— с— г— г— Н РД ■м- г- г- о с— г— • т— pq X м- pq О V— сх сх сх сх х X 1— сх сх сх сх сх о сх и д «— Рч Рч Рч Рч Рч Рч Рч д Д Рч Рч Рч Рч Рч Рч о О Еч Рч pq РД pq РД pq РД РД pq pq РД Рч pq Д РД Hl Hl HI i-l HI Hl Hl Hl Hl HI HI HI HI Еч РД HI IEF373I STEP /GO / START 84039.1023 IEF374I STEP /GO / STOP 84039.1023 CPU OMIN 00.43SEC MAIN 26K IEF375I JOB /РТ000220/ START 84039.1021 IEF376I JOB /РТ000220/ STOP 84039.1023 CPU OMIN 04.59SEC Рис. 2.15. Листинг с ошибкой, допущенной во вводимых данных 90
/РТ000236 JOB (PT0002),,HETPOBA',MSGLEVEL=(2,0),TIME=5, 316855 / CLASSED 316860 / EXEC FORRGCLG,PARM.FORT=NOSOURCE,PARM.LKED=LET 316865 /FORT.SYSIN DD * 316870 CXJ ox ox о о с*л гл о О о о о ox 1ГХ a s а HI HI н н н <1 < s О О о о о о M pq pq м pq pq CO со СО СО со со r— v— о о о 00 Ox ЦЛ о о о • • • • • • t— О о о о CXJ о о о о о о a а а г S HI HI 1-4 ы 1-4 н § S о о о о о о рэ о р рэ рэ рэ Рч о Рч Рч Рч Рч Рч О о и о о о о о CXJ cxj CXI гл гл гл гл гх гл гл CXJ гл cxj cxj Pq CXJ CXJ • CXJ CXJ CXJ CXJ CXJ CXJ CXI CXJ о о P о о Q о о о о о о о о — О ч— «— ч— «— X ч-~ г— т— ч • • О • • • • • • • • • • 5Г- W— Т— о т— ч— т— V— г— CD CN ci s Q_ 91
1ГЧ о ir\ о 40 Г'— 00 00 40 40 СЛ ол /РТ000236 JOB (PT0002),’ПЕТРОВА*,MSGLEVEL=(2,0),TIME=5, 31685 / CLASSED 31686 CM СП cn о о еЛ еЛ д д д со Д 1-1 НЧ нч pq НЧ 2 О О О О и о pq pq pq Д pq со со со о СО о г— НЧ о о ил сл Еч о • • • нч • см о -р о о о о Д о О д д ДО Д НЧ НЧ нч нч Еч S Рч pq о о о О о Р II Д Р СО М о До Д о д д Д X о До д о д < Д Д о О о О о о о О • о о о pq т— см см см см сл Д) сл сл д pq см см pq см см pq см см см см Р ил ил Р ил ил Р 1Г\ LT\ Д LO Lf> Д О’—’—О’—’— О — г- д г— * о • • О • • О • • ГП • • М я-* я— я— я— я— я— х— <— о Р 40 40 Р 40 40 Р 40 40 Еч 40 40 Р Z ПСЛЙ слп Р q ппО СЛ СЛ Д О 1ГМГЧ О LT4 1Г> Д О ил ил Д 1Г\ U\ О О 00 00 О 00 оо СО О со со СО 00 СО II со о 1 Еч 1 ЕЧ д 1 Еч с Еч Д Р Д Р Д GO Р Д Р Д II д<ОД<он Р < О < О Еч pq Еч Еч Д Еч Еч Р pq Еч Еч * ■Еч Еч Еч СО СО Еч СО СО Еч СО СО СО СО О Д Д еч Д Д О WO W со О \\ • pq pq д pq д X X д X pq pq со pq 3 со ОДД Рч CO Еч H CO S § II СО Р Р Еч ** < Д Д < Д Д Д * < pq Pq д д О О О О О CO X X I о о Д Р Рч Рч Еч Еч Р Р д д Еч Еч О Р Д \\Д W Q Д \ \ д \\ О pq pq Р pq pq Р й Еч Д Д Еч Д Д Q Д Еч Д Д Еч д д cd нч со Pq pq со pq pq НЧ СО pq МСО pq pq О GO ЕЧ Еч Еч ЕЧ Д СО Еч Еч ЕЧ ЕЧ Д X 1 СО СО 5 СО СО НЧ гЧ ! СО СО 1 со со СО д СО 40 о 00 со о о о о СМ о о Д • о о НЧ О о о 9 Q Р 2 р Д Д о о pq pq со СО ОЛ 00 со см ел <— Д Д LT\ о г- р • • О С О 11Л • я— я— о о О ел сл О т— Д Д о о нч нч о о Рис. 2.17. Листинг с ошибкой, полученной из-за отсутствия в стандартном вводном файле вводимого значения О СО 00 00 00 О Р 1 ЕЧ Еч Д Р Д Р д < 00 pq чо ч0 о Д X ел сл Р pq см см о о pq я— СО о о д ел < о о н S я— Q О ЕЧ ЕЧ Еч О Д о ДОДД Д О И д \ \ w О СП pq Р НЧ 2 и Еч д д д сП Еч СО pq pq О О Д Еч Еч Д Д X НЧ 1 СО со о о нч < Д нч нч нч нч нч г- СП CM с*> ”51- ил 40 — pq И t'— Г*— Г'— см О Р сл сл сл сл О < Еч Д Д Д Рч Д Р Р Д ННННН нч ЕЧ м нч нч нч нч нч 92
Ошибка вызвана отсутствием в стандартном файле (GO.SYSIN) вводимого зна¬ чения: за оператором языка управления заданием шага выполнения //GO.SYSIN DD * * не следует значения 0.1. Обратная трасса указывает имя системного модуля IBCOM, осуществляющего ввод-вывод информации. Пояснения к листингу на рис. 2.18. В результате решения из-за ошибки в операторе FORMAT на печать выдаются неверные значения: вместо цифровых значений печатаются звездочки. Ошибка допущена в 0018 предложении главного модуля MAIN, где формат для выводимых результатов записан неверно и выглядит так: г4 > ОС ЕС FORTRAN . . . MAIN . . . PAGE 0001 • 0018 20 FORM AT (F10.3,3 (1 РЕ 10.8) ) a Здесь вместо 1PE20.8 записано 1 PE 10.8. Сообщений об ошибке система не выдает. Пояснения к листингу на рис. 2.19. Сообщение IHC240I и системный код 0С5 возникли в результате того, что в программе из-за допущенной ошибки появи¬ лось неприсвоенное значение у переменной. Ошибка допущена в написании индекса массива VEC и имеет вид: ОС ЕС FORTRAN . . . RUNGE . . . PAGE 0001 • 0014 2 VEC(II)=Y XX Здесь вместо оператора VEC(I) =Y записано VEC(II) =Y. Тем самым оказалось, что значением индекса массива VEC является непредсказуемое число, а не параметр цикла I. План обратной трассировки устанавливает, что ошибка обнаружена в подпрограм¬ ме RUNGE, к которой было обращение из оператора 0009 главного модуля MAIN. Системной информации об ошибках часто бывает недостаточно для ее локализа¬ ции, поэтому целесообразно в текст программы вставить отладочные операторы и по¬ вторить выполнение программы. Продемонстрируем такую локализацию ошибки на данном примере в следующем подпараграфе (рис. 2.20). Пояснения к листингу на рис. 2.20. Этот листинг иллюстрирует использование отладочных операторов для локализации ошибки адресации, приводящей к завершению выполнения задания с системным кодом 0С5 (характер допущенной ошибки и сопровождающие ее системные сообщения были описаны ранее в пояснениях к листингу на рис. 2.19) . В этом примере главный модуль MAIN содержит два пакета отладки: первый из них включает перед оператором с меткой 101 трассировку опе¬ раторов, а второй — выключает ее и предписывает заданию напечатать значения всех элементов массива VEC перед окончанием выполнения программы. В главном модуле предусмотрен контроль превышения длины массива VEC (режим SUBCHK) и вывод значений, принимаемых переменной X (режим INIT) при любом изменении ее значений. В результате выполнения программы получена следующая информация: г13 0.1 —ВВОДИМОЕ Н X РЕШ.ПО ПП RUNGE АНАЛИТИЧЕСКОЕ РЕШ. ... Х=0.9999996 TRACE 101 SUBCHK VEC (1755647) 93
LT\ о иЛ О 1ГЛ 40 со Г— ао оо ао со 40 40 40 40 ГЛ ГЛ ГЛ ГЛ T— CM СП CH о о гл гл X X X X о о о о СП ил ил см • S Р со Р нч н ММ М <4 <1 Р *4 S3 SO S о О о о и м м М Р н со со СО о со о ил ”± м о •> 00 хТ г- Еч о ил • • • 1-4 • II г— о — Р о М о о о S о О н S р?» so s Еч ы ЬЧ М м •* н S S М S Z—ч и о о о О о о р •* II М см Р со М о q о Р о РР Р II X о РЦ о р о м с м Р р о О о о о о о о М • о о о м > ^5» г— с— г>- г— г— t~— QQ г— г— М Он М о о М о о М о о о о р < Р ил илр ил ил Р ил ил S ил ил о О -- --О — V— О 00 •я О • • О • • о • • Рн • • м ил ил ил ил ил ил ил ил •* о Q г- Q Т- т— Р я— я—ЕЧя—г— • к S о о Р о О Он Р о о О о о < Р О <о чо О 40 чо М О 40 40 р 40 ЧО м о О 00 оо О СО 00 со о 00 00 00 ао о 00 II со р о 1 Еч 1 ЕЧ РЧ 1 Еч < ЕЧ Н К Р М Р 00 м м > м М а II fi<OQ<OH Р < О < О Еч МННМННР М Еч Еч -Е4 Еч • Он Еч СО СО Еч СО 00 * Еч СО 00 со со * о Р Р Е4 Р Z—Ч . М и\\о\ \со О w W. см • М М м М р о X X р X о м М И со м 3 о < со О Р Р Еч р СО ЕЧ ЕЧ СО S s II СО q.q М •я ж < (X « < Р ИЙ* <4 ММ Р Р о 5 О О £ О О с/] X X 1 о о РР Рч Рч ННДД РР НН* СП оД0н\\Рн\\ OOM М Q м гт~) р| I-D М^ЕчММРРМР£:Еч1РРЕчРчР|Р ДКНООНН^НИ НИНЙИЙ1Ч 40 II О СО НН Еч Еч СП СО НН НН Й г\ СО М >ч I CQ CQ I 00 СО I-1 X I 00 СО 100001-4 см 00 00 Р 00 СО о<о «НННННН • ♦ННННННН оРМЕчсмглха-смглхэ-Мр см гл xt- см гл -м- СО о О X St xt Г— Г— хГ Г— Г- М М хГ г~ г— о г- г- • Еч М О т- гл гл я— гл гл X X *— гл гл см гл гл О Р МММММММРРММММММО WW HHHHW М WM ИННИН\ W W Н М Н 1-4 Ы 1—4\\Н НННННЧ Рис. 2.18. Листинг с ошибкой в операторе FORMAT при указании длин полей для печати некоторых вводимых значений Еч < м о о о о S * * * * ж ж ж ж ж ж р ил ил ил ил « * ♦ * * ж ж ж ж ж ж о о Я— я— я— т— л * * * * ж ж ж ж ж ж о о • • • • X * * * * ж ж ж ж ж ж м ил ил ил ил <? * * * * ж ж ж ж ж ж р я— Т— Я— <— * * * * ж * Ж ж ж ж о S о о о о * * * * ж ж ж ж ж ж о о 40 40 40 40 * * * * ж ж ж ж ж ж о о 00 00 00 00 * * * * ж ж ж ж ж ж о м * * * * ж ж ж ж ж ж о 1 Еч Еч о * * * * ж ж ж ж ж ж ил «МММ S Ж * * * ж ж ж ж ж ж • Р < о < о р * * * ж ж ж ж ж ж ж ил М ЕЧ ЕЧ ЕЧ Еч X * * * ж ж * ж ж ж ж ЕЧ СО СО СО СО * * * ж ж ж ж ж ж ж II р Р Ж * * ж ж ж ж ж ж ж X о W W X * * * ж ж ж ж ж ж ж со м 40 40 * * * ж ж ж ж ж ж ж S X гл гл о * * * ж ж ж ж ж ж ж м см см р * * ♦ ж ж ж ж ж ж ж со о о • * * * ж ж ж ж ж ж ж о о а * * * ж ж ж ж ж ж ж т— о о м * * * ж ж ж ж ж ж ж QOHH 94
Рис. 2.19. Листинг программы, выполнение которой завершилось с системным кодом 0С5 (ошибка адресации) . X X X X о о о о • СГЧ КЛ 1ГЧ О 00 СО 00 00 СМ Р 40 о Р 00 р • Р о о 40 CQ 40 S Р со р О Р О р т— Н ы ы Р Н Р • о о сл <£ Р 40 О см см см S о И О Р о о о о К ил р я— о о о О о о О II р Р р р Р 0 СИ со со о СО 1 р СО 00 со •* LTX <О о ы о ил 00 00 я— Т~ я— СМ 00 ■м- со Ен о О-илр р 40 40 40 II • • • Н • Ы СО ил р р р «— о — Р о р р о сл сл сл о о о Р о • • сл гл р см см см h—I о О О N N о о о ен а Р о Р О Р О т- • о о о I—1 ы н 1-1 о Р о о о Ен S Р S? о р о Р О о оО о р < о •ъ Р о о о СМ и Р Р -М- О 40 см о о о Р СО СО т- см сп II о о о II Р о Р О р о О Р Р Р < см S о о о Р 2 о Р о р о Р с Р Р CQ р о о о Р Р о О о о о о о О' •* • сл см о о о > • о о о Р ил О см о р о о о Р СП СП СП о о о СО о о О Р см о > Р р м- Р иЛ р 1Г\ ил ил ил О Р 40 о Ы О О С Р ”3- ’«a- Q м- '■3- р ’’d- '*± о ЕН <— о я— СИ р О — — О «— т— о — — р я— я— О см о сл о S О • «О • • о • • • < о о г* о н Г'— г*— г— г— г- г- г— г- р р II о р о * о Р — <-Р V— р -- *—Ен я— я— ЕН СО СЛ • р о сл о & о о S О О Р р о о О о о со н о О Р о см о Р Р О 40 40 О 40 40 Р О 40 40 Р ЧО 40 >н о Р СИ о о о О о- О 00 00 О 00 со СО О 00 00 00 00 со S о р о о о р р о < co р Ен о X S о Р СИ 00 р р р илр >н О Р Р р Р О СИ СО Р Р ЕН s S р р сл Ен о < р р р р CQ Р см 1 я— 95
GPR8-15 E3AF402C 00049100 0023F730 00000000 0023F618 0023FB88 6223FE2E 00000000 FPR 0-4 4055A281 00000000 404C738A 00000000 408BE5F9 00000000 00049918 OOOOOOC8 ACTIVE RB LIST PROGRAM ID=SVO- 13 RB TYPE=D0 ENTRY POINT=OOOOQO CM о CM S5 г— CM HI M- co <ii я Q Q Q pq «— ’■Ф Q EH pq Pq pq о CM pq Eh Eh о Eh Eh о II II co HI pq О pq pq e-i pq pq Pq c co CO CO co pq t-q ьД co HI HI C pq pq cr> pq pq pq о Рч CO Q CO pq Q pq r- II Рч II Рч < Ен о о о о Ен »~q О спО с*> pq о о о о pq О О см о см СО о о о о со < t 11 + II Q о о о о рэ О hi рэ Л Ен ЕН о со СО к pq Рч о q Рч HI S Hl • • • • • о • • О hi HI о о о о о о о О О см см см см см о о см см СП о г— pq pq Рч см см см см см 1Г\ 1ГЧ см см 'М" 1Г\ о о о о о о о о о •«4- ”4- ° о Н о о о о о я— *— о о V— о pq о Pq о о о о о • • о о • • II Ен II Ен Q — — — Ен Ен Ен ЕН ЕН С'— ЕН Ен г- Г— О S О S pq о о о Pq Pq Рч Рч pq «— г— Рч Рч «— Т— |-| Pq HI pq •ООО* • • • • о о • • о о * Рч Рч Рч о о о о о мэ мэ о о 40 40 II 1Г>4О Н- о О о о о 00 00 о о 00 со о 1Г\ с*> О S о о о о • о о • о • о • • 0*0 • II о II о О О ЕН ЕН ЕН > > > > > Ен > > ЕН pq II Рч II pq Рч Рч Рч Д « со со pq Рч рр pq pq Рч pq о • см • см • см • см • см < о • см • см <Р О S Рч Рч см О О О О ао S со СО S со 00 S Ен Ен СО со со S ЕН Ен < >н н см Ен Ен Ен Ен i/'x О tr> О О 1ГчО LC>O со со pq LT>O LC\ О СО СО Ен Ен о -м-Ен 'ггЕн Ен Ен ■«з- Ен S Ен -м- ЕН о pq pq pq pq ’М- ’’4- \ О m СО о pq Pq pq pq и -m- II II м- II ’’З- II II ”=Г 11 ”3- II о о и Е II S Eh Eh Eh Eh Eh — CO — СО СО г— со — со со — СО — СО см см bq Cq<<<<E4OEHOEH О Ен о Ен О о ЕНО Ен О см см О О О О • s • • • д • 2 д • S • S о о pq Рч О О О О г— н* г— Г— г— г— г— о о о Рч С о (-0 ьО 1-Р 1-0 — « — pq pq pq — к со д — pq — pq о о о Рч Ен РчнОьР1-3(-ОоРОо pq о pq opq о pq О О HI pq о Pq о pq Ен Ен II pq II СО <<<<чэС0чоС0 <о СОчоСОчоСОООнОСОчоСОмэСЭРч Рч S м S о • со аз 00 00 00 WEi 00 со W СО < СО Д о СО 1-0 СО нО СО нО СО hO СО нО о н0 СО нО СО t-q Ен HI О >нО>чО>чО>нО>нОРчРч1-НО>чО>ч о со CQ II СО II 1-0сЛ(*\с^с*лС0>С0>С0>С0>С0>Р0Р0Р0>С0>С0>О О ^pq^ HI pq 1-0 Ш LT\ LT\ 1Г\ Ен Ен СО Hl со »-q Hl <5 — — — — СО со 96
о •ч X д S Mz-ч — X V— Д •ч д -со X д •ч X 1-1 М СО (S3 • Е о о •* X о < -о © ч— ы •ч S д х~х х-ч (XI ср X LT> Н X НН Д Bw Рч •»ч X * Д х * я н •ч о • • О Я- со X о д Д 3 см Дч_х Д Д X Д -Ен •ч д м х_х > < X Д > 1 д а •ч ач —pq Ен •» -о 1-1 • ы X ел X Д Н ни > о д -pq со х^х—ч • со л д д о чо 40 pq о н Т— Д pq Х'Ч • О д р Xs—' - >Рч х-ч W pq о о 00 00 Р а— X • — Р • pq 40 ич а * 1 040 х_х о Д о д Ен х-х ■МЛ pq О *— Рч В <— д x-xpqv-x Н 0Л- Ен pq 1 Ен Д о X Рч г— г— Д о д S II Н + Д > pq pq -\ Д а Д Д Д 1Г\ < pq -X • м- р 40 ЕН н ♦ ы X 1 Ен P чо ' Ен В II Р < О 00 > д Ен ITS Е д д ^Ен S X X Д NJ X д д ^Ен Р Р4 Ен Ен • Е pq о pq< о II II II II Д о HI pq < О • РЗ Ен Д Д СМ pq Д с Р д ы Ен д Ен S <Е с*\ р X Д Д Рч Ен Ен S Р •» X Р о Ен < Ен Е < д X—X д н Е д Д н Е © z—X Д О 1 X < О pq< Рч О < д о < О О д о Д СМ • д 40 pq Е Р д Д о ы О о > Рч Р о Рч р о X 1ХЛ * о Е м о <• «— 1/Л Ен д д Ен Ен ЕН о ЦЛ 40 О О о о о о Д ** < Д Д д см СЛ Lf\ о О О 4 Под ред. И. А. Кудряшова 97
0024 TRACE ON 316983 0025 AT 105 316984 0026 TRACE OFF 316985 40 Г— «— я— 00 00 о о 04 O> О о 40 40 О о СУЧСЬООт— »— 0404 004000000 4О4ОГ*-0—Г—Г—Г—0— О иЛОиЛООЛОиЛСЧ СЛ Л Ю 1Л4О4О О о oooooooo t— О— t~— C'~— о— о сл сл pq СЛОЛСЛСЛОЛСЛСЛРС о о о < < рс г— г— Г— • е • г— о г- O'- СЛ сл СЛ СЛ • г— • • о Т— О о 1 Y Y 1 Л-Х >-ч 04 04 04 04 £С 04 04 о II О О ■ч_х 40 О pq 40 40 00 ЙОМ 00 со • •‘О— РЧ • • я— Q СЛ •г— о т— о <! О pq О • 9 § • > « 04 04 •» 04 04 - « 04 04 X о pq о о pq х • pq Ен pq и « Еч •» ^■ч Z—ч 40 Еч < Q Рч < 1-4 я— 04 \ < Q О Еч - • Q X ЕЧ ЕЧ z-ч р •ъ * * -=г -О 04 РЧ ил ил Еч Еч pq X • + СП й •» о ОСЛ'-' Н X PC + + Е4 сл i-q нХ •» X X 4- ЕЧ О Q О -X + S * М pq й 04 04 -04 pq а — Еч о о X « pq pc Е4 О н РЦ II < Й Рч — + + + ч—' <£ О « рэ X X XX* О « СЛ М « pq ч-л V-Z Ч_^ « « РЭ Д Еч S О о о О О 04 он^н г ЙЙ + СЛ < W О рэ х о о о о — « -Рч Рч Рч Рч Еч о рч pq сл * * * * ’ч-хрС X м О II Еч О pq а II PC PC pq PC + + II > X < 1-н >»-0 II II II II X X Х~Ч Q М Еч Еч РЧ О pq Я— V— 04 СЛ II II РЧ х LT4 -S СЛ СЛ ил Еч pq * II — ЕЧ ЕЧ Еч Еч X X ил < со Р <ц О сорЭ > ил РЧ о « 00 • рч г pq s • о • о pq Рч • 04 О О 04 « Р о РЧ РЧ 04 3 > РЭ 04 СП Q о «Со II X X Еч Q о рч S 1 * * рэ рч 1 5 pq 04 II II о pq « 1 Q РСчо НЕНООчоСЛ««ХХП « pq ко 1ГЧ О О СП pq pq о Рч Рч Й ил ил Еч Рч Рч Еч г— 04 Еч СП pq pq СО СП * * S25 г Й СП со l-Ч РЧ о о < « РЧ X « « ЕЧ СО СО Еч ЕЧ Еч Е4 к S « СЛ СЛ « « о О О l-Ч РЧ о О Рч РЧ РЧ Е4 Еч Рч Рч Еч Еч <J С г- 0СГО « « Еч Еч о ♦— 04 сл ил 40 о- со о О т- 04 сл ”4- илчо О 04 ou pq о о со со pq О о о о о о ООО я— Т— т— «— »— — — pq о о * * * * о о о о о о ООО о о о о о о о о о о о о о о о о о ООО о о о о о ООО о о О ♦OPTIONS IN EFFECT* ID,DKOI,SOURCE,NOLIST,NODECK,LOAD,NOMAP *OPTIONS IN EFFECT* NAME = RUNGE , LINECNT = 70 ♦STATISTICS* SOURCE STATEMENTS = 16,PROGRAM SIZE = 846 ♦STATISTICS* NO DIAGNOSTICS GENERATED 98
W— Cxj СП СП о о • • co о ■M- § о о о о о Еч я— «— LCX in < 1 1 CXJ Еч X—4 • Р CXJ CXJ a a CQ а CXJ CXJ HI H W н >» о о II < Q < СО 3 О § И xO xo О О Р co 00 S O N О о о • • НЧ W H й W x— x— p CQ 0Q сл о СП В о о CH ^-Н! о 3 • • О c*> г*- Еч о э cxj CXJ P 3 • • Н • со CXJ cxj •* (2q о — Q о < 0 о ой о Рч w M О О О Еч Еч M и Оч a а о а < Q HI Н н • >ч Q О Еч S Рч д 1 a a о оО о И x—4 Р еч Еч M м IHC240I STAE - ABEND CODE IS: SYSTEM 00C5, USER 0000. 10 - NONE . SCB= 2020E8 TRACEBACK ROUTINE CALLED FROM ISN REG. 14 REG. 15 REG. 0 REG. 1 MAIN 0002B296 011D11B8 FD000008 002027F8 ENTRY P0INT= 011D11B8 4 99
CD О 00 о о CQ оо 0 оо о 1— иЛ »— ил о *— 04 >-04 О ДА 0 0 о т— я— г- V— О О о ООО о о О О М" со м- оо о 0 ил Д ил о чО С***- 40 Г— О т— г— W— т- О м-0 м-0 о о т- О т— о о о ООО о о ООО СО 00 00 00 о Рч pq Рч pq о 40 «— чО »— О М- ’■— М- О О 04 0 0 0 0 о 40 04 г— я— «— <— о о со О о ООО г— -d- <— о о ООО — 0 II О ,— II II й 00 со оо оо о < с чо pq ч0 pq о 0 0 0 О— ч— Г— т- о < 04 т- 04 т— О О оД о 0 о о о 0 0 04 *— II II Й О О о о «- pq • о о о о м- 0 сц 0 о О 00 00 < о СО <4 о о ООО О о ▼— М- CQ Ен 0 о •0 о о О II <- II 04 ил о ило о О О Р о 0 II <— о т- о о о О «- О ,— 0 о 0 о о II + II + II й *- о Т- о о Ен 0 Ен 0 Ен о о ООО 0 0 0 Й м о о ООО 0 1-1 0 > о о О 0 о Щ г—Рч 0 Рч Ен ^d- 04 О мо< о о О 04 pq — pq я— cd >н о >ч о >н < о илсл илсл сл Д оД о 0 II т— ж— Т— W— Г— Ен II Ен II Ен 0 — • 0 0 м- 0 м- О 21ОЙО 0 Р о О М — о »— о м- pq i—i pq i—i pq • о S 09 о о о о о * Рч 0 о о О О М II ил О -d-O и> соО^о я— 0 II о II о О 0 Ен о о О 00 О 00 о II р-1 II Рч II Рч Рч II о Рч ил Рч ил о pq pq pq чо 09 о о Рч о Рч < 0 g 0 g Рч ол О О О II о Рч О Рч оо н < >ч <; 04 Ен Ен < о сл О СЛ 40 Ен ЕН Ен о 0 pq о о О О чо о 0 0 Рч Ен о о О О Рч eg о eg <j 0 о pq pq 09 00 о 00 о о> Рч II Сч II Й Ен Ен ЕН CQ >н 0 < < О СП О О Ен о О о О ил СЛ pq 0 о о 1 Рч рч ст* *— О Рч СО00 о г— О г— 04 о Рч Ен Рч 01 0 о Pq О 04 on <; 1 II Й II 09 < < чо 0 *- о CQ 04 о 0 ил Ен О О • II О О 40 о чо ил 09 > 09 < 0 0 О М О ЕН Рч pq Ен Рч м о 1—1 09 Ен HI О Ен 00<d004O'^-i-111 II 09 II нЗ т— т— >н S 09 СП 0 0 ил ил 0 О S ы со н со 0 н < — — 1-Н К 0 Й Рч Рч 0 Ен pq г— ил pq о- ил ■’d- 0 0 0 О pq Ен 1 т-Ен 1 — 1 0 <1 pq < 0 Й < 04 Г— Г— 0 0 09 о 1 09 о 1 о > Рч §0§ 0 М- сл гл НРчЫ 00 НН 00 0 О 0 0 0 0 0 04 04 04 0^000000п=;енослосл<орчРчРч ООИ0Рч0РчРчРчОГ00Г00О(0000 оокоико0Рч<д^дй0Д000 IEF237I 151 ALLOCATED ТО FT06F001 IEF237I 151 ALLOCATED ТО FT07F001 100
cm сл 55 IEF285I SYS86022.T103647.RV000.РТ000236.GOSET PASSED IEF285I VOL SER NOS= TOM2 . IEF285I SYS86022,T103647.RVOOO.PT000236.S0000008 SYSIN Q Q Q Q И Еч pq pq pq Еч РЭ Еч О Еч Еч И О pq pq Еч W pq нД CO ьД CO PU нД ьД pq >4 pq — pq pq pq Q CO Q xO Q Q о о О И оэ 00 m о 55 S 00 хо г— нг еч о о о 2 2 о о о о о о о о Еч ьД о о о pq О . о о о со с о о о PD О еч рэ со РД х РЧ О РД РЧ • • ♦ О • • о о СМ хо ХО ХО хО ХО см СЛ СЛ сл Г'- 00 СЛ сл с— оо см см см СЛ СЛ см СМ СЛ СЛ 6 о о о о о о о о о Н о о о т— г— о О т- «— о о о • • о о • • Ф х Еч ЕЧ ЕЧ см см Еч Еч см см X РЧ РЦ РЧ см см 0ч РЧ см см со • • • о о • • о о X о о о хО ХО о О ХО ХО О о о о 00 со о О 00 00 X • о • о • о • • о • о • О > > > ЕЧ > >* Еч ОД со со ОД сч РД РД РД РЦ см • СМ • СМ • см < о • см • см <Д О S t- 2 н-2 r-s Еч Еч СО r-S Еч Еч О О О О СО СО pq -м- О О СО СО Еч хо Еч <о Еч хо Еч РД хо Еч хо Еч сл сл сл ел сл W II о II О II О II II О II О II хо ХО со — СО -- СО V- со со — со w— СО сл сл О Еч О Еч О Еч О О Еч О Еч О см см S • 25 • Й & 55 • 55 • & о о см см см см см о о од см □Д СМ ДД СМ РД CQ РД см РД nK оо pq о pq о Pq о pq О О еч pq о pq о pq Еч Еч СО хо СО хо СО хо СО О О нДСОхоСОххэСОРЧРч 00 00 00 Еч оо 00 W нД со нД со нД СО нД О нД СО нД СО нД ОН ОНОНОРчРЦ ЕЧ oHOHomcQ > со > со > со > pq pq РД > со > со > о о Еч Еч СО СО ЕЧ ЕЧ ЕЧ ЕЧ HI ЕЧ ЕЧ ЕЧ ЕЧ ЕЧ ЕЧ ЕЧ ЕЧ ЕЧ ЕЧ ЕЧ ЕЧ 1ГХ ил иЛ ил ил ил ил сл ил ил ил ил ил ил ЦЛхО со 00 00 00 00 со со г- Г— 00 00 00 00 00 со г- г— см см см см CM см см сл СЛ см см см см см см СЛ сл Рч Рч Рч Рч Рч Рч Рч Рч Рч Рч Рч Рч Рч Рч Рч Рч Рч РД pq pq pq pq pq pq pq РД pq pq pq pq pq pq pq pq ЕЧ 1-1 HI HI HI ЕЧ ЕЧ ЕЧ ЕЧ ЕЧ Hl ЕЧ ЕЧ ЕЧ ЕЧ ЕЧ ЕЧ 101
Здесь в первых двух строках выдана информация из программы по запросу от оператора WRITE, находящегося в 0010 предложении; в третьей строке — результат работы отладочного оператора DEBUG (режим INIT); в четвертой строке результат работы режима TRACE - напечатана метка 101 выполняемого оператора трассируемого участка; в пятой строке результат работы режима SUBCHK — выведено сообщение о нарушении верхней границы индексов массива VEC. Эта граница массива в нашем примере оказалась равной значению 1755647. Это значение при повторном решении может оказаться другим, т. е. оно непредсказуемо (неприсвоенное значение) . 2.7. ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ ОБ ОШИБКАХ НА ШАГЕ КОМПИЛЯЦИИ ПРОГРАММЫ Приводимые ниже сообщения [38] об ошибках на шаге компиляции программы содержат следующую информацию: идентификатор сообщения, код серьезности, при чина сообщения. Идентификатор сообщения имеет вид: IEYXXX1, где IEY — префикс транслятора; XXX — трехзначный номер сообщения; I — признак информационного сообщения. Код серьезности вырабатывается транслятором и имеет следующие значения: 0 — предупреждение об ошибке, 4 — ошибка, 8 — серьезная ошибка, 16 — терминальная ошибка. На выходном листинге сообщения об ошибках печатаются на английском языке. В этом пособии текст сообщений приводится на русском языке. Переменная часть текста обозначается последовательностью трех одинаковых букв: XXX, YYY. Перед ней в квадратных скобках записывается слово (символ), предшествующее переменной части в английском варианте сообщения. ПЕРЕЧЕНЬ СООБЩЕНИЙ IEY0011 8 — недопустимый тип константы, переменной или выражения. IEY002I 0 — отсутствует метка оператора, следующего за оператором GO ТО. IEY003I 0 — имя содержит более шести символов. Во внимание приняты первые шесть символов. IEY004I 0 — пропущена запятая. Запятая вставлена. IEY005I 8 — неправильно используется метка. IEY006I 8 — многократное использование одной и той же метки. IEY007I 8 — одинаковое имя дано различным объектам модуля. IEY008I 8 — неверно используется имя. Нельзя распределить память. IEY009I 8 — нарушен порядок следования операторов. IEY010I 8 — неправильный размер (длина) поля памяти, числа или метки. IEY0111 8 — используются элементы неописанного массива. IEY012I 8 — число индексов переменной не соответствует размерности массива. IEY013I 8 — оператор или его часть не согласуются с синтаксисом языка. IEY014I 0 — в операторе явного описания типа или операторе DATA тип кон¬ станты не соответствует типу переменной, которой константа должна быть присвоена. Константа приведена к типу переменной. IEY015I 0 — в исходном модуле отсутствует оператор END. Оператор END вставлен. IEY016I 8 — недопустимое применение оператора. IEY017I 0 — оператор RETURN записан в главном модуле или оператор RETURN 7 появился в подпрограмме-функции. Оператор заменен в главном модуле оператором STOP, в подпрограмме-функции — оператором RETURN. 102
iEY018l 4 — число аргументов при обращении к библиотечной подпрограмме указано неверно. IEY019I 4 —в подпрограмме-функции не предусмотрено присваивание значения хотя бы одной переменной с именем входа. Напечатан список таких переменных. IEY020I 4 — объектам общего блока [BLOCK] XXX не может быть распределена память из-за несоблюдения правил использования оператора COMMON и, возможно, оператора EQUIVALENCE. IEY021I 8 — отсутствует оператор, помеченный меткой, на которую указывает оператор DO. Напечатан список таких меток. IEY022I 8 — отсутствует оператор, помеченный меткой, на которую указывает другой оператор. Напечатан список таких меток. IEY023I 4 — для переменных, указанных в операторе EQUIVALENCE, нельзя распределить память из-за противоречий между элементами этого оператора или из-за несоблюдения правил выравнивания. Напечатан список таких переменных. IEY024I 4 — элемент массива, указанный в операторе EQUIVALENCE, находится вне массива. IEY025I 4 — неправильное использование массива с переменными верхними границами индексов (регулируемого массива) . Напечатаны имена таких массивов. IEY026I 4 —в блок данных включены переменные, не указанные в операторе COMMON. Напечатан список таких переменных. IEY027I 8 — оператор имеет более 19 строк продолжения. Лишние строки про¬ должения игнорированы. IEY028I 16 - система не может обеспечить транслятор добавочным блоком па¬ мяти, емкостью 4 Кбайт. IEY029I —ошибка перфорации. Перфорация игнорирована, код серьезности не установлен. IEY030I 16 —ошибка в объектном модуле при наличии опции LOAD. Вывод редактору связей уничтожен. IEY0311 16 - в таблице транслятора не хватает места. IEY032I 0 - оператор ограничения /* языка управления заданиями предшествует первому оператору исходного модуля. Производится обработка пустого модуля. IEY033I 0 — между двумя последовательными операторами обнаружено более 30 комментариев. Лишние комментарии игнорированы. IEY034I 8 или 16 — ошибка ввода-вывода. Установлен код серьезности 8, если вывод происходил на SYSPUNCH, или 16 — во всех других случаях. IEY035I — нельзя открыть набор данных с dd-именем [OPEN] XXX из-за отсут¬ ствия или неправильного написания оператора DD. IEY036I 0 — невыполняемый оператор (любой кроме оператора FORMAT) поме¬ чен. Метка игнорирована. IEY037I 4 — размерность массива определена дважды. Принята во внимание размерность, указанная первой. IEY038I 4 - размер константы, указанный в операторе явного описания типа или в операторе DATA в качестве начального значения переменной, превышает длину отве¬ денного для переменной поля памяти. IEY039I 0 — пропущен оператор RETURN. Оператор вставлен. IEY040I 8 — ошибка при использовании общего блока в блоке данных. 2.8. ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ ОБ ОШИБКАХ НА ШАГЕ ВЫПОЛНЕНИЯ ПРОГРАММЫ Приводимый ниже список сообщений [38] об ошибках на шаге выполнения программы содержит следующую информацию: идентификатор сообщения, причина сообщения. Идентификатор сообщения имеет вид: ЮЗ
IHCXXXI, где IНС — префикс транслятора, XXX — трехзначный номер сообщения, I — признак информационного сообщения. Причина сообщения и возможные рекомендации программисту в перечне сообще¬ ний об ошибках на шаге выполнения программы представлены в такой же форме, как в перечне сообщений на шаге компиляции (см. § 2.7). ПЕРЕЧЕНЬ СООБЩЕНИЙ IHC207I — произошло переполнение порядка числа при выполнении арифмети¬ ческой операции с плавающей точкой. Результат — максимальное допустимое число. IHC208I — произошло исчезновение порядка числа при выполнении арифмети¬ ческой операции с плавающей точкой. Результат — нуль. IHC209I — попытка деления на нуль числа с фиксированной или плавающей точ¬ кой. Деление не производится. IHC210I — программное прерывание. Напечатано старое слово состояния про¬ граммы [OLD PSW IS] XXX, восьмая литера которого является кодом прерывания и указывает причину прерывания (пояснения см. на стр. 50). IНС2111 — неправильный символ в операторе FORMAT. Напечатан символ [SPECIFIED] XXX, ошибочный описатель поля воспринят как конец спецификации формата. IHC212I — список форматного ввода-вывода превышает длину логической записи. Напечатан ссылочный номер набора данных [UNIT] XXX. При вводе остаток списка ввода игнорирован, при выводе начата новая запись. IHC213I — список бесформатного ввода превышает длину логической записи. Напечатан ссылочный номер набора данных [UNIT] XXX, остаток списка ввода игно¬ рирован. IHC214I — при бесформатном вводе-выводе указан тип записи F или U. Напечатан ссылочный номер набора данных [UNIT] XXX. При чтении (вводе) запрос ввода игно¬ рирован. При записи (выводе) тип записи изменен на V, если набор данных начинается с бесформатной записи; в противном случае список вывода игнорирован. IHC215I — при форматном вводе чисел по коду I, Е, F или D обнаружен недопусти¬ мый символ. Символ [CHARACTER] XXX напечатан и заменен нулем. IHC216I — неправильно указан номер программного переключателя при обра¬ щении к служебной программе SLITE или SLITET. Напечатано значение аргумента, SLITE никакого действия не производит, a SLITET выключает индикацию, т. е. уста¬ навливает J = 2. IHC217I — при выполнении оператора READ обнаружен конец набора данных, а список ввода еще не исчерпан. Напечатан ссылочный номер набора данных [UNIT] XXX и начато чтение следующего файла. IHC218I — ошибка ввода-вывода. Макрокоманда SYNADAF сформировала текст, содержащий имена задания, пункта задания, программы пользователя и другую ин¬ формацию локализации ошибки. Запрос ввода-вывода игнорирован. Если ошибка произошла при вводе, то управление передано оператору, метка которого указана в параметре ERR оператора READ. IHC219I — загрузочный модуль содержит ссылку на несуществующий набор данных. Напечатано DD-имя [FOR] XXX или ссылочный номер набора данных [UNIT] YYY. Запрос ввода-вывода игнорирован. IHC220I — ссылочный номер набора данных выходит за пределы номеров, уста¬ новленных при генерации. Напечатан номер [=] XXX, ввод-вывод игнорирован. IHC221I — вводимые данные NAMELIST содержат имя [=] XXX, состоящее более чем из восьми символов. Остаток списка NAMELIST игнорирован. IHC222I — имя переменной или массива, заданное во входных данных для 104
NAMELIST, не определено в объявлении NAMELIST. Остаток списка NAMELIST игно¬ рирован. IHC223I - во вводимых данных NAMELIST не имеет либо ограничителя, либо име¬ ни [=] XXX, либо индекса массива [=] XXX. Остаток списка NAMELIST игнорирован. 1НС2241-во вводимых данных NAMELIST индекс указан с именем [=]ХХХ, которое определено как имя массива, или индекс массива [=] XXX находится вне допустимой области. Остаток списка NAMELIST игнорирован. IHC225I — при вводе данных по коду преобразования обнаружен недопустимый символ [CHARACTER] XXX. Напечатана запись, содержащая символ, и символ заменен нулем. IHC230I — при выполнении подпрограммы [SUBROUTINE] YYY обнаружена ошибка в операторе с внутренним номером [ISNJXXX. Выполнение прекращено. IHC2311 — возникла одна из следующих ситуаций: оператор ввода-вывода прямого доступа используется для набора данных последовательного доступа; оператор ввода- вывода последовательного доступа применяется для набора данных прямого доступа; оператор ввода-вывода прямого доступа используется без DEFINE FILE. Напечатан но¬ мер набора данных [SET] XXX или устройства [UNIT] XXX; ввод-вывод игнорирован. IHC232I — номер записи не согласуется с количеством записей в наборе данных. На¬ печатан номер записи [NUMBER] XXX и ссылочный номер набора данных [UNIT] YYY; ввод-вывод игнорирован. IHC233I — в операторе DEFINE FILE указана длина записи,превышающая 32К— 1. Напечатан ссылочный номер набора данных [UNIT] XXX, установлена длина записи 32000. IHC234I — во время выполнения программы назначен набор данных прямого доступа для вывода сообщений об ошибках. Напечатан ссылочный номер набора данных [UNIT] XXX, определение набора данных игнорировано. IHC235I — ссылочный номер набора данных прямого доступа указан в операторе ввода-вывода последовательного доступа. Напечатан ссылочный номер набора данных [=] XXX; определение набора данных игнорировано. IHC236I — оператор READ обращается к набору данных, который не был создан. Напечатан ссылочный номер набора данных [UNIT] XXX; ввод-вывод игнорирован. IHC237I — длина записи не соответствует длине, указанной в операторе DEFINE FILE. Напечатан ссылочный номер набора данных [UNIT] XXX; ввод-вывод игно¬ рирован. IHC240I — аварийное завершение. Напечатан системный код аварийного заверше¬ ния [ABEND CODE IS] XXX и код Фортрана [FORTRAN CODE IS] YYY. IHC242I — возведение целого основания в целую степень [EXPONENTS XXX при нулевом основании и отрицательном или нулевом показателе степени. Результат — нуль. IHC242I — * см. IHC2411 для вещественного основания. IHC243I — * см. IHC2411 для основания двойной точности. IHC244I — возведение вещественного основания в вещественную степень [EXPONENTS XXX при нулевом основании и отрицательном или нулевом показателе степени. Результат — нуль. IHC245I — возведение основания двойной точности в степень [EXPONENTS XXX двойной точности при нулевом основании и отрицательном или нулевом показателе степени. Результат — нуль. IHC246I — возведение комплексного основания длиной восемь байт в целую степень [EXPONENTS XXX при нулевом основании и отрицательном или нулевом показателе. Результат — нуль. IHC247I — * см. IHC246I для комплексного основания длиной 16 байт. IHC25 II — вычисление квадратного корня из вещественного отрицательного числа [=] XXX. Извлечен корень из модуля числа. IHC252I — вычисление экспоненты вещественного числа [=]ХХХ, большего 174,673. Результат — максимальное допустимое число. 105
IHC253I — вычисление логарифма вещественного числа [=] XXX, равного или меньшего нуля или возведение отрицательного основания в вещественную степень. Если XXX = 0, результат — максимальное допустимое число; если XXX < 0, результат - логарифм модуля XXX. IHC254I — вычисление синуса (косинуса) вещественного числа [=] XXX, модуль которого больше или равен я • 218. Результат х/2?2. IHC255I — вычисление арктангенса частного двух вещественных чисел,, равных нулю. Результат — нуль. IHC256I — вычисление гиперболического синуса (косинуса) вещественного числа [=] XXX, модуль которого больше или равен 174,673. Результат — максимальное до¬ пустимое число. IHC257I — вычисление арксинуса (арккосинуса) вещественного числа [=/] XXX, модуль которого больше единицы, результат — нуль. IHC258I — вычисление тангенса (котангенса) вещественного числа [=/] XXX, модуль которого больше или равен я • 218. Результат — единица. IHC259I — вычисление тангенса (котангенса) вещественного числа [=/] XXX, модуль которого находится вблизи особой точки. Результат — максимальное допусти¬ мое число. IHC2611 — * см. IHC2511 для отрицательного числа двойной точности. IHC262I — * см. IHC252I для числа двойной точности. IHC263I — * см. IHC253I для числа двойной точности. IHC264I — см. IHC254I для числа двойной точности, модуль которого больше или равен я • 250. IHC265I — * см. IHC255I для числа двойной точности. IHC266I — * см. IHC256I для числа двойной точности. IHC267I — * см. IHC257I для числа двойной точности. IHC268I — * см. IHC258I для числа двойной точности, модуль которого больше или равен я • 250. IHC269I — * см. IHC259I для числа двойной точности. IHC2711 — вычисление экспоненты комплексного числа длиной восемь байт, вещественная часть которого [ARG=] XXX превышает 174,673. Результат — произведе¬ ние максимального допустимого числа на (cos Z + i sin Z), где Z — мнимая часть аргу¬ мента. IHC272I — вычисление экспоненты комплексного числа длиной восемь байт с мни¬ мой частью [ARG] XXX, модуль которого больше или равен я • 218. Результат - нули в вещественной и мнимой частях. IHC273I — вычисление логарифма комплексного числа длиной восемь байт, веще¬ ственная и мнимая части которого равны нулю. Результат — максимальное допустимое число в вещественной части, нуль в мнимой части. IHC274I — вычисление синуса (косинуса) комплексного числа длиной восемь байт с вещественной частью [=/] XXX, модуль которой больше или равен я • 218. Резуль¬ тат — нули в вещественной и мнимой частях. IHC275I — вычисление синуса (косинуса) комплексного числа длиной восемь байт с мнимой частью [=7] XXX, модуль которой превышает 174,763. Если XXX > О, то в качестве результата установлено: для синуса M/2 * (sin В + i cos В), для косинуса М/2 * (cos В — i sin В). Если XXX < 0, то в качестве результата установлено: для синуса M/2* (sin В — i cos В), для косинуса M/2 * (cos В + i sin В) . Обозначения: М — макси¬ мальное допустимое число; В — вещественная часть аргумента. IHC2811 — * см. IHC2711 для комплексного числа длиной 16 байт. IHC282I — * см. IHC272I для комплексного числа длиной 16 байт с модулем мнимой части, большим или равным я • 250. IHC283I — * см. IHC273I для комплексного числа длиной 16 байт. IHC284I — * см. IHC274I для комплексного числа длиной 16 байт с модулем вещественной части, большим или равным я • 250. 106
IHC285I — * см. IHC275I для комплексного числа длиной 16 байт. IHC290I — вычисление гамма-функции вещественного числа [ARG=]XXX, находя¬ щегося вне интервала (2 252 ; 57, 5744). Результат — максимальное допустимое число. IНС2911 — вычисление логарифма гамма-функции вещественного числа [ARG=] XXX, находящегося вне интервала (0; 4,2937 ■ 1073). Результат - максималь¬ ное допустимое число. IHC300I — * см. IHC290I для числа двойной точности. IНС3011 — * см. IНС2911 для числа двойной точности. IHC900I — количество ошибок с номером [NUMBER] XXX достигло предельно допустимого значения. Выполнение прекращено. IHC9011 — ошибка в программе корректирующего действия пользователя. Выпол¬ нение прекращено. IHC902I - номер ошибки [NUMBER] XXX вышел за пределы таблицы ошибок. Ссылка к таблице игнорирована. IHC903I - попытка изменить немодифицируемый вход [NUMBER] XXX таблицы с помощью CALL ERRSET или CALL ERRSTR. Ссылка к таблице игнорирована. IHC904! — попытка выполнить операцию ввода-вывода во время работы програм¬ мы обработки ошибок ввода-вывода. Выполнение прекращено. ГЛАВА ТРЕТЬЯ РАБОТА С ПАКЕТОМ ПРИКЛАДНЫХ ПОДПРОГРАММ СИСТЕМЫ ПРОГРАММИРОВАНИЯ ФОРТРАН 3.1.ОБЩИЕ СВЕДЕНИЯ О ПАКЕТЕ.И ПОРЯДОК ЕГО ИСПОЛЬЗОВАНИЯ Пакет прикладных подпрограмм на языке Фортран является составной частью математического обеспечения ЕС ЭВМ и представляет собой совокупность подпрограмм, к которым можно обращаться из программы пользователя. Пакет имеет модульную структуру и допускает возможность расширения и за¬ мены отдельных модулей. Пакет прикладных программ Фортрана, эксплуатируемый в настоящее время на ЕС ЭВМ, содержит более 250 подпрограмм, реализующих методы линейной и матрич¬ ной алгебры, численного анализа и математической статистики [25, 26, 27, 29]. Для использования пакета необходимо знать способ обращения к подпрограммам и функциональное назначение этих подпрограмм. Подпрограммы пакета используются при решении задач, в которых выполняются операции с матрицами (сложение, умножение, перестановки строк и столбцов и т. п.), задач, связанных с вычислением собственных значений и определением собственных векторов матриц, решением систем линейных алгебраических уравнений, интерполя¬ цией, аппроксимацией и сглаживанием функций, численным дифференцированием и интегрированием функций. Часто для решения одного и того же типа задач могут быть использованы раз¬ личные подпрограммы пакета. Так, например, для численного интегрирования функций имеются подпрограммы, реализующие правило трапеций, формулы Ньютона—Котеса (в частности, формула Симпсона) , квадратурные формулы Гаусса с различным числом узлов. Кроме того, многие подпрограммы пакета выполнены в двух вариантах, позволя¬ ющих производить вычисления с обычной и двойной точностью. Программист выбирает подпрограммы с учетом особенностей конкретной задачи (например, вид интегрируемой или дифференцируемой функции, требуемая точность решения и т. д.) . 107
В описании каждой подпрограммы указывается название и имя подпрограммы, ее назначение, вид обращения к ней, поясняется смысл параметров, приводится краткое изложение используемого математического метода. При работе с подпрограммами пакета должны соблюдаться те же правила, что и при работе с подпрограммами, явно описанными в программе пользователя. Обращение к подпрограммам пакета выполняется посредством оператора вызова подпрограмм CALL и имеет вид С A L L < имя подпрограммы > « список фактических параметров >) Имя подпрограммы, выполняющей вычисления с двойной точностью, образуется из имени соответствующей подпрограммы с обычной точностью добавлением к нему слева буквы D. Если при описании формальных параметров их тип и точность специально не ого¬ вариваются, то они определяются по первой букве идентификатора в соответствии с принятой в языке Фортран концепцией умолчания. При написании операторов обращения к подпрограммам необходимо внима¬ тельно следить за соблюдением соответствия количества, порядка следования и типа фактических и формальных параметров. Нарушение этого правила приводит к ошиб¬ кам, которые проявляются обычно на шаге выполнения программы (шаг GO) и лока¬ лизация которых затруднена из-за невозможности включения в подпрограмму опера¬ торов вывода для получения промежуточных результатов при отладке. Если фактическим параметром подпрограммы является имя встроенной функции, имя другой подпрограммы пакета или имя описанной пользователем подпрограммы, то это имя в вызывающей программе должно быть указано в операторе EXTERNAL. В число формальных параметров многих подпрограмм включен параметр IER — так называемый индикатор ошибки. Значение IER формируется в процессе выполне¬ ния подпрограммы. При нормальном выполнении подпрограммы IER = 0. В противном случае, например, при некорректном задании исходных данных, при невозможности обеспечить требуемую точность вычислений и т. д. 1ER ф 0. Возможные значения IER и соответствующие им ситуации указываются при опи¬ сании параметров подпрограммы. Возврат из подпрограммы осуществляется к оператору вызывающей программы, следующему за оператором CALL. Поэтому сразу после оператора CALL рекомендуется записать оператор, анализирующий значение IER. Подпрограммы пакета в ОС ЕС ЭВМ обычно размещаются в библиотечном наборе данных с именем SSPFST в виде объектных модулей. Подпрограммы библиотеки SSPFST подключаются к вызывающей программе на шаге редактирования. В задании на выполнение программы, содержащей обращения к библиотечным подпрограммам, нужно указать имя библиотеки и имена всех вызываемых подпрограмм. Задание на трансляцию, редактирование и выполнение программы, содержащей обращение к подпрограммам библиотеки SSPFST, должно быть оформлено следующим образом: //<ИМЯ ЗАДАНИЯ3* JOB («ШИФР3*), ’ФАМИЛИЯ1 ,MSGLEVEL=(2, 0), // Т1МЕ=«=ВРЕМЯ> // EXEC FORTGCLG,PARM.LKED=’LET,LIST’ //FORT.SYSIN DD * « ТЕКСТ ПРОГРАММЫ * /* //LKED.LIB DD DSNAME=SSPFST,DISP=SHR //LKED.SYSIN DD * . LIBRARY LIB(<=HMH ПП1*,*ИМЯ ПП2>, •.. ,<ИМЯ ППЫ3*) 108
/* //GO.SYSIN DD * < ИСХОДНЫЕ ДАННЫЕ ПРОГРАММЫ => /* // В этом задании возможность работы с библиотечными подпрограммами обеспе¬ чивается DD-операторами с именами LKED.LIB и LKED.SYSIN. DD-оператор с именем LKED .LIB описывает библиотеку с именем SSPFST. Пред¬ полагается, что набор SSPFST каталогизирован, поэтому параметры UNIT и VOL, определяющие устройство прямого доступа, содержащее этот набор, не указываются. DD-оператор с именем LKED.SYSIN определяет набор данных редактора связей, находящихся во входном потоке. Этот набор содержит управляющее предложение редактора связей LIBRARY, в котором указывается имя DD-оператора, описывающего библиотеку (LIB) и перечисляются имена подпрограмм из библиотеки, к которым есть обращение в программе. Организация библиотек и их имена могут быть разными. Поэтому перед исполь¬ зованием пакета необходимо получить консультацию системного программиста вы¬ числительного центра. Рассмотрим пример использования подпрограмм пакета. Пусть требуется найти все собственные значения произвольной матрицы раз мером 6X6 4,6 4,7 5,4 4,2 2,8 2,5 5,7 8,3 5,0 6,5 4,3 7,4 7,6 5,9 2,7 1/8 4,8 5,6 3,7 6,3 3,6 2,8 3,9 4,5 2.8 4,4\ 6.8 5,2 9,4 9,3 5.1 7,7 7.8 3,6 / 9.2 5,9/ Задача решается в два приема. Сначала исходная матрица с помощью преобразования подобия приводится к верхней почти треугольной форме (форме Гессенберга), азатем с помощью разновидности QR-алгоритма находятся собственные значения. Для выпол¬ нения этих действий в приводимой ниже программе используются две подпрограммы из пакета прикладных подпрограмм. Подпрограмма HSBG преобразует исходную матрицу к форме Гессенберга, а затем с помощью подпрограммы ATEIG находятся собственные значения. Программа решения задачи и задание на ее трансляцию, редактирование и выпол¬ нение приводятся ниже. //РР000121 JOB (РР0001),’ИВАНОВ1,MSGLEVEL=(2,0),Т1МЕ=5 // EXEC FORTGCLG,PARM.LKED=’LET,LIST’ //FORT.SYSIN DD * С * ПРОГРАММА ОПРЕДЕЛЕНИЯ ВСЕХ СОБСТВЕННЫХ ЗНАЧЕНИЙ * С * ПРОИЗВОЛЬНОЙ МАТРИЦЫ РАЗМЕРНОСТИ 6*6 * С * ИСПОЛЬЗУЮТСЯ ПОДПРОГРАММЫ HSBG И ATEIG ИЗ ПАКЕТА * С * ПРИКЛАДНЫХ ПОДПРОГРАММ НА ЯЗЫКЕ ФОРТРАН ОС ЕС ЭВМ * С * А(6,6)-МАССИВ ЭЛЕМЕНТОВ ИСХОДНОЙ МАТРИЦЫ; * С * ПРИ ВЫХОДЕ ИЗ ПОДПРОГРАММЫ HSBG СОДЕР- * 109
С * ЖИТ ЭЛЕМЕНТЫ МАТРИЦЫ ГЕССЕННЕРГА; * С * RR(6) -МАССИВ,СОДЕРЖАЩИЙ ВЕЩЕСТВЕННЫЕ ЧАСТИ * С * ВЫЧИСЛЕННЫХ СОБСТВЕННЫХ ЗНАЧЕНИЙ; * С * RI(6) -МАССИВ,СОДЕРЖАЩИЙ МНИМЫЕ ЧАСТИ ВЫЧИС- * С * ЛЕННЫХ СОБСТВЕННЫХ ЗНАЧЕНИЙ. * С ****♦****«♦•*******■»**♦■»*****♦♦♦******♦*•»■«<♦*******•** DIMENSION А(6,6),RR(6),RI(6),1А( 6 ) READ(5,10)((А(I,J),J=1,6) 10 FORMAT(6F6.1) WRITE(6,11) 11 FORMAT(//1X,’ИСХОДНАЯ МАТРИЦА ИМЕЕТ ВИД’) WRITE(6,12) 12 FORMATC1X,60('-’)) WRITE(6,13)((A(I,J),J=1,6),1=1,6) 13 FORMAT(6(1X,F9.5)) WRITE(6,12) С ***ПРЕ0БРА30ВАНИЕ МАТРИЦЫ В ФОРМУ ГЕССЕНБЕРГА *** CALL HSBG(6,A,6) WRITE(6,14) 14 FORMAT(//1X,’МАТРИЦА.В ФОРМЕ ГЕССЕНБЕРГА’) WRITE(6,12) WRITE(6,13)((A(I,J),J=1,6),1=1,6) WRITE(6,12) С ***ВЫЧИСЛЕНИЕ СОБСТВЕННЫХ ЗНАЧЕНИЙ *** CALL ATEIGC6,A,RR,RI,IA,6) WRITE(6,15) 15 FORMAT(//1X,’СОБСТВЕННЫЕ ЗНАЧЕНИЯ') WRITE(6,16) 16 FORMAT(1X,25()) WRITE(6,17) 17 FORMAT(4X,’ДЕЙСТВИТ.’,5X,’МНИМ.') WRITE(6,16) WRITEC6,18)(RR(I),RI(I),1=1 ,6) 18 FORMAT(2(2X,F10.5)) WRITE(6,16) STOP END //LKED.LIB DD DSNAME=SSPFST,DISP=SHR //LKED.SYSIN DD * LIBRARY LIB(HSBG,ATEIG) /* 110
//GO.SYSIN DD * 4.6 4.7 5.4 4.2 2.8 4.4 2 .8 2.5 5.7 8.3 6.8 5.2 5.0 6.5 4.3 7.4 9.4 9.3 7.6 5.9 2.7 1 .8 5.1 7.7 4.8 5.6 3.7 6.3 7.8 3.6 3.6 2.8 3.9 4.5 9.2 5.9 /* // РЕЗУЛЬТАТЫ РЕШЕНИЯ ПОЛУЧАЕМ НА ЛИСТИНГЕ В СЛЕДУЮЩЕМ ВИДЕ: ИСХОДНАЯ МАТРИЦА ИМЕЕТ ВИД 4.60000 4.70000 5.40000 4.20000 2.80000 4.40000 2.80000 2.50000 5.70000 8.30000 6.80000 5.20000 5.00000 6 .50000 4.30000 7.40000 9.40000 9.30000 7.60000 5.90000 2.70000 1.80000 5.10000 7.70000 4.80000 5.60000 3.70000 6.30000 7.80000 3.60000 3.60000 2.80000 3.90000 4.50000 9.20000 5.90000 МАТРИЦА В ФОРМЕ ГЕССЕНВЕРГА 1 .05472 -1 .63396 2.72646 3.84783 2.80000 4.40000 2.01257 -2.36670 -2.17137 2.89468 4.04257 6.03833 0.0 -1 .58839 -0.80845 7.92607 13.78295 15.98241 0.0 0.0 3.49820 7.78531 16.11174 17.49956 0.0 0.0 0.0 8.53209 17.44455 14.61304 0.0 0.0 0.0 0.0 9.20000 5.90000 СОБСТВЕННЫЕ ЗНАЧЕНИЯ ДЕЙСТВИТ. МНИМ. 31 .69159 0.0 -4.96900 0.0 1 .1 2992 3.27061 1 .1 2992 -3.27061 -1 .04125 1 .68618 -1 .04125 -1 .68618 111
3.2. НЕКОТОРЫЕ ОСОБЕННОСТИ ИСПОЛЬЗОВАНИЯ МАТРИЧНЫХ ПОДПРОГРАММ Двухмерная и векторная формы размещения элементов матрицы в памяти. Под¬ программы пакета прикладных программ на языке Фортран, выполняющие операции над матрицами [25, 29], имеют особенности расположения данных в массивах, пере¬ даваемых этим подпрограммам в качестве фактических параметров. Обычной формой представления матрицы в программе является двухмерный массив с границами, соответствующими размерам матрицы. Однако иногда возникает необходимость многократно выполнять некоторую программу с данными в виде матриц переменных размеров. В таких случаях соответствующий массив в операторе DIMENSION основной программы описывается с максимально требуемыми размерами, поскольку динами¬ ческие массивы, т. е. массивы с переменными верхними границами, в основной про¬ грамме на языке Фортран не используются. Если границы измерений двухмерного массива, используемого для представления матрицы, превышают соответственно число строк и столбцов матрицы, то возможны две формы установления соответствия между элементами матрицы и массива (т. е. две формы размещения данных в памяти) : двухмерная и векторная. При двухмерной форме размещения данных элементу массива А (7,/) ставится в соответствие элемент матрицы 3ц ап а13 a2i а22 323 3з1 а32 ЗЗЗ При векторной форме элементы массива, перебираемые по столбцам, заполняются подряд значениями элементов матрицы, последовательно перебираемыми также по столбцам. Таким образом, при векторной форме каждый столбец матрицы располага¬ ется непосредственно за предыдущим: Зц а32 a2i ^13 331 323 а12 Ззз с?22 Эти две формы размещения данных показаны на примере расположения матри¬ цы А размером 3 X 3 в области памяти, описанной как массив А (5,5). Векторная и двухмерная форма размещения данных в памяти совпадают, если число строк и столбцов матрицы данных совпадает с соответствующими границами двухмерного массива, указанными в операторе DIMENSION вызывающей программы. Матричные подпрограммы организованы таким образом, что они используют 112
качестве формальных параметров для представления матриц одномерные массивы. Элементы матриц расположены в этих массивах последовательно по столбцам. Поэтому при обращении к этим подпрограммам следует иметь в виду, что исход¬ ные данные должны быть расположены во входных массивах в векторной форме, и в этой же форме будут расположены значения в массивах — результатах. В пакете имеется подпрограмма ARRAY, которая служит для перехода от одной формы размещения данных к другой. Кроме того, имеется программа LOC, которая может быть использована для обращения к любому элементу матрицы, расположенной в векторной форме. Общий, симметричный и диагональный способы хранения матриц. Многие под¬ программы пакета могут оперировать с матрицами общего вида, симметричными или диагональными. В соответствии с тремя видами матриц используются три способа их размещения в памяти в векторной форме: общий, симметричный и диагональный. При общем способе хранения в памяти находятся все элементы матрицы, рас¬ положенные по столбцам в последовательных ячейках памяти. Для размещения симметричной матрицы может быть использован как общий способ размещения, так и более экономный — симметричный способ. При симметричном способе в памяти размещается только верхняя треугольная часть матрицы, элементы которой располагаются по столбцам в последовательных ячейках памяти. Диагональный способ может быть использован для размещения диагональных матриц. При этом способе в последовательных ячейках памяти хранятся только диаго¬ нальные элементы. Если для хранения матрицы размером NX N общим способом требуется N X N ячеек памяти, то для хранения симметричной и диагональной матриц того же размера требуется соответственно N (N + 1) /2 и N ячеек. Далее, при описании подпрограмм матричной алгебры (§3.3, §3.4) приняты следующие общие обозначения для некоторых параметров: А — массив элементов исходной матрицы; В — массив элементов второй исходной матрицы; R — массив элементов матрицы — или вектора-результата; MS — переменная, значение которой указывает способ хранения матриц; MSA -г- переменная, значение которой указывает способ хранения матрицы А; MSB — то же для матрицы В; MSR — то же для матрицы R. Переменные, указывающие способ хранения матриц, могут принимать одно из следующих значений: О — общий способ хранения; 1 -- симметричный; 2 — диагональный. 33. РАЗМЕЩЕНИЕ МАТРИЦ В ПАМЯТИ КОПИРОВАНИЕ МАТРИЦЫ Подпрограмма MCPY с обычной точностью. В подпрограмме присваивается каж¬ дому элементу матрицы R размером NXM значение соответствующего элемента задан¬ ной матрицы А: г/у- =а/у (/ = 1 /V; / = 1 М). Обращение к подпрограмме имеет вид CALL MCPY (A, R, N, М, MS) N, М — число строк и столбцов матриц А и R; A, R, MS — см. выше. 113
При работе этой подпрограммы используется подпрограмма LOC. ПРЕДСТАВЛЕНИЕ СТРОКИ ИЛИ СТОЛБЦА МАТРИЦЫ В ВИДЕ ВЕКТОРА Подпрограммы RCPY и CCPY с обычной точностью. Каждая подпрограмма форми¬ рует вектор R, в качестве компонент которого берутся соответствующие элементы строки (RCPY) или столбца (COPY) с номером L матрицы А размером N X М: rj = aLj (j = 1, . . . , М ) для RCPY ri = aiL (/ = 1, . . . , /V) для CCPY Обращение к подпрограммам имеет вид CALL RCPY (A, L, R, N, М, MS) CALL CCPY (A, L, R, N, M, MS) L— номер строки матрицы А, которая преобразуется в вектор /?; R — массив элементов вектора-результата длиной М для RCPY или длиной N для CCPY; N — число строк в матрице А; М — число столбцов в матрице A; A, MS — см. стр. 113. При работе этих подпрограмм используется подпрограмма LOC. ПРЕДСТАВЛЕНИЕ ДИАГОНАЛИ МАТРИЦЫ В ВИДЕ ВЕКТОРА Подпрограмма DCPY с обычной точностью. Подпрограмма формирует вектор R, в качестве компонент которого берутся диагональные элементы матрицы А порядка N: Г)=аП (/ = 1 /V). Обращение к подпрограмме имеет вид CALL DCPY (A, R, N, MS) R — массив элементов вектора-результата длиной /V; N — число строк и столбцов в матрице A; A, MS — см. стр. 113. При работе этой подпрограммы используется подпрограмма LOC., ВЫБОР ПОДМАТРИЦЫ ИЗ ЗАДАННОЙ МАТРИЦЫ Подпрограмма XCPY с обычной точностью. Подпрограмма формирует матрицу- результат R путем переписи NR строк и MR столбцов исходной матрицы А, начиная с элемента, находящегося на пересечении £-й строки и /С-го столбца: rH =aL+i-t.K+j-1 <'=1 /V/?; / = 1 MR) Обращение к подпрограмме имеет вид CALL XCPY (A, R, L, К, NR, MR, NA, МА, MS) L — номер строки матрицы А, в которой находится первый переписываемый в матрицу R элемент; К — номер столбца матрицы А, в котором находится первый переписываемый в матрицу R элемент; NR — число строк, переписываемых в R; MR — число столбцов, переписываемых в R; NA — число строк в матрице А; 114
МА —число столбцов в матрицей ; Af R, MS — см. стр. 113. Матрица R всегда хранится общим способом. Массив R не может совпадать с мас¬ сивом А. При работе этой подпрограммы используется подпрограмма LOC. ИЗМЕНЕНИЕ СПОСОБА ХРАНЕНИЯ МАТРИЦЫ Подпрограмма MSTR с обычной точностью. Подпрограмма перестраивает исход¬ ную матрицу А порядка N для образования матрицы R, т. е. из массива А, содержащего исходную матрицу в соответствии с указанным первоначальным способом ее хранения (общим, симметричным или диагональным), формирует массив R элементов этой матрицы в соответствии с другим требуемым способом хранения. Обращение к подпрограмме имеет вид CALL MSTR (A, R, N, MSA, MSR) N — число строк и столбцов в Д и /?; A, R, MSA, MSR — см. стр. 113. В зависимости от значения параметров MSA и MSR могут быть произведены следующие преобразования: MSA MSR О 0 Матрица А перемещается на место матрицы R. О 1 Элементы верхней треугольной части матрицы А, хранящейся общим способом, используются для образования симметричной матрицы R. О 2 Диагональные элементы матрицы А служат для образования диагональной матрицы R. 1 0 Симметричная матрица А расширяется до матрицы R общего вида. 1 1 Симметричная матрица А перемещается на место матрицы R. 1 2 Диагональные элементы симметричной матрицы А используются для обра¬ зования диагональной матрицы R. 2 0 Диагональная матрица А дополняется недостающими нулевыми элемен¬ тами для образования матрицы R, хранящейся общим способом. 2 1 . Диагональная матрица дополняется недостающими нулевыми элементами для образования симметричной матрицы. 2 2 Матрица А перемещается на место матрицы R. Массив R не может совпадать с массивом А. При работе этой подпрограммы используется подпрограмма LOC. ВЫЧИСЛЕНИЕ ВЕКТОРНОГО ИНДЕКСА ЭЛЕМЕНТА МАТРИЦЫ, РАСПОЛОЖЕННОЙ В ПАМЯТИ В ВЕКТОРНОЙ ФОРМЕ Подпрограмма LOC с обычной точностью. Подпрограмма вычисляет "векторный индекс" элемента исходной матрицы с индексами 7 и /, т. е. индекс элемента одно¬ мерного массива, содержащего указанный элемент матрицы в соответствии с заданным способом ее хранения в векторной форме (общим, симметричным или диагональным). Подпрограмма может быть использована для размещения матрицы в векторной форме и для обращения к любому элементу матрицы, расположенной в векторной форме (см. § 3.2). Обращение к подпрограмме имеет вид CALL LOC (I, J, IR, N, M, MS) 115
I — номер строки элемента матрицы; J — номер столбца элемента матрицы; IR — вычисляемый векторный индекс указанного элемента матрицы; N — число строк матрицы; М — число столбцов матрицы; MS — см. стр. 113. При MS = 1 в памяти содержатся только элементы верхней треугольной части матрицы [всего их /V (Л/ + 1) /2]. Поэтому для элемента нижней треугольной части вычисляется векторный индекс соответствующего ему элемента верхней треугольной части. При MS = 2 в памяти содержатся только /V диагональных элементов матрицы. Для всех внедиагональных элементов матрицы векторный индекс IR полагается рав¬ ным нулю. ПРЕОБРАЗОВАНИЕ ЭЛЕМЕНТОВ МАТРИЦЫ ИЗ ОБЫЧНОЙ ТОЧНОСТИ В ДВОЙНУЮ ИЛИ ИЗ ДВОЙНОЙ ТОЧНОСТИ В ОБЫЧНУЮ Подпрограмма CONVT. Подпрограмма преобразует форму представления значе¬ ний элементов матрицы из обычной точности в двойную или из двойной в обычную. Обращение к подпрограмме имеет вид CALL CONVT (N, М, MODE, S, D, MS) N — число строк матрицы; M — число столбцов матрицы; MODE — переменная, значение которой указывает тип преобразования: 1 — из обычной точности в двойную; 2 — из двойной точности в обычную; S — массив, содержащий элементы матрицы в форме чисел обычной точности; D — массив, содержащий элементы матрицы в форме чисел двойной точности; MS — см. стр. 113. Если MODE= 1, массив S содержит элементы исходной матрицы, а массив D — элементы матрицы-результата. Если MODE = 2, массив D содержит элементы исходной матрицы, а массив S — элементы матрицы-результата. Массив D должен быть описан в вызывающей программе оператором двойной точности (DOUBLE PRECISION или REAL * 8) и не может совпадать с массивом S. ПРЕОБРАЗОВАНИЕ ФОРМЫ РАЗМЕЩЕНИЯ МАТРИЦЫ ДАННЫХ ИЗ ДВУХМЕРНОЙ В ВЕКТОРНУЮ И НАОБОРОТ Подпрограмма ARRAY с обычной точностью. Подпрограмма преобразует матрицу общего вида из двухмерной формы размещения в векторную и наоборот. Эта подпрограмма применяется для связи программы пользователя, в которой матрицы представлены в виде двухмерных массивов (см. § 3.2), с подпрограммами пакета, использующими для представления матриц одномерные массивы. Обращение к подпрограмме имеет вид CALL ARRAY (MODE, I, J, N, M, S, D) MODE — переменная, значение которой указывает тип преобразования: 1 — из векторной формы в двухмерную, 2 — из двухмерной формы в векторную; I — число строк заданной матрицы данных; J — число столбцов заданной матрицы данных; N — число строк двухмерного массива D, используемого для размещения мат¬ рицы (N > I) ; 116
М — число столбцов двухмерного массива D, используемого для размещения матрицы (М > J); S — массив, используемый для размещения матрицы в векторной форме. В об¬ ласти памяти, выделенной для массива S, элементы матрицы размещаются последова¬ тельно столбец за столбцом в первых I X J ячейках; D — двухмерный массив, используемый для размещения матрицы в двухмерной форме. Элементы матрицы размещаются в первых I строках и J столбцах массива D. При MODE = 1 массив S является входным параметром, a D — массив-результат, при MODE = 2 — наоборот. Массив S может совпадать с массивом D. 3.4. ОПЕРАЦИИ С МАТРИЦАМИ СЛОЖЕНИЕ И ВЫЧИТАНИЕ МАТРИЦ ОБЩЕГО ВИДА Подпрограммы GMADD и GMSUB с обычной точностью^ Подпрограмма GMADD производит сложение, а подпрограмма GMSUB — вычитание двух матриц А и В разме¬ ром NXM, хранящихся в общем виде, с образованием матрицы-результата R общего вида: г/у- = а у + Ьц (/ = 1, ... ,N; j = 1, . . ., М ). Обращение к подпрограммам имеет вид CALL GMADD (А, В, R, N, М) CALL GMSUB (А, В, R, N, М) N — число строк в матрицах А, В и R; М — число столбцов в матрицах А, В и R; А, В, R — см. стр. 113. ПРОИЗВЕДЕНИЕ ДВУХ МАТРИЦ ОБЩЕГО ВИДА Подпрограммы GMPRD с обычной fDGMPRD с удвоенной) точностью. Подпро¬ граммы производят умножение матрицы А размером /V X М на матрицу В размером М X L с получением матрицы-результата размером N X L : м г}] = ^aikbkj (7 = 1, . . . , Л/ ; j = 1 ,...,£.). Все матрицы должны храниться общим способом. Обращение к подпрограммам имеет соответственно вид: CALL GMPRD (А, В, R, N, М, L) CALL DGMPRD (А, В, R, N, М, L) N — число строк матриц А и R; М( — число столбцов в матрице А и строк в В; L — число столбцов матриц В и R; А, В, R — см. стр. 113. Массив R не может совпадать с массивами А или В.
ТРАНСПОНИРОВАНИЕ МАТРИЦЫ ОБЩЕГО ВИДА Подпрограммы GMTRA с обычной fDGMTRA с удвоенной) точностью. Подпро¬ граммы производят транспонирование матрицы А размером N X М с образованием матрицы-результата R размером М X N : Гц = aj: (/'=!,...,М; j = 1, . . . , /V). Обращение к подпрограммам имеет соответственно вид: CALL GMTRA (A, R, N, М) CALL DGMTRAfA, R, N, M) N — число строк матрицы А и столбцов матрицы R; М — число столбцов матрицы А и строк матрицы /?; A, R — см. стр. 113. Матрицы А\л R должны храниться общим способом. Массив R не может совпадать с массивом А. УМНОЖЕНИЕ ТРАНСПОНИРОВАННОЙ МАТРИЦЫ НА ДРУГУЮ МАТРИЦУ ОБЩЕГО ВИДА Подпрограммы GTPRD с обычной fDGTPRD с удвоенной) точностью. Подпро¬ граммы вычисляют матрицу R = АтВ, где А и В — заданные матрицы. Обращение к подпрограмме имеет соответственно вид: CALL GTPRD (А, В, R, N, М, L) CALL DGTPRD (А, В, R, N, М, L) N — число строк матриц А и В', М — число столбцов матрицы А и строк матрицы /?; L — число столбцов матриц В и R; Az Bz R — см. стр. 113. Все матрицы должны храниться общим способом. Массив R не может совпадать с массивами А или В. СЛОЖЕНИЕ И ВЫЧИТАНИЕ ДВУХ МАТРИЦ Подпрограммы MADD и MSUB с обычной точностью. Подпрограмма MADD произ¬ водит сложением подпрограмма MSUB — вычитание двух матриц А и В размером N X М, хранящихся указанным при обращении способом. Обращение к подпрограммам имеет вид: CALL MADD (А, В, R, N, М, MSA, MSB) CALL MSUB (A, В, R, N, M, MSA, MSB) N — число строк матриц A, В, R; M — число столбцов матриц А, В, R; А, В, R, MSA, MSB — см. стр. 113. Способ хранения матрицы-результата R для всех комбинаций исходных матриц А и В указан в табл. 3.1.
Таблица 3.1 А В R Общий Общий Общий Симметричный Симметричный Симметричный Диагональный Диагональный Диагональный Общий Симметричный Диагональный Общий Симметричный Диагональный Общий Симметричный Диагональный Общий Общий Общий Общий Симметричный Симметричный Общий Симметричный Диагональный При работе этих подпрограмм используется подпрограмма LOC. УМНОЖЕНИЕ ДВУХ МАТРИЦ Подпрограмма MPRD с обычной точностью. Подпрограмма вычисляет произве¬ дение двух матриц А и В, хранящихся указанным при обращении способом, с обра¬ зованием матрицы-результата В. Обращение к подпрограмме имеет вид: CALL MPRD (А, В, R, N, М, MSA, MSB, L) N — число строк в матрицах А и /?; М —число столбцов в матрицей и строк в В; L — число столбцов в матрицах В и В; А, В, R, MSA, MSB — см. стр. 113. Способ хранения матрицы-результата В для всех комбинаций исходных матриц А и В указан в табл. 3.2. Таблица 3.2 А В R Общий Общий Общий Общий Симметричный Общий Общий Диагональный Общий Симметричный Общий Общий Симметричный Симметричный Общий Симметричный Диагональный Общий Диагональный Общий Общий Диагональный Симметричный Общий Диагональный Диагональный Диагональный Массив R не может совпадать с массивами А или В. При работе подпрограммы используется подпрограмма LOC. ТРАНСПОНИРОВАНИЕ МАТРИЦЫ Подпрограмма MTRA с обычной точностью. Подпрограмма производит транспо¬ нирование матрицы А размером NXM с образованием матрицы В размером MXN путем перемещения каждой строки матрицы А в соответствующий столбец матрицы В. Обращение к подпрограмме имеет вид: 119
CALL MTRA(A, R, N, M, MS) N — число строк матрицы А и столбцов R; М — число столбцов матрицы А и строк R; A, R, MS — см. стр. 113. Массив R не может совпадать с массивом А. При работе данной подпрограммы используется подпрограмма MCPY. УМНОЖЕНИЕ ТРАНСПОНИРОВАННОЙ МАТРИЦЫ НА ДРУГУЮ МАТРИЦУ Подпрограмма TPRD с обычной точностью. Подпрограмма предназначена для вычисления произведения А1 В, где А и В — заданные матрицы, хранящиеся указанным при обращении способом. Матрица А1 при этом не вычисляется, а элементы матрицы А при умножении берутся по столбцам, а не по строкам. Обращение к подпрограмме имеет вид: CALL TPRD (А, В, R, N, М, MSA, MSB, L) N — число строк матриц А и В; М — число столбцов матрицы А и строк R; L — число столбцов матриц В и R; А, В, R,MSA, MSB — см. стр. 113. Способ хранения матрицы-результата R для всех комбинаций исходных матриц указан в табл. 3.2. Массив R не может совпадать с массивами А или В. При работе этой подпрограммы используется подпрограмма LOC. УМНОЖЕНИЕ СЛЕВА МАТРИЦЫ НА ТРАНСПОНИРОВАННУЮ Подпрограмма МАТА с обычной точностью. Подпрограмма вычисляет произве¬ дение A1 A, vwA — заданная матрица. Обращение к подпрограмме имеет вид: CALL МАТА (A, R, N, М, MS) N — число строк в матрице А; М — число столбцов в А, а также число строк и столбцов в /?; A, R, MS — см. стр. 113. Матрица R всегда симметричная (способ хранения MS = 1). Массив R не может совпадать с массивом А. При работе этой подпрограммы используется подпрограмма LOC. СЛОЖЕНИЕ КАЖДОГО ЭЛЕМЕНТА МАТРИЦЫ СО СКАЛЯРОМ ИЛИ ВЫЧИТАНИЕ СКАЛЯРА ИЗ КАЖДОГО ЭЛЕМЕНТА МАТРИЦЫ Подпрограммы SADD и SSUB с обычной точностью. Подпрограмма вычисляет матрицу R, каждый элемент которой равен сумме (SADD) или разности (SSUB) соот¬ ветствующего элемента заданной матрицы А размером NX М и скалярной величины С: ги =аи ± С (/ = 1 /V; / = 1 М). Обращение к подпрограммам имеет вид CALL SADD (А, С, R, N, М, MS) CALL SSUB (А, С, R, N, М, MS) 120
С — скаляр; N — число строк матриц А и R; М — число столбцов матриц А и /?; A, R, MS — см. стр. 113. При работе этих подпрограмм используется подпрограмма LOC. УМНОЖЕНИЕ И ДЕЛЕНИЕ МАТРИЦЫ НА СКАЛЯР Подпрограммы SMPY u SDIV с обычной точностью. Подпрограмма вычисляет матрицу R, каждый элемент которой равен произведению (SMPY) или частному от деления (SDIV) соответствующего элемента заданной матрицы А размером N X М на скалярную величину С: Tjj = Сац для SMPY; rij = ajj /С для SDIV (/ =1 N', i =1 M). Обращение к подпрограммам имеет вид: CALL SMPY (А, С, R, N, М, MS) CALL SDIV (A, C, R, N, M, MS) С — скаляр; N — число строк матриц Ди/?; М —число столбцов матриц А и R; A, R, MS — см. стр. 113. При работе этих подпрограмм используется подпрограмма LOC. ЗАМЕНА КАЖДОГО ЭЛЕМЕНТА МАТРИЦЫ ИЛИ ЕЕ ДИАГОНАЛЬНОГО ЭЛЕМЕНТА НА ЗАДАННЫЙ СКАЛЯР Подпрограммы SCLA и DCLA с обычной точностью. Подпрограмма SCLA при¬ сваивает каждому, а подпрограмма DCLA — диагональному элементу заданной матрицы А размером /V X М значение скалярной переменной С: ац = С для SCLA ; a if =С для DCLA (/ = 1,...,/V; j =1,...'М). Обращение к подпрограммам имеет вид: CALL SCLA (А, С, N, М, MS) CALL DCLA (А, С, N, MS) С — скаляр; N — число строк матрицы А; М — число столбцов матрицы А (для подпрограммы DCLA М = N); A, MS — см. стр. 113. При работе этих подпрограмм используется подпрограмма LOC. СЛОЖЕНИЕ СТРОКИ МАТРИЦЫ А СО СТРОКОЙ МАТРИЦЫ R Подпрограмма RADD с обычной точностью. Подпрограмма производит сложение каждого элемента строки с заданным номером IRA матрицы А размером N X М с соот¬ ветствующим элементом строки с номером IRR матрицы R размером L X М: r!RR,j = r!RR,j +aIRA,j = 121
В выражении для r^Fij равенство понимается в смысле присваивания. Обращение к подпрограмме имеет вид: CALL RADD (A, IRA, R, IRR, N, М, MS, L) IRA — номер строки в матрице А, которая складывается со строкой IRR мат¬ рицы /?; R — массив элементов второй исходной матрицы, который после обращения к подпрограмме содержит матрицу-результат; IRR — номер строки в матрице R, с которой производится сложение; N — число строк в матрице А; М — число столбцов в матрицах А и /?; L — число строк в матрице /?; A, MS — см. стр. 113. Матрица R хранится общим способом. Массив R не может совпадать с массивом А, если матрица А хранится не общим способом. При работе этой подпрограммы используется подпрограмма LOC. СЛОЖЕНИЕ СТОЛБЦА МАТРИЦЫ А СО СТОЛБЦОМ МАТРИЦЫ R Подпрограмма CADD с обычной точностью. Подпрограмма складывает каждый элемент столбца с заданным номером !СА матрицы А размером /V X М с соответству¬ ющим элементом столбца с номером ICR матрицы R размером /V X L: ri,!CR = ri,ICR +ai,ICA = 1, . . . ,/V ) . В выражении для Г; fCR равенство понимается в смысле присваивания. Обращение к подпрограмме имеет вид: CALL CADD (A, ICA, R, ICR, N, М, MS, L) ICA — номер столбца матрицы А, участвующего в сложении; R — массив элементов второй исходной матрицы; после обращения к подпро¬ грамме содержит матрицу-результат; ICR — номер столбца матрицы R, участвующего в сложении; N — число строк в матрицах А и /?; М — число столбцов в матрице А; L — число столбцов в матрице /?; A, MS — см. стр. 113. Матрица R хранится общим способом. Массив R не может совпадать с массивом А, если матрица А хранится не общим способом. При работе этой подпрограммы используется подпрограмма LOC. СЛОЖЕНИЕ СТРОКИ МАТРИЦЫ С ДРУГОЙ СТРОКОЙ, УМНОЖЕННОЙ НА СКАЛЯР Подпрограмма SRMA с обычной точностью. Подпрограмма осуществляет умноже¬ ние каждого элемента строки с заданным номером LA матрицы А размером N X М на скаляр С и сложение полученного произведения с соответствующим элементом строки с заданным номером LB. При этом строка LA не меняется. Если £S = 0, то умно¬ жение на скаляр выполняется и произведение заменяет соответствующий элемент в строке LA : aLB,j ~aLB,j + CaLA,j (i = у, ■ ■ -,м} 0; aLA j = CaLA j (j = 1,.. . ,M) при LB = 0. 122
В выражении для aLB у- и aLAj равенство понимается в смысле присваивания. Обращение к подпрограмме имеет вид: CALL SRMA (А, С, N, М, LA, LB) А — массив элементов матрицы А; С — скаляр; N — число строк матрицы А; М —число столбцов матрицы А; LA — номер строки в матрице А, которая умножается на скаляр; LB — номер строки в матрице А, к которой прибавляется произведение. Матрица А должна храниться общим способом. СЛОЖЕНИЕ СТОЛБЦА МАТРИЦЫ С ДРУГИМ СТОЛБЦОМ, УМНОЖЕННЫМ НА СКАЛЯР Подпрограмма SCMA с обычной точностью. Подпрограмма осуществляет умно¬ жение каждого элемента столбца с номером LA матрицы А размером N X М на скаляр С и сложение полученного произведения с соответствующим элементом столбца с но¬ мером LB. Столбец LA не меняется. Если LB = 0, умножение на скаляр выполняется, и произведение заменяет элемент в столбце LA: ai,LB ~ai,LB + Cai,LA ( / = 1, ■ • • ,/V) при LB =#0; ai'LA=Cai,LA (' = 1, • ■ • <W) при ££ = 0. В выражении для а,- LB и а{ LA равенство понимается в смысле присваивания. Обращение к подпрограмме имеет вид: CALL SCMA (А, С, N, LA, LB) А — массив элементов матрицы; С — скаляр; N — порядок матрицы; LA — номер столбца матрицы А, элементы которого умножаются на скаляр; LB — номер столбца матрицы А, к элементам которого прибавляются соответству¬ ющие произведения. Матрица А должна храниться общим способом. ПЕРЕСТАНОВКА ДВУХ СТРОК МАТРИЦЫ Подпрограмма RINT с обычной точностью. Подпрограмма меняет местами соот¬ ветствующие элементы двух указанных строк с номерами LA и L В матрицы А разме¬ ром /V X М. Обращение к подпрограмме имеет вид: CALL RINT (A, N, М, LA, LB) А — массив элементов матрицы; N — число строк в матрице А; М —число столбцов в матрице А; LA — номер строки, которая переставляется со строкой LB; LB — номер строки, которая переставляется со строкой LA. Матрица А должна храниться общим способом.
ПЕРЕСТАНОВКА ДВУХ СТОЛБЦОВ МАТРИЦЫ Подпрограмма CINT с обычной точностью. Подпрограмма меняет местами соот¬ ветствующие элементы двух указанных столбцов с номерами LA и LB матрицы А порядка /V. Обращение к подпрограмме имеет вид: CALL CINT(A, N, LA, LB) А — массив элементов матрицы; N — порядок матрицы А; LA — номер столбца, который переставляется со столбцом LB; LB — номер столбца, который переставляется со столбцом LA. Матрица А должна храниться общим способом. СУММИРОВАНИЕ ЭЛЕМЕНТОВ В КАЖДОЙ СТРОКЕ ИЛИ СТОЛБЦЕ МАТРИЦЫ Подпрограммы RSUM и CSUM с обычной точностью. Подпрограмма вычисляет вектор R, каждый элемент которого является суммой элементов соответствующей строки (RSUM) или соответствующего столбца (CSUM) матрицы А размером N X М: м г- = Z аП (/ = 1 /V) для RSUM ; ' / = 1 ' N Гу = S 1 а/у- (/ = 1, . . . , /И) для CSUM. Обращение к подпрограммам имеет вид: CALL RSUM (A, R, N, М, MS) CALL CSUM (A, R, N, M, MS) R — массив элементов вектора-результата длиной N; N — число строк матрицы А; М — число столбцов матрицы А; A, MS — см. стр. 113. Массив R не может совпадать с массивом А. При работе этих подпрограмм используется подпрограмма LOC. ТАБУЛИРОВАНИЕ СТРОК МАТРИЦЫ ПО КЛЮЧУ Подпрограмма RTAB с обычной точностью. Подпрограмма табулирует строки исходной матрицы А размером N X М в соответствии с ключом, заданным вектором В длиной N. Результатом табулирования является матрица R размером L X М и вектор S длиной L + 1, где L — заданное число. Табулирование осуществляется следующим образом. В начале работы подпро¬ граммы элементы матрицы-результата R и вектора S полагаются равными нулю. Зна¬ чение каждого элемента В (I) вектора В преобразуется в целое число J, после чего /-я строка матрицы А складывается с J-й строкой матрицы R, а к значению элемента S (J) вектора S прибавляется единица. Если J <1 или J>L, единица прибавляется к значению элемента S (L + 1) вектора S, а соответствующие строки матрицы А в табу¬ лировании не участвуют. При выходе из подпрограммы матрица R содержит строки, каждая из которых является суммой строк матрицы А, указанных вектором В. 124
Значение каждого элемента S (J) вектора S для J ~ 1, . . ., L равно при выходе из подпрограммы числу строк матрицы А, использованных для образования J-й строки матрицы R. Значение элемента S (L + 1) вектора S равно числу строк матрицы А, не использо¬ ванных при вычислении матрицы R вследствие того, что J было либо меньше единицы, либо больше L. Обращение к подпрограмме имеет вид: CALL RTAB (А, В, R, S, N, М, MS, L) В — массив элементов заданного вектора длиной N, содержащего ключ; S — массив элементов вектора-результата длиной L+1, содержащего счетчики числа слагаемых; N — число строк в матрице А; М — число столбцов в матрицах А и R; L — число строк в матрице R; A, R, MS — см. стр. 113. Матрица R всегда хранится общим способом. При работе этой подпрограммы используются подпрограммы LOC и RADD. ТАБУЛИРОВАНИЕ СТОЛБЦОВ МАТРИЦЫ ПО КЛЮЧУ Подпрограмма СТАВ с обычной точностью. Подпрограмма табулирует столбцы исходной матрицы А размером NX Мв соответствии с ключом, заданным вектором В длиной М. Результатом табулирования является матрица R размером N X L и вектор S длиной L + 1, где L — заданное число. Табулирование осуществляется следующим образом. В начале работы подпро¬ граммы элементы матрицы-результата R и вектора S полагаются равными нулю. Зна¬ чение каждого элемента В (I) вектора В преобразуется в целое число J, после чего /-й столбец матрицы А складывается с J-м столбцом матрицы /?,а к значению элемента S (J) вектора S прибавляется единица. Если J < 1 или J > L, то единица прибавляется к значению элемента S(L + 1) вектора S, а соответствующие столбцы в табулировании не участвуют. Таким образом, матрица-результат R содержит столбцы, каждый из которых является суммой столбцов матрицы А, указанных вектором В. Значение каждого элемента S (J) вектора S для J = 1, . . . , L равно при выходе из подпрограммы числу столбцов матрицы А, использованных для образования J-ro столбца матрицы R. Зна¬ чение элемента S (J) вектора S равно числу столбцов матрицы А, не использованных при вычислении матрицы R вследствие того, что J было либо меньше единицы, либо больше L. Обращение к подпрограмме имеет вид: CALL СТАВ (А, В, R, S, N, М, MS, L) В — массив элементов заданного вектора длиной М, содержащего ключ; S — массив элементов вектора-результата длиной L+1, содержащего счетчики числа слагаемых; N — число строк в матрицах А и R; М — число столбцов в матрице А; L — число столбцов в матрице R] к, R, MS — см. стр. 113. Матрица R хранится общим способом. При работе данной подпрограммы используются подпрограммы LOC и CADD.
СОРТИРОВКА СТРОК МАТРИЦЫ Подпрограмма RSRT с обычной точностью. Производится сортировка строк исходной матрицы А, определяемая транспозицией значений элементов заданного вектора В, с образованием матрицы перестановок R. Элементы вектора В упорядочи¬ ваются по возрастанию их значений. При этом перестановке элементов В (J) и В(1) вектора В соответствует перестановка J-й и /-й строк матрицы А. Если в векторе В имеются повторяющиеся значения, то соответствующие строки матрицы А не пере¬ ставляются. Обращение к подпрограмме имеет вид: CALL RSRT(A, В, R, N, М, MS) В — массив элементов заданного вектора, являющегося ключом сортировки; N — число строк в матрицах А и R и длина вектора В; М — число столбцов в матрицах AmR; A, R, MS — см. стр. 113. Массив R не может совпадать с массивом А. Матрица R всегда хранится общим способом. Величина N должна быть больше единицы. При работе этой подпрограммы используется подпрограмма LOC. СОРТИРОВКА СТОЛБЦОВ МАТРИЦЫ Подпрограмма CSRT с обычной точностью. Производится сортировка столбцов исходной матрицы А, определяемая транспозицией значений элементов заданного вектора В, с образованием матрицы перестановок R. Элементы вектора В упорядочи¬ ваются по возрастанию их значений. При этом перестановке элементов В (J) и В (I) вектора В соответствует перестановка J-ro и /-го столбцов матрицы А. Если в векторе В имеются повторяющиеся значения, то соответствующие столбцы матрицы А не пере¬ ставляются. Обращение к подпрограмме имеет вид: CALL CSRT (А, В, R, N, М, MS) N — число строк в матрицах А и R; М — число столбцов в матрицах А и R и длина вектора В (М > 1); A, R, MS — см. стр. 113; В — см. подпрограмму RSRT. При работе этой подпрограммы используются подпрограммы LOC и ССРУ. РАЗБИЕНИЕ МАТРИЦЫ НА ДВЕ ПО СТРОКЕ Подпрограмма RCUT с обычной точностью. Из элементов исходной матрицы А размером N X М образуются две матрицы: R размером (L — 1) X М и S размером (/V — L +1) X М, где L — заданный номер строки (1 </V). Матрица R состоит из элементов матрицы А, находящихся выше строки с номером L, а матрица S состоит из элементов матрицы А, находящихся в строке с номером L и ниже. Обращение к подпрограмме имеет вид: CALL RCUT (A, L, R, S, N, М, MS) L — номер строки, по которой производится разбиение матрицы А; R — массив элементов матрицы, образуемой из верхней части матрицы А; S — массив элементов матрицы, образуемой из нижней части матрицы А; N — число строк в матрице А; М — число столбцов в матрицей; 126
A, MS — см. стр. 113. Массивы R и S не могут совпадать с массивом А. Массив R не может совпадать с массивом S. Матрицы R и S всегда хранятся общим способом. При работе этой подпрограммы используется подпрограмма LOC. РАЗБИЕНИЕ МАТРИЦЫ НА ДВЕ ПО СТОЛБЦУ Подпрограмма CCUT с обычной точностью. Из элементов исходной матрицы А размером N X М образуются две матрицы: R размером /V X (L — 1) и S размером А/Х (М — L + 1), где L — заданный номер столбца (1 < L < М). Матрица R состоит из элементов матрицы А, находящихся левее столбца с номером L, a S состоит из элементов матрицы А, находящихся в столбце с номером L и правее. Обращение к подпрограмме имеет вид: CALL CCUT (A, L, R, S, N, М, MS) L — номер столбца, по которому производится разбиение матрицы А; R — массив элементов матрицы, образуемой из левой части матрицы А; S — массив элементов матрицы, образуемой из правой части матрицы А; A, N, М, MS — см. подпрограмму RCUT. При работе этой подпрограммы используется подпрограмма LOC. ОБЪЕДИНЕНИЕ ДВУХ МАТРИЦ С ОДИНАКОВЫМ ЧИСЛОМ СТОЛБЦОВ В ОДНУ МАТРИЦУ Подпрограмма RTIE с обычной точностью. Матрица В размером L X М присоеди¬ няется снизу к матрице А размером /V X М. Полученная матрица R содержит N + L строк и М столбцов. Обращение к подпрограмме имеет вид: CALL RTIE (А, В, R, N, М, MSA, MSB, L) N — число строк в матрице А; М —число столбцов в матрицах А, В, R; L — число строк в матрице В; А, В, R, MSA, MSB - см. стр. 113. Массив R не может совпадать с массивами А и В. Матрица R всегда хранится общим способом. При работе этой подпрограммы используется подпрограмма LOC. ОБЪЕДИНЕНИЕ ДВУХ МАТРИЦ С ОДИНАКОВЫМ ЧИСЛОМ СТРОК В ОДНУ МАТРИЦУ Подпрограмма CTIЕ с обычной точностью. Матрица В размером /V X L присоеди¬ няется справа к матрице А размером N X М. Полученная матрица R содержит N строк и М + L столбцов. Обращение к подпрограмме имеет вид: CALL CTIE (А, В, R, N, М, MSA, MSB, L) N — число строк в матрицах А, В, R; М — число столбцов в матрице А; L — число столбцов в матрице В. А, В, R, MS A, MSB — см. подпрограмму RTIE. При работе этой подпрограммы используется подпрограмма LOC. 127
ПЕРЕСТАНОВКА СТРОК ИЛИ СТОЛБЦОВ МАТРИЦЫ Подпрограмма MPRC с обычной fDMPRC с удвоенной) точностью. Производится перестановка строк или столбцов исходной матрицы А размером М X N согласно данному вектору транспозиций ITRA длиной S или его инверсии. При перестановке строк S равно М, а при перестановке столбцов S равно N . Перестановка строк или столбцов производится за S шагов. Если перестановка производится в соответствии с вектором ITRA,то меняются местами строка или стол¬ бец S и !TRA(S) , . . . , строка или столбец S — / + 1 и ITRA (S - / + 1), . . . , строка или столбец 1 и ITRA (1). При перестановке в соответствии с инверсией вектора ITRA последовательно меняются местами строка или столбец 1 и !TRA(V), . . . , строка или столбец / и ITRA (/). . , строка или столбец S и ITRA (S) (/ = 1,2, . . . , S) . Обращение к подпрограммам имеет соответственно вид: CALL MPRC(A, М, N, ITRA, INV, IROCO, IER) CALL DMPRC(A, M, N, ITRA, INV, IROCO, IER) A — массив элементов исходной матрицы размером М X N. При выходе из под¬ программы этот массив содержит элементы матрицы, полученной в результате переста¬ новок (точность обычная или удвоенная); М —число строк матрицы А; N — число столбцов матрицы А; ITRA — массив элементов заданного вектора транспозиций длиной М, если пере¬ ставляются строки, и длиной N, если переставляются столбцы; INV — параметр, определяющий последовательность перестановки строк или столбцов матрицы А (если INV^O, то строки или столбцы переставляются согласно вектору транспозиций ITRA, если же INV = 0, то перестановка осуществляется в соот¬ ветствии с инверсией вектора ITRA); IROCO — параметр, указывающий, что переставляются либо строки, либо столбцы матрицы А (при I ROCOCO переставляются столбцы матрицы А, если же IROCO = 0, переставляются строки) ; IER — индикатор ошибки, принимающий следующие значения: IER = —1 означает, что либо М, либо N не положительны (в этом случае ни¬ каких вычислений не производится); IER = 0 свидетельствует о том, что при проведении вычислений ошибок не было; IER =1 указывает на то, что вектор ITRA не является вектором транспо¬ зиций относительно 1, . . . , М, если переставляются строки, или относительно 1,. , N, если переставляются столбцы (в этом случае вычисления прово¬ дятся до обнаружения ошибки и матрица А отражает эти вычисления) . ПРЕОБРАЗОВАНИЕ МАТРИЦЫ С ПОМОЩЬЮ ФУНКЦИИ Подпрограмма MFUN с обычной точностью. Подпрограмма формирует матрицу R, каждый элемент которой равен значению заданной функции F от соответствующего элемента заданной матрицы А размером /V X М: rij =F(au) (/ = 1 /V; j = 1 М) . Обращение к подпрограмме имеет вид: CALL MFUN (A, F, R, N, М, MS) F — имя подпрограммы-функции (в качестве F может быть использована либо подпрограмма-функция с одним параметром, написанная пользователем, либо стан¬ дартная функция языка Фортран; в вызывающей программе идентификатор F должен быть описан оператором EXTERNAL); 128
N — число строк в матрицах А и R; М —число столбцов в матрицах Ди/?; A, R, MS — см. стр. 113. Точность F зависит от точности применяемой функции. При работе этой подпрограммы используется подпрограмма LOC. ВЫЧИСЛЕНИЕ ОБРАТНОГО ЗНАЧЕНИЯ ЭЛЕМЕНТА Подпрограмма RECP с обычной точностью. Подпрограмма RECP является под¬ программой-функцией, вычисляющей обратное значение 1/£ некоторой заданной вели¬ чины Е. Обращение к подпрограмме осуществляется употреблением указателя функции RECP (Е) в качестве операнда в выражении, например: A = 2*RECP(E). Эта функция может использоваться как фактический параметр для подпрограммы MFUN. При Е = 0 значение RECP (Е) полагается равным 1075. 3.5. ОБРАЩЕНИЕ МАТРИЦ, СИСТЕМЫ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ И РОДСТВЕННЫЕ ТЕМЫ ОБРАЩЕНИЕ МАТРИЦЫ Подпрограмма MINV с обычной fDMINV с удвоенной) точностью. Производится обращение квадратной матрицы А порядка N. Для вычисления обратной матрицы применяется стандартный метод Гаусса—Жордана. Одновременно вычисляется опре¬ делитель. Определитель, равный нулю, указывает, что матрица особенная (вырожденная). Обращение к подпрограммам имеет соответственно вид: CALL MINV (A, N, D, L, М) CALL DMINV(A, N, D, L,M) A — массив, который перед обращением к подпрограмме содержит элементы ис¬ ходной матрицы. После работы подпрограммы в нем содержатся элементы обратной матрицы (точность обычная или удвоенная) ; N — порядок матрицы А; D — вычисляемое подпрограммой значение определителя (точность обычная или удвоенная) ; L — рабочий массив длиной N; М — рабочий массив длиной N. Матрица А должна храниться в общем виде. ОБРАЩЕНИЕ СИММЕТРИЧНОЙ ПОЛОЖИТЕЛЬНО ОПРЕДЕЛЕННОЙ МАТРИЦЫ Подпрограмма SINV с обычной fDSINV с удвоенной) точностью. Для вычисления обратной матрицы А"1 заданная симметричная положительно определенная матрица А представляется в виде произведения двух взаимно транспонированных треугольных матриц: А = R1 R, где R = (г- ) — верхняя треугольная матрица. 5 Под ред. И. А. Кудряшова 129
Алгоритм вычисления обратной матрицы состоит в последовательном выполнении трех этапов. Сначала путем обращения к подпрограмме MFSD с обычной (DMFSD с удвоен¬ ной) точностью вычисляются элементы матрицы R по следующим формулам: (/ = 2,3 /V; k=j + 1, . . . ,/V). Затем определяются элементы матрицы Z?”1, обратной матрице R, с помощью / / Лп = 7 + 1 rik = 0 при 7 > к. И, наконец, по формуле А-1 = (/Г1) (R~1) т вычисляется обратная матрица Д-1. Обращение к подпрограммам имеет соответственно вид: CALL SINV(A, N, EPS, IER) CALL DSINV(A, N, EPS, IER) A — одномерный массив длиной N(N + 1)/2, содержащий верхнюю треугольную часть заданной положительно определенной матрицы порядка N (точность обычная или удвоенная). При выходе из подпрограммы этот массив содержит верхнюю тре¬ угольную часть обратной матрицы; N — число строк (столбцов) данной матрицы; EPS — относительная погрешность вычислений (точность обычная) ; IER — индикатор ошибки, принимающий при выполнении подпрограммы сле¬ дующие значения: IER = 0 — означает, что ошибок при работе подпрограммы не было; IER = —1 — означает, что либо значение N меньше единицы, либо какое-то подкоренное выражение /уу- (/ = 1, 2, . . ., N) не положительно. Последнее указывает на то, что матрица А не является положительно определенной (возможно вследствие ошибок округления); IER = К — указывает на потерю точности, т. е. при разложении матрицы А в про¬ изведение треугольных матриц некоторое подкоренное выражение + 1 оказалось положительным, но меньшим, чем значение |EPS,a/r+1 fc+J- Это может привести к потере значащих цифр результата вследствие потери зна¬ чащих цифр при вычислении ^+1 д, + 1. Тем не менее, вычисления продолжа¬ ются далее. При работе этой подпрограммы используется подпрограмма MFSD (DMFSD).
РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ МЕТОДОМ ИСКЛЮЧЕНИЯ Подпрограмма SIMQ с обычной fDSIMQ с удвоенной) точностью. Подпрограмма решает систему N линейных алгебраических уравнений АХ = В методом исключения с выбором главного элемента по столбцу. Переменная xN получается при прямом ходе решения за N шагов. Остальные переменные получаются с помощью последовательных подстановок при обратном ходе решения. Обращение к подпрограммам имеет соответственно вид: CALL SIMQ (А, В, N, KS) CALL DSIMQ(A, В, N, KS) А — массив, содержащий матрицу коэффициентов системы уравнений порядка N, расположенную по столбцам. В процессе вычислений этот массив портится (точность обычная или удвоенная); В — массив длиной N, содержащий правые части системы уравнений. При выходе из подпрограммы содержит решение системы, т. е. вектор X. (Точность обычная или удвоенная) ; N — число уравнений и переменных (N > 1) ; KS — индикатор ошибки, принимающий следующие значения: KS = 0 означает, что ошибок нет; KS = 1 указывает на то, что матрица А системы уравнений особенная. Матрица А хранится общим способом. Если матрица А особенная, то решение не имеет смысла. РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ УРАВНЕНИЙ ОБЩЕГО ВИДА С НЕСКОЛЬКИМИ ПРАВЫМИ ЧАСТЯМИ МЕТОДОМ ГАУССА Подпрограмма GELG с обычной fDGELG с удвоенной) точностью. Подпрограмма предназначена для решения системы линейных алгебраических уравнений вида АХ — R, где А — матрица коэффициентов системы уравнений порядка М; R — матрица правых частей системы размером MX N . Для решения указанной системы используется метод исключения Гаусса с выбо¬ ром главного элемента по всей матрице. Обращение к подпрограммам имеет соответственно вид CALL GELG (R, А, М, N, EPS, IER) CALL DGELG (R, A, M, N, EPS, IER) R — массив, содержащий матрицу размером MX N правых частей системы, распо¬ ложенную по столбцам. При выходе из подпрограммы этот массив содержит матрицу решений X, расположенную по столбцам (точность обычная или удвоенная); А — массив, содержащий матрицу размером М X М коэффициентов системы. В процессе работы подпрограммы эта матрица портится (точность обычная или удво¬ енная) ; М — число уравнений системы; N — число правых частей системы; EPS — переменная, значение которой используется как относительный допуск при проверке потери значимости. Для подпрограммы GELG значение EPS рекомен¬ дуется выбирать в диапазоне 10"6— 10-7, а для подпрограммы DGELG — в диапазоне 10”14 —10"16 (точность обычная); IER — индикатор ошибки, принимающий следующие значения: IER = 0 свидетельствует, что в процессе работы подпрограммы ошибок не было; 5 131
IER = —1 означает, что либо М меньше единицы, либо главный элемент на каком-то шаге исключения равен нулю; IER = К указывает, что на К + 1-м шаге исключения возможна потеря точ¬ ности, так как абсолютное значение главного элемента оказалось меньше или равно величине EPS, умноженной на абсолютное значение наибольшего по модулю элемента матрицы А. Для хорошо масштабированной матрицы и при соответствующем выборе относительного допуска EPS значение IER= К может озна¬ чать, что матрица А имеет ранг К (например, при EPS = 10”5 значение IER = 3 означает, что здесь возможна потеря не менее пяти значащих цифр в начале четвертого шага исключения и что, возможно, матрица А имеет ранг 3). РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ УРАВНЕНИЙ С ИТЕРАЦИОННЫМ УТОЧНЕНИЕМ Подпрограмма RSLMC с обычной точностью. Эта подпрограмма предназначена для решения системы линейных уравнений вида АХ = В, где А — неособенная матрица коэффициентов системы; В — вектор правых частей. Матрица А представляется в виде произведения треугольных матриц следующим образом: РА = L U, где L — нижняя треугольная матрица с единичной диагональю; U —.верхняя треуголь¬ ная матрица; Р — матрица перестановок. Введением обозначения С = Р- В исходная система приводится к виду \UX= Y; \LY = C. Решение системы находится путем итерационного уточнения приближенного решения, найденного методом исключения Гаусса. Уточненное решение получается из приближенного решения сле¬ дующим образом. Сначала вычисляется вектор невязки г(₽) =в-АХ{р} Затем, решая систему Ad(p) =г(р) с использованием LU-разложения матрицы А, получаем вектор поправки . Наконец, поправка прибавляется к/^, что дает уточненное решение: ^(д+1) _ (р) .j. ^у(р) Эти три шага повторяются до получения заданной точности, начиная с/*°* = 0. Итерационный процесс оканчивается при появлении одной из следующих си¬ туаций: 1. Компоненты вектора поправок с№ удовлетворяют неравенству | (/=1,2 /V) , в этом случае X = выдается в качестве решения. 2. Предположим, что при р>1 для некоторых 7 предыдущее неравенство нару¬ шается, но выполнено следующее: ||d(*’||< || (£ = 1,2 р-1); 132
||</(₽,||> 1||<у<₽-1)||, где ||</U) || = S |d<*)|. /• = 1 Тогда, если || <e||X^ ||, то заданной точности удовлетворяет только норма полученного решения. Если ||аНр) || > е ||Х ||, то норма полученного решения не удовлетворяет задан¬ ной точности. 3. ||сН1) || > - ||d ||. В этом случае полученное решение далеко от точного решения и итерационный процесс не сходится, что в общем случае означает плохую обусловленность матрицы А. 4. U — особенная матрица. Во всех случаях выдается X = X . Обращение к подпрограмме имеет вид CALL RSLMC(A, AF, В, X, N, EPSI, IER, IA, V, PER) A — массив, содержащий элементы исходной матрицы (точность обычная); AF — массив, содержащий элементы двух треугольных матриц, на которые раз¬ лагается исходная матрица (точность обычная) . Для получения элементов указанного массива перед обращением к данной подпрограмме необходимо обратиться к под¬ программе FACTR (см. ниже); В — массив, содержащий элементы вектора правых частей системы (точность обычная); X — массив, содержащий вычисленное решение системы уравнений (точность обычная); N — порядок системы; EPSI — относительная погрешность вычислений (точность обычная) ; IER — индикатор ошибок, который может принимать следующие значения: IER = 0, если каждая компонента X удовлетворяет заданной точности; IER = 1, если только нормах удовлетворяет заданной точности; IER = 2, если точность нормы вычисленного решения меньше заданной точ¬ ности; IER = 3, если полученное решение вообще не имеет смысла; IER = 4, если какой-нибудь диагональный элемент верхней треугольной мат¬ рицы равен нулю; IA — граница первого измерения, указанная для массива А в вызывающей про¬ грамме, если исходная матрица хранится в форме с двойной индексацией. Если матрица хранится в векторной форме, то IA = N; V — рабочий массив длиной большей или равной N; PER — массив длиной N, содержащий перестановку строк исходной матрицы. Этот массив заполняется при работе подпрограммы FACTR, к которой следует обра¬ титься перед обращением к этой подпрограмме. РАЗЛОЖЕНИЕ Н ВЫРОЖДЕННОЙ МАТРИЦЫ В ПРОИЗВЕДЕНИЕ ДВУ) ТРЕУГОЛЬНЫХ (LU-РАЗЛОЖЕНИЕ) Подпрограмма FACTR с обычной точностью. Подпрограмма осуществляет раз¬ ложение невырожденной матрицы А в произведение двух треугольных матриц таким образом, что выполнено соотношение РА = LU, 133
где L — нижняя треугольная матрица с единичной диагональю; U — верхняя треугольная матрица; Р — матрица перестановок. Квадратная матрица перестановок Р порядка N это такая матрица, каждая строка и каждый столбец которой содержат ровно одну единицу и/V — 1 нулей. Следовательно РА есть матрица А с переставленными строками. Поэтому вместо матрицы Р достаточно иметь вектор, содержащий информацию о перестановках строк матрицы А. Для нахождения матриц L и U в этой подпрограмме используется следующий алгоритм. Сначала для каждой строки вычисляется норма Л/р = max \apj\ (р = 1,2 N). Если какая-либо из величин Np равна нулю, то дальнейшие вычисления не произ¬ водятся. Элементы р-го столбца матрицы L и р-й строки матрицы U нар-м шаге процесса разложения для р = 1,2, . . ., N вычисляются рекурсивно следующим образом: 1. Определяются промежуточные величины а/р : _ Р- 1 aip = aip~ 2 >ikukP (' =Р.Р + 1 Л/), к = 1 гдеа^, !-к и икр — соответственно элементы матриц A, L и U. 2. Находится наименьший номер строки т такой, что Если ~amp:=AQ, то m-я и p-я строки матрицы А взаимно переставляются. В против¬ ном случае вычисления прекращаются. 3. Вычисляются элементы р-го столбца матрицы L : iiP=aipiapp а =р + у,р + 2 n}. 4. Вычисляются элементы р-й строки матрицы U : ирр ~ арр'> р - 1 upj ~apj ~ S !pkukj <■/ — Р + 1 • • • • • N ) • к = 1 Таким образом разложение осуществляется за Л/ шагов. Обращение к подпрограмме имеет вид: CALL FACTR (A, PER, N, IA, IER) А — массив, содержащий элементы исходной матрицы. При выходе из подпрограм¬ мы в нем находятся элементы треугольных матриц, причем единичная диагональ нижней треугольной матрицы не хранится (точность обычная); PER — массив длины N целого типа, содержащий при выходе из подпрограммы перестановку номеров строк исходной матрицы; N — порядок матрицы; IA — граница первого измерения, указанная в вызывающей программе для мас¬ сива А, содержащего элементы исходной матрицы, если матрица хранится в форме с двойной индексацией; если матрица хранится в векторной форме, то IA = N; IER — индикатор ошибки, принимающий следующие значения: IER = 0, если ошибок нет; !ER = 3, если подпрограмма не выполнена из-за того, что либо Np = 0, либо 134
РАЗЛОЖЕНИЕ МАТРИЦЫ НА МНОЖИТЕЛИ И ОПРЕДЕЛЕНИЕ РАНГА Подпрограмма MFGR с обычной fDMFGR с удвоенной) точностью. Для заданной прямоугольной матрицы А размером М X N в подпрограмме производятся следующие действия: вычисление ранга и определение базиса, т. е. линейно независимых строк и столб¬ цов заданной матрицы; представление подматрицы максимального ранга в виде произведения треуголь¬ ных множителей; выражение небазисных строк через базисные; выражение базисных переменных через свободные. Ранг определяется с помощью стандартного метода исключения Гаусса с вы¬ бором главного элемента по всей матрице. Если на каком-либо шаге исключения главный элемент окажется меньше, чем | EPS • ajk j, где ajk — максимальный по абсо¬ лютному значению элемент исходной матрицы, a EPS — заданное достаточно малое значение, то дальнейшие вычисления прекращаются. В результате применения метода Гаусса исходная матрица, у которой возможно переставлены строки и столбцы и кото¬ рую обозначим через А^ , может быть представлена в виде д(г) =£ где 1 О О 1 О О О О О О О О 1 О о D^\_r + . I О ,.(2) и12 ,,(2) °22 и{г} = 0 0 0 0 Элементы последней строки и последнего столбца этих матриц являются матри¬ цами соответствующих размеров. Предполагается, что в приведенном разложении все элементы подматрицы 135
Df'+i f + i не превышают по абсолютному значению величину (EPS '3jk\ \л, следова¬ тельно, ранг исходной матрицы равен г. Пренебрегая элементами матрицы Z?r + 1 г + 1 ввиду их малости, предыдущее разложение можно упростить: (и, UR), где 1 /(2) '21 0 1 0 0 о I и12 ,.(2) и22 Иг) г 1 HD 'г 2 1 0 0 • • ""I £/?= (/-Л+П /(г) ) ■ ■ ' Lr + 1,r > ' ; UR = n(r) nU) U2,r+1 /Иг) U r,r + <\ L — нижняя треугольная матрица порядка г с единичной диагональю; U — верхняя треугольная матрица порядка г ; LR — прямоугольная матрица размером (М — г) X г. Если исходная матрица регу¬ лярна по строкам, т. е. М = г, то в приведенном разложении LR отсутствует; UR — прямоугольная матрица размером г X (N — г). Если исходная матрица регулярна по столбцам, т. е. N = г, то в приведенном раз¬ ложении отсутствует UR, Задача разложения матриц возникает при решении систем уравнений АХ = R. При решении указанной системы могут иметь место три различных случая: 1. г = М = N — исходная матрица А неособенная и система АХ = R имеет един¬ ственное решение. 2. г<М — ранг меньше числа уравнений. Исходная матрица А имеет линейно зависимые строки. В этом случае решение уравнения АХ = R существует только тогда, когда линейные комбинации строк матрицы А справедливы и для строк матрицы R (т. е. для составляющих вектора правых частей). 3. г <Л/ — ранг меньше числа неизвестных. Матрица А имеет линейно зависимые столбцы. Соответствующая однородная система АХ = 0 имеет нетривиальное решение. Случаи г<М и r<N могут встретиться одновременно. Решение, если оно суще¬ ствует, является единственным при г =N. В противном случае оно содержит N — r свободных параметров. Для получения линейной зависимости между небазисными и базисными строками исходной матрицы и линейных форм, выражающих базисные переменные через сво¬ бодные, система А X = R^ преобразуется с учетом имеющегося разложения матри¬ цы А . Тогда (lr) io.°m(J)-(";)• 136
совместной системы уравнений A^r^X = R^r^ общее решение равно X =( гАвх'Н = (Х,у Я(Н=(Я.), a%i и/?1 — векторы длиной г, причем — вектор базисных переменных: L U - Xr + L ' UR Х2 = Rx; LR • U •%! + LR • UR Х2 = R2. Так как матрицы L и U неособенные, имеем: = U~* • Z.’1 /?1 -U~l ■ UR ■ Х2; LR-L~l •/?! = R2. Введением обозначений LR • L~l =С и —U~lUR = H зависимость строк выража- ется соотношением R2 =CRi, а однородные решения задаются в виде Хх = НХ2. Для 1 ), где 2 7 = U~x Z."1 R! + НХ2, а значения свободных переменных, содержащиеся вХ2, могут быть выбраны произвольно. Обращение к подпрограммам имеет соответственно вид: CALL MFGR (А, М, N, EPS, IRANK, IROW, ICOL) CALL DMFGR (А, М, N, EPS, IRANK, IROW, ICOL) A — массив, содержащий элементы исходной матрицы размером MXN (точность обычная или удвоенная). При выходе из подпрограммы этот массив будет содержать элементы пяти матриц: L, С, Н, D и U. Расположение этих матриц в памяти показано на схеме Единичная диагональ матрицы L не хранится. М — число строк исходной матрицы; N _ число столбцов исходной матрицы; EPS — относительная погрешность вычислений (точность обычная). Для под- программы MFGR значения EPS рекомендуется выбирать в диапазоне 10’4-10’8, а для подпрограммы DMFGR — в диапазоне 10 8—10 15. IRANK — вычисленный ранг исходной матрицы; IROW - массив длиной М, содержащий перестановку индексов строк исходной матрицы. Элементы IROW (1), . • • , IROW (IRANK) содержат индексы базисных строк, ICOL - массив длиной N, содержащий перестановку индексов столбцов исходной матрицы. Элементы ICOL (1),. . ., ICOL (IRANK) содержат индексы базисных столбцов. Пример. Пусть задана матрица 1 2 1 \ 2 2 4 и EPS = 10 2 4 2 / 1 4 -1 / Подпрограмма MFGR получает следующие матрицы: L,U,C,H и D: ( 1 0 \ 0,5 1 -0,333333 -0,333333 L = ) 137
и объединяет их в следующую компактную форму: М 2 0,5 0 1,5 -1 -0,333333 -0,333333 0~ 0 IRANK = 2, IROW = (3,2,1,4), ICOL= (2,3,1). Единичная диагональ матрицы L не хранится. Из информации, хранящейся в С, IRAN К и IROW, можно получить зависимости между строками: строка (1) = 0,5 • строка (3) + 0 • строка (2); строка (4) = 1,5 • строка (3) - 1 • строка (2). Из информации, хранящейся в Н, IRANK и ICOL, можно получить: решения однородной системы АХ = 0 х2 = -0,333333xi; х3 = -0,333333xi и из соотношения столбец (1) • Xi + столбец (2) • х2 + столбец (3) • х3 = 0 линейные зависимости между столбцами: столбец (1) = 0,333333 • столбец (2) + 0,333333 • столбец (3) Перемножив треугольные матрицы L и U, получим РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ УРАВНЕНИЙ С СИММЕТРИЧНОЙ МАТРИЦЕЙ КОЭФФИЦИЕНТОВ Подпрограмма GELS с обычной fDGELS с удвоенной) точностью. Подпрограмма предназначена для решения системы линейных алгебраических уравнений вида АХ= R, где А — симметричная матрица коэффициентов системы уравнений порядка М; R — матрица правых частей системы размером MX N. Для решения указанной системы используется метод исключения Гаусса с вы¬ бором главного элемента на главной диагонали с целью сохранения симметричности в преобразованных матрицах коэффициентов. Обращение к подпрограммам имеет соответственно вид: CALL GELS (R, А, М, N, EPS, IER, AUX) CALL DGELS (R, A, M, N, EPS, IER, AUX) A — массив длиной M (M + 1) /2, содержащий верхнюю треугольную часть симмет¬ ричной матрицы коэффициентов порядка М, расположенную по столбцам. В процессе работы подпрограммы этот массив портится (точность обычная или удвоенная); IER — индикатор ошибки, принимающий следующие значения: IER = 0 свидетельствует, что в процессе работы подпрограммы ошибок не было; IER = —1 означает, что либо М меньше единицы, либо главный элемент на каком-то шаге исключения равен нулю. Так как в качестве ведущих элемен¬ тов используются только элементы главной диагонали, IER = —1 не всегда 138
означает, что матрица особенная. В этом случае рекомендуется использовать подпрограмму GELG, выбирающую ведущий элемент по всей матрице. IER = К указывает на потерю точности. (Подробнее см. описание в подпро¬ грамме GELG). R, М, N, EPS — параметры, имеющие тот же смысл, что и одноименные параметры подпрограмм GELG (DGELG). РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ УРАВНЕНИЙ С ЛЕНТОЧНОЙ МАТРИЦЕЙ КОЭФФИЦИЕНТОВ Подпрограмма GELB с обычной fDGELB с удвоенной) точностью. Подпрограмма предназначена для решения системы уравнений вида АХ = R, где А — ленточная матрица коэффициентов порядка М\ R — матрица правых частей системы уравнений размером MX N. Система уравнений решается методом исключения Гаусса с выбором главного элемента в столбце, что сохраняет ленточную структуру матрицы в процессе преобра¬ зований. Если в качестве R задается единичная матрица, то решение X будет обратной к А матрицей. Обращение к подпрограммам имеет соответственно вид: CALL GELB (R, А, М, N, MUD, MLD, EPS, IER) CALL DGELB (R, A, M, N, MUD, MLD, EPS, IER) A — массив длиной MA, первые ME элементов которого содержат исходную мат¬ рицу коэффициентов, расположенную по строкам. Предполагается, что в памяти хра¬ нятся только элементы главной диагонали, а также элементы MUD верхних и MLD нижних кодиагоналей (точность обычная или удвоенная) : МА = М • МС — (MC-MLD-1) (МС—MLD)/2 ME = МА - (MC-MUD-1) (МС- MUD)/2 МС = min (М, MUD + MLD + 1) ; MUD —. число верхних кодиагоналей, т. е. кодиагоналей выше главной диагонали; MLD — число нижних кодиагоналей, т. е. кодиагоналей ниже главной диагонали; IER — индикатор ошибки, принимающий следующие значения: IER = 0 свидетельствует, что в процессе работы подпрограммы ошибок не было; IER = — 1 означает, что либо нарушены ограничения MUD >0, MLD > О, MUD + + MLD<2M — 2, либо главный элемент на каком-то шаге исключения равен нулю; IER = К указывает на потерю точности. (Подробнее см. описание в подпро¬ грамме GELG) ; R, М, N, EPS — параметры, имеющие тот же смысл, что и одноименные параметры подпрограмм GELG (DGELG). ДЕЛЕНИЕ МАТРИЦЫ НА ТРЕУГОЛЬНУЮ Подпрограмма MTDS с обычной (DMTDS с удвоенной) точностью. В зависимости от задаваемого при обращении режима работы подпрограмма выполняет следующие операции с матрицей А, хранящейся общим способом, и неособенной верхней треуголь¬ ной матрицей Г: вычисление матрицы Г"1/!; вычисление матрицы АТ~1; вычисление матрицы (Тт)'~1А; вычисление матрицы А (Тт) “1; вычисление матрицы (Г1?")"1^; вычисление матрицы А (Тт Г) ”1. 139
Вычисление X = Т~1А производится с помощью обратной подстановки для полу¬ чения X из системы ТХ = А. Вычисление Y = (TJ)~lA производится с помощью прямой подстановки для получения Y из системы TJY = А. Вычисление Z=(TJT)~XA производится путем последовательного решения систем: ГтY = А и TZ = Y. Оставшиеся три операции сводятся к трем выше рассмотренным. Обращение к подпрограммам имеет соответственно вид: CALL MTDS (А, М, N, Т, ЮР, IER) CALL DMTDS (А, М, N, Т, ЮР, IER) А — массив, содержащий элементы исходной матрицы. При выходе из подпро¬ граммы этот массив содержит элементы матрицы-результата (точность обычная или удвоенная); М — число строк исходной матрицы А; N — число столбцов исходной матрицы А; Т — массив длиной К (К + 1) /2, содержащий расположенную по столбцам верхнюю треугольную часть заданной матрицы Т (точность обычная или удвоенная), где К — число строк и столбцов треугольной матрицы; значение К = М, если ЮР положительно, К = N, если ЮР отрицательно; ЮР — переменная, определяющая выполняемые с матрицами операции: ЮР = 1 вычисляется Т_1А, ЮР = —1 +АТ'1, ЮР = 2 (Гт) " ХА, ЮР = -2-^А (Г1)"1, ЮР = = 3 ^-(7"ТП “ ЮР = -3— A (7_тТ)"1; IER — индикатор ошибки, принимающий следующие значения: IER = — 1 означает, что либо М или N неположительны, либо ЮР. задан неверно; IER = 0 свидетельствует о том, что программа выполнена правильно; IER = 1 указывает на особенность треугольной матрицы Т. Примечания. 1. Рассматриваемые подпрограммы могут быть использованы для решения системы уравнений ВХ = А с симметричной положительной определенной матрицей коэффициентов В. Для этого сначала матрица В должна быть представле¬ на в виде произведения B=TJT (Т — верхняя треугольная матрица) путем обраще¬ ния к подпрограмме MFSD или DMFSD, а затем может быть вычислена матрица X = (ТтТ) "1А при помощи MTDS или DMTDS при ЮР = 3. 2. Подпрограммы MTDS и DMTDS позволяют вычислить произведение А1 В~1А с симметричной положительно определенной матрицей В и произвольной матрицей А. Вычисление производится за три шага и не требует дополнительной памяти: а) при помощи подпрограммы MFSD(DMFSD) матрица/? представляется в виде произведения В = 7”т7", при этом элементы верхней треугольной матрицы Т разме¬ щаются на месте матрицы В, таким образом: A1 B~lА = AJT ~1 (Тт) "1А; б) при помощи подпрограммы MTDS (DMTDS) при ЮР = 2 вычисляется С = = (TJ)~1A, которая при выходе из подпрограммы оказывается размещенной на месте матрицы А; в) вычисляется искомое произведение AJB~lA=CJC, результат можно разме¬ стить на месте матрицы В. РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ УРАВНЕНИЙ С СИММЕТРИЧНОЙ ПОЛОЖИТЕЛЬНО ПОЛУОПРЕДЕЛЕННОЙ МАТРИЦЕЙ Подпрограмма MLSS с обычной fDMLSS с удвоенной) точностью. Подпрограмма предназначена для решения системы линейных уравнений АХ = R с симметричной положительно полуопределенной матрицей коэффициентов А порядка А/ методом наименьших квадратов минимальной длины. Таким образом, определяется вектор X наименьшей евклидовой длины ||Х||, который минимизирует \\АХ — /?||. 140
В качестве исходных данных описываемая подпрограмма использует не матрицу А, а матрицы U, Т, Ти и перестановку Р, которые формируются в результате работы подпрограммы MFSS (DMFSS). Поэтому перед обращением к этой подпрограмме необходимо сначала обратиться к подпрограмме MFSS (DMFSS). Путем разложения матрицы А (см. подпрограмму MFSS) —S)G У) исходная система приводится в общем случае к виду As(Xi + UX2] =Я1; 0 Х2 = R2 ~ U'Ri, г“ (<)• ',яА’~<т'}т- Если ранг г матрицы А равен N, то исходная система приводится к следующей: As (РХ) = PR. При решении системы уравнений можно выделить три случая: 1. г =N. Система имеет единственное решение РХ, которое задается выражением PX = A~1PR. 2. г < N и R2 = UJ/?i (совместная система). Решение минимальной длины имеет вид: %! = (/ + UU1) "1 Т ’1 (Г"1)1/?!; Х2 = UJXif где (/ +(7(/т)“1 = 1 - Щ1 + С/т6/) ~1 С/т; (/ + UJU) = TjTu. 3. r< N \л R2^ Ry (несовместная система). Решение методом наименьших квадратов минимальной длины имеет вид (см. MFSS) : = (/ + UUJ)~1T~1 (Г7)”1 (/ + UUJ)~1 (Ri + UR2); X2 = СГХх. Объединение всех трех рассмотренных случаев приводит к следующей последова¬ тельности операций: 1) X = PR; 2) Xj =Xi + UX2; 3) X2 ^-LTXc, 4) X2 = T~l (T^'1 X2; 5) Xx = = X, + UX2; 6) X. = T-1 (Г)"1*!; 7) X2 = -UJXx; 8) X2 = T'1 (Tj)'1 X2; 9) X{ = = Xr + UX2; 10) X2 = UTXr; 11) Х = Р~*Х. В первом случае выполняются только шаги (1), (6) и (11), во втором — только шаги (1) йот (6) до (11), в третьем случае выполняются все шаги. Обращение к подпрограммам соответственно имеет вид: CALL MLSS (A, N, IRANK, TRAC, INC, RHS, IER) CALL DMLSS (A, N, IRANK, TRAC, INC, RHS, IER) A — массив длины N(N + 1) /2, содержащий элементы матриц Т, U и Ти, образо¬ ванные подпрограммой MFSS из элементов исходной матрицы. Если ранг исходной матрицы равен N, то этот массив содержит только матрицу Т (точность обычная или удвоенная). При выходе из подпрограммы значения элементов массива не меняются; 141
N — порядок исходной матрицы коэффициентов; IRAN К — ранг матрицы коэффициентов, вычисленный подпрограммой MFSS; TRAC — массив длиной N, содержащий перестановку строк и столбцов, получен¬ ную в процессе разложения исходной матрицы (точность обычная или удвоенная). Этот массив заполняется в процессе работы подпрограммы MFSS; INC — входная переменная, которая должна равняться нулю, если известно, что система уравнений совместна, и быть не равной нулю в противном случае; RHS — массив длиной N, содержащий вектор правых частей системы уравнений. При выходе из подпрограммы этот массив содержит вектор решений X минимальной длины (точность обычная или удвоенная); IER — индикатор ошибки: IER = 0 означает, что при выполнении подпрограммы ошибок не было; IER = —1 означает, что либо N и (или) I RAN К неположительны, либо IRAN К > > N; IER = 1 означает, что либо разложение матрицы А имеет нулевой делитель, либо TRAC содержит значения вне возможных границ от 1 до N. РАЗЛОЖЕНИЕ НА МНОЖИТЕЛИ СИММЕТРИЧНОЙ ПОЛОЖИТЕЛЬНО ОПРЕДЕЛЕННОЙ ЛЕНТОЧНОЙ МАТРИЦЫ Подпрограмма МСНВ с обычной fDMCHB с удвоенной) точностью. Эта подпро¬ грамма в зависимости от указанного при обращении режима работы позволяет произ¬ вести для заданной симметричной положительно определенной ленточной матрицы А порядка М и матрицы общего вида R размеромMXN следующие операции: разложение матрицы А в произведение треугольных множителей: А = 7"J Ти, где Ти — ленточная верхняя треугольная матрица; вычисление матрицы А"1 /?; вычисление матрицы 7J1 /?; вычисление матрицы (Г^1)1/?. Матрица А разлагается на множители по методу квадратных корней Холецкого. Вычисление элементов верхней треугольной матрицы Ти с учетом ее ленточной струк¬ туры производится по следующим формулам: ^11 =>/^7Г; =av/tn (j =2,3, ... ,MUD+])‘, tkk=z\akk~ 2 tfk • /o = max{l,fc -mud} (k = 2,3, . . . , M ) ; i = f0 к - 1 *kj = ^^kk^ (akj - 2 f/H// >; /0 = max { Ij-MUD] i = 'o (k = 2, 3 M; j = £ + 1,...,min{ M, к + MUD } ), где MUD — число верхних кодиагоналей матриц А и Ти. Вычисление (Г^1)1/? эквивалентно решению системы T^Y — R и производится по формулам : к — 1 у к) = (1/г^) (rki - s fZArx,7 ); ' = 'о /0 = max { 1, к - MUD } (к = 1, 2, . . . ,М; j = 1,2, . . . , N). 142
Аналогично вычисление Тих R эквивалентно решению системы ТиХ = R и осу¬ ществляется с помощью соотношений: xkj ~~ ^^кк^ \ r kj ~ kj xij ) ' 7 = к + 1 /0 = min {/И,/г + MUD } (к = М,М- 1,. .., 1; j = 1,2 /V). Вычисление A~lR производится в два этапа. Сначала вычисляется значение $ = - (7”J) ~1/?, а затем — Г J1 S. Обращение к подпрограммам имеет соответственно вид: CALL МСНВ (R, А, М, N, MUD, ЮР, EPS, IER) CALL DMCHB (R, A, M, N, MUD, IOP, EPS, IER) R — массив длиной MX N, содержащий при обращении к подпрограмме заданную матрицу R общего вида размером MX N, расположенную по столбцам (точность обыч¬ ная или удвоенная). При выходе из подпрограммы этот массив содержит элементы матрицы — результата в соответствии с заданным значением параметра ЮР. При ЮР = О этот массив не используется. А — массив длиной М + MUD (2М — MUD — 1) /2, содержащий при ЮР = 0, 1, 2, 3 заданную симметричную положительно определенную ленточную матрицу А, а при ЮР = — 1, —2, —3 — ленточную верхнюю треугольную матрицу Ти (точность обычная или удвоенная). Матрицы хранятся в уплотненном виде (главная диагональ и MUD верхних кодиагоналей) по строкам. В тех случаях, когда исходной является матрица Ти, она должна быть предварительно получена. При выходе из подпрограммы во всех случаях этот массив содержит ленточную матрицу Ти, хранящуюся в уплотненном виде; М — число строк и столбцов матриц А и Ти и число строк матрицы /?; N — число столбцов матрицы R (в случае ЮР = 0 заданное значение N не исполь¬ зуется) ; MUD — число верхних кодиагоналей матриц А и Ти; ЮР — параметр, управляющий режимом работы подпрограммы: при ЮР = О производится разложение матрицы А = 7”J Ти, т. е. вычисляется матрица Ти; при ЮР = = 1,-1 вычисляется матрица А”1/?; при ЮР = 2, — 2 — Т^1 R; при ЮР = 3, —3 — (г;1 )т/?; EPS — переменная, значение которой используется как относительный допуск при проверке потери значимости (точность обычная). Для подпрограммы МСНВ зна¬ чение EPS рекомендуется выбирать в диапазоне 10”7 —10"6, а для подпрограммы DMCHB — в диапазоне 10"16—10"14; IER — индикатор ошибки: IER = 0 означает, что в процессе работы подпрограммы ошибок не было; IER = — 1 означает отсутствие результата по одной из следующих причин: MUD < 0 или MUD + 1 > М,или ABS [ЮР] > 3; на некотором шаге подкорен¬ ное выражение tkk неположительно; появление нулевого диагонального элемента на одном из шагов деления; I ER = к — указывает на потерю точности, т. е. при разложении матрицы А в про¬ изведение треугольных матриц некоторое подкоренное выражение А.+ 1 оказалось положительным, однако меньше величины | EPS • ак + 1 к + 11. Это может привести к потере значащих цифр результата вследствие потери знача¬ щих цифр при вычислении tk + 1 к +1.
РАЗЛОЖЕНИЕ НА МНОЖИТЕЛИ И ОПРЕДЕЛЕНИЕ РАНГА СИММЕТРИЧНОЙ ПОЛОЖИТЕЛЬНО ПОЛУОПРЕДЕЛЕННОЙ МАТРИЦЫ Подпрограмма MFSS с обычной fDMFSS с удвоенной) точностью. Для заданной симметричной положительно полуопределенной матрицы А порядка /V производятся следующие действия: определение ранга и линейно независимых строк и столбцов; разложение на множители симметричной подматрицы максимального ранга; выражение небазисных строк и столбцов через базисные, а также базисных пере¬ менных через свободные. Подпрограмму MFSS (DMFSS) можно использовать в качестве подготовительного шага для получения решения минимальной нормы системы линейных уравнений с сим¬ метричной положительно полуопределенной матрицей коэффициентов методом наи¬ меньших квадратов. Ранг определяется методом Холецкого (метод квадратных корней) с ведущим элементом, выбираемым на главной диагонали. Выбор ведущего элемента на главной диагонали означает, что к столбцам и строкам применяются одни и те же перестановки, вследствие чего сохраняется симметричность. В результате применения метода Холецкого исходную матрицу у которой воз¬ можно переставлены строки и столбцы и которую обозначим через А f , можно пред¬ ставить в виде А{г} =р(г) А(р(г) )Т Д11* Д12 \ _ ((^(Н)Т о\ / / 0 \ /Т{г} 1/(г)\ ^21* А22 ' \(V{r} / / \0 D<r)/\0 / } где — матрица перестановок; — неособенная верхняя треугольная матрица порядка г; и D^r’ — матрицы размером г X (N — г) и (N — г) X (N—r) соответ- ственно, удовлетворяющие соотношению D{r) =^22“ . Предполагается, что в приведенном разложении норма матрицы мала по сравнению с нормой матрицы А 22 и это может быть интерпретировано в том смысле, что = 0 и, следовательно, ранг исходной матрицы А равен г. Указанное условие выполняется для матрицы в том случае, когда справедли¬ во неравенство: t <EPS ; t = max [dkrk /акГк |a{krk] > 0} , к 1 J и акГк “ Диагональные элементы матриц и А 22 соответственно; EPS — задан ная достаточно малая положительная величина. С учетом соотношения =0 и неособенности матрицы разложение матрицы А^ на сомножители к виду преобразуем где о\/л 0\ / / /До оДо / Имея в виду, что в дальнейшем полученное разложение может быть применено для решения системы линейных уравнений, преобразуем его к более удобной форме. Для этого, используя тот же самый метод Холецкого, представим матрицу / + (U^ ) т X X в виде произведения сомножителей следующим образом: (TU)JTU=QU+ (l/(r))TC'(r))OT = /+ (U{r} QT)T (U{r} QT), 144
где Ти — неособенная верхняя треугольная матрица; Q — матрица перестановок. Вводя обозначения 7"= Г-г'; U = QT; Р ~ = ( q q), путем непосред¬ ственного вычисления получаем окончательный результат: где Р — P^N Р^' — матрица перестановок; U— матрица, получающаяся из матрицы путем перестановки столбцов, соответствующей перестановке столбцов в про¬ цессе факторизации (разложения в произведение треугольных множителей) матрицы / + {U^)rU{r} ,AS = ТтТ. Таким образом, результатом работы подпрограммы MFSS являются матрицы Т, U, Ти и вектор транспозиций Р = (к1г к2,..., kN ), соответствующий матрице переста¬ новок Р\ Из рассмотрения приведенного разложения следует, что базисными строками матрицы A являются Ab = As [/, U], а небазисными — UJAb. Соответственно базис¬ ные столбцы есть А^г а небазисные — A^U. Рассмотрим теперь, как использовать результаты, выдаваемые подпрограммой MFSS(DMFSS) для получения решения системы линейных уравнений АХ = R с поло¬ жительно полуопределенной матрицей коэффициентов А. Используя перестановку Р, преобразуем эту систему к виду AWXW (зл) гдеХ<Л/) = PXnR{N} = PR. Если ранг матрицы А равен г = N, то система (3.1) принимает вид и легко решается, так как /4S 1 = Т "1 (Т ~1) т. При г <N система (3.1) приводится к виду As (Хх + UX2) =/?,; 0-Х2 = + R2, где введены обозначения Х^ и Z?^) = • причем Хг и /?i состоят из первых г элементов векторов X и соответственно. Если R2 =UJRi (система совместна), то решение содержит N — r параметров и имеет вид Хх =А-' Ry - UX2, (3.2) гдеХ2 — произвольно. Если R2 ^LTRi (система несовместна), то решение системы (3.1) следует искать с помощью метода наименьших квадратов. Не останавливаясь на подробностях вывода, отметим, что решение в этом случае имеет вид (3.3) гдеХ2 ” произвольно; Bs ~AS (/ + UUJ)AS. Из соотношения (/ + UU1) ~1 ~ / — U (/ + UTL/)”1 UT видно, что для вычисления В^1 достаточно знать (/ + U1 U} ~1, которая легко вычисляется, так как (/ + UrU)~1 = = Ти 1 (Ти 1) т, а Ти — верхняя треугольная матрица. 6 Под ред. И. А. Кудряшова 145
Решения (3.2) и (3.3) содержат Л/-г свободных параметров Хг, которые могут быть выбраны таким образом, что Х(л/) будет иметь минимальную евклидову длину, т. е. II минимальна. Несложные вычисления, основанные на использовании необ¬ ходимых условий минимума ||Х(Л/) ||, показывают, что для совместной системы (3.2) решениезадается формулами: Xi = + Х2 = UyX2, а для несовместной системы (3.3) равно: Xi = (l + UU^-^s (l + UU^-1 (Ri +UR2); X2 =-UJXi. Обращение к подпрограммам имеет соответственно вид: CALL MFSS (A, N, EPS, IRANK, TRAC) CALL DMFSS (A, N, EPS, IRANK, TRAC) A - массив длиной N (N + 1) /2, содержащий верхнюю треугольную часть заданной симметричной положительно полуопределенной матрицы, хранящуюся по столбцам (точность обычная или удвоенная). При выходе из подпрограммы этот массив содержит элементы матрицы Т, а если IRANK меньше N, то также и элементы матриц U и Ти. Расположение указанных матриц показано на схеме: N — порядок исходной матрицы; EPS — относительная погрешность вычислений (точность обычная). Рекомендуется выбирать значение величины EPS в диапазоне 10-4 —10"6; IRANK — вычисляемое подпрограммой значение ранга заданной матрицы, если она полуопределенная (1 < IRANK < N). Неположительное значение IRANK означает: IRANK = 0 — отсутствие положительных диагональных элементов или | EPS | > >1; IRANK = —1 — величина N неположительна; IRANK = —2 — плохо обусловлена матрица / + UJU или некорректно указана величина EPS; TRAC — массив длиной N, содержащий перестановку строк и столбцов исходной матрицы. Подпрограмма MFSD с обычной fDMFSD с удвоенной) точностью. Рассматри¬ ваемая подпрограмма производит разложение симметричной положительно определен¬ ной матрицы А порядка N на множители в соответствии с соотношением А = RJR, где R — верхняя треугольная матрица. 146
Вычисление элементов матрицы R производится с помощью метода квадрат¬ ных корней Холецкого на основе формул: гп = 1 i г1к=а1к/ги (£ = 2, 3,. . . ,/\/); rjk = <1 /rjj ) (J =2,3 /V; k=j +ltj +2 /V). Обращение к подпрограммам имеет соответственно вид: CALL MFSD(A, N, EPS, IER) CALL DMFSD (A, N, EPS, IER) A — массив длиной N (N + 1) /2, содержащий верхнюю треугольную часть исходной матрицы, расположенную по столбцам (точность обычная или удвоенная). При выходе из подпрограммы этот массив содержит верхнюю треугольную часть матрицы R, также расположенную по столбцам; N — число строк (столбцов) исходной матрицы; EPS — относительная погрешность вычислений; IER — индикатор ошибки; IER = 0 означает, что ошибок при работе подпрограммы не было; IER = — 1 означает, что либо значение N меньше единицы, либо какое-то под¬ коренное выражение (/ = 1,2,. . ., N) не положительно. Последнее указы¬ вает на то, что матрица А не является положительно определенной (возможно, вследствие ошибок округления); IER = К указывает на потерю точности, т. е. при разложении матрицы А в про¬ изведение треугольных матриц некоторое подкоренное выражение гк + у ^+1 оказалось положительным, однако меньше величины | EPS -ак+ 1 *.+ 1 |.Это может привести к потере значащих цифр результата вследствие потери зна¬ чащих цифр при вычислении гк+ 1 £ + 1. Тем не менее, вычисления продолжа¬ ются далее. РЕ^ЕН^с ЛИНЕЙНОЙ АЛГЕБРАИЧЕСКОЙ СИСТЕМЫ УРАВНЕНИЙ МЕТОДОМ НАИМЕНЬШИХ КВАДРАТОВ Подпрограмма LLSQ с обычной fDLLSQ с удвоенной) точностью. Для заданной матрицы А размером /ИХ N, где M^N, и матрицы правых частей В размером /ИХ L вычисляется матрица решений X размером /V X L системы уравнений АХ = В. Указанная система решается методом наименьших квадратов, т. е. столбцы Ху матрицы решений отыскиваются из условий ||Я. || = min (/ = 1,2,.. ,£). Ху / V \ Вычисление X основывается на сведении матрицы А к матрице R =1 I разме¬ ром MXN с помощью матрицы ортогонального преобразования Q, т. е. R = QA, где V — верхняя треугольная матрица порядка N. При таком преобразовании норма столбцов матрицы А не меняется. В результате указанного преобразования исходная система приводится к виду 6 147
RX — QB, откуда легко получить ее решение: Х = {V~1,Q)QB. (3.4) Преобразование матрицы А в матрицу R осуществляется методом Хаусхолдера, суть которого состоит в применении последовательности ортогональных преобразо¬ ваний, произведение которых и дает матрицу Q. Алгоритм получения матрицы R из матрицы А имеет вид: А(1) =А; А(к + 1) =р(к)А(к) (£ = 1,2, . . .,/V); Матрицы Р^ выбираются в виде PU) =/ - рки{к]и{к}\ где +, еслиакк^ > 0 , —, если а ккк < О ajk — элементы матрицы А^к- . Очевидно, что матрицы симметричны,ортогональны и обращают в нуль элементы К-го столбца, стоящие ниже главной диагонали в матрице + Фактически ни матрицы Р^ , ни матрица □ = Рр(Л/- 1) 1) не вы¬ числяются явно, а для вычисления элементов матрицы Д (* + 1) используются следующие соотношения, которые получаются из основного алгоритма с учетом вида матриц : = к + 1,/г+ 2, и^у^ (j = к + 1, к + 2,. . . , N; 7 = к, к + 1,. . . , М для фиксированного/ ), где У]к>* — компоненты вектора — компоненты вектора U^k^J. Величины у}к} вычисляются следующим образом: У]к} = 0 для / <к; У^} = Рк м Wj>k. 7 = к Все другие элементы матрицы А не изменяются. Аналогичным образом преобразуются элементы матрицы правых частей В. С целью уменьшения ошибок округления перед каждым шагом производится перестановка столбцов матрицы А таким образом, чтобы элемент |а ^кк | оказался максимальным. С учетом соотношения а^кк^ = — ок индекс к выбирается из условия: 148
S^} = max s}k}, j где S}k} = S (a^)2 (j = k,k + l /V). 7 = к Для вычисления величин Sjk + ^ целесообразно использовать соотношение: $И + 1) = Sy(*)_ (atfh2 (/ = Аг + 1Л + 2,. . .,N). После вычисления матриц А^ + 1^ = QA и + = QB матрица решений X вычисляется по формуле (3.4). Обращение к подпрограммам имеет соответственно вид: CALL LLSQ (А, В, М, N, L, X, IPIV, EPS, IER, AUX) CALL DLLSQ(A, В, M, N, L, X, IPIV, EPS, IER, AUX) A — массив, содержащий матрицу коэффициентов системы уравнений размером М X N (точность обычная или удвоенная). При работе подпрограммы значения эле¬ ментов этого массива портятся; В — массив, содержащий матрицу правых частей системы уравнений размером М X L (точность обычная или удвоенная). При работе подпрограммы значения элемен¬ тов этого массива портятся; М — число строк матриц А и В; N — число столбцов матрицы А и строк матрицы X; L — число столбцов матриц В и X; X — массив, содержащий матрицу решений размером N X L (точность обычная или удвоенная); IPIV — массив длиной N, который содержит информацию (целые числа) о пере¬ становках столбцов матрицы коэффициентов А; EPS — относительный допуск для определения ранга матрицы коэффициентов А (точность обычная); IER — индикатор ошибки: IER = —1 — исходная матрица А нулевая (вычисления не производятся); IER = —2 — задано М меньше, чем N (вычисления не производятся); IER = 0 — подпрограмма выполнена успешно; IER = к — указывает на то, что ранг матрицы А равен к, так как на очередном шаге преобразований квадратный корень из максимума величин + (/ = к + 1,. . ., /V) оказался меньше величины EPS где o2 = maxSy1^. / В этом случае последние N — к элементов массива IPIV указывают неисполь¬ зованные столбцы матрицы А. Остальные использованные столбцы образуют базис матрицы А; AUX — вспомогательный массив длиной max(2N, L) (точность обычная или удвоен¬ ная) . При выходе из подпрограммы первые L элементов этого массива содержат суммы квадратов невязок.
Подпрограмма EIGEN с обычной fDEIGEN с удвоенной) точностью. Подпрограм¬ ма предназначена для нахождения всех собственных чисел и собственных векторов квадратной симметричной матрицы А порядка Л/ с помощью итерационного метода Якоби (метода вращений). Известно, что для симметричной матрицы А существует ортогональная матрица R такая, что RJAR = A, где /?т — транспонированная, а Л — диагональная матрица. Так как Ят = 7?"1, то матрица Л подобна матрице А и, следова¬ тельно, имеет те же собственные значения, что и матрица А. Поскольку собственными значениями диагональной матрицы являются ее диагональные элементы, то, зная R, можно найти все собственные значения А. Одновременно получаются собственные векторы матрицы А. Действительно, если X/ — /-й диагональный элемент матрицы Л, то соответству¬ ющим ему собственным вектором будет вектор = (0,0 1 0,0), т. е. (RTAR)e/ =Х/е/, или A (Ref) = Xz (Re/). Последнее равенство показывает, что вектор /?в/ есть собственный вектор матрицы А, соответствующий собственному зна¬ чению X/. Компонентами вектора Ref являются элементы /-го столбца матрицы R. Таким образом, для нахождения собственных чисел и собственных векторов матрицы А необходимо построить матрицы Ли R. В методе вращений матрица R строится как предел последовательности произ¬ ведений матриц простых повторов следующего вида: 1 1в cos0 sin 0 / 1 (/</п), 1 sin 0 cos 0 m 1 1 I /п где все невыписанные элементы — нулевые. Аналогично матрица Л строится как предел последовательности матриц Ак, удов¬ летворяющих соотношению Ак = Т1кАк_уТк (к =1,2,...), гдеА0 При преобразовании матрицы Ак_^ с помощью матрицы простого поворота на каждом шаге аннулируется внедиагональный элемент 1 * (/ ф m). Из условия atf£ = 0, где а^£ — элемент преобразованной матрицы, получаем соотношение tg 2в = 2»«-" где 0 всегда выбираем в пределах 1201 < я/2. 150
При таком выборе в имеем: где sin 0 = cos 9 = \/1 — sin29 , со 4/2(1 +х/Т~- о? ) СО тт тт Матрица Ак_^ преобразуется по формулам: azyt) =a/yr_1) a.</*>=a.(Ar_1)cos0-a/(^_1) sin0 (/#=/,m); aim = az/—1 * sin 0+a^_ 1’cos 0; a//*> = a//*“1)COS20 +amm_1^in20 _2a/m_1>sin0 COS0; a(*’ = a/(/_1’sin20 + a(k-1’cos20 + 2a,**-1’ sin0 cos0; a\k^ = 1) — a 1Ь sin 0 cos в + a\k~ 1 ^(cos20 — sin20) . Im II mm im Внедиагональные элементы аннулируются циклически в соответствии со следующей нумерацией пар (I, т ) : (1,2), (1,3), (2,3), (1,4), (2,4), (3,4) . . . , (1, N), (2, N) (N - 1, N). Для того чтобы не аннулировать малые внедиагональные элементы, в то время как еще присутствуют большие по значению элементы, осуществляется проверка условия 1Э/т_1>1 <V/N' где v вначале выбирается равной v0 = \/ S а2т, а после того, как все внедиагональ- / < т ные элементы станут по модулю меньше, чем р0, происходит уменьшение этой величины в N раз. Указанный процесс продолжается до тех пор, пока все внедиагональные элементы не станут меньше по модулю, чем величина Vr = Ю"6ро/л/. Матрица /?, содержащая собственные векторы матрицы А, вычисляется как произведение матриц простых поворотов 7~к (к = 1,2,...). Обращение к подпрограммам имеет соответственно вид: CALL EIGEN (A, R, N, MV) CALL DEIGEN(A, R, N, MV) A — массив, содержащий верхнюю треугольную часть исходной симметричной матрицы (точность обычная или удвоенная). При выходе из подпрограммы элементы этого массива, соответствующие диагональным элементам матрицы, содержат соб¬ ственные значения, расположенные в порядке убывания; R — массив, содержащий при выходе из подпрограммы матрицу собственных векторов, расположенную по столбцам в той же последовательности, что и собственные значения (точность обычная или удвоенная); N — порядок матриц А и /?; MV — параметр, определяющий характер вычислений: MV = 0 — вычисляются собственные значения и собственные векторы; MV = 1 — вычисляются только собственные значения (массив R в этом случае не используется, но имя его должно быть обязательно задано в обращении). 151
ЗАЧИСЛЕНИЕ СОБСТВЕННЫХ ЗНАЧЕНИЙ И СОБСТВЕННЫХ ВЕКТОРОВ ВЕЩЕСТВЕННОЙ НЕ:СИММЕТРИЧНОЙ МАТРИЦЫ ВИДА R~l А Подпрограмма NROOT с обычной fDNROOT с удвоенной) точностью. Подпрограм¬ ма предназначена для нахождения собственных чисел и собственных векторов веще¬ ственной несимметричной матрицы вида В"1 А, где В и А — вещественные симметрич¬ ные матрицы порядка М и В — положительно определенная. Получение собственных чисел и собственных векторов указанной матрицы осно¬ вано на использовании следующих соотношений. Сначала находятся собственные зна¬ чения и собственные векторы (с помощью программы EIGEN) симметричной матрицы В. В результате получим ВН = Hh, где Н — матрица собственных векторов; h — диагональная матрица собственных чисел hj (7 = 1, 2, . . . , М) матрицы В. Отсюда с учетом равенства Н~1 = Нт получаем B~l = Hh~l Н~х = НррН~1 = НрруРГ = (Нр) (Нр)\ где р — диагональная матрица с диагональными элементами вида р, = 1 /\/hf (7 = 1, 2,... , М). Используя полученное соотношение, представляем матрицу В"1 А в виде В"1 А =В~'/2 (Я“1/2)т, I/O где В ' = Нр. Отсюда имеем: В~1АВ~''12 = B~V2S, (3.5) где S = (5_1/2)тД5_1/2. Находя собственные значения и собственные векторы (с помощью подпрограммы EIGEN) симметричной матрицы S, получаем: SP = РА, где Р — матрица собственных векторов; А — диагональная матрица собственных зна¬ чений X,- матрицы S. Используя полученное соотношение, представляем (3.5) в виде В~гА(В~у/2Р) = (В~1/2Р)Л. Отсюда следует, что А — диагональная матрица собственных значений матрицы В"1 А, а для формирования матрицы собственных векторов V необходимо нормализо¬ вать векторы матрицы W = В~^/2Р в соответствии со следующими равенствами: VH =wii/J(/=1'2 М’ / = 1-2 м}. Обращение к подпрограммам имеет соответственно вид: CALL NROOT (М, А, В, XL, X) CALL DNROOT (М, А, В, XL, X) М — порядок матриц А, В, X; А — массив, содержащий матрицу А, расположенную по столбцам (точность обыч¬ ная или удвоенная); В — массив, содержащий матрицу В, расположенную по столбцам (точность обыч¬ ная или удвоенная); XL — массив длиной М, содержащий собственные значения матрицы В~ХА (точ¬ ность обычная или удвоенная) ; 152
X — массив, содержащий матрицу собственных векторов, расположенную по столбцам (точность обычная или удвоенная). При работе этой подпрограммы используется подпрограмма EIGEN (DEIGEN). ВЫ‘! ИС.Г1 D iИL СОЬ'.'П REHHbiX ЗНАЧЕНИЙ ВЕЩЕСТВЕННОЙ ВЕРХНЕЙ ПОЧТИ ТРЕУГОЛЬНОЙ МАТРИЦЫ Подпрограмма ATEIG с обычной точностью. Рассматриваемая подпрограмма позволяет вычислять собственные значения верхней почти треугольной матрицы Гес- сенберга, используя двойной QR-алгоритм Дж. Г. Ф. Френсиса. Суть его состоит в том, что образуется последовательность матриц А , определяемых следующими соот¬ ношениями: Д<°> = А- А(р*2} = Q1 А(р} Q (р = 0, 2, 4,. ..), где Q — ортогональная матрица, которая может быть получена из разложения вида QR=T матрицы Т = (А — S^P4)(A^ — S^p + 1^/); S и + заданные вещественные или комплексно-сопряженные величины. Указанная последовательность матриц при определенных условиях сходится в основном к верхней треугольной матрице, диагональные элементы которой — суть вычисляемые собственные значения. Исключение в смысле сходимости составляют отдельные поддиагональные элементы, связанные с каждой парой комплексно-сопря¬ женных собственных значений. Каждый такой элемент связан с матрицей второго порядка на диагонали, имеющей собственные значения, которые сходятся к соответ¬ ствующей комплексно-сопряженной паре. Дж. Г. Ф. Френсис показал, что для вычисле¬ ния матрицы д(р + 2> нет необходимости, производить разложение матрицы Т. Вместо этого >д(р + 2> может быть получена с использованием элементов лишь первого столбца матрицы Т следующим образом. Сначала находится такая матрица отражения Р^ , что pd ) f (1) _±||f(D ||ei, где f (1 )т _ (1) , f И }, f И ) , o, . . . , 0) - первый столбец мат¬ рицы Г; lk^14l — норма этого вектор-столбца. Затем вычисляется матрица = = Р (1) А (0) р (1) . После этого С 1) приводится к форме Гессенберга методом Хаусхол¬ дера (см. описание подпрограммы LLSQ настоящего пособия). Указанное приведение производится путем последовательных умножений слева и справа на матрицы отраже¬ ния ,. . ., Р^м . В результате получается матрица Гессенберга р — 2) р{2) р(1) д(0) р (1) р (2) , , р{М — 2) которая совпадает с матрицей А^р+^ . Этот процесс может закончиться неудачно, если поддиагональный элемент заданной матрицы равен нулю. В этом случае матрицу можно разложить, и итерация выполняется только над нижней главной подматрицей. Обращение к подпрограмме имеет следующий вид: CALL ATEIG (М, A, RR, Rl, IANA, IA) М — порядок исходной матрицы; А — массив, содержащий элементы исходной матрицы (точность обычная) ; RR — массив длиной М, содержащий при выходе из подпрограммы вещественные части вычисленных собственных значений (точность обычная); RI — массив длиной М, содержащий при выходе из подпрограммы мнимые части собственных значений (точность обычная); IANA - массив длиной М, содержащий при выходе из подпрограммы индикацию о пути, на котором были получены собственные значения (см. примечание); 153
IA — граница первого измерения, указанная в вызывающей программе для мас¬ сива А, если матрица хранится в форме с двойной индексацией; 1А= М, если матрица хранится векторным способом. Примечание. На каждой итерации вычисляются собственные значения и Х2 нижней главной подматрицы второго порядка. Могут возникнуть следующие ситуации. 1. Элемент ам м _2 может быть принят равным нулю. Тогда Хх и Х2 будут собственными значениями исходной матрицы и порядок ее понижается на два. Эле¬ менты I ANA (М) и I ANA (М — 1) принимают соответственно значения 0 и 2. 2. Элемент ам м-у может быть принят равным нулю. Тогда элемент ам м будет собственным значением исходной матрицы, и порядок ее уменьшается на единицу. Элемент IANA(M) полагается равным 1. 3. Один из двух последних поддиагональных элементов не изменился после ите¬ рации. Тогда наименьший из них полагается равным нулю, а соответствующие элементы массива IANA принимают значения 0, 1 или 2 в соответствии с пп. 1 и 2. 4. Достигнуто максимальное значение числа итераций. В этом случае наименьший из двух последних поддиагональных элементов принимается равным нулю, а соответ¬ ствующие элементы массива IANA принимают значения 0, 1 или 2 в зависимости от ситуаций, описанных в пп. 1 и 2. Пользователь может проверить результаты, анализируя поддиагональные элементы матрицы при выходе из подпрограммы в соответствии с массивом IANA. Если для каждого элемента IANA (I), содержащего 1 и 2 (2 < I < М), выполнено условие IA (I, I — 1) | < 10-7 (| RR (I) | + IRKDI), то RR (I) и Rl (I) вычислены с удовлетворительной точностью. пр и в е д и я м е в ’ - ш и ст в; -: и z Подпрограмма HSBG с обычной точностью. Рассматриваемая подпрограмма позволяет осуществить приведение вещественной матрицы А порядка N к верхней почти треугольной форме Гессенберга с помощью подобного преобразования. При этом собственные значения матрицы не меняются. Алгоритм приведения использует элементарные матрицы 7?z (7 = 2,. . ., N — 1) и имеет вид: л (1) — р— 1 / д(0) / р А ~~ hN -1 ' (Л/ -1) , (Л/ -1)' А '(д/ -1) ДЛ/ -1)' К/У -1' /Др + 1 ) — р— 1 / д(р) / р А ~”N-p-l '(Л/-р-1) Д/V -р-1)' А Д/V-р-1 ) ДЛ/-р-1 )/ЛЛ/-р-1 ' д<"-2) 22,Д<Л/-3> /2>2,/?2, где =А — исходная матрица; A^N — матрица в форме Гессенберга; Rf — эле¬ ментарная матрица, отличающаяся от единичной матрицы лишь 7-й строкой, которая равна (rzl, rj2, . . ., r}j 1, 0, . . . , 0); //,/' - матрица, отличающаяся от единичной лишь строками 7 и 7' и столбцами 7 и i’, которые имеют вид: Столбец 7 столбец 7’ 0 1 — строка 7 1 0 — строка 7'. Суть алгоритма в том, что на 7-м шаге при соответствующем выборе r-tk происхо¬ дит обнуление величин а{ +1 k (к = 1,2, . . . 7 — 1). 154
Рассмотрим более подробно {р + 1) -и шаг процесса. Перед началом этого шага матрица д(0) приведена к д(р) , которая для N = 6 и р = 2 имеет вид ,(р) а а{р) *13 а(р) а14 _(р) Э15 Г11 *12 г(р) а(р) а22 а{р) а25 а (₽) а25 21 а23 ,(Р) а *32 а(р) *33 д(р) а34 д (Р) а35 '31 ,(Р) 41 *42 Jp) *43 Л44 Л45 ) 0 0 Л54 Л 55 ) 0 0 0 Л65 Л56 Л66 В дальнейшем увидим, что последующие шаги не меняют элементов, обозначенных символом Л/у. Сначала определяется ведущий элемент: I a(/V-p), (Л/-р-1 )'> = max { Iа_₽),/ I } <' = 1-2 Л/-р-1). Представляем (N — р — 1) '-й и (/V — р — 1) -й столбцы так, чтобы ведущий элемент оказался на поддиагональной позиции. Это соответствует умножению матрицы А^ справа на матрицу /_р _<|) (N _р Такая же перестановка применяется к стро¬ кам матрицы А^, что соответствует умножению на матрицу i {n -р-\) ,(N -p-^Y слева. Для удобства дальнейшей записи обозначим полученную матрицу снова через А^ . Затем вычисляются величины (/=1,2 М-р-2) . После этого подобное преобразование производится по формулам: а^=а^ и // а.{р} = а.[р} и и ,М — р; / = 1,2 М-р-2); что соответствует умножению д(р) справа на матрицу йм-р-у и формулам вида: (р+1 /V-P-1J 1} = а /уР) (7 #= /V - р - 1), что соответствует умножениюслева на матрицу RN _р _ 1. В результате описанного процесса приведения получим матрицу в форме Гес- сенберга, которая в этом случае будет иметь вид
л(Л/-2) = a{N~ а11 -2) a(/v' *12 -2) а(Л/- *13 -2) Э(Л/- *14 -2) a(N- 315 -2) a(N- 316 -2) a{N- а21 -2) a{N~ *22 -2) a(/v- *23 -2) а(л/- *24 -2) „(Л/- а25 -2) aw- 326 -2) 0 a(N' *32 -2) а(л/" *зз -2) а(Л/- *34 -2) а(л/- З35 -2) <■ -2) 0 0 (л/- *43 -2) а£~ 44 -2) 45 -2) -2) 0 0 0 a{N- *54 -2) а(л/- *55 -2) a(/v- а56 -2) 0 0 0 0 а(П- *65 -2) а(л/- а66 -2) Обращение к подпрограмме имеет вид: CALL HSBG(N, A, IA) N — порядок исходной матрицы; А — массив, содержащий элементы исходной матрицы (точность обычная). При выходе из подпрограммы этот массив содержит матрицу Гессенберга; IA — граница первого измерения, указанная в вызывающей программе для мас¬ сива А, если исходная матрица хранится в форме с двойной индексацией; IA=N, если матрица хранится векторным способом. 3.7. ВВОД И ВЫВОД МАТРИЦ ВВОД С ПЕРФОКАРТ В ПАМЯТЬ МАТРИЦЫ ОБЩЕГО ВИДА, СИММЕТРИЧНОЙ ИЛИ ДИАГОНАЛЬНОЙ Подпрограмма MATIN с обычной fDMATIN с удвоенной) точностью. Эта под¬ программа предназначена для ввода с перфокарт значений элементов некоторой задан¬ ной матрицы одного из указанных видов в область памяти, определяемую задаваемым при обращении массивом. Элементы вводимой матрицы перфорируются по строкам. После выполнения подпрограммы они располагаются в указанном массиве в вектор¬ ной форме по столбцам. Колода перфокарт, вводимая при работе подпрограммы, должна состоять из трех частей: первая перфокарта — параметрическая; группа перфокарт, содержащих эле¬ менты вводимой матрицы; контрольная карта, содержащая число 9 в первой колонке (признак конца колоды). Параметрическая карта должна содержать следующую информацию: Колонка Содержимое 1—2 Пробел 3—6 Четырехразрядный числовой код, идентифицирующий матрицу 7—10 Число строк вводимой матрицы 11—14 Число столбцов вводимой матрицы 15—16 Одноразрядное число, указывающее вид матрицы и способ ее хранения: 0 — общий, 1 — симметричный, 2 — диагональный. Каждая карта, содержащая элементы вводимой матрицы, разделяется на семь полей по десять колонок, т. е. на одной карте набивается семь чисел, каждое из которых занимает десять колонок. Колонки 71—80 либо не используются, либо используются для идентификации карт. 156
Десятичная точка может быть явно набита в любой позиции поля (формат ввода F10. d, d определяется фактическим положением десятичной точки в поле). Если ее нет, то предполагается, что она находится справа от крайней десятой позиции каждого поля (формат ввода F10.0). Элементы матрицы перфорируются по строкам. Одна строка матрицы может занимать несколько карт. Каждая новая строка матрицы должна перфорироваться с первого поля следующей карты. Например, элементы матрицы общего вида порядка 9X9 перфорируются следующим образом: з п а 12 ^1з ^14 is а 16 ^1? — 1’Я карта; 318 319 -2-я карта; 321 а22 а23 а24 а25 а26 а21 ~ 3-Я КЭрТЭ,' з28 з29 — 4-я карта И т. д. Для симметричной матрицы на картах перфорируются только элементы верхней треугольной части, для диагональной — только диагональные элементы. Таким обра¬ зом, первым перфорируемым элементом каждой новой строки для этих матриц явля¬ ется соответствующий диагональный элемент, а элементы диагональной матрицы перфорируются по одному на каждой карте. Обращение к подпрограммам имеет соответственно вид: CALL MATIN (ICODE, A, ISIZE, IROW, ICOL, IS, IER) CALL DMATIN (ICODE, A, ISIZE, IROW, ICOL, IS, IER) ICODE — произвольный четырехразрядный код, идентифицирующий матрицу, вводимый из параметрической карты; А — массив для размещения элементов вводимой матрицы (точность обычная или удвоенная) ; ISIZE — длина массива А; IROW — число строк вводимой матрицы (вводится из параметрической карты); ICOL — число столбцов вводимой матрицы (вводится из параметрической карты); IS — число, указывающее вид матрицы и способ ее хранения (вводится из пара¬ метрической карты); IER — индикатор ошибки: IER = 0 — означает, что при работе подпрограммы ошибок не было; IER = 1 — означает, что заданное значение ISIZE меньше числа элементов вводимой матрицы; IER = 2 — означает, что либо неверное число перфокарт с элементами вводи¬ мой матрицы, либо нет контрольной карты с признаком конца колоды. При работе этой подпрограммы используется подпрограмма LOC. ;‘Ч/а г ЧАи'-ьЧЬ; О ЧйДА, СИчММЕТРИЧНОЙ ИЛИ ДИАГОНАУЛЬНОМ Подпрограмма MXOUT с обычной fDMXOUT с удвоенной) точностью. Подпро¬ грамма предназначена для вывода на устройство печати (АЦПУ) матрицы любых раз¬ меров, хранящейся в памяти любым способом (общим, симметричным или диаго¬ нальным) . Элементы матрицы печатаются порциями. Каждая порция размещается на части поля бумажной ленты АЦПУ, называемой страницей. Размеры страницы задаются при обращении к подпрограмме параметрами LINS (число строк на странице) и IPOS (число позиций в строке). Перед каждой страницей печатается строка, содержащая следующую информацию: числовой код, идентифицирующий матрицу, число строк (ROW) и столбцов (COLUMN) матрицы, одноразрядное число, указывающее способ хранения матрицы в памяти (STORAGE MODE), и порядковый номер страницы (PAGE). 157
В первой строке каждой страницы печатаются номера столбцов матрицы, элементы которых размещаются на данной странице. В каждой следующей строке страницы печатаются номер очередной строки матри¬ цы и элементы этой строки матрицы под соответствующими номерами столбцов. Каждый элемент матрицы печатается в формате Е16.6, т. е. занимает 16 очередных позиций в строке АЦПУ. Число печатаемых на странице столбцов матрицы определяется параметром IPOS и спецификацией формата и равно (IPOS/16 — 1). Число строк мат¬ рицы, печатаемых на одной странице, равно (LINS/ISP — 2), где ISP — параметр, за¬ дающий интервал между строками матрицы при печати. Обращение к подпрограммам имеет соответственно вид: CALL MXOUTdCODE, A, N, М, MS, LINS, IPOS, ISP) CALL DMXOUT (ICODE, A, N, M, MS, LINS, IPOS, ISP) I CODE — произвольный пятиразрядный числовой код; задается пользователем для идентификации выводимой матрицы; печатается перед каждой страницей; А — массив, содержащий элементы выводимой матрицы; N — число строк матрицы; М — число столбцов матрицы; MS — переменная, значение которой указывает способ хранения матрицы; LINS — число строк страницы; IPOS — число позиций в строке страницы; ISP — переменная, значение которой определяет интервал между строками матри¬ цы при печати: 1 — строки матрицы печатаются в последовательных строках страницы, 2 — строки матрицы разделяются пустой строкой. При работе этой подпрограммы используется подпрограмма LOC. Я (7=1); (7 = 2 л-1); Подпрограмма DGT3 с обычной fDDGT3 с удвоенной) точностью. Эти подпро¬ граммы для функции, заданной множествами xlf х2,...,хп значений аргумента и Yi, /2г • • •, Уп соответствующих значений функции, вычисляют множество значений Zi, z2, . . . , Zn производной в заданных точках хг, х2, .. . , хп. В каждой точке х,- (7 = 2, . . ., п — 1), за исключением конечных точек хг и хп, производная заданной функции считается как производная от интерполяционного многочлена Лагранжа второй степени, построенного по трем последовательным точкам U, г, _1). М,1- + Искомые значения производной вычисляются по следующим формулам: Уз ~ /1 _ УЗ ~ У2 Х2 “ Х1 Х3 “ Х1 Х3 ~ Х2 Z=\ yi~yi —У + У7+1 ~у7 _ И7+1 -^/-1 Уп-Уп-У + Уп-Уп-2 _ Уп-У ~Уп-2 хп-хп_у *п-*п-2 *п-А-хп-2 Обращение к подпрограммам имеет соответственно вид: CALL DGT3 (X, У, Z, NDIM, IER) CALL DDGT3 (X, Y, Z, NDIM, IER) 158
X — массив длиной ND IM заданных значений аргумента обычной или удвоенной точности; Y — массив длиной NDIM заданных значений функции обычной или удвоенной точности; Z — массив длиной NDIM вычисляемых значений производной обычной или удво¬ енной точности (может совпадать с X или Y); NDIM — число заданных значений функции и вычисляемых значений производной; IER — формируемый подпрограммой индикатор ошибки: IER = —1, если NDIM< < 3; IER = 0, если ошибок нет; IER = I, если X (I) = X (I —1) или X (I) = X (I — 2) (I = 2,. . . , NDIM). При IER = — 1, 2, 3 — вычисления не производятся. При IER = 4, . . ., NDIM вы¬ числения заканчиваются преждевременно, вычисляются только Z (1),. . ., Z (I — 1). Если X или Y не совпадают с Z, то они в процессе вычислений не портятся. ФУНКЦИИ, ЗАДАННОЙ ТАБЛИЦЕЙ И АНХ -'ОЧКАХ, ПО ФОРМУЛАМ ЛАГ-АНАА С АПН ПЯТЬЮ УЗЛАМИ Подпрограммы DET3 и DET5 с обычной fDDET3 и DDET5 с удвоенной) точностью. Эти подпрограммы для функции, заданной множеством ух, Уг, • ■ • ,Уп ее значений yz в п равноотстоящих точках xz с шагом изменения аргумента h = х/ — xz __1 (7 = 2,... ..., п), вычисляют множество zlr z2,..., zn значений производной в заданных п точках. Для вычисления значений производной в подпрограмме DET3 (DDET3) исполь¬ зуется интерполяционный многочлен Лагранжа второй степени, построенный по трем последовательным точкам (xz yf , (х,, yf), (xz+1, yz+1), а в подпрограмме DET5 (DDET5) — многочлен четвертой степени, построенный по пяти последовательным точкам (xz +к, /,• +*) (к = -2, -1, .. ., 2). Искомые значения производной вычисляются по следующим формулам: в подпрограмме DET3 (DDET3) : — (-Уз + 4/2 — Зих) 2/7 г' = ) i <и + 1 2/7 (/ = 1); (7 = 2 л-1); 7" (3/„-4Хл_1 +х„_2) (7=л); 2/7 х в подпрограмме DET5 (DDET5) : -^-(-25у1 + 48у2 — З6у3 + 16у4 -Зу5) 12/7 12/7 ~(~Уп-4 +6у„_3 - 18и„_2 + Ю/п_1 + 3/„) (Зу„_4 - 16/„_3 +36/п_2 -48ил_, + 25ул) (/ = 1); (i = 2) ; (7 = 3 л-2); ( 7 = л - 1); ( 7 =л). 159
Обращение к подпрограммам имеет соответственно вид: CALKi/мя пп >(Н, Y, Z, NDIM, IER) <имя пп> — имя соответствующей подпрограммы (DET3 или DDET3, DET5 или DDET5); Н — шаг изменения аргумента обычной или удвоенной точности (если заданные значения функции соответствуют возрастающим значениям аргумента, то Н > 0, в про¬ тивном случае — Н < 0); IER — формируемый подпрограммой индикатор ошибки: IER = 0f если нет ошибок; IER = 0, если NDIM<3 для DET3 (DDET3) и NDIM < 5 для DET5 (DDET5) ; IER = 1, если Н = 0. При IER = —1, 1 вычисления не производятся. Параметры Y, Z, NDIM имеют тот же смысл, что и одноименные параметры под¬ программы DGT3 (DDGT3). Если массив Y не совпадает с Z, то он в процессе вычислений не портится. ДИФФЕРЕНЦИРОВАНИЕ ФУНКЦИИ В ЦЕНТРЕ ИНТЕРВАЛА МЕТОДОМ ЭКСТРАПОЛЯЦИИ РИЧАРДСОНА И РОМБЕРГА Подпрограмма DCAR с обычной fDDCAR с удвоенной) точностью. Эти подпро¬ граммы вычисляют значение z = у(х) производной аналитически заданной функции у = /(Г) в средней точке х замкнутого симметричного интервала [х — \Н |, х + | Н | ] по значениям функции из этого интервала. Вычисление производной основано на применении метода экстраполяции Ричард¬ сона и Ромберга к последовательно вычисленным центральным разделенным разностям Г0А, функции у = у (Г), соответствующим парам точек (х — hk, х + hk) и определяемым по формуле /U + лр -y{x-hk} гок = (к ,п). 2Ьк Здесь п — число выполняемых циклов экстраполяции; /ц — ——-—- (к = Л п = 2, . . . , п); hi — максимальный шаг, используемый при вычислении центральных разделенных разностей, который либо принимается равным \Н\ , либо вычисляется в самой подпрограмме по критерию, позволяющему уравновесить погрешность округ¬ ления и погрешность метода и гарантирующему hr < | Н |, т. е. вычисление имеет место в заданном интервале (способ выбора hi задается при обращении к подпрограмме параметром IН). Значения центральных разделенных разностей TQk (к=1, .. . ,п) являются пер¬ вым приближением к значению производной у (х). Более точные приближения вычисляются последовательно по экстраполяционной формуле Ричардсона: т _ 7- ^~т — 1,Аг — т+ 1 ~~^т~\,к—т ' т,к— т ' т — 1'к — т+У т , ~ I 2 + п — к + 1 \ п — к 4 1 для т= 1, . . ., к — 1 при каждом фиксированном к, к = 2, . . . , п. С увеличением числа экстраполяций п растет влияние погрешностей округления центральных разделенных разностей на точность вычисления производной. Поэтому использование более пяти циклов экстраполяции в большинстве случаев не имеет смысла. 160
В рассматриваемых подпрограммах DCAR и DDCAR используется п = 5. Следо¬ вательно, функция y = y(t) должна быть дифференцируема, по крайней мере, 11 раз. Кроме того, функция у = у (Г) должна быть аналитической в точке х, т. е. должна допускать разложение в ряд Тейлора в окрестности этой точки с некоторым радиусом сходимости R > 0, а величина Н, определяющая длину интервала и задаваемая при обращении к подпрограмме, должна удовлетворять условию 0 < | Н | < R. Обращение к подпрограммам имеет соответственно вид: CALL DCAR (X, Н, IH, FCT, Z) CALL DDCAR (X, Н, IН, FCT, Z) X — заданное значение аргумента (точность обычная или удвоенная); Н — величина, абсолютное значение которой определяет заданный замкнутый симметричный интервал | X | < | Н | (точность обычная) ; IH — заданный параметр, управляющий выбором размера шага: если IН = О, то максимальный размер шага hx при вычислении центральных разделенных разностей равен | Н |, если IН Ф 0, то этот размер вычисляется в подпрограмме; FCT — имя внешней подпрограммы-функции с параметром, предназначенной для вычисления значений заданной дифференцируемой функции (FCT (X), X — аргу¬ мент) ; точность обычная или удвоенная. Подпрограмма-функция FCT (X) составляется пользователем. В программе, вызывающей DCAR и DDCAR, параметр FCT должен быть описан оператором EXTERNAL. Z — вычисляемое значение производной (точность обычная или удвоенная). ДИФФЕРЕНЦИРОВАНИЕ ФУНКЦИИ НА ГРАНИЦЕ ИНТЕРВАЛА МЕТОДОМ ЭКСТРАПОЛЯЦИИ РИЧАРДСОНА И РОМБЕРГА Подпрограмма DBAR с обычной fDDBAR с удвоенной) точностью. Эти подпро¬ граммы вычисляют значение z = у (х) производной аналитически заданной функции у = у (Г) на границе х замкнутого интервала [х,х + А/] (Н — положительное или отри¬ цательное) по значениям функции из этого интервала. Вычисление производной основано на применении метода экстраполяции Ричард¬ сона и Ромберга к последовательно вычисленным односторонним разделенным раз¬ ностям TQk функции y = y(t), соответствующим парам точек (х, x + hk) и опреде¬ ляемым по формуле Г0к ~ У (х + hk) — у (х) hk (£= 1, . . . ,/7) . Здесь п и hk имеют тот же смысл, что и в описании подпрограммы DBAR (DDBAR) . Значения односторонних разделенных разностей Т^к являются первым приближением к значению производной у (х) . Более точные приближения вычисляются последовательно по экстраполяционной формуле Ричардсона: для m = 1, . . ., к — 1 при каждом фиксированном к, к = 2,. . ., п. В рассматриваемых подпрограммах DBAR и DDBAR используется п = 10, а функ¬ ция у = у (t) должна удовлетворять тем же требованиям, которые указываются при описании подпрограммы DCAR (DDCAR). Обращение к подпрограммам имеет соответственно вид: 161
CALL DBAR (X, H, IH, FCT, Z) CALL DDBAR (X, H, IH, FCT, Z) H — величина, определяющая заданный замкнутый интервал [X, X + Н] (точность дбычная). Параметры X, IH, FCT и Z имеют тот же смысл, что и одноименные параметры подпрограммы DCAR (DDCAR). 3,9... ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ ИНТЕГРИРОВАНИЕ ФУНКЦИИ, ЗАДАННОЙ ТАБЛИЧНО В НЕРАВНООТСТОЯЩИХ ТОЧКАХ., ПС ФОРМУЛЕ Подпрограмма QTFG с обычной fDQTFG с удвоенной) точностью. Эти подпро¬ граммы вычисляют множество zlr. . ., zn значений интегралов х/ Zz =z (Xj) = J y(x}dx (/ = 1,...,n) (3.6) от функции y(x), заданной множествами Xi,... ,хп упорядоченных по возрастанию или убыванию значений аргумента и У\,...гуп соответствующих значений функции. Учитывая, что zY = 0, последовательные значения интегралов вычисляются по формуле трапеций: ^•=^-_1 + ——(у. +у:_у) ■ (/=2,3 л). Обращение к подпрограммам имеет соответственно вид: CALLQTFG(X, Y, Z, NDIM) CALL DQTFG (X, Y, Z, NDIM) X — массив длиной NDIM заданных значений аргумента (точность обычная или удвоенная); Y — массив длиной NDIM заданных соответствующих значений функции (точ¬ ность обычная или удвоенная); Z — массив длиной NDIM вычисленных значений интегралов (точность обычная или удвоенная), может совпадать с X или Y; NDIM — число точек, в которых задана интегрируемая функция; при NDIM<1 происходит выход из подпрограммы. ИНТЕГРИРОВАНИЕ ФУНКЦИИ, ЗАДАННОЙ О УЛУЧ-... В РАВНООТСТОЯЩИХ ТОЧКАХ, ПО ФОРМУЛ ? О-АПЫ.УУ Подпрограмма QTFE с обычной fDQTFE с удвоенной) точностью. Эти подпро¬ граммы вычисляют множество zx, z2, . . . , zn значений интегралов вида (3.6) от функ¬ ции у (х), заданной множеством У1, У2, • • •, Уп ее значений в равноотстоящих точках Xj = Xj + (7 — 1) h с шагом изменения аргумента h . Предполагается, что интегрируемая функция непрерывна и, по крайней мере, дважды дифференцируема. При равноотстоящих значениях аргумента формула трапеций имеет вид: zi =Zi_i + (У/ +//_!> (/=2,...,л). 162
Обращение к подпрограммам имеет соответственно вид: CALLQTFE (Н, Y, Z, NDIM) CALL DQTFE(H, Y, Z, NDIM) H — шаг изменения аргумента (точность обычная или удвоенная), Параметры Y, Z, NDIM имеют тот же смысл, что и одноименные параметры под¬ программы QTFG (DQTFG). ИНТЕГРИРОВАНИЕ ФУНКЦИИ, ЗАДАННОЙ ТАБЛИЦЕЙ ЗНАЧЕНИЙ В РАВНООТСТОЯЩИХ. ТОЧКАХ, ПО ФОРМУЛАМ НЬЮТОНА-КОТЕСА Подпрограмма QSF с обычной точностью fDQSF с удвоенной точностью). Эти под¬ программы вычисляют множество zlt z2,...,zn значений интегралов вида (3.6) от функции у(х), заданной множеством ylf у2, ...,уп ее значений в равноотстоящих точках Xj = xY + (7 — 1) h с шагом изменения аргумента h, по квадратурным фор¬ мулам Ньютона—Котеса. Предполагается, что интегрируемая функция непрерывна и дифференцируема четыре раза. В зависимости от значения п для вычисления значений интеграла при различных значениях 7 в подпрограмме используются или формула Симпсона (3.7, 3.8 или 3.11), или ньютоново правило "трех восьмых" (3.8), или комбинация этих двух правил (3.9) : Zj = Zj _! + h- (1,25// _ 1 + 2у, - 0,25/,- +,); (3.7) zi =Zj _2+^(у, _2+4У) + /,); (3.8) г, =zj_3 + |л(и,_3 +3/,_2 +3/,_1 + /,.); (3.9) Zj = Zj -5 + J (К/ -5 + 3-875П' —4 + 2-625П -3 + + 2,625/,-_2 + 3,875/,-+ /,-). (3.10) Формула Симпсона иногда используется в следующем виде: zi = zi+2 “ J +4П+1 +К/+2)- (311) Обращение к подпрограммам имеет соответственно вид: CALL QSF (Н, Y, Z, NDIM) CALL DQSF (Н, Y, Z, NDIM) Параметры H, Y, Z, NDIM имеют тот же смысл, что и одноименные параметры подпрограмм QTFG и QTFE. ИНТЕГРИРОВАНИЕ ФУНКЦИИ, ЗАДАННОЙ ТАБЛИЦЕЙ ЗНАЧЕНИЙ САМОЙ ФУНКЦИИ И ЕЕ ПЕРВОЙ ПРОИЗВОДНОЙ В НЕРАВНООТСТОЯЩИХ ТОЧКАХ, ПО ПРАВИЛУ ЭРМИТА ПЕРВОГО ПОРЯДКА Подпрограмма QHFG с обычной fDQHFG с удвоенной) точностью. Эти подпро¬ граммы вычисляют множество zlz z2, . . . ,zn значений интегралов вида (3.6) от функ¬
ции /(х), если заданы множество xlt х2, . . ., хп упорядоченных по возрастанию или убыванию значений аргумента и множества У\, у2, . . ., Уп и У1 • Уг, ■ ■ •, Уп соответ¬ ствующих значений функции и ее первой производной. Предполагается, что интегрируемая функция непрерывна и дифференцируема, по крайней мере, четыре раза. Учитывая, что = 0, последовательные значения интегралов вычисляются по формуле: Обращение к подпрограммам имеет соответственно вид: CALL QHFG (X, Y, DERY, Z, ND IМ) CALL DQHFG (X, Y, DERY, Z, NDIM) X — массив длиной NDIM заданных значений аргумента (точность обычная или удвоенная) ; Y — массив длиной NDIM заданных значений функции (точность обычная или удвоенная); DERY — массив длиной NDIM заданных значений производной (точность обычная или удвоенная); Z — массив длиной NDIM вычисленных значений интегралов (точность обычная или удвоенная); массив Z может совпадать с X, Y или DERY; NDIM — число точек, в которых задана интегрируемая функция; при NDIM<1 сразу происходит выход из подпрограммы. Подпрограмма QHFE с обычной fDQHFE с удвоенной) точностью. Эти подпро¬ граммы вычисляют множество zb z2, . . ., zn значений интегралов вида (3.6) от функ¬ ции у(х), если заданы множества ylt у2, .. ., уп ее значений и ух, у2,. . ., уп значений ее производной в равноотстоящих точках xz = хх + (7 — 1)7? с шагом изменения аргу¬ мента h. Предполагается, что интегрируемая функция непрерывна и дифференцируема, по крайней мере, четыре раза. Учитывая, что zx = 0, последовательные значения интегралов вычисляются по формуле Zj =•?/_,+ +У/ + £ (У,-1 -У,)] (/=2,3 л). Обращение к подпрограммам имеет соответственно вид: CALL QHFE (Н, Y, DERY, Z, NDIM) CALL DQHFE (H, Y, DERY, Z, NDIM) H — шаг изменения аргумента (точность обычная или удвоенная); Параметры Y, DERY, Z, NDIM имеют тот же смысл, что и одноименные параметры подпрограммы QHFG (DQHFG).
ИНТЕГРИРОВАНИЕ ФУНКЦИИ ПО ПРАВИЛУ ТРАПЕЦИЙ С ЭКСТРАПОЛЯЦИЕЙ ПО МЕТОДУ РОМБЕРГА Подпрограмма QATR с обычной fDQATR с удвоенной) точностью. Эти подпро¬ граммы вычисляют значение интеграла ь y=ff(x)dx (3.12) а аналитически заданной функции f (х). Интервал интегрирования [а, Ы делится последовательно на 2' (7 = 0, 1, 2, . . .) равновеликих подынтервала. В качестве первых приближений к значению интеграла у используются величины Tqj, вычисляемые по формуле трапеций Г0/=Л;.( S fik- 2 [Hal +HZ>)1 I к = 0 2 для 7 =0, 1, 2, NDIM — 1; £ = 0, 1,2, . . . , 2'. Здесь 7 — число шагов экстраполяции (число делений пополам интервала [a, d]); NDIM — максимум числа шагов экстрапо¬ ляции, увеличенный на единицу (задается при обращении к подпрограмме); h} = = (b — а) /2' — длина подынтервала; xfk — множество точек 27 + 1, разбивающих интер¬ вал [а, Ь] на 2' подынтервалов; fjk — ~ значения функции f (х) на дискретном множестве точек xjk. Более точные приближения вычисляются последовательно по экстраполяционной схеме Ромберга: > mj 22m-1 где / = 7 — 1,7 — 2, . . ., 2, 1,0; m +j = i. Вычисления заканчиваются, когда разность между значениями двух последова¬ тельных элементов схемы Ромберга TmQ и Тт+^ 0 (т = 0, . . . ,ND!M— 1) станет мень¬ ше заданной при обращении к подпрограмме абсолютной погрешности EPS, или если значения этих величин начинают колебаться, что указывает на влияние погрешностей округления. Если требуемая точность не достигается, подпрограмма заканчивается вычислением TNDlM_^ 0. Обращение к подпрограммам имеет соответственно вид: CALL QATR (XL, XU, EPS, NDIM, FCT, Y, IER, AUX) CALL DQATR (XL, XU, EPS, NDIM, FCT, Y, IER, AUX) XL — заданный нижний предел интегрирования (точность обычная или удвоенная); XU — заданный верхний предел интегрирования (точность обычная или удво¬ енная) ; EPS — заданная верхняя граница абсолютной погрешности (точность обычная или удвоенная); NDIM — заданный максимум числа шагов экстраполяции, увеличенный на 1; FCT — имя внешней подпрограммы-функции, предназначенной для вычисления значений заданной подынтегральной функции f (х) (FCT (X), X — аргумент); точность обычная или удвоенная. Подпрограмма-функция FCT(X) должна быть написана поль¬ зователем. В программе, вызывающей QATR (DQATR), параметр FCT должен быть описан оператором EXTERNAL; Y — вычисляемое значение интеграла (точность обычная или удвоенная) ; IER — индикатор ошибки, принимающий при выполнении подпрограммы одно из следующих значений: 165
IER = 0 — требуемая точность достигается, ошибок нет; IER = 1 — невозможно достичь требуемой точности из-за ошибок округления; IER = 2 — невозможно проверить точность (если NDIM<5) или требуемая точность не достигается за NDIM — 1 шагов; NDIM следует увеличить; AUX — рабочий массив длиной NDIM (точность обычная или удвоенная). Подпрограммы QG2, QG3, QG4, QG5, QG6, QG7, QG8, QG9, QG10 с обычной точ¬ ностью, DQG4, DQG8, DQG12, DQG16, DQG24, DQG32 с удвоенной точностью. Эти подпрограммы вычисляют значение у определенного интеграла ь у= J f(x}dx а от функции f (х), заданной на отрезке [а, Ь]. Для вычисления интеграла используются квадратурные формулы Гаусса с п узлами, точные для многочленов степени не выше 2п — 1: yn=(b — a) S к = где п — число узлов квадратурной формулы (п = 2, 3, . .., 10 при вычислениях с обыч¬ ной точностью или п = 4, 8, 16, 24, 32 при вычислениях с удвоенной точностью); — абсциссы (узлы) квадратурной формулы Гаусса для промежутка [—1, 1 ], являющиеся корнями многочленов Лежандра степени п; — коэффициенты формулы Гаусса. Коэффициенты А^ и узлы симметричны относительно t = 0: (п) к {п) п—к + 1 • (п) п—к + 1’ = А t (п) _ к ~ t Число узлов квадратурной формулы, используемых для вычисления интервала, отражено в имени подпрограммы. Обращение к подпрограммам имеет соответственно вид: CALLQG2(XL, XU, FCT, Y) CALLQG10(XL, XU, FCT, Y) CALL DQG4 (XL, XU, FCT, Y) CALL DQG32 (XL, XU, FCT, Y) XL — нижний предел интегрирования (точность обычная или удвоенная); XU - верхний предел интегрирования (точность обычная или удвоенная). Параметры FCT и Y имеют тот же смысл, что и одноименные параметры подпро¬ граммы QATR (DQATR). ВЫЧИСЛЕНИЕ ИНТЕГРАЛА f ДЛЯ ЗАДАННОЙ К •/ - \ О ПО КВАДРАТУРНЫМ ФОРМУЛАМ п л гт-ррл Подпрограммы QL2, QL3, QL4, QL5, QL6, QL7, QL8, QL9, QL10 с обычной точ¬ ностью, DQL4, DQL8, DQL12, DQL16, DQL24, DQL32 с удвоенной точностью. Для вычисления интеграла используются квадратурные формулы Гаусса-Лагерра 166
с п узлами, которые аппроксимируют у взвешенной суммой значений функции в узлах: Уп = Ъ А{кп} f (х{кп}), (3.13) к= 1 где п — число узлов квадратурной формулы (п = 2, 3, ..., 10 при вычислениях с обычной точностью и п = 4, 8, 12, 16, 24, 32 при вычислениях с удвоенной точностью); — абсциссы (узлы) квадратурной формулы Гаусса, являющиеся корнями многочленов Лагерра Ln(x) степени п; — коэффициенты (веса) формулы Гаусса, соответству¬ ющие указанным узлам. Значение интеграла по этой формуле вычисляется точно, если f (х) — многочлен степени не выше 2п — 1. Число узлов квадратурной формулы, используемых для вычисления у, отражено в имени подпрограммы. Обращение к подпрограммам имеет соответственно вид: CALL QL2(FCT,Y) CALL QL10(FCT,Y) CALL DQL4(FCT,Y) CALL DQL32(FCT,Y) Параметры FCT и Y имеют тот же смысл, что и одноименные параметры подпро¬ граммы QATR (DQATR). вь ' Ж!.-ТРАЛА J е ПО КПл'Л- ГАУССА- Подпрограммы QH2, QH3, QH4, QH5, QH6, QH7, QH8, QH9, ОН 10 с обычной точ¬ ностью, DQH8, DQH16, DQH24, DQH32, DQH48, DQH64 с удвоенной точностью. Для вычисления интеграла используются квадратурные формулы Гаусса—Эрмита сп узлами вида (3.13), в которых абсциссы (узлы) х^ являются корнями многочле¬ нов Эрмита Нп (х) степени/?. Число узлов квадратурной формулы, используемых для вычисления у, отражено в имени подпрограммы. Обращение к подпрограммам имеет соответственно вид: CALL QH2(FCT,Y) CALL QH10(FCT,Y) CALL DQH8(FCT,Y) CALL DQH64(FCT,Y) Параметры FCT и Y имеют тот же смысл, что и одноименные параметры подпро¬ граммы QATR (DQATR). Замечание. Для четной функции f (х) = (х2) вычисляемый интеграл преобра- + 2 7 e~t{P (f) - зованием t = х приводится к виду у = J at и может быть вычислен с исполь- о V г зованием подпрограмм QA2, ..., QA10 и DQA4, ..., DQA32 (см. стр. 168). Использование этих подпрограмм значительно экономит время вычислений.
J' / ЯАКГИИ Г \X! '• ? \ •■ : К.-АК-гН ЕАЛАл Г f. .■' • Г, 5 у J : Г\/. ГАУССА- КАГЕРРД Подпрограммы QA2, QA3, QA4, QA5, QA6, QA7, QA8, QA9, QA10 с обычной точ¬ ностью, DQA4, DQA8, DQA12, DQA16, DQA24, DQA32 с удвоенной точностью. Для вычисления интеграла используются присоединенные квадратурные формулы Гаусса—Лагерра вида (3.13), в которых абсциссы (узлы) х^ являются корнями п /Ч’1 присоединенных многочленов Лагерра Ln 2 (х) степени п. Число узлов квадратурной формулы, используемых для вычисления у, отражено в имени подпрограммы. Обращение к подпрограммам имеет соответственно вид: CALL QA2(FCT,Y) CALL QA10(FCT,Y) CALL DQA4(FCT,Y) CALL DQA32(FCT,Y) Параметры FCT и Y имеют тот же смысл, что и одноименные параметры подпро¬ граммы QATR (DQATR). ИН ГГг'Г 'АСА Ааа САНКЦИИ С HOMOi.J! и!С А НГ г Н! СИЯнИСг; Н О Г и ПРОЦЕССА айнкенд. пак рл нас Подпрограмма ALI с обычной (DALI с удвоенной) точностью. Эти подпрограммы вычисляют значение У однозначной функции у = уМ для заданного значения Хее аргумента по заданной таблице х/, у, (7 = 1, 2, ..., л) соответствующих значений аргу¬ мента и функции. Первым приближением вычисляемого процедурами значения У является зна¬ чение интерполируемой функции в ближайшем к X узле интерполяции хь т. е. У± = = У (*1) = /1- В качестве более точных приближений используются последовательно вычисляе¬ мые значения Lk (X) интерполяционных многочленов Лагранжа L^(x), степень к кото¬ рых возрастает на каждом новом шаге интерполяции; к + 1 Wk (х) Lk(x)= S y(xz) к— , 7=1 (х —Ху) Wk {Xj} где wk (х) = (х — xt) (х — х2)... (х — хк +1) (к = 1, 2,..., п — 1). Узлами этих многочле¬ нов являются ближайшие к X (к + 1) значений аргументов из заданной таблицы. Вычисления производятся по интерполяционной треугольной схеме Эйткена: *1 /1 х2 У2 /12 х3 УЗ /13 /123 х4 /4 /14 /124 /1234 хп Уп /1/7 /12/7 /123/7 /123 ... п Элементы схемы Эйткена вычисляются по рекуррентным формулам: /1 к = 1 х^-х, /1 Xi - X У к *к~Х (к = 2 п}; 168
1 /12 ... т к — хк~~ хт У1 2 ... т хт~ X /1 2 ... (т - 1 )Хс хк ~ X (к = 3, ..., п; т = 2, .... к - 1). Элементы /п ...(£ +1) нисходящей диагонали этой схемы представляют собой значения L^(X) интерполяционных многочленов Лагранжа £.^(х) последовательно возрастающих степеней (к = 1, ..., л — 1). Интерполяционный процесс прекращается при выполнении одного из следующих условий: абсолютное значение разности между двумя последовательными интерполяцион¬ ными значениями меньше заданного е, т. е. достигается заданная точность интерполяции (проверка начинается с шага к = 3); абсолютное значение этой разности перестает уменьшаться, т. е. заданная точность не достигается из-за ошибок округления (проверка начинается с к = 5 при обычной точности и с к = 8 при удвоенной); вычислена вся треугольная схема Эйткена для заданного п, т. е. через /7—1 шагов; обнаружены два одинаковых значения среди заданных табличных значений аргу¬ мента. Для определения значений (X) при росте к в вычислительный процесс посте¬ пенно вовлекаются все более удаленные от X узлы интерполяции. В связи с этим зада¬ ваемые при обращении к подпрограммам значения х} и у} (7 = 1,2 . . . , п) должны быть предварительно упорядочены таким образом, чтобы модули разностей |xz- — Х| возрастали при росте индекса 7 : IX; — X | > | Ху — X | при 7 > j. Для такого упорядочения могут быть использованы подпрограммы ATSG, ATSM, ATSE при интерполировании с обычной точностью или подпрограммы DATSG, DATSM, DATSE при интерполировании с удвоенной точностью. Обращение к подпрограммам имеет соответственно вид: CALL ALI (X, ARG, VAL, Y, NDIM, EPS, IER) CALL DALI (X, ARG, VAL, Y, NDIM, EPS, IER) X — заданное значение аргумента, для которого вычисляется интерполированное значение функции (точность обычная или удвоенная); ARG — массив длиной NDIM заданных табличных значений аргумента (точность обычная или удвоенная); в процессе вычислений этот массив не портится; VAL — массив длиной NDIM заданных табличных значений функции (точность обычная или удвоенная); в процессе вычислений этот массив портится; Y — вычисляемое интерполированное значение функции (точность обычная или удвоенная); NDIM — число таблично заданных значений функции (точность обычная); если NDIM<1, осуществляется выход из подпрограммы без выполнения вычислений; EPS — заданная верхняя граница абсолютной погрешности интерполяции (точ¬ ность обычная); IER — индикатор ошибки, принимающий при выполнении подпрограммы одно из следующих значений: IER = 0 — если достигается заданная при обращении точность интерполяции, ошибок нет; IER = 1 — если заданная точность не достигается из-за ошибок округления; IER = 2 — если заданная точность не достигается или достигаемая точность не может быть проверена, так как мало значение NDIM; IER = 3 — если интерполяция прекращена до достижения заданной точности из-за обнаружения двух одинаковых значений в массиве ARG. 169
'' 5T г ?"'■ QfГ A ¥ A ¥ •-: ? . ИНТЕРПОЛ??! ?¥:ОC :PHЦ¥А: помощью UP НА -ЭРМИТА Подпрограмма AHI с обычной fDAHI с удвоенной) точностью. Эти подпрограммы вычисляют значение Y однозначной функции у = у (х) для заданного значения X ее аргумента по заданной таблице xz, у}, у} (/ =1,2,л) значений аргумента, функции и ее первой производной. В качестве приближенных значений Y используются последовательно вычисляемые значения Нт(Х) интерполяционных многочленов Эрмита Нт(х}, степень т которых возрастает на каждом новом шаге интерполяции. Узлами этих многочленов являются к ближайших к X значений аргумента из заданной таблицы (к = 1, . . . , л; т = 1, . . . ...,2л—1). Интерполяционный процесс продолжается до достижения заданной точ¬ ности интерполяции. Задаваемые при обращении к подпрограммам значения х}, yz и yz (7 =1,2,... ...,л) должны быть упорядочены так же, как и при использовании подпрограмм ALI (DALI). В рассматриваемых подпрограммах для построения интерполяционных много¬ членов нечетной степени Н2к _ 1 М (т=2к—'\) используются к узлов и значения xz, yz и yz во всех к узлах, а для построения многочленов четной степени Н 2к М (т = = 2к) используется дополнительно значение ук + ^ функции в узле х^ + 1 (у^ + 1 не ис¬ пользуется) . Вычисления производятся по треугольной интерполяционной схеме Эйткена: *1 У1 Z\ z 12 z 123 z 1234 z 12345 У1 Z2 z23 z234 Z2345 x2 У2 z3 z 34 z 345 У2 z4 Z45 x3 Уз Z5 Уз хп Уп Z2n-1 Уп Элементы zlf z12,. . . , Z12... (2л- 1) первой строки этой схемы и представляют собой значения многочленов Эрмита последовательно возрастающих степеней: z, = Н, (X], zl2 = Н2 (X) z12„m = Нт(Х) Z12 {2п_ !) = н2п_, (X). Элементы zlf z2, . . ., z2n_ 1 первого столбца схемы Эйткена вычисляются по формулам: zi = у/ + У/<х - ; zi +1 = //•+ <// +1 - у, > , х/ + 1 где 7 = 1, 3, . . . , 2п — 1 и j — (7 + 1) /2. Остальные элементы этой схемы вычисляются (вверх по диагонали) по следующей рекуррентной формуле: 1 zk i X-xt *l-*m zk+\ i + 'x~xm где при каждом фиксированном 7 =1, 2, . . . , 2n—2;j = 1, . . . , 7; к = 7 — j + 1; m = 7 + 3 2 ;/ = к + 1 2 170
Условия окончания интерполяционного процесса те же, что и при использовании подпрограмм ALI (DALI). Обращение к подпрограммам имеет соответственно вид: CALL AHI (X, ARG, VAL, Y, NDIM, EPS, IER) CALL DAHI (X, ARG, VAL, Y, NDIM, EPS, IER) VAL — массив длиной 2NDIM заданных значений функции и ее производной (точность обычная или удвоенная). Значения функции и ее производной размещаются в массиве парами, т. е. VAL (I) = , VAL (I + 1) = у{- для 7 = 1, . . . , NDIMJ = 1,3,... . . . , 2NDIM — 1. В процессе вычислений этот массив портится. Остальные параметры имеют тот же смысл, что и одноименные параметры под¬ программы ALI (DALI). Ф у Н К Ц И И С ГIО М О Щ Ь Ю Н Е П Р Е Е Ь! В Н () Й Д Р О Ь И Подпрограмма ACFI с обычной fDACFI с удвоенной) точностью. Эти подпрограм¬ мы вычисляют значение У однозначной функции у = уМ для заданного значения X ее аргумента по заданной таблице х} (/ = 1,2, . . . , п) значений функции и ее аргу¬ мента. Подпрограммы целесообразно использовать для вычисления значения однозначной функции, которая хорошо аппроксимируется дробно-рациональной функцией с невы¬ сокими порядками числителя и знаменателя. Задаваемые при обращении к подпрограммам значения xz-, yf (i = 1,2, . . . , п) дол¬ жны быть упорядочены так же, как и при использовании подпрограмм ALI [DALI). Интерполяция осуществляется с помощью непрерывных дробей по схеме инвер¬ тированных (обратных) разностей до достижения заданной точности интерполяции. Непрерывной дробью называется выражение вида So + аэ + . где а0, ак, Ьк (/г = 1,2, ... ) — элементы данной непрерывной дроби (вещественные или комплексные числа или функции одной или нескольких переменных), а дроби а0 = а0/1, ак/Ьк (А* = 1,2, ... ) — звенья непрерывной дроби. Обыкновенные дроби рк называются подходящими дробями непрерывной дроби, = = 1,2,...) - A-я подходящая дробь. Qk Для сходящейся непрерывной дроби подходящие дроби РкЮк являются ее приближенными значениями. ” ' ак J (А =1,2, ...» В этой подпрограмме функция у(х) аппроксимируется рациональной функцией Y (х), которая получается из разложения в непрерывную дробь вида 171
X — X Их) =/i + Элементы этой непрерывной дроби а0 = , Ьк = х — хк, а элементами ак являются обратные разности последовательно возрастающих порядков к (£=1,2,...), которые вычисляются по треугольной схеме инвертированных разностей и представляют собой элементы нисходящей диагонали этой схемы: *1 У1 У2 /12 хз Уз /13 /123 Х4 /4 /14 /124 /1234 Х5 Уз У15 /125 /1235 хп Уп Ууп У 12л И 23л Элементы этой схемы /и = хк ' - — 1/. (к = У12345 хк~хт у V2...mk 1 2 п ) ; И234л • ■ • У123...П вычисляются по рекуррентным формулам: у12...(т-1)к у12...т (к = 3 п; т = 2,.. ., к - 1). Первым приближением Y\ вычисляемого процедурой значения Y является зна¬ чение интерполируемой функции в ближайшем к Хузле интерполяции Xj, т. е. V'i =К(Х1) =/1. В качестве более точных приближений используются последовательно вычисля¬ емые значения Yk(X) —Pk/Qk подходящих дробей данной непрерывной дроби Y (х}, число звеньев к которых возрастает на каждом новом шаге интерполяции (£ = 2,. . ., п). Числа Рк и Qk, которые являются числителями и знаменателями подходящих дробей, определяются по рекуррентным формулам Валлиса—Эйлера: ?к = ак ?к — 1 + ^к ?к—2 • Qk ~ ак °к- 1 + Ьк°к-2' где £ = 1,2, . . . , л; ! = 1, J = О, PQ = а0, Qo = 1 • Условия окончания интерполяционного процесса те же, что и при использовании подпрограммы ALI(DALI), но проверка осцилляции разностей начинается с£ = 7 для обычной точности и с £ = 9 для удвоенной точности. Ображение к подпрограммам имеет соответственно вид: CALL ACFI (X, ARG, VAL, У, NDIM, EPS, IER) CALL DACFI (X, ARG, VAL, Y, NDIM, EPS, IER) Все параметры имеют такой же смысл, что и одноименные параметры подпро¬ граммы ALI (DALI).
Подпрограмма ATSG с обычной f DATSG с удвоенной) точностью. Эти подпро¬ граммы по заданному значению X аргумента х функции f (х) и заданной таблице ff, х} (7 = 1,2, . . ., т) значений этой функции и ее аргумента или таблице fj, f}, xt (7 = = 1, 2, . . . , т) значений функции, ее производной и аргумента формируют массивы значений ху- и fy или Х;, fj vifj (/ = 1, 2,. . ., л; л < /л ) заданного размера п, упорядо¬ ченные таким образом, чтобы модули разности \Х— х- | возрастали при росте индекса j : | X — Xj | > | X— xk |, если j > к (3.14) (при задании л> т будут сформированы массивы длиной т ). Эти подпрограммы могут применяться для упорядочивания в соответствии с ука¬ занным условием массивов, используемых подпрограммами ALI, AHI, ACFI или DALI, DAHI, DACFI. Обращение к подпрограммам имеет соответственно вид: CALL ATSG (X, Z, F, WORK, IROW, ICOL, ARG, VAL, NDIM) CALL DATSG (X, Z, F, WORK, IROW, ICOL, ARG, VAL, NDIM) X — заданное значение аргумента обычной или удвоенной точности, относительно которого осуществляется упорядочение; Z — массив длиной IROW заданных табличных значений аргумента обычной или удвоенной точности; F — массив длиной IROW заданных значений функции (в случае задания ICOL = = 1) или массив размером IROW-2 (в случае задания ICOL = 2), первый столбец которого содержит заданные значения функции, второй — значения производной (точ¬ ность обычная или удвоенная) ; WORK — рабочий массив длиной IROW обычной или удвоенной точности; IROW — число заданных табличных значений функции (точность обычная); ICOL — параметр, определяющий задание функции: ICOL = 1, если задаются значения аргумента и функции, ICOL = 2, если задаются значения аргумента, функции и ее производной (точность обычная); ARG — формируемый подпрограммой массив длиной NDIM упорядоченных зна¬ чений аргумента обычной или удвоенной точности; VAL — формируемый подпрограммой массив длиной NDIM (при ICOL = 1) зна¬ чений функции или массив длиной 2 • NDIM значений функции и ее производной (при ICOL = 2); значения функции и ее производной располагаются парами, причем каждое значение функции непосредственно предшествует соответствующему значению произ¬ водной (точность обычная или удвоенная) ; NDIM — заданное число элементов, выбираемых при упорядочивании из заданных массивов Z и F; NDIM < IROW (точность обычная). Подпрограмма ATSM с обычной fDATSM с удвоенной) точностью. Подпрограммы ATSM (DATSM) аналогично подпрограммам ATSG (DATSG) (см. выше) упорядочи¬ вают заданные соответствующие значения аргумента, функции и, возможно, произ¬ водной по степени близости к заданному значению аргумента X, т. е. в соответствии с условием (3.14). Однако, при обращении к подпрограммам ATSM и DATSM заданные табличные значения должны быть расположены в порядке возрастания или убывания значений аргумента. Эти подпрограммы могут использоваться для упорядочения в соответствии с ука¬ 173
занным условием массивов, используемых подпрограммами ALI, AHI, ACFI или DALI, DAHI, DACFI. Обращение к подпрограммам имеет соответственно вид: CALL ATSM (X, Z, F, IROW, ICOL, ARG, VAL, NDIM) CALL DATSM (X, Z, F, IROW, ICOL, ARG, VAL, NDIM) Параметры этой подпрограммы имеют тот же смысл, что и одноименные пара¬ метры подпрограммы ATSG (DATSG). ВЫБОРКА ТАБЛИЦЫ ИЗ ТАБЛИЦЫ С РАВНООТСТОЯЩИМИ ЗНАЧЕНИЯМИ АРГУМЕНТА Подпрограмма ATSE с обычной fDATSE с удвоенной) точностью. Эти подпро¬ граммы ATSE (DATSE) имеют то же назначение, что и подпрограммы ATSM (DATSM) и ATSG(DATSG). Однако, при использовании подпрограмм ATSE и DATSE значения функции и, возможно, производной задаются в равноотстоящих точках, определяемых начальным значением zs аргумента и его приращением dz. Подпрограммы ATSE и DATSE могут применяться для упорядочения в соответ¬ ствии с условием (3.14) массивов, используемых подпрограммами ALI, AHI, ACFI или DALI, DAHI, DACFI. Обращение к подпрограммам имеет соответственно вид: CALL ATSE (X, ZS, DZ, F, IROW, ICOL, ARG, VAL, NDIM) CALL DATSE (X, ZS, DZ, F, IROW, ICOL, ARG, VAL, NDIM) ZS — заданное начальное значение аргумента обычной или удвоенной точности; DZ — заданное приращение аргумента (шаг таблицы) обычной или удвоенной точности; Остальные параметры имеют тот же смысл, что и одноименные параметры под¬ программ ATSG(DATSG). СГЛАЖИВАНИЕ ФУНКЦИИ, ЗАДАННОЙ ТАБЛИЦЕЙ ЗНАЧЕНИЙ 9 НЕРАВНООТСТОЯЩИХ ТОЧКАХ, С ПОМОЩЬЮ МНОГОЧЛЕНА ПЕРВОЙ СТЕПЕНИ, ПОСТРОЕННОГО ПО ТРЕМ ПОСЛЕДОВАТЕЛЬНЫМ ТОЧКАМ МЕТОДОМ НАИМЕНЬШИХ КВАДРАТОВ Подпрограмма SG13 с обычной fDSG13 с удвоенной) точностью. Эти подпро¬ граммы вычисляют множество zlz z2,...,zn сглаженных значений функции у (х), заданной множествами xlzx2, . . . ,хп значений аргумента и ylf у2, . • . , Уп соответ¬ ствующих значений функции. По каждым трем последовательным точкам (ху-_2, Уу_2)г (*у _ р Уу _, (ху, Уу ) для j = 3, . . . , п строится последовательность многочленов первой степени вида И/у (х) =mjX+ bj , (3.15) дающих в этих точках наименьшее отклонение от у в смысле метода наименьших квад¬ ратов. для / = 2, . . . , п — 1, т. е. в каждой точке xf, за исключением конечных точек хх и хп, в качестве сглаженного значения функции z, берется вычисленное в точке X/ зна¬ чение многочлена W; + 1 (х), в качестве zt - вычисленное в точке хг значение много¬ члена И/3 (х), а в качестве zn — значение многочлена Wn (х), вычисленное при х = хп. 174
Задача отыскания коэффициентов пу и Ь/ многочленов И/у (х) сводится к реше¬ нию системы нормальных уравнений: dbj < dmj где 2 F (mj ,Ь{} = S Q Щ (xj _к) - Yj - J 2. Решение этой системы приводит к следующим формулам для вычисления коэф¬ фициентов пу и bj : где tjk=xj-k~xj'' v/k=yj_k-y/t а полином Wj (х) представляется в виде ИЛ (х) = /Пу (X - Ху ) +У] . Следовательно, искомые сглаженные значения Zj вычисляются по формуле И/3 (xi) = /п3 г32 + /3, если 7 = 1; Wj + 1 (xz) = rrij +1 tj + и + // + v если ' = 2, . . . , л - 1; Wn (хп) = тп tn0 + у п , если / = п. Обращение к подпрограммам имеет соответственно вид: CALLSG13(X, Y, Z, NDIM, IER) CALL DSG13 (X, Y, Z, NDIM, IER) X — массив длиной NDIM заданных значений аргумента обычной или удвоенной точности; Y — массив длиной NDIM заданных значений функции обычной или удвоенной точности; Z — массив длиной NDIM вычисляемых сглаженных значений функции обычной или удвоенной точности; NDIM — число заданных значений функции и аргумента (точность обычная); IER — индикатор ошибки, принимающий при выполнении подпрограммы одно из следующих значений: IER = 0, если ошибок нет; IER = — 1, если NDIM<3, выход из подпрограммы осуществляется без выполнения вычислений. Массив Z может совпадать с X или Y. Если X или Y не совпадает с Z, то они не портятся в процессе вычислений.
СГЛАЖИВАНИЕ ФУНКЦИИ, ЗАДАННОЙ ТАБЛИЦЕЙ ЗНАЧЕНИЙ В РАВНООТСТОЯЩИХ ТОЧКАХ, С ПОМОЩЬЮ МНОГОЧЛЕНА ПЕРВОЙ СТЕПЕНИ, ПОСТРОЕННОГО ПО ТРЕМ ПОСЛЕДОВАТЕЛЬНЫМ ТОЧКАМ МЕТОДОМ НАИМЕНЬШИХ КВАДРАТОВ Подпрограмма SE13 с обычной <DSE13 с удвоенной) точностью. Эти подпрограм¬ мы вычисляют множество z 1, z2, . . ., zn сглаженных значений функции у (х), заданной множеством ylt у2,... ,уп ее значений в п равноотстоящих точках xz с xz — xz _1 = = h (i =2, ... ,п). Метод, используемый для нахождения значений Z;, приведен в описании под¬ программ SG13 (DSG13). Однако, с учетом условия xz — xf _ 1 = h = const (7 = 2, . . . , п) выражения для вычисления искомых сглаженных значений Z; имеют вид: I (5/1 +2у2 - /э) 6 * I (У,-1 + У/ +// + 1» при 7=1; при 7 = 2, . . ., п — 1; | (~Уп-2 + 2Уп-1 + 5КЯ) при z = п. Обращение к подпрограммам имеет соответственно вид: CALLSE13(Y, Z, NDIM, IER) CALL DSE13(Y, Z, NDIM, IER) Параметры Y, Z, NDIM, IER имеют тот же смысл, что и одноименные параметры подпрограммы SG13 (DSG13). Массив Z может совпадать с массивом Y. Если Y не совпадает с Z, то он в процессе вычислений не портится. СГЛАЖИВАНИЕ ФУНКЦИИ, ЗАДАННОЙ ТАБЛИЦЕЙ ЗНАЧЕНИЙ В РАВНООТСТОЯЩИХ ТОЧКАХ, С ПОМОЩЬЮ МНОГОЧЛЕНА ПЕРВОЙ СТЕПЕНИ, ПОСТРОЕННОГО ПО ПЯТИ ПОСЛЕДОВАТЕЛЬНЫМ ТОЧКАМ МЕТОДОМ НАИМЕНЬШИХ КВАДРАТОВ Подпрограмма SE15 с обычной 7DSE15 с удвоенной) точностью. Эти подпрограм¬ мы вычисляют множество z!, z2, . . . , zn сглаженных значений функции у (х), заданной множеством ее значений в п равноотстоящих точках xz с xz — xz _ 1 = h (i = 2,. . . , п). По каждым пяти последовательным точкам (xj _к, yj _к) {к = 0,. . ., 4) для j = 5, . . . , п строится последовательность многочленов первой степени вида (3.15), дающих в этих точках наименьшее отклонение от у в смысле метода наименьших квад¬ ратов. Для 7 =3, ...,/7—2 в качестве сглаженного значения функции zz берется вы¬ численное в точке xf значение многочлена, построенного по точкам (xi+k, у,-+к) (к = = —2, . . . , 2), т. е. многочлена И/,- +2 (х) . В качестве сглаженных значений zx и z2 бе¬ рутся вычисленные в точках Xj и х2 соответственно значения многочлена И/5 (х), а в ка¬ честве zn_y и zn — значения многочлена И/Л{х), вычисленные соответственно в точках хп-1 ихл. Искомые сглаженные значения zz вычисляются по формулам: 176
H's О/, + 2/2 + Уз - /5) □ H's (х2) = -^(4/! +3/2 +2/3 +/4) при 7=1; при 7=2; W, + 2 <х/ > = | (У/ - 2 + Ъ- - 1 + >7 + У, + 1 + И/ +2> ПРИ ' = 3 п - 2; и/п(хп_1) =. (/„_з + 2/п_2 +3/„_1 + 4/„) при / — п — 1; УУп(*п) = | (-к„_4 +у„_2 +2/л-1 +3И1) при 7 = п. Обращение к подпрограммам имеет соответственно вид: CALLSE15(Y, Z, NDIM, IER) CALL DSE15(Y, Z, NDIM, IER) Параметры Y, Z, NDIM, IER имеют тот же смысл, что и одноименные параметры подпрограммы SG13 (DSG13), но значение IER = —1, если NDIM < 5. СГЛАЖИВАНИЕ ФУНКЦИИ, ЗАДАННОЙ ТАБЛИЦЕЙ ЗНАЧЕНИЙ В РАВНООТСТОЯЩИХ ТОЧКАХ, С ПОМОЩЬЮ МНОГОЧЛЕНА ТРЕТЬЕЙ СТЕПЕНИ, ПОСТРОЕННОГО ПО ПЯТИ ПОСЛЕДОВАТЕЛЬНЫМ ТОЧКАМ МЕТОДОМ НАИМЕНЬШИХ КВАДРАТОВ Подпрограмма SE35 с обычной fDSE35 с удвоенной) точностью. Эти подпрограм¬ мы вычисляют множество zit z2, ■ . . , zn сглаженных значений функции, заданной множеством у2, . . . , Уп ее значений в п равноотстоящих точках xf cxz —xf_^ =h (7=2 п). По каждым пяти последовательным точкам (xj _к, _к) (к = 0, . . . , 4) для / = 5, . . . , встроится последовательность многочленов третьей степени вида Wj (х) = aj х3 + bj х2 + CjX + dj , дающих в этих точках наименьшее отклонение от у в смысле метода наименьших квад¬ ратов. Для 7 = 3, . . . , п — 2, т. е. в каждой точке х-, за исключением точек xlfx2lxn__^ и хп, в качестве сглаженных значений функции zz берется вычисленное в точке xz значение многочлена, построенного по точкам (xz +к, у} +к) (к = —2,. . ., 2), т. е. мно¬ гочлена Wj + 2 (х). В качестве сглаженных значений zr и z2 берутся вычисленные в точ¬ ках Xj и х2 соответственно значения многочлена И/5 (х), а в качестве zn_^ и zn — зна¬ чения многочлена Wn (х), вычисленные в точках хп _ 1 и хп соответственно. Задача отыскания коэффициентов aj, bj, Cj и dj многочленов Wj (х) сводится к минимизации функции F (а;, bj .Cj.dj) = * S о [И/j (Xj_k) - /у _ J2. Искомые сглаженные значения zz вычисляются по формулам: !^s (*i) = У1 - ^-б4/3 при*/ = 1; yys (х2) = Уг + при 7 =2; * И//+2(х/) = /,• - ^-б4/,. при 7 = 3, . . ■ , п =yn_i + 54/„-2 при 7 = п — 1 %(*//) =Уп- §4)/г>-2 при 7 = п, 7 Под ред. И. А. Кудряшова 177
где 64/,- = yj _ 2 - 4/,- _ 1 + 6/,- - 4/;- +, + уj + 2 для /= 3,.... л - 2. Обращение к подпрограммам имеет соответственно вид: CALLSE35(Y, Z, NDIM, IER) CALL DSE35 (Y, Z, NDIM, IER) Параметры подпрограммы имеют тот же смысл, что и одноименные параметры рассмотренных ранее подпрограмм сглаживания. 3.12. АППРОКСИМАЦИЯ ФУНКЦИЙ СОСТАВЛЕНИЕ СИСТЕМЫ НОРМАЛЬНЫХ УРАВНЕНИЙ ПРИ АППРОКСИМАЦИИ ДИСКРЕТНОЙ ФУНКЦИИ ЛИНЕЙНОЙ КОМБИНАЦИЕЙ ФУНКЦИЙ ПО МЕТОДУ НАИМЕНЬШИХ КВАДРАТОВ Подпрограмма APLL с обычной fDAPLL с удвоенной) точностью. Эти подпрограм¬ мы выполняют первый этап наилучшей в смысле метода наименьших квадратов ап¬ проксимации заданной дискретной функции f (х) линейной комбинацией р(х) = Z с д- (х). (3.16) / = 1 При такой аппроксимации достигает минимума функция em = 1vv(x^) (f(xk> -Р(хк^2 (3.17) где f (х) — аппроксимируемая функция, определенная для х = хн х2, . . . , хл; w(x) — функция веса, определенная для тех же значений х; g-t (х) — непрерывные действитель¬ ные функции, определенные на интервале, содержащем [хх, хп ] (базисные функции). Необходимые условия минимума функции ет demldCj =0 (/ = 1, 2, . . . ,т) (3.18) образуют систему т линейных уравнений с т неизвестными cfl называемую системой нормальных уравнений. Если ввести векторы-столбцы Х= (xltx2, . . . , хл)т; F = (ffxj, f(x2), . . . , 7(хл))т; С? (с 1, с2, . . ., Cfj)) , а также матрицы ' .91 (-*1) 91 (*2) • 91 (*п> W (Х1 ) G = <72 (*1) 9 2 (-*2) 92 ; W = w(x2) 9 т Ui) 9 т (*2) • 9 т (хп >_ W (х„ )_ то система нормальных уравнений (3.18) может быть представлена следующим образом: 178
GWG1C= GWF, ИЛИ AC = R. <3-19> Здесь A = GWGT — матрица коэффициентов системы нормальных уравнений размером т X т с элементами п afj- = (xk^j ' R = G WF — вектор-столбец свободных членов размером т с компонентами п г,- = S w(xk}f(xk)gj(xk}. к = 1 С — вектор-столбец размером т неизвестных коэффициентов с-г На втором этапе система нормальных уравнений решается при помощи подпро¬ граммы APFS (DAPFS). Обращение к подпрограммам имеет соответственно вид: CALL APLL (FFCT, N, IP, Р, WORK, DATI, IER) CALL DAPLL (FFCT, N, IP, P, WORK, DATI, IER) FFCT — имя внешней подпрограммы, составляемой пользователем и предназна¬ ченной для вычисления значений базисных функций, аппроксимируемой функции и веса в l-й точке (для l-го значения аргумента) : FFCT (I, N, IP, Р, DATI, WGT, IER). В программе, вызывающей APLL(DAPLL), параметр FFCT должен быть описан оператором EXTERNAL; I — заданное значение индекса текущей точки; N — число точек, в которых задана аппроксимируемая функция; IP — число базисных функций, используемых для аппроксимации заданной функ¬ ции, IP < N; Р — массив длиной (IP+1) обычной или удвоенной точности, заполняемый под¬ программой FFCT и содержащий при выходе из нее значения базисных функций (в пер¬ вых IP элементах) и значение аппроксимируемой функции [ (IP + 1)-й элемент] в 1-й точке: Р (1) =^i(xz),P(2) =g2(xf) Р (IP) =<7|Р(х/), P(IP+1) =f(xi); WORK — массив длиной [(IP + 1) (IP + 2) /2] обычной или удвоенной точности, содержащий при выходе из подпрограммы расположенные друг за другом элементы верхней треугольной части матрицы А, записанные по столбцам [первые IP (IP + 1)/2 элементов WORK], вектор R правых частей системы нормальных уравнений и взвешен¬ ную сумму квадратов значений функций [такое распределение памяти требуется под¬ программой APFS (DAPFS) ]; DATI — массив обычной или удвоенной точности, который может использоваться для обмена информацией между APLL и FFCT, если требуемые значения аргумента, аппроксимируемой, весовой и базисных функций задаются при обращении к APLL таблично; WGT — значение весовой функции в l-й точке; IER — индикатор ошибки. В подпрограмме APLL(DAPLL) параметр IER трак¬ туется как массив единичной длины, используется для контроля и может принимать следующие значения: IER (1) = —1 — формальные ошибки в задании размерностей (1Р<0 или N<0nnnlP>N); IER (1) = 0 — ошибок нет; 7 179
IER (1) = 1 — ошибка в подпрограмме FFCT. В основной программе, вызывающей APLL (DAPLL), соответствующий IER факти¬ ческий параметр может быть скаляром или массивом произвольной длины. Его допол¬ нительные компоненты могут быть использованы для передачи каких-либо целых величин из основной программы в подпрограмму FFCT и обратно. Пользователь имеет различные возможности организации подпрограммы FFCT. Параметры I, N, IP и DATI являются входными для FFCT и передаются ей подпрограм¬ мой APLL. Подпрограмма может быть организована таким образом, что все или не¬ которые значения аппроксимируемой, весовой и базисных функций, а также значения аргумента в l-й точке вычисляются в самой подпрограмме как функции индекса I или аргумента х(, или они могут последовательно считываться с внешнего устройства. Кроме того, эти данные для всех N точек или некоторых из них могут быть заданы таблицей, в этом случае для их размещения используется массив DATI или элементы массива Р, начиная с элемента (IP + 2), а длина Р в этом случае должна быть увеличена. Все эти возможности могут сочетаться в любых комбинациях. Но при этом при выходе из FFCT значения базисных функций для l-й точки должны быть присвоены первым IP элементам массива Р, значение аппроксимируемой функции — элементу Р(1Р+1), а значение весовой функции в этой точке — переменной WGT. СОСТАВЛЕНИЕ СИСТЕМЫ НОРМАЛЬНЫХ УРАВНЕНИЙ ПРИ АППРОКСИМАЦИИ ДИСКРЕТНОЙ ФУНКЦИИ ПО МЕТОДУ НАИМЕНЬШИХ КВАДРАТОВ С ИСПОЛЬЗОВАНИЕМ В КАЧЕСТВЕ БАЗИСНЫХ ФУНКЦИЙ МНОГОЧЛЕНОВ ЧЕБЫШЕВА Подпрограмма АРСН с обычной f DAPCH с удвоенной) точностью. Эти подпро¬ граммы выполняют построение системы нормальных уравнений вида (3.19), получа¬ ющейся при наилучшей в смысле метода наименьших квадратов аппроксимации заданной дискретной функции f (х), определенной длях = х{, х2, . . . , хп, многочленом Р (х) = Ci 7"о (Г) + с2 Л (Г) + . . . + cmTm_ 1 (г), где Тк (г) — многочлен Чебышева степени к. Область изменения аргумента х{ <х<хл при помощи дробно-линейного преобра¬ зования 2х - (хп + Xj ) t (х) = = XD X + х0 преобразуется в область —1 < t < 1, так как в этом интервале многочлены Чебышева ортогональны. При использовании для аппроксимации функции ортогональных многочленов матрица А системы нормальных уравнений оказывается диагональной. Вычисление ортогональных многочленов с последующим обращением диагональной матрицы при¬ водит к значительно меньшим ошибкам округления, чем при использовании обычных многочленов. Это обстоятельство оказывается особенно важным, когда производится аппроксимация многочленом высокой степени. Подпрограмма АРСН (DAPCH) выполняет первый этап аппроксимации — составле¬ ние системы нормальных уравнений. Решение системы нормальных уравнений осуществляется затем при помощи подпрограммы APFS (DAPFS). Обращение к подпрограммам имеет соответственно вид: CALL АРСН (DATI, N, IP, XD, ХО, WORK, IER) CALL DAPCH (DATI, N, IP, XD, XO, WORK, IER) 180
DATI — массив длиной 3 X N обычной или удвоенной точности, содержащий заданные N значений аргумента, соответствующие им значения аппроксимируемой функции и функции веса. Если функция веса не задана [и/(х7-) = 1, / = 1, 2, . . . , N], то длина массива может быть равна (2 X N + 1), причем элемент DATI (2*14 + 1) должен иметь неположительное значение. При выполнении подпрограммы массив DATI не портится; N — число точек, в которых задана аппроксимируемая функция; IP — число многочленов Чебышева, используемых в качестве базисных функций, IPCN; XD — вычисленная константа — множитель линейного преобразования области аргумента (точность обычная или удвоенная); ХО — вычисленный свободный член линейного преобразования области аргумента (точность обычная или удвоенная); WORK — массив-результат длиной (IP + 1) (!Р + 2)/2 обычной или удвоенной точности, содержащий при выходе из подпрограммы элементы верхней треугольной части матрицы системы нормальных уравнений, записанные по столбцам, вектор сво¬ бодных членов и взвешенную сумму квадратов значений заданной дискретной функции f (х) (такое распределение памяти требуется подпрограммой APFS (DAPFS)); IER — формируемый в подпрограмме индикатор ошибки: IER = 0 — ошибок нет; IER = 1 — все аргументы совпадают; IER = — 1 — ошибки в задании размерностей (N<0, или IP < 0, или N < IP). Значение разложения по многочленам Чебышева для любого х может быть найдено при помощи подпрограммы CNPS(DCNPS) с использованием вычисленных значений xD, х0 и вектора В коэффициентов разложения по полиномам Чебышева. Преобразование найденного разложения по многочленам Чебышева в разложение по степеням х можно выполнить с помощью подпрограммы TCNP (DTCNP). РЕШЕНИЕ СИСТЕМЫ НОРМАЛЬНЫХ УРАВНЕНИЙ, ВОЗНИКАЮЩЕЙ ПРИ НАИЛУЧШЕЙ В СМЫСЛЕ МЕТОДА НАИМЕНЬШИХ КВАДРАТОВ АППРОКСИМАЦИИ ЗАДАННОЙ ДИСКРЕТНОЙ ФУНКЦИИ ЛИНЕЙНОЙ КОМБИНАЦИЕЙ ФУНКЦИЙ Подпрограмма APFS с обычной fDAPFS с удвоенной) точностью. Эти подпрограм¬ мы позволяют определить коэффициенты (7 — 1, 2, . . ., m ) линейной комбинации функций m р(х) = S с-д-(х), / = 1 аппроксимирующей заданную дискретную функцию f (х), путем решения системы нормальных уравнений вида (3.19). Система нормальных уравнений (3.19) решается методом квадратных корней. Матрица А этой системы, являясь симметричной и положительно определенной, пред¬ ставляется в виде произведения двух взаимно транспонированных треугольных матриц: А = Т1 Т, а система уравнений (3.19) приводится к виду ТС= (ГТ)_1Я. (3.20) Элементы верхней треугольной матрицы Топределяются по формулам: Гц=У^7; “ (/ = 2, М I I 181
/—1 ! (3.21) _ , _a,i~ k=,tkitk/' (i =2 m- ) *7/ v an ^ki • tjj \ j = 7 + 1, . . . , m ) к - 1 tif Подпрограмма позволяет найти все наилучшие в смысле метода наименьших квадратов приближения аппроксимируемой функции размерности от 1 до т, так как введение 7-й базисной функции д; (х) в линейную комбинацию р {х) не влияет на первые 7 — 1 столбцов и строк матрицы А и на первые 7 — 1 элементов вектора R. Однако при малых по абсолютному значению величинах диагональных элементов в формулах (3.21) элементы матрицы Т вычисляются с большими погрешностями и ошибки округления могут привести к получению неверных результатов. Поэтому при разложении матрицы А осуществляется проверка потери значности при вычислении диагональных элементов в соответствии с заданным параметром е и вычисления пре¬ кращаются при выполнении условия tkk < |еап |. В этом случае порядок матрицы считается равным к— 1, т. е. решается только подсистема нормальных уравнений. Кроме того, вычисления могут быть прекращены при получении приближения размерности к, удовлетворяющего заданной относительной точности 77, т. е. при выпол¬ нении неравенства ек < 1т?е0|, где ек — взвешенная сумма квадратов остатков приближения размерности к, опре¬ деляемая по формуле (3.17); е0 — взвешенная сумма квадратов значений функции f М V — задаваемая при обращении к подпрограмме относительная точность аппрок¬ симации. Таким образом, максимальная размерность IRES вычисляемого подпрограммой приближения определяется заданным числом базисных функций (IRES <т ), заданной относительной точностью аппроксимации 17 и заданной относительной погрешностью е вычисления диагональных элементов верхней треугольной матрицы Г. В зависимости от значения управляющего параметра ЮР подпрограмма либо вычисляет приближение размерности IRES, либо вычисляет все приближения размер¬ ности от 1 до IRES, либо ограничивается преобразованием системы нормальных урав¬ нений к виду (3.14). Значение IRES вычисляется в подпрограмме следующим образом: min (п 1, п2, т ), если ЮР <0; miп (п 1, т ) , если ЮР >0, где п 1 — наибольшая размерность приближения, для которого не обнаружена потеря значности; п2 — наименьшая размерность приближения, удовлетворяющего заданной точности аппроксимации. При обращении к подпрограммам APFS и DAPFS задаются матрица А системы нормальных уравнений, вектор-столбец R свободных членов и взвешенная сумма квадратов е0 функции f (х). Эти данные могут быть подготовлены подпрограммами APLL или DAPLL при использовании базисных функций произвольного вида или подпрограммами АРСН или DAPCH, если заданная дискретная функция аппроксимируется многочленом, раз¬ ложенным по многочленам Чебышева. Матрица А системы нормальных уравнений в общем случае является плохо обу¬ словленной. При неудачном выборе системы функций gf (х) коэффициенты cz аппрокси¬ мирующей функции р(х) будут определяться с погрешностями, значительно превыша¬ ющими погрешности округления, связанные с ограниченностью разрядной сетки ЭВМ, причем эти погрешности быстро возрастают при росте 7. Так, например, при исполь¬ зовании для аппроксимации функций (х) = 1; д2 (х) ~х; д3 (х) = х2; . . . дт{х} ~ 182 IRES =
= х™-1, соответствующих представлению ошибки аппроксимации рядом Тейлора, удовлетворительные результаты, как правило, могут быть получены при т<4. Погрешности определения коэффициентов с- существенно уменьшаются при ис¬ пользовании в качестве базисных функций ортогональных полиномов Лагерра,Эрмита, Лежандра или Чебышева, так как в этом случае матрица системы нормальных уравне¬ ний оказывается диагональной. Обращение к подпрограммам имеет соответственно вид: CALL APFS (WORK, IP, IRES, IOP, EPS, ETA, IER) CALL DAPFS (WORK, IP, IRES, IOP, EPS, ETA, IER) WORK — массив длиной (IP + 1) (IP + 2)/2 обычной или удвоенной точности, содержащий при обращении к подпрограмме элементы верхней треугольной части симметричной матрицы коэффициентов системы нормальных уравнений, записанные по столбцам, вектор R заданных правых частей системы и взвешенную сумму квадратов во значений функции (такое распределение памяти обеспечивается подпрограммами APLL(DAPLL) и АРСН (DAPCH). При выходе из подпрограммы в этом массиве раз¬ мещаются результаты вычислений в соответствии со значением управляющего пара¬ метра ЮР следующим образом: ЮР = 0 — WORK содержит расположенные друг за другом элементы верхней треугольной матрицы Т, записанные по столбцам, вектор (Тт) "1R свободных членов преобразованной системы уравнений и взвешенную сумму квадратов погрешностей e(RES приближения размерности IRES; ЮР= ±1 — элементы массива WORK с номерами от [ (IRES — 1) IRES/2 + 1] до [IRES (IRES + 1) /2] содержат вычисленные коэффициенты приближения размерности IRES; ЮР=±2 — элементы массива WORK с номерами от [ (к — 1)к/2 + 1 ] до [£ (к + 1) /2] содержат вычисленные коэффициенты приближения размер¬ ности к для всех к от 1 до IRES; IP — заданное число базисных функций; ЕТА — заданная относительная точность аппроксимации; рекомендуется выбирать ЕТА в диапазоне от 1 до 10"6 при вычислениях с обычной точностью или от 1 до 10"15 при вычислениях с удвоенной точностью; EPS — заданная относительная точность вычислений, используемая при проверке потери значимости; рекомендуется выбирать EPS в диапазоне от 10”3 до 10”6 при вычислениях с обычной точностью или в диапазоне от 10”10 до 10"15 при вычислениях с удвоенной точностью; IRES — вычисляемая в подпрограмме максимальная размерность полученного приближения; ЮР — параметр, определяющий выполняемые операции: ЮР = 0 — выполняется разложение исходной матрицы А на треугольные матрицы (А = ТтТ) и система уравнений преобразуется к виду ТС = (Гт) ”1R, т. е. вычисляется верхняя треугольная матрица Т, вектор (Г7)"1 R правых частей преобразованной системы, а также сумма квадратов погрешностей elRES приближения размерности IRES. Элементы матрицы Т, расположенные по столбцам, вектор правых частей преобразованной системы и 6|RES разме¬ щаются в массиве WORK, заменяя соответственно элементы исходной матри¬ цы А, вектора R и е0 ЮР=±1 — кроме вычислений при ЮР = 0, вычисляется приближение мак¬ симальной размерности IRES; вычисленные значения коэффициентов cz размещаются в массиве WORK на месте элементов столбца с номером IRES исходной матрицы А, т. е. в элементах WORK с номерами от [ (IRES - 1) IRES/2 + 1] до IRES (IRES + 1)/2; ЮР=±2 — кроме вычислений при ЮР = 0, вычисляются все приближения размерности от 1 до IRES; вычисленные коэффициенты приближения раз¬ 183
мерности к (к = 1,. . . , IRES) размещаются в массиве WORK в элементах с номерами от [ (к - 1) к/2 + 1 ] до [/г (к + 1) /2] ; ЮР > 2 эквивалентно ЮР = 2; ЮР<—2 эквивалентно ЮР = —2; значение ЮР > 0 или ЮР < 0 определяет порядок вычисления IRES; ЮР > 0 — IRES вычисляется с учетом ЕТА и EPS; ЮР < 0 — IRES вычисляется только с учетом EPS; IER — вычисляемый подпрограммой индикатор ошибки: IER = —1,если IP < 0; IER = 0, если нет потери значности и достигается заданная точность; IER = 1, если при ЮР>0 обнаружена потеря значности или если при ЮР<0 заданная точность не достигается даже для приближения размерности IRES. АППРОКСИМАЦИЯ ЗАДАННОЙ ДИСКРЕТНОЙ ФУНКЦИИ РАЦИОНАЛЬНОЙ ФУНКЦИЕЙ НА ОСНОВЕ МЕТОДА НАИМЕНЬШИХ КВАДРАТОВ Подпрограмма ARAT с обычной fDARAT с удвоенной) точностью. Эти подпро¬ граммы позволяют определить коэффициенты рх, р2, . . . , р/р и qx, q2, . . . , qiq много¬ членов р (х) =Pi + р2х + • ■ • +PiP*'p 1; О(х) =0! +q2x + . . ,+qiqx'q~\ при которых достигает минимума функция п / Р (X; ) \2 Р= S и/(х,.)( Их;) ), /=1 \ О(Х,)/ где ip, iq, п — заданные целые положительные числа; f {х}, w(x) — аппроксимируемая функция и функция веса, определенные для х = х1г х2, . . . , хл из интервала —1 <х < 1. Дифференцирование минимизируемой функции F по коэффициентам много¬ членов Р (х) и Q(x) приводит к системе уравнений, нелинейных относительно этих коэффициентов. Решение системы находится по итерационной схеме, основанной на повторении решения системы нормальных уравнений, которые получаются в результате линеаризации исходной системы. Если Pq (х) и Qo М — известное начальное приближение, то новое приближение (х) и Qi (х) строится так: Р\ (х) = Ро (х) + АР0 М ; С?! (х) = Qo (х) + AQ0 (х), и функция F имеет вид F = /»„ (х, ) + ДР0 (х,-) 2 Qo (х,) + AQ0 (х,-) Учитывая, что Ро + ДРр Ро Л + ДРо _ Д°о\ О0 + ДО0 ~ Qo \ Р, Q, )' получаем Fo =» F: Fo П vr(x) Р0(х;) S - Hx,.)Qo(x;.) -Р0(х,) -ДР0(х,) +-^- Д0>(х,.) = 1 Og (х,-) |_ О„(х,.) 184
или Fo= £ 2, i = 1 где w* = w (X/ ) /Q2 (x,) ; f * = f (х,) Qo (x,) - Po (x;); m g (x) = S ckgk (x), m = iq + ip- 1; 9k (x) =■ po <x) QoM xk-iq (*=1,2 iq—1); (k = iq, iq + , iq + ip - 1); ck — коэффициенты многочленов AQ0 M и AP0 M , определяемых выражениями iq -1 . m AQ0 (x) = S ckx, АР0(х) = S ckxk ,q. Ar = 1 к = iq Использование для определения коэффициентов ск (к='\,,,.,т) метода наи¬ меньших квадратов приводит, таким образом, к решению системы нормальных урав¬ нений АС = R с симметричной положительно определенной матрицей А. Эта система получается из необходимых условий минимума функции Fo. В рассматриваемой подпрограмме ARAT(DARAT) для составления системы нормальных уравнений используется подпрограмма APLL(DAPLL), а для решения этой системы — подпрограмма APFS (DAPFS). В общем случае Рк+} (х) =РкМ + Д/\(х); Qk+ ! (х) = Qk (х) + ЛОк (х), начиная с начального приближения PQ (х) и Qo М • Стандартным начальным приближе¬ нием, используемым в подпрограмме, является Ро (х) = 0 и Qo М = 1. Итерационный процесс заканчивается при выполнении условий сходимости или при достижении предусмотренного в подпрограмме максимально возможного числа итераций £тах = 20. В качестве базисных функций gt (х) подпрограмма ARAT (DARAT) использует многочлены Чебышева, ортогональные на интервале [—1, 1], и поэтому область измене¬ ния аргумента должна быть приведена к этому же интервалу (см. стр. 180). Для вычисления значения разложения Р (х) и Q (х) по многочленам Чебышева под¬ программа ARAT использует подпрограмму CNPS, а подпрограмма DARAT — DCNPS. Для определения значений базисных функций в /*-й точке (при х = х-) подпрограм¬ мы ARAT и DARAT используют подпрограммы FRAT и DFRAT соответственно. Под¬ программы FRAT и DFRAT являются вспомогательными и самостоятельного значения не имеют. В свою очередь подпрограммы FRAT и DFRAT используют соответственно подпрограммы CNP и DCNP. Таким образом, при работе подпрограммы ARAT используются подпрограммы APLL, APFS, FRAT, CNPS и CNP, а при работе подпрограммы DARAT — подпрограммы DAPLL, DAPFS, DFRAT, DCNPS и DCNP. Обращение к подпрограммам имеет соответственно вид: CALL ARAT (DATI, N, WORK, P, IP, IQ, IER) CALL DARAT (DATI, N, WORK, P, IP, IQ, IER) 185
DATI - массив длиной 3N исходных данных обычной или удвоенной точности, содержащий при обращении к подпрограмме N значений аргумента х1г . . ., xN, соот¬ ветствующие значения аппроксимируемой функции f\, . . . , и весов . . . , Если все Wj = 1 (/ = 1,. . . , N), то длина DATI может быть равна (2N + 1), а элемент массива DATI (2*N + 1) должен иметь неположительное значение. N — число заданных значений аппроксимируемой функции; WORK - рабочий массив обычной или удвоенной точности длиной не менее, чем (IP + IQ) (IP + IQ + 1) + 4N + 1. При выходе из подпрограммы элементы WORK (N + 1),... WORK(2*N) содержат значения числителя, а элементы WORK (2*N + 1), . . . ..., WORK(3*N) - значения знаменателя рациональной функции. Элементы WORK (1),... ..., WORK(N) и WORK(3*N + 1), . . . , WORK(4*N) используются для хранения проме¬ жуточных значений числителя и знаменателя соответственно. Остальные элементы массива содержат коэффициенты системы нормальных уравнений в сжатой форме; Р — массив обычной или удвоенной точности длиной IP+ IQ, причем IP+ IQ<N. При выходе из подпрограммы первые IQ элементов содержат вычисленные коэффи¬ циенты знаменателя, а следующие IP элементов — коэффициенты числителя. Коэф¬ фициенты располагаются в порядке возрастания их индексов. При обращении к под¬ программе массив Р может содержать коэффициенты задаваемого начального чебышев¬ ского приближения, расположенные в указанном выше порядке; IP — заданная размерность вектора коэффициентов числителя; IQ — заданная размерность вектора коэффициентов знаменателя. Для обеспечения удовлетворительной сходимости итерационного процесса рекомендуется выбирать IP < 5, IQ < 5 при вычислениях с обычной точностью и IP < 10, IQ < 10 при вычислениях с удвоенной точностью; IER — индикатор ошибок, принимающий одно из следующих значений: IER = 0 — при отсутствии ошибок и сходящемся итерационном процессе; IER = —1 — при нарушении хотя бы одного из условий: N > 0, IP > 0, IQ > 0, N> IP + IQ, Qq (x) =# 0 на интервале [—1, 1] при использовании задаваемого пользователем начального приближения; IER = 1, 2 — при плохой сходимости итераций. При всех значениях IER >0 приближение является пригодным, но только при IER = 0 оно близко к наилуч¬ шему в смысле метода наименьших квадратов приближению. IER исполь¬ зуется также как входная величина. При обращении к подпрограмме IER = 0 означает использование стандартного начального приближения PQ (х) = 0 и Qq (х) = 1, а значение IER Ф 0 указывает на наличие в массиве Р задаваемого пользователем начального приближения. ЛИНЕЙНАЯ ЧЕБЫШЕВСКАЯ АППРОКСИМАЦИЯ ЗАДАННОЙ ДИСКРЕТНОЙ ФУНКЦИИ ЛИНЕЙНОЙ КОМБИНАЦИЕЙ ЗАДАННЫХ НЕПРЕРЫВНЫХ ФУНКЦИЙ Подпрограмма АРММ с обычной (DAPMM с удвоенной) точностью. Эти подпро- граммы вычисляют коэффициенты а,- (/ = 1,2,.. ., m ) линейной комбинации функций /77 <р(х) = 2 а^-М, i = 1 при которых достигает минимума функция W = max (хк) — f (хк) |, 1 < к < п где f (х) — аппроксимируемая функция, определенная в п точках х = х1# х2,...,хл; ^.(х) - заданные действительные непрерывные функции, определенные на интервале, 186
содержащем [хь хп] (базисные функции); т — число заданных непрерывных функций, с помощью которых строится аппроксимирующая функция ^(х). Задача определения коэффициентов а,- (7 = 1, . . . , /т?), минимизирующих макси¬ мальную погрешность аппроксимации, решается методами линейного программиро¬ вания. Введением неотрицательных переменных bt- (7 = 1,. . . , т + 1), связанных с коэф¬ фициентами а,- соотношениями 6т+1 =-min (0,ai,a2 ат ); bi =ai +6т + 1 <'=1 аппроксимирующая функция <p(x) приводится к виду т + 1 <^(х) = S 6,^,(х), 7 = 1 т r«e *Лп + 1 <х> = - 2 Р/М- / = 1 Следовательно, погрешность аппроксимации в /r-й точке равна т + 1 = S <р!к bj - fk, I — 1 где^ =^(хА.), fk = f(xk}. Так как И/= max |е^|, то справедливо неравенство — и задача 1 < к < п определения неизвестных коэффициентов аппроксимации сводится к минимизации И/ при следующих ограничениях: W + т + 1 Z / = 1 т + 1 Vikbi >fk'- и/ - Pi к bi >-fk / - 1 Ь{ >0 (7=1 1); W >0. В подпрограмме осуществляется переход к соответствующей сопряженной (двой¬ ственной) задаче, которая решается модифицированным симплекс-методом (алгоритм с обратной матрицей). Обращение к подпрограммам имеет соответственно вид: CALL АРММ (FCT, N, М, TOP, IHE, PIV, Т, ITER, IER) CALL DAPMM (FCT, N, M, TOP, IHE, PIV, T, ITER, IER) FCT — имя внешней подпрограммы, составляемой пользователем и предназначен¬ ной для вычисления значений базисных функций для указанного значения аргумента X: FCT (Y, X, К) Y — массив длиной М вычисленных значений базисных функций для заданного аргумента X (точность обычная или удвоенная); X — значение аргумента (точность обычная или удвоенная); К — переменная целого типа, значение которой равно М —1. В программе, вызывающей АРММ (DAPMM), параметр FCT должен быть описан оператором EXTERNAL. Если требуется аппроксимация обычными или смещенными многочленами Чебышева, многочленами Лежандра, Лагерра или Эрмита, то в качестве FCT надо использовать соответственно подпрограммы CNP, CSP, LEP, LAP, HEP при вычислениях с обычной точностью или подпрограммы 187
DCNP, DCSP, DLEP, DLAP, DHEP при вычислениях с удвоенной точностью. N — число точек, в которых задана аппроксимируемая функция; М — число заданных базисных функций, с помощью которых строится аппрокси¬ мирующая функция; ТОР — массив длиной 3XN обычной или удвоенной точности. При обращении к подпрограмме элементы массива с ТОР (1) до TOP(N) содержат заданные значения аппроксимируемой функции, а элементы TOP(N + 1),..., TOP(2*N) — соответству¬ ющие значения аргумента. При выходе из подпрограммы элементы ТОР (1),..., ТОР (N) содержат погрешности в заданных узлах аппроксимации. Остальные элементы исполь¬ зуются как рабочие. IHE — рабочий массив длиной ЗМ + 4N + 6; PIV — массив длиной ЗМ + 6 обычной или удвоенной точности, первые М элемен¬ тов которого при выходе из подпрограммы содержат вычисленные значения коэф¬ фициентов линейной аппроксимации; Т — рабочий массив длиной (М + 2)Х(М + 2) обычной или удвоенной точности; ITER — переменная, содержащая при выходе из подпрограммы число итераций, использованных для получения решения; IER — формируемый в подпрограмме индикатор ошибки: IER — 0 — ошибки нет, получено оптимальное решение; IER = 1 — число итераций достигло максимума М + N; IER = —1 — результата нет, так как неправильно задано М или N (М < 1 или N<2) или не происходит завершения итерационного процесса из-за потери значности при вычислении элементов обратной матрицы. 3.13. АНАЛИЗ ФУРЬЕ ВЫЧИСЛЕНИЕ КОЭФФИЦИЕНТОВ ФУРЬЕ ПЕРИОДИЧЕСКОЙ ФУНКЦИИ Подпрограмма FOR IF с обычной точностью. Подпрограмма вычисляет коэф¬ фициенты Ао, Ак, Вк (к == 1, 2, . . ., М} ряда Фурье: М F(x)=AQ + S (Ак cos кх + Вк sin кх ) (3.22) к = 1 заданной аналитически периодической функции F (х) дляхЕ [0, 2тг], где 1 2л <40 = — J F(x}dx; 2тг о <1 2л Ак = — J* F (х) cos kxdx-, * О 1 2я Вк — F (х) sin k>ydx. я О Интегралы вычисляются с помощью рекуррентных соотношений по квадратурной формуле прямоугольников, использующей значения функции F (х) на дискретном множестве 2/V+1 точек интервала [0, 2ti) , разбивающих замкнутый интервал [0, 2я] на 2N+ 1 подынтервалов длиной Дх= 2tt/(2N+ 1) каждый. Параметры N и М связаны соотношением 0 </14 </V, рекомендуется выбирать Л/ = (2 - 3) М. Обращение к подпрограмме имеет вид: CALL FORIF (FUN, N, М, А, В, IER) FUN - имя внешней подпрограммы-функции, предназначенной для вычисления значений функции в заданных точках (FUN (X), X - аргумент); подпрограмма-функ¬ 188
ция FUN составляется пользователем; в программе, вызывающей FORIF, параметр FUN должен быть описан оператором EXTERNAL; N — число, определяющее подынтервал таким образом, что 2N + 1 точка содер¬ жится на интервале [0, 27г) ; М — максимальный порядок аппроксимирующих гармоник; А — массив длиной М + 1 вычисленных коэффициентов Фурье при косинусах: A i, . . . , Ам, В — массив длиной М + 1 вычисленных коэффициентов Фурье при синусах: Во, В. . . , Вм; IER — индикатор ошибки, принимающий при выполнении подпрограммы сле¬ дующие значения: IER = 0 — ошибок нет; IER = 1 - N<M; IER = 2 — М<0. ВЫЧИСЛЕНИЕ КОЭФФИЦИЕНТОВ ФУРЬЕ ПЕРИОДИЧЕСКОЙ ФУНКЦИИ, ЗАДАННОЙ ТАБЛИЦЕЙ ЗНАЧЕНИЙ Подпрограмма FOR IT с обычной точностью. Подпрограмма вычисляет коэффи¬ циенты До, Ак, В к (к = 1, 2, . . . , М) ряда Фурье (3.22) функции F (х) периода 277, заданной в интервале [0, 2я) на равноотстоящей системе 2/V + 1 узлов Xt = -31— t (r = 0, 1 2/V). 2N + 1 Вычисление коэффициентов производится методом, описанным в подпрограмме FORIF. Обращение к подпрограмме имеет вид: CALL FORIT (FNT, N, М, А, В, IER) FNT — массив длиной 2N + 1 заданных значений функции. Параметры N, М, А, В, IER имеют тот же смысл, что и одноименные параметры в подпрограмме FORIF. КОМПЛЕКСНЫЙ ТРЕХМЕРНЫЙ АНАЛИЗ ФУРЬЕ Подпрограмма HARM с обычной fDHARM с удвоенной) точностью. Эти подпро¬ граммы выполняют дискретное комплексное прямое или обратное преобразование Фурье над трехмерным массивом комплексных данных размером 2 (NYN2N3} при условии, что граница каждого измерения массива есть степень 2, т. е. Nk = 2Мк (к = = 1, 2, 3). Для прямого преобразования Фурье по исходному трехмерному массиву ком¬ плексных данных / X: ; ; ) , где А = 0, 1,. . . , ЛА — 1 и к = 1,2, 3, вычисляется сово- I AAAJ , . JK К . г 1 купность комплексных коэффициентов трехкратного ряда Фурье I с^ r г где гк = = 0, 1, . . . , Nk - 1 (к = 1, 2, 3) и Nk = 2Мк. Коэффициенты Фурье рассчитываются по формулам с А А А 1 N. N2 Л/3 Л/,-1 Л = о Л/2 - 1 N3 - 1 Ла "л/? Для обратного преобразования Фурье по трехмерному массиву г2 г3 } ком¬ плексных коэффициентов Фурье вычисляется трехмерный массив комплексных чисел ’где'*= °<1 nk -1; гк=о-1 nk -1; к = 1'2' з; Nk = 2W< 189
Каждый из элементов получаемого массива чисел является суммой соответству¬ ющего трехкратного ряда Фурье и вычисляется по формуле /Vj — 1 X,- • : = S /1ЛЛ Г, = О Л/2 - 1 Л/3 — 1 S S г2 = 0 г3 = О /Ag_+ А2 \ ", N2 Обращение к подпрограммам имеет соответственно вид: CALL HARM (А, М, INV, S, IFSET, IFERR) CALL DHARM (А, М, INV, S, IFSET, IFERR) А — одномерный массив длиной 2 (Л/i Л/2Л/3) z где = 2М^ (точность обычная или удвоенная). При обращении к подпрограмме содержит элементы заданного ком¬ плексного трехмерного массива, подлежащего преобразованию, в векторной форме (по столбцам). При выходе из подпрограммы содержит массив-результат. Действи¬ тельной части элемента х; ; , или с: : : заданного или полученного в результате /1 /2 /3 '1 '2 '3 А преобразования комплексного массива соответствует элемент массива А с индексом 2(/3Л/1Л/2 +/2Л/! +/J +1, где /V, = 2М<|) , I = 1, 2, 3, /, =0, -1. Мнимой части соответствует элемент массива А, непосредственно следующий за указанным; М — массив из трех элементов, значения которых определяют границы Л/( изме¬ рений трехмерного массива: Л/( = 2М^) , 1 = 1, 2, 3 (подпрограмма используется для комплексных трехмерных массивов, граница каждого измерения которых есть сте¬ пень 2, причем 3 < max М (I) < 20) ; INV — рабочий массив длиной 1/8 (2Л/Х Л/2 /\/3); S — рабочий массив для таблицы синусов длиной 1/8 (2NXN2N3) обычной или удвоенной точности; IFSET — код выбора: 0 — находятся только таблицы синусов и INV; 1 — находятся таблицы синусов, INV и вычисляется преобразование Фурье; —1 — находятся таблицы синусов, INV и вычисляется обратное преобразование Фурье; 2 — вычисляется только преобразование Фурье (предполагается, что таблицы синусов и INV известны); —2 — вычисляется только обратное преобразование Фурье (предполагается, что таблицы синусов и INV известны) ; IFERR — индикатор ошибки, принимающий при выполнении подпрограммы следующие значения: IFERR - 1} —max М (I) <3 или max М (I) >20 (I = 1, 2, 3); IFSET = ±21 irrnn — л } — таблицы синусов и INV недостаточно большие или они не мо- I г Ьп К — 1 I J гут быть вычислены; IFERR = 0 — ошибок нет. ОДНОМЕРНЫЙ ДЕЙСТВИТЕЛЬНЫЙ АНАЛИЗ ФУРЬЕ Подпрограмма RHARM с обычной (DRHARM с удвоенной) точностью. Эти под¬ программы вычисляют коэффициенты Фурье а0, Ьо, ах, Ьх, а2, Ь2,. . . , ап_у, Ьп_у, ап, Ьп для массива из 2N действительных чисел х0, хх, . . . , x2/v- f. Элементы заданного массива и вычисляемые коэффициенты связаны соотноше¬ ниями « /V — 1 X • = - а0 + S ’ 2 к = ! 190
где j = 0, 1, . . ., 2/V— 1, Л/ = 2м, a M — произвольное целое число (т. е. подпрограмма вычисляет коэффициенты Фурье для 2 • 2мдействительных чисел). Обращение к подпрограммам имеет соответственно вид: CALL RHARM (А, М, INV, S, IFERR) CALL DRHARM (А, М, INV, S, IFERR) А — массив длиной 2/V+ 4, где N= 2м, точность обычная или удвоенная. При обра¬ щении к подпрограмме первые 2N элементов массива А содержат значения заданных действительных чисел. При выходе из подпрограммы первые 2/V+ 2 элемента массива А aN содержат коэффициенты Фурье: aQ, bQ = 0, ait bif а2, b2l . . ., —,bN = 0; M — целое число, определяющее количество заданных действительных чисел (2 • 2 м) и длину массива А (2'2 м + 4), 3 < М < 20; INV — рабочий массив длиной 1/8 • 2 • 2м; S — рабочий массив для таблицы синусов длиной 1/8 • 2 • 2м обычной или удвоен¬ ной точности; IFERR — индикатор ошибки, принимающий при выполнении подпрограммы одно из следующих значений: IFERR =1 — М < 3 или М > 20, IFERR = 0 — в остальных случаях. При работе этой подпрограммы используется подпрограмма HARM(DHARM). 3.14. ОРТОГОНАЛЬНЫЕ ПОЛИНОМЫ ЧЕБЫШЕВА, ЭРМИТА, ЛАГЕРРА И ЛЕЖАНДРА ВЫЧИСЛЕНИЕ ЗНАЧЕНИЙ ОРТОГОНАЛЬНЫХ ПОЛИНОМОВ Подпрограммы CNP, CSP, HEP, LAP, LEP с обычной /DCNP, DCSP, DHEP, DLAP, DLEP с удвоенной) точностью. Подпрограммы вычисляют значения соответствующих ортогональных полиномов от 0-й до /V-й степени для заданного действительного значения аргумента х и заданного неотрицательного значения /V: CNP(DCNP) — полиномов Чебышева Тп (х) = cos [л arccos (х) ] (—1<х<1); (3.23) CSP (DCSP) — смещенных полиномов Чебышева Т$ (х) = cos [п arccos (2х — 1) ] (0 < х < 1); (3.24) HEP(DHEP) — полиномов Эрмита Нп (х) = (-1) пе*2 е~*2 (-°° <х < °°); (3.25) dxn LAP (DLAP) — полиномов Лагерра L(x)=—--^--(xe~x) (0<х<°°); (3.26) п\ dxn LEP (DLEP) — полиномов Лежандра Рп (х) = —— • -^-(х2-1)" (-1 <х<1). (3.27) п 2пп\ dxn Во всех случаях п — степень полинома. 191
(3.28) (3.29) (3.30) (3.31) (3.32) Вычисления производятся по следующим рекуррентным формулам: полиномы Чебышева То (х) =1; Л (х) — х; Тп+ 1 (х) = 2хТп (х) - Тп_ л (х) (л = 1, 2, . . . ); смещенные полиномы Чебышева Г*М =1; Tf (х) = 2х — 1; Т*+, (х) = (4х—2)Г*(х) -Т*_, (х) (п = 1,2,...); полиномы Эрмита НоМ =1; Н. (х) = 2х; + 1 (х) = 2[хНп(х) —пНп_^(х)] (л = 1,2, ...); полиномы Лагерра £0 М = 1; Li (х) = 1 — х; Дл + 1 (х) = [ (2л + 1 -х) Ln (х) - nLn_y (х) ]/ (л + 1) (л = 1,2 . . . ); полиномы Лежандра Ро (х) = 1; Pi (х) = х; Ял + 1 (х) = [ (2л + 1)хРл (х) - пРп_у (х) ]/(л+ 1) (л= 1, 2, . . . ). Обращение к подпрограммам имеет соответственно вид: CALL <имя пп > (Y, X, N) < имя пп> — имя соответствующей подпрограммы; Y — массив длиной N +1 вычисленных значений полиномов, упорядоченных по возрастанию степени полиномов (точность обычная или удвоенная); X — заданное значение аргумента (точность обычная или удвоенная); N — заданная степень полинома; если N<0, то подпрограмма работает, как при N = 0. Например, CALL CNP (Y, X, N). ВЫЧИСЛЕНИЕ ЗНАЧЕНИЯ ФУНКЦИИ, РАЗЛОЖЕННОЙ В РЯД ПО ОРТОГОНАЛЬНЫМ ПОЛИНОМАМ Подпрограммы CNPS, CSPS, HEPS, LAPS, LEPS с обычной fDCNPS, DCSPS, DHEPS, DLAPS, DLEPS с удвоенной) точностью. Эти подпрограммы вычисляют для заданного действительного значения аргумен¬ та х значение функции у(х), представленной в виде разложения в ряд по соответству¬ ющим ортогональным полиномам с вектором коэффициентов с= (с1# с2,...,сп): уМ = S с-Й-^М, / = 1 где /?/_-] (х) — ортогональный полином (7 — 1)-й степени. В рассматриваемых подпрограммах используются следующие ортогональные полиномы: полиномы Чебышева вида (3.23) — CNPS, DCNPS; смещенные полиномы Чебышева вида (3.24) — CSPS, DCSPS; полиномы Эрмита вида (3.25) — HEPS, DHEPS; 192
полиномы Лагерра вида (3.26) — LAPS, DLAPS; полиномы Лежандра вида (3.27) — LEPS, DLEPS. Вычисления выполняются посредством обратной или прямой рекурсии с исполь¬ зованием рекуррентных соотношений (3.28—3.32), которым удовлетворяют соответ¬ ствующие ортогональные полиномы, по следующим итерационным схемам: 1. Полиномы Чебышева и смещенные полиномы Чебышева: Н. =0, Hq =0; 4+1 = 4' 4 = 4-1' (/~1 П} (а = 2х — для полинома Чебышева и а = 4х —2 — для смещенных полиномов Чебышева). 2. Полиномы Эрмита /1 =сь Но = 1, Нг = 2х; Ч- =^,-1 “ (' “ 4-2 = 4-i' 4_i = 4 + 4; У/ = /,•_, +c/W,_2; /W = Уп- 3. Полиномы Лагерра /1 = clt Hq = 1, Н^ = 'I — х, T= 1 + x; 4 = 4_i -4-2 + 4-i - (7-4-1 -4-2>/'-; 4_2 = 4-i; 4-1=4; Vi =yi-t +ciHi_2; /(*) =Уп- 4. Полиномы Лежандра У1 =Ci, Ho - 1, Hi = x; 4 =x4_1 -4_2+*4-i - <4 -4_2)/'; 4_2 = 4-1; 4-1=4; Yi =у,_1 +c,^,-2; yM =y„. (/ =2 n) (i =2 n) Обращение к подпрограммам имеет соответственно вид: CALL < имя пп > (У, X, С, N) <имя пп> — имя соответствующей подпрограммы; У — вычисленное значение функции (точность обычная или удвоенная) ; X — заданное значение аргумента (точность обычная или удвоенная); С — массив длиной N коэффициентов заданного разложения, упорядоченных по возрастанию степени полиномов (точность обычная или удвоенная) ; N — размерность вектора коэффициентов заданного разложения; если N<1, то происходит выход из подпрограммы без вычислений. Например, CALL CNPS (У, X, С, N).
ПРЕОБРАЗОВАНИЕ РАЗЛОЖЕНИЯ ФУНКЦИИ ПО ОРТОГОНАЛЬНЫМ ПОЛИНОМАМ В ОБЫЧНЫЙ ПОЛИНОМ Подпрограммы TCNP, TCSP, TH ЕР, TLAP, TLEP с обычной fDTCNP, DTCSP, DTHEP, DTLAP, DTLEP с удвоенной) точностью. Заданная линейная комбинация ортогональных полиномов от аргумента t, опре¬ деленная на интервале [d/t dr ] и имеющая вид у (f) = S С/Я/--1 (t), i = 1 где (t) - ортогональный полином (7 -1)-й степени, с помощью линейного пре¬ образования t = Ах + В преобразуется в полином от аргумента х УМ = £ PiX'-\ 7 = 1 определенный на интервале [x/f хг ]. В качестве ортогональных полиномов Bf__y М могут быть использованы поли¬ номы Чебышева (подпрограммы TCNP, DTCNP), смещенные полиномы Чебышева (TCSP, DTCSP), полиномы Эрмита (THEP, DTHEP), Лагерра (TLAP, DTLAP) и Ле¬ жандра (TLEP, DTLEP). Область [df,dr] изменения переменной t в зависимости от используемых ортого¬ нальных полиномов имеет следующий вид: [—1, 1 ] — для полиномов Чебышева и Лежандра; [О, 1] — для смещенных полиномов Чебышева; [— d, d] — для полиномов Эрмита (здесь 0 < d < °°); [О, d] — для полиномов Лагерра (0 <d <°°). Линейное преобразование t= Ах + В, выражающее аргумент t заданного разло¬ жения через аргумент х результирующего полинома, преобразует область изменения [df,dr] переменной t в область изменения [xz,xr] переменной х. Коэффициенты А и В линейного преобразования связаны с границами областей изменения переменных t и хследующими соотношениями: А = (dr -d,) / (xr -xf); В = (df xr — dr Xf} / (xr - xf ) или Xf = (df — В)/А; xr = (dr -B]/A. Таким образом, данные подпрограммы по заданным коэффициентам с2, . . . . . . , сп разложения функции по ортогональным полиномам и заданным коэффициентам А и В линейного преобразования вычисляют коэффициенты р2,...,рп полинома, удовлетворяющего уравнению £ = £ C,.fl;_,Ux+e). 7 = 1 7 = 1 Вычисления коэффициентов Р; по заданным коэффициентам cz основано на применении рекуррентных соотношений для соответствующих ортогональных полино¬ мов (3.28-3.32). Если используется линейная комбинация полиномов Чебышева для аппроксима¬ ции некоторой функции, то коэффициенты с-{ и коэффициенты линейного преобразо¬ вания А и В могут быть вычислены подпрограммой АРСН (DAPCH). 194
Обращение к подпрограммам имеет соответственно вид: CALL < (7/ия/7/7 > (А, В, POL, N, С, WORK) <имя пп> — имя соответствующей подпрограммы; А — коэффициент при аргументе х заданного линейного преобразования (точность обычная или удвоенная); В — свободный член заданного линейного преобразования (точность обычная или удвоенная); POL — массив коэффициентов результирующего полинома (точность обычная или удвоенная); коэффициенты упорядочены по возрастанию степеней х; N — размерность векторов коэффициентов заданного разложения и результи¬ рующего полинома (длина массивов POL и С); если N<1, то происходит выход из подпрограммы без вычислений; С — массив коэффициентов заданного разложения, упорядоченных по возрастанию степени полиномов (точность обычная или удвоенная) ; WORK — рабочий массив длиной 2N обычной или удвоенной точности. Например: CALL TCNP (А, В, POL, N, С, WORK). Массив POL может совпадать с массивом С. Если массив С не совпадает с POL, то он в процессе вычислений не портится. 3.15. ПЕРЕЧЕНЬ ПОДПРОГРАММ РАЗМЕЩЕНИЕ МАТРИЦ В ПАМЯТИ Копирование матрицы (MCPY) 113 Представление строки матрицы в виде вектора (RCPY) 114 Представление столбца матрицы в виде вектора (CCPY) 114 Представление диагонали матрицы в виде вектора (DCPY) 114 Выбор подматрицы из заданной матрицы (XCPY) 114 Изменение способа хранения матрицы (MSTR) 115 Вычисление векторного индекса элемента матрицы, расположенной в памяти в век¬ торной форме (LOC) 115 Преобразование элементов матрицы из обычной точности в двойную или из двойной точности в обычную (CONVT) 116 Преобразование формы размещения матрицы данных из двумерной в векторную и наоборот (ARRAY) 116 ОПЕРАЦИИ С МАТРИЦАМИ Сложение матриц общего вида (GMADD) 117 Вычитание матриц общего вида (GMSUB) 117 Произведение двух матриц общего вида (GMPRD, DGMPRD) 117 Транспонирование матрицы общего вида (GMTRA, DGMTRA) 118 Умножение транспонированной матрицы на другую матрицу общего вида (GTPRD, DGTPRD) 118 Сложение двух матриц (MADD) 118 Вычитание двух матриц (MSUB) 118 Умножение двух матриц (MPRD) 119 Транспонирование матрицы (MTRA) 119 Умножение транспонированной матрицы на другую матрицу (TPRD) 120 Умножение слева матрицы на транспонированную (МАТА) 120 Сложение каждого элемента матрицы со скаляром (SADD)
Вычитание скаляра из каждого элемента матрицы (SSUB) 120 Умножение матрицы на скаляр (SMPY) 121 Деление матрицы на скаляр (SDIV) 121 Замена каждого элемента матрицы на заданный скаляр (SCLA) 121 Замена диагональных элементов матрицы заданным скаляром (DCLA) 121 Сложение строки одной матрицы со строкой другой матрицы (RADD) 121 Сложение столбца одной матрицы со столбцом другой матрицы (CADD) . . 122 Сложение строки матрицы с другой строкой, умноженной на скаляр (SRMA) 122 Сложение столбца матрицы с другим столбцом, умноженным на скаляр (SCMA) 123 Перестановка двух строк матрицы (RINT) 123 Перестановка двух столбцов матрицы (CINT) 124 Суммирование элементов в каждой строке матрицы (RSUM) 124 Суммирование элементов в каждом столбце матрицы (CSUM) 124 Табулирование строк матрицы по ключу (RTAB) 124 Табулирование столбцов матрицы по ключу (СТАВ) 125 Сортировка строк матрицы (RSRT) 126 Сортировка столбцов матрицы (CSRT) 126 Разбиение матрицы на две по строке (RCUT) 126 Разбиение матрицы на две по столбцу (CCUT) 127 Объединение двух матриц с одинаковым числом столбцов в одну матрицу (RTIE) 127 Объединение двух матриц с одинаковым числом строк в одну матрицу (CTIE) .... 127 Перестановка строк или столбцов матрицы (MPRC, DMPRC) 128 Преобразование матрицы с помощью функции (MFUN) 128 Вычисление обратной величины элемента (RECP) 129 ОБРАЩЕНИЕ МАТРИЦ, СИСТЕМЕ! АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ Обращение матрицы (MlNV, DMINV) 129 Обращение симметричной положительно определенной матрицы (SINV, DSINV) . . . 129 Решение системы линейных алгебраических уравнений методом исключения (SIMQ, DSIMQ) 131 Решение системы линейных уравнений общего вида с несколькими правыми частя¬ ми методом Гаусса (GELG, DGELG) 131 Решение системы линейных уравнений с итерационным уточнением (RSLMC) 132 Разложение невырожденной матрицы в произведение двух треугольных (FACTR) 133 Разложение матрицы на множители и определение ранга (MFGR, DMFGR) . 135 Решение системы линейных уравнений с симметричной матрицей коэффициентов (GELS, DGELS) 138 Решение системы линейных уравнений с ленточной матрицей коэффициентов (GELB, DGELB) 139 Деление матрицы на треугольную (MTDS, DMTDS) 139 Решение системы линейных уравнений с симметричной положительно полуопреде- ленной матрицей (MLSS, DMLSS) 140 Разложение на множители симметричной положительно определенной ленточной матрицы (МСНВ, DMCHB) 142 Разложение на множители и определение ранга симметричной положительно полу- определенной матрицы (MFSS, DMFSS) 144 Разложение на множители симметричной положительно определенной матрицы (MFSD, DMFSD) 146 Решение линейной алгебраической системы уравнений методом наименьших квад¬ ратов (LLSQ, DLLSQ) 147 196
СО Б С I В t: r? Н Lie 3 J AH t. Н й Н, С С» ЬС ! 3 и ;•■» • ■ ;.J с о Г. :< 3 »•’ Вычисление собственных значений и собственных векторов действительной симмет¬ ричной матрицы (EIGEN, DEIGEN) 150 Вычисление собственных значений и собственных векторов вещественной несим¬ метричной матрицы вида В”1 A (NROOT, DNROOT) 152 Вычисление собственных значений вещественной верхней почти треугольной мат¬ рицы (ATEIG) 153 Приведение вещественной матрицы к верхней почти треугольной форме (HSBG) 154 ВВОД Й В ". > В i, Мг’-. У ГЧ'? .... Ввод с перфокарт в память матрицы общего вида, симметричной или диагональной (MATIN, DMATIN) 156 Печать матрицы общего вида, симметричной или диагональной (MXOUT, DMXOUT) 157 ЧC.CJ:Е! iH'vir ДИ РЕН;.Д;Г /а и. <г Ф _• г,r. ! У Дифференцирование функции, заданной таблицей значений в неравноотстоящих точках (DGT3, DDGT3) 158 Дифференцирование функции, заданной таблицей значений в равноотстоящих точ¬ ках, по формуле Лагранжа с тремя узлами (DET3, DDET3) 159 Дифференцирование функции, заданной таблицей значений в равноотстоящих точ¬ ках по формуле Лагранжа с пятью узлами (DET5, DDET5) 159 Дифференцирование функции в центре интервала методом экстраполяции Ричард¬ сона и Ромберга (DCAR, DDCAR) 160 Дифференцирование функции на границе интервала методом экстраполяции Ридард- сона и Ромберга (DBAR, DDBAR) 161 4hCJ it nr-LJt ИН ' L I’Ahr Ot-A n 4 in.. ,/i?! Интегрирование функции, заданной таблично в неравноотстоящих точках, по пра¬ вилу трапеций (QTFG, DQTFG) 162 Интегрирование функции, заданной таблично в равноотстоящих точках, по правилу трапеций (QTFE, DQTFE) 162 Интегрирование функции, заданной таблицей значений в равноотстоящих точках, по правилу Ньютона—Котеса (QSF, DQSF) 163 Интегрирование функции, заданной таблицей значений самой функции и ее первой производной в неравноотстоящих точках, по правилу Эрмита первого порядка (QHFG, DQHFG) 163 Интегрирование функции, заданной таблицей значений самой функции и ее первой производной в равноотстоящих точках, по правилу Эрмита первого порядка (QHFE, DQHFE) ' 164 Интегрирование функции по правилу трапеций с экстраполяцией по методу Ром¬ берга (QATR, DQATR) 165 Интегрирование функции по квадратурным формулам Гаусса (QG2, QG3, QG4, QG5, QG6, QG7, QG8, QG9, QG10, DQG4, DQG8, DQG12, DQG16, DQG24, DQG32) 166 Вычисление интервала $e~xf (x)dx для заданной функции f (х) по квадратурным 0 формулам Гаусса —Лагерра (QL2, QL3, QL4, QL5, QL6, QL7, QL8, QL9, QL10, DQL4, DQL8, DQL12, DQL16, DQL24, DQL32) 166 197
°о 2 Вычисление интеграла J е~х f (х) dx для заданной функции f (х) по квадратурным формулам Гаусса-Эрмита (QH2, QH3, QH4, QH5, QH6, QH7, QH8, QH9, QH10, DQH8, DQH16, DQH24, DQH32, DQH48, DQH64) 167 Вычисление интеграла J е~* f (х) lyfxdx для заданной функции f (х) по присоеди- — оо ненным квадратурным формулам Гаусса —Лагерра (QA2, QA3, QA4, QA5, QA6, QA7, QA8, QA9, QA10, DQA4, DQA8, DQA12, DQA16, DQA24, DQA32) 168 ИНТЕРПОЛИРОВАНИЕ ФУНКЦИЙ Интерполирование функции с помощью интерполяционного процесса Эйткена — Лагранжа (ALI, DALI) 168 Интерполирование функции с помощью интерполяционного процесса Эйткена — Эрмита (AHI, DAHI) 170 Интерполирование функции с помощью непрерывной дроби (ACFI, DACFI) 171 Выборка из таблицы общего вида (ATSG, DATSG) 173 Выборка таблицы из таблицы с монотонными значениями аргумента (ATSM, DATSM) 173 Выборка таблицы из таблицы с равноотстоящими значениями аргумента (ATSE, DATSE) 174 СГЛАЖИВАНИЕ ФУНКЦИЙ Сглаживание функции, заданной таблицей значений в неравноотстоящих точках, с помощью многочлена первой степени, построенного по трем последовательным точкам методом наименьших квадратов (SG13, DSG13) 174 Сглаживание функции, заданной таблицей значений в равноотстоящих точках, с помощью многочлена первой степени, построенного по трем последовательным точкам методом наименьших квадратов (SE13, DSE13) 176 Сглаживание функции, заданной таблицей значений в равноотстоящих точках, с помощью многочлена первой степени, построенного по пяти последовательным точкам методом наименьших квадратов (SE15, DSE15) 176 Сглаживание функции, заданной таблицей значений в равноотстоящих точках, с помощью многочлена третьей степени, построенного по пяти последовательным точкам методом наименьших квадратов (SE35, DSE35) 177 АППРОКСИМАЦИЯ ФУНКЦИЙ Составление системы нормальных уравнений при аппроксимации дискретной функ¬ ции линейной комбинацией функций по методу наименьших квадратов (APLL, DAPLL) 178 Составление системы нормальных уравнений при аппроксимации дискретной функ¬ ции по методу наименьших квадратов с использованием в качестве базисных функ¬ ций многочленов Чебышева (АРСН, DAPCH) 180 Решение системы нормальных уравнений, возникающей при наилучшей в смысле метода наименьших квадратов аппроксимации заданной дискретной функции линейной комбинацией функций (APFS, DAPFS) 181 Аппроксимация заданной дискретной функции рациональной функцией на основе метода наименьших квадратов (ARAT, DARAT) 184 Линейная чебышевская аппроксимация заданной дискретной функции линейной 198
комбинацией заданных непрерывных функций (АРММ, DAPMM) 186 АНАЛИЗ ФУРЬЕ Вычисление коэффициентов Фурье периодической функции (FORIF) 188 Вычисление коэффициентов Фурье периодической функции, заданной таблицей значений (FORIT) 189 Комплексный трехмерный анализ Фурье (HARM, DHARM) 189 Одномерный действительный анализ Фурье (RHARM, DRHARM) 190 ОРТОГОНАЛЬНЫЕ ПОЛИНОМЫ ЧЕБЫШЕВА, ЗРМИТА, ЛАГЕРРА И ЛЕЖАНДРА Вычисление значений полиномов Чебышева (CNP, DCNP) 191 Вычисление значений смещенных полиномов Чебышева (CSP, DCSP) 191 Вычисление значений полиномов Эрмита (HEP, DHEP) 191 Вычисление значений полиномов Лагерра (LAP, DLAP) 191 Вычисление значений полиномов Лежандра (LEP, DLEP) 191 Вычисление значений функции, разложенной в ряд по полиномам Чебышева (CNPS, DCNPS) 192 Вычисление значения функции, разложенной в ряд по смещенным полиномам Чебы¬ шева (CSPS, DCSPS) 192 Вычисление значений функции, разложенной в ряд по полиномам Эрмита (HEPS, DHEPS) 192 Вычисление значения функции, разложенной в ряд по полиномам Лагерра (LAPS, DLAPS) 192 Вычисление значения функции, разложенной в ряд по полиномам Лежандра (LEPS, DLEPS) 192 Преобразование разложения функции по полиномам Чебышева в полином (TCNP, DTCNP) 194 Преобразование разложения функции по смещенным полиномам Чебышева в поли¬ ном (TCSP, DTCSP) 194 Преобразование разложения функции по полиномам Эрмита в полином (ТНЕР, DTHEP) 194 Преобразование разложения функции по полиномам Лагерра в полином (TLAP, DTLAP) 194 Преобразование разложения функции по полиномам Лежандра в полином (TLEP, DTLEP) 194
СПИСОК ЛИТЕРАТУРЫ 1. Бахвалов Н. С. Численные методы. — М.: Наука, 1975. — 631 с. 2. Березин И. С., Жидков Н. П. Методы вычислений. — М.: Наука, 1966. — Т. 1. — 632 с. 3. Безбородов Ю. М. Индивидуальная отладка программ. — М.: Наука, 1982. — 192 с. 4. Бухтияров А. М., Фролов Г. Д., Олюнин В. Ю. Сборник задач по программированию на алгоритмических языках. — М.: Наука, 1974. — 240 с. 5. Бухтияров А. М., Малькова Ю. П., Фролов Г. Д. Практикум по программированию на Фортране. — М.: Наука, 1979. — 304 с. 6. Воеводин В. В. Вычислительные основы линейной алгебры. — М.: Наука, 1977. — 303 с. 7. ГрундФ. Программирование на языке Фортран IV/Пер. с нем. — М.: Мир, 1976. — 184 с. 8. ГутерР. С., Овчинский Б. В. Элементы численного анализа и математической обработки результатов опыта. — М.: Наука, 1970. — 432 с. 9. Демидович Б. П., Марон И. А. Основы вычислительной математики. — М.: Наука, 1970. — 664 с. 10. Дробушевич Г. А. Программирование на Фортране. — Минск.: БГУ имени В. И. Ленина, 1976.- 272 с. 11. Джермейн К. Программирование на IBM/360 / Пер. с англ.; Под ред. В. С. Штаркмана. — М.: Мир, 1978. - 870 с. 12. Жижикашвили Л. В. Некоторые вопросы многомерного гармонического анализа. — Тби¬ лиси: Тбилисский университет, 1983. — 114 с. 13. Жук В. В., Натансон Г. И. Тригонометрические ряды Фурье и элементы теории аппрокси¬ мации. — Л.: ЛГУ, 1983. — 188 с. 14. Звенигородский Г. А. Первые уроки программирования. — М.: Наука, 1985. — 208 с. 15. Йодан Э. Структурное проектирование и конструирование программ / Пер. с англ. — М.: Мир, 1979. - 415 с. 16. Калиткин Н. Н. Численные методы. — М.: Наука, 1978. — 512 с. 17. Карпов В. Я. Алгоритмический язык Фортран. — М.: Наука, 1976. — 192 с. 18. Катцан Г. Язык Фортран 77 / Пер. с англ. — М.: Мир, 1982. — 208 с. 19. Королев Л. Н. Структуры ЭВМ и их математическое обеспечение. — М.: Наука, 1978. — 352 с. 20. Копченова Н. В., Марон И. А. Вычислительная математика в примерах и задачах. — М.: Наука, 1972. - 368 с. 21. Крылов В. И., Бобков В. В., Монастырный П. Н. Вычислительные методы. — М.: Наука, 1976.-Т. 1. — 304 с. 22. Лоусон Ч., Хенсон Р. Численное решение задач метода наименьших квадратов/Пер. с англ. — М.: Наука, 1986. - 230 с. 23. Лозовик М. С., Мишурная М. В., Поснов Н. Н. Программирование и решение прикладных задач на ЭВМ. — Минск: БГУ имени В. И. Ленина, 1980. — 224 с. 24. Ламуатье Ж. П. Упражнения по программированию на Фортране IV/Пер. с фр. — М.: Мир, 1978.- 162 с. 25. Математическое обеспечение ЕС ЭВМ. Выпуск l/Под ред. Т. И. Пыльцовой, Н. Д. Соколо¬ вой. — Минск.: Институт математики АН БССР, 1973. — 226 с. 26. Математическое обеспечение ЕС ЭВМ. Выпуск 3/Под ред. С. П. Ярошевской, Н. Д. Соко¬ ловой. — Минск: Институт математики АН БССР, 1973. — 239 с. 27. Математическое обеспечение ЕС ЭВМ. Выпуск 4/ Под ред. Н. С. Жаврид, В. Н. Кузнецовой, П. В. Ходыко. — Минск: Институт математики АН БССР, 1974. — 281 с, 28. Саульев В. К. Прикладная и вычислительная математика. — М.: МАИ, 1971. — 201 с. 29. Сборник научных программ на Фортране. Выпуск 2 / Пер. с англ.; Под ред. С. Я. Вилен¬ кина. — М.: Статистика, 1974. — 224 с. 200
30. Салтыков А. И., Макаренко Г. И. Программирование на языке Фортран. — М.: Наука, 1976.- 255 с. 31. Средства отладки программ в ОС ЕС ЭВМ: Справочное пособие/В. И. Ерофеев, Ю. П. Пер- шиков, А. П. Соколов и др. — М.: Статистика, 1979. — 245 с. 32. Суэтин П. К. Классические ортогональные многочлены. — М.: Наука, 1979. — 415 с. 33. Троицкий В. А., Иванова И. М. Методы вычислительной математики. — Л.: ЛПИ, 1975.— Т. 1.-95 с. 34. Уилкинсон Дж. X. Алгебраическая проблема собственных значений / Пер. с англ. — М.: Наука, 1970. - 564 с. 35. Уилкинсон Дж. X., Райнш К. Справочник алгоритмов на языке Алгол. Линейная алгебра: Пер. с англ.; Под ред. Ю. И. Топчеева. — М.: Машиностроение, 1976. — 390 с. 36. Фортран ЕС ЭВМ/3. К. Брич, Д. В. Капилевич, С. Ю. Котик, В. И. Цагельский. — М.: Ста¬ тистика, 1978. — 264 с. 37. Фаддеев Д. К., Фаддеева В. Н. Вычислительные методы линейной алгебры. — М.: Наука, 1980. - 736 с. 38. Фридман Ф., Коффман Э. Решение задач и структурное программирование на Фортране/ Пер. с англ. В. Б. Соломоденко и В. К. Медведева. — М.: Машиностроение, 1983. — 485 с. 39. Хемминг Р. В. Численные методы. — М.: Наука, 1972. — 400 с. 40. Хьюз Дж., Мичтом Дж. Структурный подход к программированию / Пер. с англ. — М.: Мир, 1980. - 280 с. 41. Шуп Т. Решение инженерных задач на ЭВМ / Пер. с англ. — М.: Мир, 1982. — 238 с. 42. Хьюз Ч., Пфлигер Ч., Роуз Л. Методы программирования. Курс на основе Фортрана / Пер. с англ. — М.: Мир, 1981. — 336 с.
ОГЛАВЛЕНИЕ Предисловие 3 ГЛАВА ПЕРВАЯ. ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА И ПРИМЕРЫ ИХ ИСПОЛЬЗОВА¬ НИЯ 4 1.1. Основные символы — 1.2. Константы 5 1.3. Переменные 6 1.4. Массивы 7 1.5. Встроенные функции 8 1.6. Выражения 12 1.7. Типы и длины результатов операций 13 1.8. Основные понятия. Структура программы 14 1.9. Классификация операторов 15 1.10. Синтаксические диаграммы 16 1.11. Оператор неявного описания типа 17 1.12. Операторы явного описания типа 18 1.13. Оператор описания массивов 19 1.14. Оператор задания начальных значений 20 1.15. Операторы присваивания 21 1.16. Операторы перехода 22 1.17. Условные операторы 23 1.18. Оператор цикла 24 1.19. Вспомогательные операторы управления 25 1.20. Оператор эквивалентности 26 1.21. Оператор описания общих областей 27 1.22. Операторы ввода —вывода 28 1.23. Взаимосвязь операторов DEFINE FILE и DD 29 1.24. Операторы ввода —вывода последовательного доступа 30 1.25. Спецификации форматов 31 1.26. Вид на бланке вводимых данных при форматном вводе 32 1.27. Пример использования оператора NAMELIST 33 1.28. Оператор-функция 34 1.29. Подпрограмма-функция. Подпрограмма-процедура 35 1.30. Операторы, связанные с использованием подпрограмм (оператор обращения к под¬ программе-процедуре, оператор описания внешних имен) 36 1.31. Операторы возврата из подпрограммы 37 1.32. Пример использования подпрограммы-функции и подпрограммы-процедуры. Запись программы на бланке 38 1.33. Оператор описания дополнительной точки входа в подпрограмму 42 1.34. Программа задания начальных значений (инициализация) 43 1.35. Операторы отладки 44 1.36. Пример использования операторов отладки 45 1.37. Элементы структурного программирования на языке Фортран 46 1.38. Задание на компиляцию, редактирование и выполнение программы на языке Фортран 48 1.39. Некоторые системные коды аварийного завершения (прерывания) задач 49 ГЛАВА ВТОРАЯ. СРЕДСТВА ОТЛАДКИ ПРОГРАММ И ЛОКАЛИЗАЦИЯ ОШИБОК 51 2.1. Отладка программ, написанных на языке Фортран — 202
2.2. Описание упрощенной схемы листинга завершенного задания 53 2.3. Описание листинга завершенного задания с получением верного решения задачи 56 2.4. Примеры листингов с ошибками в операторах языка управления заданиями 64 2.5. Листинги с синтаксическими ошибками 66 2.6. Листинги с различными типичными ошибками, допускаемыми на шаге редактирования и выполнения 79 2.7. Диагностические сообщения об ошибках на шаге компиляции программы 102 2.8. Диагностические сообщения об ошибках на шаге выполнения программы 103 ГЛАВА ТРЕТЬЯ. РАБОТА С ПАКЕТОМ ПРИКЛАДНЫХ ПОДПРОГРАММ СИСТЕМЫ ПРОГРАММИРОВАНИЯ ФОРТРАН 107 3.1. Общие сведения о пакете и порядок его использования . — 3.2. Некоторые особенности использования матричных подпрограмм 112 3.3. Размещение матриц в памяти 113 3.4. Операции с матрицами 117 3.5. Обращение матриц, системы алгебраических уравнений и родственные темы 129 3.6. Собственные значения, собственные векторы и родственные темы 150 3.7. Ввод и вывод матриц 157 3.8. Численное дифференцирование функций 158 3.9. Численное интегрирование функций 162 3.10. Интерполирование функций 168 3.11. Сглаживание функций 174 3.1 2. Аппроксимация функций 178 3.13. Анализ Фурье 188 3.14. Ортогональные полиномы Чебышева, Эрмита, Лагерра и Лежандра 191 3.15. Перечень подпрограмм igg Список литературы 200 Оглавление 202
Программирование, отладка и решение задач на ЭВМ единой серии. П78 Язык Фортран: Учеб, пособие для вузов / И. А. Кудряшов, Н. X. Кушнер, Л. В. Петрова, Н. А. Силов; Под ред. И. А. Кудряшова. — Л.: Энергоатом- издат, Ленингр. отд-ние, 1988. — 208 с., ил. — ISBN 5-283-04381-9 Изложены в компактной форме основные понятия и конструкции языка Фортран, сопровождающиеся примерами и синтаксическими диаграммами. Рассмотрены основ¬ ные приемы и методы отладки программ, отладочные средства языка Фортран и реко¬ мендации по их использованию для локализации ошибок в исходной программе. Приме¬ нение и действие операторов отладки также иллюстрируется примерами. Описываются типичные ситуации, возникающие при выполнении заданий на машине, и приводятся образцы получаемых листингов. Приводятся сведения по использованию пакета при¬ кладных программ, к которым пользователю ЭВМ приходится наиболее часто обра¬ щаться при решении широкого круга задач. Для студентов вузов и специалистов, изучающих язык Фортран и использующих его при решении задач на ЭВМ. 2405000000-104 П ■— 268-88 ББК 32.973 051 (01)-88
Учебное пособие КУДРЯШОВ ИВАН АЛЕКСЕЕВИЧ КУШНЕР НИНЕЛЬ ХАИМОВНА ПЕТРОВА ЛЮДМИЛА ВЯЧЕСЛАВОВНА СИЛОВ НИКОЛАЙ АЛЕКСАНДРОВИЧ ПРОГРАММИРОВАНИЕ, ОТЛАДКА И РЕШЕНИЕ ЗАДАЧ НА ЭВМ ЕДИНОЙ СЕРИИ ЯЗЫК ФОРТРАН Редактор С. П. Левкович Художник обложки Г. В. Смирнов Художественный редактор Т. Ю. Теплицкая Технический редактор А. Г. Рябкина Корректор Е. Н. Ульева ИБ № 1827 Подписано в печать с оригинала-макета 08.12.87. М-23370. Формат 70 X ЮО^и- Бумага книжно¬ журнальная. Гарнитура ’’Универе”. Офсетная печать. Усл. печ. л. 16,77- Усл. кр.-отт. 33,86. Уч.-изд. л. 19,7 . Тираж 90000 экз. Заказ 1168. Цена 90 к. Энергоатомиздат. Ленинградское отделение. 191065 Ленинград, Д-65, Марсово поле, 1. Ордена Октябрьской Революции, ордена Трудового Красного Знамени Ленинградское производ¬ ственно-техническое объединение ’’Печатный Двор” имени А. М. Горького Союзполиграфпрома при Государственном комитете СССР по делам издательств, полиграфии и книжной торговли. 197136 Ленинград, П-136, Чкаловский пр., 15.
ВНИМАНИЮ ЧИТАТЕЛЕЙ! Энергоатомиздат готовит к изданию в 1989 году: Вершинин О. Е. Компьютеры в системах управления и контроля. — 14л.: ил. — ISBN 5-283-04430-0 (В обл.). Ориентировочная цена 75 к. Рассмотрены структура, организация, система команд и основные области применения мини- и микрокалькуляторов, входящих в систему малых ЭВМ (СМ ЭВМ) . Описаны общие свойства, характерные для всех моделей семейства, и указаны главные черты, специфичные для отдельных модификаций. Большое внимание уделено особенностям применения СМ ЭВМ в управлении, в част¬ ности, рассмотрены выборочные методы контроля продукции при массовом производстве, методы статистических испытаний надежности и др. Для специалистов различных областей желающих использовать компьютеры в своей профес¬ сиональной деятельности, может быть полезна для студентов вузов. Грушвицкий Р. И., Мурсаев А. X., Смолов В. Б. Аналого-цифровые периферийные устройства микропроцессорных систем. — 9 л.: ил. — ISBN 5-283-04450-5 (В обл.). Ориентировочная цена 50 к. Систематизированы вопросы обработки аналоговой информации в микропроцессорных си¬ стемах. Рассмотрены заимодействие процессора с периферийным аналого-цифровыми блоками и варианты решения типовых задач обработки аналоговых сигналов. Особое внимание уделяется вопросам повышения точности обработки данных, оптимизации распределения алгоритмов обра¬ ботки между центральным процессором и периферийными блоками, унификации структур и схемо¬ технических решений. Для инженерно-технических работников, связанных с проектированием средств обработки информации. Данилов Л. В., Матханов П. Н., Филиппов Е. С. Теория нелинейных электрических цепей. — 22 л.: ил. — ISBN 5-283-04433-5 (В пер.). Ориентировочная цена 1 р. 70 к. Излагаются основы теории нелинейных электрических цепей с учетом современных достижений. Большое внимание уделено перспективным и интенсивно развивающимся разделам теории, связан¬ ным с проблемами проектирования электротехнических устройств и применением современной технологической базы. Изложены качественные вопросы теории нелинейных цепей, методы синтеза нелинейных цепей, современные методы анализа нелинейных цепей. Для инженерно-технических работников, студентов и аспирантов электротехнических и смеж¬ ных специальностей.
ЭН ЕРГОАТОМИЗДAT ВНИМАНИЮ ЧИТАТЕЛЕЙ! Энергоатомиздат готовит к изданию в 1989 году: Каценбоген М. С., Муттер В. М. Основы телеинформатики. — 20 л.: ил. — ISBN 5-283-04452-1 (В пер.). Ориентировочная цена 1 р. 30 к. Дан математический аппарат, необходимый для синтеза и расчета современных телеинформа- ционных систем; теоретические основы передачи информации, методы обеспечения помехоустой¬ чивости и синтеза цифровых устройств и систем с контролем ошибок. Предназначена для инженерно-технических работников, занимающихся разработкой, проекти¬ рованием и применением телеинформационных систем, может быть полезна студентам вузов. Методы электрических измерений: Учебное пособие для вузов / Л. Г. Журавин, М. А. Миро¬ ненко, Е. И. Семенов, Э. И. Цветков. Под ред. Э. И. Цветкова. — 19 л.: ил. — ISBN 5-283-4462-9 (В пер.). Ориентировочная цена 95 к. В книге рассмотрены современные методы электрических измерений на основе обобщения сведений об измерительных преобразователях: аналоговых, аналого-цифровых, цифровых и цифро- аналоговых. Даны общие сведения об уравнении измерений и погрешностей результатов измерений, проведена классификация и последовательное описание типовых измерительных преобразований, а также основные методы повышения точности и помехоустойчивости измерений. Приведены основ¬ ные сведения о метрологическом обеспечении электрических измерений. Для студентов вузов. Чернявский Е. А., Недосекин Д. Д., Алексеев В. В. Измерительно-вычислительные средства автоматизации производственных процессов. Учебное пособие для вузов. — 22 л.: ил. — ISBN 5-283-04453-Х (В пер.). Ориентировочная цена 1 р. 10 к. Рассмотрены принципы построения и информационное обеспечение измерительно-вычислитель¬ ных средств, которые стали неотъемлемой частью современных средств измерений, предназначенных в первую очередь для автоматизированных систем управления технологическими процессами (АСУ ТП), гибких производственных систем (ГПС), систем автоматизации проектирования (САПР) и др. Для студентов вузов, обучающихся по специальности "Информационно-измерительная техника", может быть полезна студентам смежных специальностей.
ЛЕНИНГРАДСКИЙ КНИЖНЫЙ МАГАЗИН "ЭНЕРГИЯ" - ОПОРНЫЙ ПУНКТ ЭНЕРГОАТОМИЗДАТА. Это значит, что здесь самый широкий ассортимент научной, учебной, производ¬ ственной и справочной литературы по всем разделам энергетики: теплотехнике и теплоэнергетике, гидротехнике и гидроэнергетике, электроэнергетике и промышленной энергетике, электротехнике и промышленной электронике, информационно-измерительной технике, ядерной энергетике, технологии и физике. Магазин принимает заказы на книги, намеченные к выпуску и имеющиеся в наличии. СПЕЦИАЛИСТЫ ЭНЕРГЕТИЧЕСКОГО ПРОФИЛЯ! Указав адрес организации или свой домашний адрес, вы будете систематически получать все рекламные материалы по интересующей вас тематике и бланки заказа книг Энергоатомиздата. Адрес магазина "Энергия": 196066 Ленинград, Московский пр., 189. Пользуйтесь услугами магазина — опорного пункта ЭНЕРГОАТОМИЗДАТА!
90 к. ЭНЕРГОАТОМИЗДАТ