Текст
                    
В. П. Дьяконов
СПРАВОЧНИК
по алгоритмам
и программам
на языке бейсик
для персональных
ЭВМ W

в. п. дьяконов СПРАВОЧНИК по алгоритмам и программам на языке бейсик для персональных ЭВМ МОСКВА «НАУКА» ГЛАВНАЯ РЕДАКЦИЯ ФИЗИКО-МАТЕМАТИЧЕСКОЙ ЛИТЕРАТУРЫ 1989
ББК 22.18 ДЭЗ УДК 519.6(083) Дьяконов В. П. Справочник по алгоритмам и программам на языке бейсик для персональных ЭВМ: Справочник.— М.: Наука. Гл. ред. физ.-мат. лит., 1989.— 240 с.— ISBN 5-02-014530-0. Даны краткие сведения о современных отечественных и зарубежных микроЭВМ индивидуального пользования. Описаны основные версии бейсика, наиболее распространенного языка программирования персональных ЭВМ (ПЭВМ), отечественных микро- и миниЭВМ (Электроника-60, Электроника- ДЗ-28, Искра-226, диалоговых вычислительных комплексов ДВК-1, ДВК-2 и др.). Изложены основы программирования на бейсике. Основное внимание уделено общему математическому, алгоритми- ческому и программному обеспечению расчетов на ПЭВМ. В справочник включена обширная библиотека прикладных программ на бейсике (более 300 программ), обеспечивающих реализацию основ- ных численных методов, вычисление большинства специальных функций и решение ряда практи- ческих задач в различных областях науки и техники. Для инженеров, научно-технических работников и студентов втузов. Библиогр. 43 назв. Рецензент доктор технических наук С. В. Черемных ДЬЯКОНОВ Владимир Павлович СПРАВОЧНИК ПО АЛГОРИТМАМ И ПРОГРАММАМ НА ЯЗЫКЕ БЕЙСИК ДЛЯ ПЕРСОНАЛЬНЫХ ЭВМ Редактор Л. Г. Силкова Художественный редактор Г. М. Коровина Технический редактор С. Я. Шкляр. Корректоры Е. Ю. Рычагова, М. Л. Медведская ИБ № 32350 Подписано к-печати 23.12.88. Т-23076. Формат 70X 100/16. Бумага книжно-журнальная. Гарнитура литературная. Печать офсетная. Усл. печ. л. 19,5. Усл. кр.-отт. 39,33. Уч.-изд. л. 25,16. Допечатка тиража 100 000 экз. Заказ 1274. Цена 1 р. 40 к. Ордена Трудового Красного Знамени издательство «Наука». Главная редакция физико-математической литературы. 117071 Москва В-71, Ленинский проспект, 15. Ленинградская типография № 2 головное предприятие ордена Трудового Красного Знамени Ленинград- ского объединения «Техническая книга» им. Евгении Соколовой Союзполиграфпрома при Государ- ственном комитете СССР по делам издательств, полиграфии и книжной торговли. 198052, Ленинград, Л-52, Измайловский проспект, 29. п 1702070000-021 ло д ----------------- 48-87 053(02)-89 ISBN 5-02-014530-0 © Издательство «Наука». Главная редакция физико-математической литературы, 1987
ОГЛАВЛЕНИЕ Предисловие................................................................. 5 Как пользоваться справочником............................................... 7 Глава 1. Основные характеристики и возможности персональных ЭВМ ... 9 § 1.1. Современные типы персональных ЭВМ и их возможности.............. 9 § 1.2. . Карманные персональные ЭВМ (Pocket Computers).................11 § 1.3. Персональные ЭВМ среднего класса (Home Computers)...............13 § 1.4. Профессиональные ЭВМ и вычислительные микросистемы индивидуаль- s ного пользования . ..............................................16 § 1.5. Периферийное оборудование персональных ЭВМ......................19 Глава 2. Бейсик — основной язык программирования персональных ЭВМ 21 § 2.1. Алфавит и основные операторы языка бейсик ......................21 § 2.2. Модификации языка бейсик........................................27 § 2.3. Арифметические и алгебраические операции, работа в режиме каль- кулятора . . . . *......................................................41 §2.4. Элементарное программирование на языке бейсик................ . 43 § 2.5. Специальные вопросы программирования на языке бейсик............48 § 2.6. Перевод программ с одной версии языка бейсик на другую..........51 Глава 3. Алгоритмы и программы элементарных вычислений 54 § 3.1. Операции с действительными числами 54 § 3.2. Операции и функции с комплексными числами и переменными . • • 56 § ’3.3. Вычисление степенных многочленов и дробно-рациональных функций 61 § 3.4. Вычисление ортогональных многочленов 63 § 3.5. Операции с матрицами 65 § 3.6. Вычисление факториалов и комбинаторика 70 § 3.7. Преобразования координат и векторный анализ 71 Глава 4. Алгоритмы и программы реализации основных численных методов . . . 75 .§ 4.1. Решение систем линейных уравнений 75 § 4.2. Интерполяция и экстраполяция . . ’ 78 § 4.3. Решение нелинейных и трансцендентных уравнений 86 § 4.4. Решение систем нелинейных уравнений 91 § 4.5.. Решение алгебраических уравнений с действительными и комплексными коэффициентами 93 • § 4.6. Поиск экстремумов функций одной и множества переменных 96 § 4.7. Численное дифференцирование и вычисление коэффициентов чувстви- тельности 100 § 4.8. Вычисление определенных интегралов 104 § 4.9. Вычисление определенных интегралов специального вида 108 § 4.10. Решение систем дифференциальных уравнений 111 § 4.11. Гармонический синтез 116 § 4.12. Вычисление собственных значений и векторов матриц 117 Глава 5. Спектральный, статистический, корреляционный и регрессионный анализ 122 §5.1. Спектральный анализ на основе дискретного преобразования Фурье . .122 § 5.2. ‘Специальные виды спектрального анализа............................128 § 5.3. Статистический анализ и подготовка гистограмм......................133 § 5.4. Реализация метода Монте-Карло......................................136 § 5.5. Корреляционный анализ.............................................137 § 5.6. Регрессионный анализ (приближение функций по методу наименьших квадратов)...................................................... 138 § 5.7. Сглаживание данных эксперимента....................................144 1 3
Глава 6. Вычисление специальных функций.................................... 147 § 6.1. Методы вычисления специальных функций...............................147 § 6.2. Интегральные показательные функции................................. 147 § 6.3. Интегральные синус и косинус........................................148 § 6.4. Гамма-функции (включая неполные)....................................149 § 6.5. Функции Бесселя (включая модифицированные)..........................151 § 6.6. Функции Эйри........................................................153 § 6.7. Интегралы Френеля................................................. 153 § 6.8. Эллиптические интегралы.......................г.....................154 § 6.9. Функции Струве, Ангера и Вебера.....................................155 § 6.10. Гипергеометрические функции........................................156 § 6.11. Дилогарифм....................................................... 156 § 6.12. Функции Кельвина...................................................157 §6.13. Функции Дебая и Зиверта............................................157 § 6.14. Интеграл вероятности и родственные ему функции.....................157 § 6.15. Некоторые статистические функции...................................159 Глава 7. Прикладные программы технических и экономических расчетов .... 162 § 7.1. Типовые электротехнические расчеты..................................162 § 7.2. Расчет индуктивных элементов........................................166 § 7.3. Расчет емкостных элементов и конденсаторов..........................171 §7.4. Расчет линий передачи и задержки....................................174 § 7.5. Расчет усилителей...................................................180 § 7.6. Расчет активных фильтров.......................................... 186 § 7.7. Расчет нелинейных и ключевых электронных устройств..................207 § 7.8. Расчеты в механике и термодинамике ................................ 215 § 7.9. Финансово-экономические расчеты.....................................217 Приложение 1. Подготовка к работе системы подготовки программ на базе микроЭВМ Электроника-ДЗ-28 ................................................ 220 Приложение 2. Номера ошибок и их содержание для систем подготовки программ на базе микроЭВМ Электроника-ДЗ-28 ............................... 221 Приложение 3. Подготовка ПЭВМ FX-702P к работе................................ 222 Приложение 4. Номера ошибок и их содержание для ПЭВМ FX-702P . . . 223 Приложение 5. Программная реализация некоторых численных методов частного применения........................................................ 223 § П5.1. Построение полинома по его действительным корням...................223 § П5.2. Обращение матрицы, вычисление определителя и решение систем линей- ных уравнений с разными векторами свободных членов..................... 224 § П5.3. Решение системы линейных уравнений методом отражения........ 225 § П5.4. Решение системы линейных уравнений методом простых итераций . . . 225 § П5.5. Решение системы линейных уравнений методом Зейделя...........226 § П5.6. Решение системы линейных уравнений с переопределенной матрицей . 226 § П5.7. Приближенное вычисление нормального решения системы линейных уравнений с вырожденной матрицей........................................227 § П5.8. Решение системы нелинейных уравнений Методом простых итераций . . 228 § П5.9. Вычисление спектра реакции нелинейной системы с аналитически заданной передаточной характеристикой на гармоническое воздействие . 228 § П5.10 . Регрессия для 16 видов парных зависимостей у(х).................228 § П5.11 . Сплайн-аппроксимация, интерполяция и экстраполяция...............231 § П5.12 . Пакет программ с матричными операторами.........................232 § П5.13 . Приближение функций по Чебышеву.................................234 Список литературы ............................................................ 237 Предметный указатель...........................................................239
ПРЕДИСЛОВИЕ Прогресс в экономике, промышленности, науке и технике, в сфере образования сейчас во многом зависит от массового внедрения вычислительной техники. Не случайно задача повышения «компьютерной грамотности» населения стала государственной • и политической задачей. Ее решение возможно благодаря интенсивному развитию нового поколения вычислительных средств — микроЭВМ индивидуального пользования или персональных ЭВМ (ПЭВМ). Уже сейчас у нас в стране в пользовании находятся многие десятки тысяч таких ЭВМ — от настольных отечественных вычислительных микросистем индивидуального пользо- вания (на базе микроЭВМ Электроника-60, Электроника-ДЗ-28, Электроника-ТЗ-59, Искра-226 и др.) и диалоговых вычислительных комплексов (ДВК-1, ДВК-2, ДВК-3) до зарубежных кар- манных компьютеров (Pocket Computers FX-702P, PC-1211, PC-1500 и др.). Осваивается производство дешевых и массовых домашних компьютеров (Home Computers) типа Агат, Элек- троника-БК-0010 и др. Однако пока даже существующий парк таких ЭВМ используется недостаточно эффективно. Главная причина этого в том, что пользователями ПЭВМ являются в основном непрофессионалы в области вычислительной техники и вычислительной математики. Они слабо знакомы с эксплуатацией ЭВМ, языками и основами их программирования, разнообразными численными методами. Литературы, где все эти вопросы, с учетом специфики персонального использования ПЭВМ, рассматривались бы одновременно, пока практически нет. Многие ПЭВМ поставляются пользователям с весьма краткими (и рассчитанными на профессионалов) описаниями, часто без библиотек прикладных программ. В результате ПЭВМ нередко превращается в «черный ящик» на столе пользователя, таинственные возможности которого остаются нераскрытыми. Справочник ориентирован на отмеченную выше обширную категорию пользователей ПЭВМ. При его подготовке учтена специфика нынешнего этапа применения ПЭВМ в СССР, т. е. исполь- зование ПЭВМ главным образом для автоматизации решения рутинных научно-технических, статистических и экономических задач. Поэтому, а также с учетом ограниченного объема справочника в нем мало внимания уделено игровым задачам, применению ПЭВМ в быту, решению сложных информационных задач (обработка графиков, редактирование текстов и т. д.). Описание таких применений должно быть предметом специальной литературы. По построению справочник похож на ранее изданную книгу автора [10], посвященную расчетам на программируемых микрокалькуляторах (ПМК). Более того, сохранена значи- тельная часть контрольных примеров [10]. Это, по мнению автора, облегчит массовой категории пользователей ПМК освоение новой, гораздо более мощной вычислительной техники — ПЭВМ. В справочнике кратко описаны основные типы отечественных и зарубежных ПЭВМ, их периферийное оборудование и основной язык программирования — бейсик (BASIC) . Рассмотрен ряд типовых версий бейсика, от простых до расширенных, содержащих команды обработки символьных переменных, косвенной адресации и построения графиков. Даны основы програм- мирования на бейсике и перевода программ с одной версии бейсика на другую. Основное вниманием справочнике уделено описанию общего прикладного математического, алгоритмического и программного обеспечения ПЭВМ, рассчитанного прежде всего на научно- технические и статистические расчеты. По сравнению с [10] существенно расширено 5
описание алгоритмов и увеличена сложность решаемых задач. Так, в справочнике описаны универсальные программы для решения систем линейных и дифференциальных уравнений (в том числе с автоматическим выбором шага интегрирования), численного интегрирования с заданной точностью, вычисления всех корней полиномов с действительными и комплексными коэффициентами и т. д. Существенно расширен круг вычисляемых специальных функций. В последней главе дан ряд прикладных программ для решения задач в некоторых конкретных областях науки и техники. Разумеется, эти программы не исчерпывают решения всего многообразия таких задач. При использовании всех возможностей персональных ЭВМ на них можно решать сложные научно-технические задачи, вплоть до проектирования космических аппаратов [29]. Справочник ориентирован на научно-технических работников, инженеров, техников и студентов вузов и техникумов. Поскольку подобное справочное руководство подготовлено впервые, автор отдает себе отчет в том, что книга не лишена недостатков, и с благодарностью примет советы и замечания по ее содержанию. Автор выражает глубокую благодарность рецензенту доктору технических наук, профессору С. В. Черемных, кандидату технических наук, доценту Т. А. Самойловой, Т. А. Калаевой и всем коллегам, оказавшим помощь автору в подготовке программ и рукописи. Пожелания по книге следует направлять по адресу: 117071 Москва В-71, Ленинский просп., 15. Главная редакция физико-математической литера- туры издательства «Наука». В. /7. Дьяконов
КАК ПОЛЬЗОВАТЬСЯ СПРАВОЧНИКОМ 1. Приведенные в справочнике программы даны на версии языка бейсик умеренной слож- ности, применяемой в массовых отечественных системах подготовки программ на базе настольной микроЭВМ Электроника-ДЗ-28. Они* легко переводятся на версии бейсика, применяемые в диалоговых вычислительных_комплексах ДВК-1, ДВК-2 и ДВК-3, микроЭВМ Электроника-60, Искра-226 и др. Для перевода программ рекомендуется изучить материал гл. 2 и описание версии языка бейсик, применяемой в ПЭВМ, которой располагает пользователь. 2. Программы содержат детальный диалог с пользователем, который легко воспринимается при чтении листинга (текста) программы. В первой строке листинга дается подробное наиме- нование программы. Порядок использования программы указывается комментариями, выводи- мыми на экран дисплея. Поэтому в поясняющем тексте подробное описание правил использова- ния каждой программы не приводится. 3. Все программы рассчитаны на вывод результатов вычислений на экран терминала (дисплея) в экспоненциальной форме, как правило, с одним знаком до десятичной точки и девятью — после нее. Для вывода результатов на печать принтером и изменения формата в программу следует включить команды вида PRINT# 1 ... (на место многоточия записываются символы, задающие формат печати). 4. Программы даны в виде распечатки листингов, что исключает возникновение типограф- ских ошибок. Однако после ввода программ в ЭВМ нужно тщательно проверить их как по кон- трольным примерам, так и тестам пользователя, учитывающим специфику решаемых задач и области применения выбранных численных методов. 5. Между буквенными обозначениями в тексте описания и в программе могут быть легко интерпретируемые различия. Например, буква е в программе может обозначаться как Е, строчная буква т — как прописная М и т. д. Эти различия обусловлены тем, что в бейсике используются только прописные латинские (а в комментариях и русские) буквы. В отдельных случаях (но не всегда) эти различия оговорены. Как правило, смысл обозначений поясняется комментариями в программах. 6. Следует помнить, особенно при использовании программ, реализующих итерационные методы, что заданная погрешность вычислений е относится к погрешности метода, но не к при- меняемым исходным формулам! Например, приближенные формулы для инженерного расчета индуктивности или емкости могут иметь погрешность, существенно превосходящую 8. Оценка погрешности приближенных и эмпирических формул в ряде случаев не дается, поскольку она входит в сферу профессиональных познаний пользователя. 7. При проведении важных вычислений рекомендуется внимательно разобраться с алго- ритмом вычислений и применяемой программой. Следует помнить, что скрытые и неожиданно выявляющиеся ошибки могут быть даже в тщательно отлаженных программах, выдержавших испытания контрольными тестами. Лучший путь исключения таких ошибок заключается в применении программ, полностью понятных пользователю. Естественность и простота записи математических выражений и логических условий на бейсике существенно облегчает разбор программ и способствует осмысленному их применению. 7
/ 8. В справочнике описаны полностью законченные программы. Однако, удалив строки программ, содержащие операторы ввода исходных данных и вывода результатов, большинство программ можно использовать в качестве подпрограмм в сложных расчетах. Разумеется, при этом может потребоваться изменение номеров строк и адресов. 9. Материал справочника ориентирован на решение расчетных (математических, инже- нерных и др.) задач общего характера. Поэтому основное внимание уделено алгоритми- ческой ясности программ. В программах по возможности использованы операторы, встре- чающиеся во всех версиях языка программирования бейсик. Применение некоторых опера- торов, например DEF FN, FN, ON и др., сознательно ограничено, так как в ряде версий языка бейсик они отсутствуют и могут быть заменены другими операторами. Эти меры направлены на придание программам большей универсальности и на облегчение перевода программ на другие версии бейсика. 10. Наиболее совершенные версии языка бейсик обладают обширными дополнительными возможностями: обработка текстов, графика, средства создания машинных фильмов, звуко- вые эффекты и т. д. Однако в реализациях этих возможностей у различных версий языка бейсик имеется много принципиальных отличий. Их описание, как отмечалось в предисловии, выводит за рамки данной книги. Однако пользователи ПЭВМ могут легко дополнить описан- ные в справочнике программы выводом графиков, заданием звуковых эффектов и другими возможностями. 11. Математические выражения и формулы в справочнике даны в окончательном виде без выводов. Читатель, желающий подробно разобраться с математическим обоснованием описанных в справочнике алгоритмов и программ может воспользоваться специальной лите- ратурой, включая приведенную в списке литературы справочника.
ГЛАВА 1 ОСНОВНЫЕ ХАРАКТЕРИСТИКИ И ВОЗМОЖНОСТИ ПЕРСОНАЛЬНЫХ ЭВМ § 1.1. Современные типы персональных ЭВМ и их возможности Персональные ЭВМ (ПЭВМ) являются новым перспективным классом вычислитель- ных средств, ориентированных на использо-^1 вание их одним пользователем. Применение персональных ЭВМ обеспечивает децентра- лизацию вычислительных процессов, резкое сокращение стоимости машинного времени, повышение удобства эксплуатации и привлече- ние к работе на ЭВМ обширного круга пользователей, неспециалистов в области вычислительной техники и программирования. Это достигается простотой работы с ПЭВМ, имеющей характер диалога с пользователем. Карманные персональные ЭВМ (класса Pocket Computers) представляют собой сверх- миниатюрные ЭВМ на микросхемах большой степени интеграции (БИС), ориентированные на решение достаточно сложных расчетных и относительно простых информационных задач. Домашние персональные ЭВМ (класса Home Computers) предназначены для решения расчетных и информационных задач средней сложности, прежде всего относящихся к быту: ведение семейного бюджета, сложные и «интеллектуальные» игры (шахматы, посадка космических кораблей на планеты и т. д.), обучение различным дисциплинам, демон- страция компьютерных слайдов, учебные рас- четы и т. д. Профессиональные персональные ЭВМ ориентированы на решение сложных расчет- ных и информационных задач различными профессиональными работниками (матема- тиками, физиками, программистами, эко- номистами и т. д.) в различных, в том числе комфортных, условиях как на работе, так и дома. Основные свойства персональных ЭВМ (ПЭВМу. ПЭВМ должны обладать следующей совокупностью свойств: — ориентацией на эксплуатацию одним пользователем, как правило, неспециалистом в области вычислительной техники; — низкой стоимостью (за рубежом от 50 до 5 000 дол.), обеспечивающей возможность приобретения за счет личных средств поль- зователя либо средств небольших организа- ций и учреждений; — простотой конструкции и высокой надежностью, малыми габаритами и массой, обеспечивающими размещение ПЭВМ на части письменного или рабочего стола; — работой с обширным периферийным оборудованием (см. § 1.5), включающим устройства внешнец памяти, алфавитно- цифровые и графические Печатающие устрой- ств^ ЧРпринтер&О* и др.; — программированием хотя бы на одном языке высокого уровня, например бейсике; — обеспечением общения с пользователем в режиме диалога, в ходе которого ПЭВМ и пользователь обмениваются вопросами и отве- тами на обычном языке (в письменной, а у наиболее совершенных ЭВМ и в устной форме); — ориентацией на решение широкого круга как сугубо вычислительных и расчетных задач, так и информационных. Вычислительные микросистемы индиви- дуального пользования строятся на основе ПЭВМ или настольных микроЭВМ, осна- щенных периферийным оборудованием (как минимум дисплеем, накопителем информации на магнитных дисках или ленте и принтером). Структура вычислительной микросистемы индивидуального пользования дана на рис. 1.1. Отметим назначение ее узлов. Шина данных и адресов представляет собой обычный или плоский многожильный кабель, связывающий узлы системы. Через эту шину ЭВМ обменивается с другими узлами цифровыми данными и адресами, по которым эти данные должны поступать. Центральный процессор (ЦП) — устрой- ство, выполняющее основные логические и арифметические операции. Обычно ЦП ПЭВМ строится на одном или нескольких микро- процессорах (МП) с разрядностью (т. е. числом двоичных разрядов) данных от 4 до 32. В состав ЦП входят также арифметико-логи- ческое устройство управления (УУ) и спе- циальные устройства связи ЦП с периферий- ным оборудованием через общую шину. Клавишный пульт — устройство для ввода данных и программ в ПЭВМ, по внешнему виду напоминающие пульт пишущей машинки. Интерфейс клавиатуры — аппаратурные и программные средства сопряжения ЦП с кла- вишным пультом. Таймер — устройство для формирования временных последовательностей, задающих порядок работы ПЭВМ. 9
Рис. 1.1. Структура вычислительной микросистемы на основе персональной ЭВМ Оперативное запоминающее устройство (ОЗУ) — набор БИС (больших интегральных схем), обеспечивающих хранение и временное запоминание цифровой информации. ОЗУ ПЭВМ обычно содержит отделение для хра- нения информации (одна или несколько стра- ниц), отображаемой дисплеем (ОЗУ дисплея). Постоянное запоминающее устройство (ПЗУ) служит для постоянного хранения микропрограмм выполнения основных опера- ций ПЭВМ на машинно-ориентированном языке. Обычно ПЗУ содержит и программу- интерпретатор (или транслятор) для програм- мирования ПЭВМ на языке высокого уровня, например бейсике. Накопитель на магнитном диске (НМД) — устройство для магнитной записи цифровой информации на носитель в виде диска с ферромагнитным покрытием и считывания ее с диска. НМД дополняет ПЗУ ПЭВМ, причем на нем может храниться информация, вводи- мая пользователем (массивы данных и про- граммы). Контроллер дискдвого накопителя (КНМД) — устройство сопряжения ЦП с НМД и контроля работы НМД. Накопитель на магнитной ленте (НМЛ) — обычный бытовой или специализированный кассетный магнитофон для записи цифровой информации на магнитную ленту. Функции НМЛ аналогичны функциям НМД. Контроллер накопителя на магнитной ленте (КНМЛ) — устройство сопряжения ЦП с НМЛ и контроля его работы. Дисплей — устройство отображения алфа- витно-цифровой и графической информации. Дисплей обеспечивает контроль вводимой информации, выдачу промежуточных и итого- вых результатов работы ПЭВМ, а также контроль информации хода вычислений. Он является основным элементом ПЭВМ, обеспе- чивающим эффективный диалог с пользо- вателем. Принтер — устройство печати алфавитно- цифровой (иногда и графической) инфор- мации. 10 Параллельный интерфейс — аппаратурные и программные средства сопряжения ПЭВМ с периферийным, оборудованием, воспри- нимающим информацию в виде параллельного кода (например, принтером). Акустический модем (AM) устройство двухстороннего обмена информацией между телефонной сетью и ПЭВМ с преобразованием информации в высокочастотные звуковые посылки. AM используется для связи ПЭВМ с вычислительными и информационными центрами. i Последовательный интерфейс — средства сопряжения ПЭВМ с периферийным оборудо- ванием, воспринимающим информацию в виде последовательного кода (например, AM). ч Графопостроитель (ГП) — устройство для построения графиков и рисунков с высо- кой разрешающей способностью (иногда функции ГП выполняет универсальный принтер). Планшет для ввода графической инфор- мации — устройство, обеспечивающее пре- образование координат точек графика в элек- трические сигналы, вводимые в ПЭВМ. Иногда его функции выполняет дисплей, снабженный световым пером-датчиком. Перечисленные узлы полностью входят в состав только наиболее дорогих и сложных ПЭВМ. Более подробные данные о составе ПЭВМ и характеристиках их узлов приведены ниже. Функциональные возможности ПЭВМ. Об- ласти применения ПЭВМ весьма обширны. ПЭВМ могут вести научно-технические, инже- нерные, экономические и статистические рас- четы, облегчают подготовку программ для больших ЭВМ, позволяют решать различные информационные задачи (обработка текстов и графиков, демонстрация подвижных рисунков и иллюстраций к различным дисциплинам, изучаемым пользователем, связь с крупными информационными и вычислительными цент- рами и представление пользователю имею- щихся в них информационных материалов и т. д.). ПЭВМ могут выполнять функции
ЭВМ, управляющих различными приборами: от телевизора, телефона, магнитофона и сти- ральной машины до сложных контрольно- измерительных комплексов и научного обору- дования. В будущем ПЭВМ приведут к рево- люционным изменениям в информационном обеспечении общества и станут столь же при- вычным предметом обихода, как телевизор, радиоприемник или магнитофон. Основные характеристики ПЭВМ: объем памяти ОЗУ и ПЗУ, скорость счета, языки программирования, габариты и масса, состав периферийного оборудования. Объем памяти ОЗУ и ПЗУ измеряется в килобайтах (1 кбайт =1024 байт, 1 байт = = 8 бит, бит — двоичная единица). Простые ПЭВМ имеют объем памяти ПЗУ и ОЗУ 84- 4-16 кбайт. У более сложных объем памяти ОЗУ достигает 1284-512 кбайт, а объем памя- ти ПЗУ за счет внешних носителей наращива- ется до 0,24-20 Мбайт (1 Мбайт» 106 байт). Скорость счета ПЭВМ характеризует число операций в единицу времени. Поскольку видов операций очень много, этот параметр указы- вается редко. Специалисты судят о скорости счета по примененному в ПЭВМ микропроцес- сору и тактовой частоте его работы (от 0,5 до 10 МГц). Пользователей ПЭВМ в первую очередь интересуют функциональные и эксплуатацион- ные возможности ПЭВМ: класс решаемых задач, габариты и масса, состав периферий- ного оборудования. Приведенные ниже дан- ные ориентированы на пользователей ПЭВМ, а не на их разработчиков. § 1.2. Карманные персональные ЭВМ (Pocket Corrtputers) Как отмечалось, карманные ПЭВМ класса Pocket Computers представляют собой сверх- миниатюрные ЭВМ, выполненные на одной или нескольких БИС. Обычно они снабжены жидкокристаллическим мозаичным индикато- тором (дисплеем), позволяющим отображать одну или несколько строк текстовых и цифро- вых данных. Типовые данные ряда ПЭВМ класса Pocket Computers даны в табл. 1.1. В таблицах будут использованы следующие сокращения: КМ — кассетный магнитофон, П — принтер, ГП — графопостроитель, AM — акустический модем, Д — дисплей, ТД — телевизор-дис- плей, ГД — графический дисплей, Т — тай- мер, НМД — накопитель на магнитном диске, НМЛ — накопитель на магнитной ленте, ТП — термопринтер, прочерк (—) —- отсут- ствующий в описании технический параметр. Одна из простейших ПЭВМ этого класса PC-1211 (рис. 1.2) имеет клавишный пульт, обеспечивающий побуквенный набор команд языка бейсик (см. гл. 2) [20]. По своим возможностям эта ПЭВМ сопоставима с про- Характеристики некоторых карманных ПЭВМ класса Pocket Computers Таблица 1.1 Характеристика Тип ПЭВМ РС-1210 РС-1211 PC-1500 FX-702P НР-71В Фирма и страна-изготови- тель Sharp (Япония) Sharp (Япония) Sharp (Япония) Casio (Япония) Hewlett Packard (США) Емкость ПЗУ, кбайт — 8 16 — 64 4-256 Емкость ОЗУ, кбайт 1 2 3,54-16 17,54-16 Максимальное число шагов программы 400 4004-Ю24 — 1680 - Максимальное число пере- менных 40 178 — 226 — Число строк/знаков дисплея 1/24 1/24 1/26 1/20 1/22 Потребляемая мощность, мВт 0,011 0,013 г — 0,01 — Габариты, мм 175X71X15 175X71X15 195X86X22,5 165X82X17 190X98X13 Масса, г 163 170 375 176 340 Периферийные устройства П КМ, П КМ, П, ГП, AM КМ, П КМ, П, ГП, AM, ТД и др. Язык программирования Бейсик Бейсик Бейсик Бейсик Бейсик 11
DEG RUN „ SHARP 900-C=vU*A+B*B):PRINT C* IHj PC-1211 L^-TOCKET COMPUTER CA/BREAK А < > _ [оВД fol Iw| -POWER ГП # Ль У 0 0 0 It 1 J m Tl |shft| LZ. |~р] 30 3 0 3 0 ——i Г——I [7 0 rn Г~д~1 ГП ГП пл пп пл г 3 ГН Hl ] ГП |ёх^ Г+1 Гь [j 0 И ш и по и Гм] Isrcl | ... JRESER ENTER | ЕЕ VABLEKEK? Рис. 1.2. Внешний вид простейшей., ПЭВДЦк л асе a Pocket Computers PC-1211 граммируемым микрокалькулятором высокого класса [10]. Однако,/благодаря программи- рованию на языке бейсик, ПЭВМ PC-1211 обеспечивает проведение вычислений в режиме диалога с пользователем. ПЭВМ FX-702P выполняет функции слож- ного непрограммируемого и программируемого микрокалькуляторов для научных и статисти- ческих расчетов и ПЭВМ класса Pocket Computers с расширенной версией языка бей- сик, содержащей свыше 160 команд. Пульт этой ПЭВМ (рис. 1.3) содержит 65 клавиш [43]. Все клавиши имеют двойное или тройное управление (оно обеспечивается с помощью префиксных клавиш F1 и F2). Наиболее распространенные команды (операторы) бей- сика могут вводиться нажатием всего двух клавиш — префиксной и основной с символом нужной команды. Данные о языке бейсик этой ПЭВМ приведены в § 2.2. ПЭВМ класса Pocket Computers обычно имеют автономное питание от батареек, потребляют ничтожно малую мощность. Питание для ПЭВМ FX-702P осуществляется от двух литиевых дисковых батарей CR 2032 с напряжением 3 В и емкостью 0,16 А-ч, потре- бляемая от них мощность не более 0,01 Вт. При нормальной эксплуатации комплекта батарей хватает на 2 года (240 часов непре- рывной работы). Предусмотрено автомати- ческое выключение ПЭВМ через 8 мин, если на ней не ведется работа. Однако при выключении ОЗУ остается подключенным к источнику питания, что обеспечивает долговременную память программ и данных. В ПЭВМ FX-702P можно вводить до 10 различных программ. Объем памяти этой ПЭВМ составляет 26 переменных (регистров памяти) и 1 680 шагов (каждый оператор бей- сика занимает 1 шаг). Число переменных можно увеличить до 226 путем сокращения числа шагов программы до 80. Это обеспе- чивает формирование одномерных массивов до 200 переменных или двух двумерных массивов 10X10 переменных. Совместно с принтером и бытовым кассетным магнитофоном ПЭВМ Рис. 1.3. Внешний вид ПЭВМ FX-702P (1 —регулятор контраста, 2 — дисплей, 3 — префиксные клавиши, 4 — разъем интерфейса, 5 — клавиши функциональные, 6 — выключатель питания, 7 — клавиша продолжения работы, 8 — клавиша ввода, 9 — цифровые клавиши) 12
FX-702P образует простейшую вычислитель- ную микросистему (рис. 1.4), ориентированную на автоматизацию научных, инженерных, ста- тистических и экономических расчетов умерен- ной сложности. Скорость счета ПЭВМ FX-702P в 254-30 раз превосходит скорость счета программируемых микрокалькуляторов Электроника-Б3-34 [10]. Рис. 1.4. Вычислительная микросистема на базе ПЭВМ FX-702P МикроЭВМ FX-702P имеет удобные сред- ства редактирования программ: замену и вставку любого символа, просмотр текста программ (листинга) построчно и в бегущем режиме, трассировку программ (режим TRACE) и др. Бейсик хранится в ПЗУ и вво- дится автоматически при включении машины. Дисплей отображает 20 знаков в формате матрицы каждого знака 5X7, всего в строку можно включить 62 знака. Характеристики ПЭВМ класса Pocket Computers непрерывно улучшаются. Неко- торые модели таких ПЭВМ имеют вычисли- тельные мощности, сравнимые с миниЭВМ 70-х годов. Например, ПЭВМ НР-71В фирмы Hewlett Packard (см. табл. 1.1) имеет объем ПЗУ с внешними блоками до 320 кбайт, а ОЗУ — до 33,5 кбайт [17]. Эта микроЭВМ через интерфейс HP-IL может подключаться к 30 внешним устройствам. В их числе: телевизор или дисплей, отображающий одновременно 24 строки по 80 знаков, накопители информа- ции на магнитной ленте и магнитных картах, принтер, акустические модемы, графопостро- итель и др. Большой объем ПЗУ (64 кбайт в минималь- ном варианте) обеспечивает реализацию рас- ширенной версии бейсика, имеющей до 240 команд. Внешние ПЗУ могут содержать обширные библиотеки программ и банки данных пользователя, ориентированные на решение различных сложных профессиональ- ных задач. Для данного класса ПЭВМ характерен калькуляторный режим работы, обеспечиваю- щий возможность проведения ряда расчетов без программирования, а также проверку исполнения отдельных команд. § 1.3. Персональные ЭВМ среднего класса (Home Computers) ПЭВМ класса Ноте Computers обычно рассчитаны на подключение к бытовому кас- сетному магнитофону (накопителю) и телеви- зору (или дисплею). Они выполняются чаще всего в виде небольшого клавишного пульта с расположением клавиш, как у пишущей машинки. Такое решение обеспечивает резкое удешевление ПЭВМ (например, стоимость модели ПЭВМ ZX-81 английской фирмы Sin- clair Radions Ltd. в 1983 г. составила 50 дол., что сделало ее дальнейшее производство нерентабельным). Характеристики ряда простейших зару- бежных ПЭВМ класса Home Computers даны в табл. 1.2. Эти ПЭВМ рассчитаны на работу с черно-белым телевизором и обеспечивают формирование алфавитно-цифровых знаков и графиков. Лишь одна из этих ПЭВМ — НР-75 содержит встроенный дисплей на одну строку и накопитель информации на магнит- ных картах. Из отечественных ПЭВМ к данному классу относится бытовая персональная микроЭВМ Электроника-БК-0010 (бытовой компьютер). Эта ПЭВМ рассчитана на использование в качестве домашнего информационного центра, позволяющего проводить различные расчеты, создавать каталоги, справочники и словари, учебные программы, предоставлять пользо- вателю игры и т. д. ПЭВМ Электроника-БК-0010 выполнена на базе однокристального 16-разрядного микро- процессора К1801ВМ1 и имеет емкость ОЗУ 32 кбайт, в том числе ОЗУ пользователя 16 или 28 кбайт. Емкость ПЗУ 32 кбайт, а емкость ОЗУ экранной памяти 16 или 4 кбайт. ПЭВМ подключается к стандартному быто- вому телевизору и кассетному магнитофону. На экран телевизора выводится 25 строк (одна служебная). При матрице знаков 8 X 8 в строке размещается 64 символа, а при матрице 16X8 — 32. Питание -для ПЭВМ осущест- вляется от сети (220 В). ПЭВМ потребляет мощность не более 20 Вт. Ее размеры 370 X 180X70 мм, масса не более 4 кг. Пульт ПЭВМ имеет 92 клавиши. Графическая информация у ПЭВМ Элек- троника-БК-0010 отображается в формате 512X256 точек при двух градациях яркости и 256X256 точек при четырех градациях. Запись программ и данных на кассетный магнитофон происходит со скоростью 1200 бит/с. На стандартную кассету МК-60 можно запи- сать информацию с объемом до 256 кбайт. Программируется ПЭВМ Электроника-БК- 0010 на языках фокал (упрощенный язык, похожий на бейсик), бейсик и ассемблер (система команд, как у микроЭВМ Электро- ника-60). В первый год серийного производ- ства (1985 г.) цена ПЭВМ Электроника- БК-0010 составила 540 р. [19]. Новое поколение ПЭВМ класса Ноте Computers (см. табл. 1.3) рассчитано на сопряжение с цветным дисплеем или телеви- зором. При этом ПЭВМ обеспечивают полу- чение высококачественных многоцветных изо- 13
Таблица 1.2 Характеристики простейших персональных ЭВМ класса Home Computers Характеристика Тип ЭВМ ZX-80 ZX-81 НР-75 РВ-700 Фирма и страна-изготови- тель Sinclair Radions Ltd. (Великобри- тания) Sinclair Radions Ltd. (Великобри- тания) Hewlett Packard (США) Casio (Япония) Разрядность микропроцес- сора < 8 8 8 8 Емкость ПЗУ, кбайт 32 32 48-+-16 .25 Емкость ОЗУ, кбайт 1 2 16-+-8 4-+-16 Число строк/знаков дисплея Внешний 24/32 Внешний 24/32 1/32 4/20 Габариты, мм 299X178X51 299X178X51 — 200X85X20 Масса, кг 0,34 0,34 0,75 Периферийные устройства ТД, П, НМЛ ТД, П. НМЛ НМЛ, AM, П НМЛ, п Язык программирования Бейсик Бейсик Бейсик Бейсик } В качестве дисплея применяется телевизор. Т а б л й" ц а 1.3 Характеристики некоторых зарубежных ПЭВМ класса Home Computers, сопрягаемых с цветным дисплеем (телевизором) Характеристика Тип ЭВМ ZX- Spectrum BBC- Micro А VIC-20 ATARI-400 TI-99/4A TRS- Colour Емкость ОЗУ, кбайт стандарт- ное/макс и мальное 16/48 16/32 5/29 16/16 16/48 16/32 Число цветов общее 8 8' 16 16 16 9 Емкость ОЗУ,( кбайт (для дис- плея) 9 3 — 7 14 10 Число цветов, выводимых одно- временно 8 4 16 4 16 ‘ 8 Режим мерцания Есть Есть Нет Нет Нет Нет Подстройка яркости Есть Нет Нет Есть Нет Нет Установка графического режи- Есть Есть Есть Нет Есть Нет ма пользователем Полный на&ор кода -ASG-И Есть Есть Нет Нет Нет Нет Экран дисплея (строки/столбцы) 24X32 25X40 23X24 24X40 24X29 16X32 Автоповтор на всех клавишах Есть Есть Нет Есть Есть Нет Графика повышенной разре- шающей способности Есть Есть Нет Есть Нет Есть Язык программирования Бейсик, Бейсик Бейсик Бейсик Бейсик Бейсик паскаль 14
Сражений, позволяют строить графики и рисунки е высокой разрешающей способ- ностью, выводить различную текстовую и цифровую информацию в виде сложных много- цветных таблиц и т. д. Одной из наиболее распространенных мо- делей таких ПЭВМ является микроЭВМ ZX- Spectrum английской фирмы Sinclair Radions Ltd. [11]. Клавишный пульт ZX-Spectrum (рис. 1.5), имеющий размеры 233Х144Х ХЗО мм, обеспечивает ввод большинства на одном гибком микродиске 100 кбайт. Сред- нее время доступа 3—5 с. У новой модели ПЭВМ ZX-Spectrum + число клавиш пульта увеличено до 58, что позволило реализовать ряд дополнитель- ных текстовых и графических операторов и использовать новую расширенную версию языка бейсик. Емкость ОЗУ увеличена до 41,5 кбайт у основной модификации ПЭВМ. Накопитель на кассете с бесконечным рулоном ленты обеспечивает емкость внешнего ПЗУ до ZX-SPECTRUM BLUE REB MAGENTA GREEN CYAN YELLOW WHITE L EDIT CAPS LOCK TRUE VIDEO INV. VIDEO < V Д > GRAPHICS ] black! DELETE 1 ? 2 a Z 0 04 4? in CD 7 ° 6 9 > 0— DEF FN FN SIN COS LINE TAN OPEN INT CLOSE RND MOVE STRS ERASE CHR? POINT CAT FORMAT CODE PEEK TAB Q<’= 4PLOT DRAW E> = REM R < RUN T > RAND Y AND 3ETURH u OR IF [ AT INPUT врокЕ p " PRINT ASN READ ACS ATN VERIFY MERGE C RESTORE BATA SGN ABC SQR ] IN OUT © VAL LEN USR astof M NEto q N01 SAVE pSTEf Dll* > 1 F T0 FOR 1 I pTHEt gG0TI J H * GOSH J - В LOAI ^LIST ЧГт ENTER L I N \ -C J- CIRCLE EXP LPRINT LLIST BIN VAL? IN KEY? 1 SCREEN? ATTR CAPS SHIFT ^COPY XI CLEAF c ? CONT V z CLS В * BORDER N ’ NEXT м • PAUSE ' SYMBOL SHIFT BREAK SPACE E JEEP INK PAPER FLASH BRIGHT OVER INVERSE Рис. 1.5. Внешний вид ПЭВМ ZX-Spectrum класса Home Computers команд расширенной версии бейсика нажа- тием одной-двух клавиш. Благодаря много- кратному использованию клавиш (с помощью префиксных клавиш) общее число их сни- жено до 40. Помимо стандартных команд бейсика пульт обеспечивает ввод до 37 графи- ческих символов и 22 кодов управления цветом. В пульт вмонтирован звуковой сигнализатор, дающий до 130 полутонов звука. Емкость ПЗУ 16 кбайт. При отображении графики в 8 цветах матрица экрана содержит 256X 176 точек (при отображении алфавитно-цифровой информа- ции формируется 24 строки с 32 символами в каждой). Клавишный пульт обеспечивает ввод полного набора символов по стандарт- ному коду ASC-II. Для ПЭВМ ZX-Spectrum разработаны спе- циальные малогабаритные принтер и накопи- тель на диске. Принтер обеспечивает печать на рулоне бумаги шириной 10 см со скоростью 50 символов/с. По команде СОРУ принтер копирует сложные изображения с экрана теле- визора (например, шахматную доску с фигу- рами). Данная ПЭВМ может подключаться к кассетному магнитофону и обеспечивает ско- рость записи до 1500 бит/с. При этом данные или программы, занимающие объем ОЗУ 16 кбайт, записываются (и вводятся в ПЭВМ) за время 100 с. Миниатюрный дисковый накопи- тель обеспечивает скорость записи и считы- вания до 16 кбайт/с при объеме информации 85 кбайт на одну кассету. Загрузка программ емкостью 48 кбайт обеспечивается им за 9 с. Как видно из табл. 1.3, различия у характе- ристик ПЭВМ класса Home Computers до- вольно несущественные. Все ЭВМ этого класса обеспечивают повышенные (в сравнении с микроЭВМ класса Pocket Computers) возможности в решении информационных задач, позволяющие использовать их в часы досуга (игры, просмотр компьютерных слай- дов и т. д.). В то же время набор операторов для проведения математических и научно- технических вычислений у них ограничен — в лучшем случае он содержит операторы вычисления тригонометрических и обратных тригонометрических функций, натурального логарифма, экспоненциальной функции, квад- ратного корня и возведения в степень. В этом отношении некоторые типы ПЭВМ класса Pocket Computers (например, описанная выше модель FX-702P) значительно превосходят ПЭВМ класса Home Computers. В последнее время появилось много моде- лей так называемых «портфельных» ЭВМ. Обычно они снабжены жидкокристаллическим многострочным индикатором, например 24 стро- ки по 80 символов в каждой. Эти ПЭВМ зани- мают промежуточное .положение между до- машними и профессиональными ПЭВМ. В то же время ПЭВМ этого типа имеют большой объем ОЗУ (до 512 Кбайт.) и развитые сред- ства графики. 15
§ 1.4. Профессиональные ПЭВМ и вычислительные микросистемы индивидуального пользования Профессиональные ПЭВМ рассчитаны на индивидуальное использование их профес- сиональными пользователями (математиками, программистами, учеными и инженерами, кон- структорами, экономистами и т. д.). Обычно такие ПЭВМ предоставляются пользователям организациями и учреждениями, в которых они работают. Стоимость, размеры и масса про- фессиональных ПЭВМ могут заметно пре- вышать таковые для ПЭВМ класса Pocket Computers и Home Computers. В то же время возможности этих машин должны быть до- вольно большими — лучшие типы профес- сиональных ПЭВМ не уступают по основным параметрам (объему памяти, скорости счета и номенклатуре периферийного оборудования) большим ЭВМ. В табл. 1.4 приведены характеристики ряда зарубежных профессиональных ПЭВМ. Одной из первых моделей таких ПЭВМ следует считать модель НР-85 фирмы Hewlett Packard (США) [33]. В корпус средних размеров заключены собственно ЭВМ, дисплей, принтер, таймер и кассетный накопитель. Все эти узлы потребляют от сети мощность менее 25 Вт, поэтому хороший тепловой режим работы ПЭВМ Достигается без принудительной венти- ляции, что полностью исключает шум при работе. Термопечатающее устройство этой ПЭВМ обеспечивает скорость печати 64 знака/с (две строки по 32 символа) с матри- цей 5x7. Накопитель на магнитной ленте НР-85 имеет емкость памяти 210 кбайт при записи данных и 195 кбайт при записи программ, ско- рость записи и считывания 25,4 см/с, скорость поиска данных 152 см/с, время перемотки ленты 29 с, вероятность ошибки не более 1 XI О8. В НМЛ используются кассеты раз- мерами 63,5 X 82,5X 12,7 см. В НР-85 встроены кварцевые часы, три программируемых тай- мера с временем выдержки от 1 до 9999999 с и звуковой сигнализатор. Дисплей этой ЭВМ может отображать одновременно алфавитно- цифровую и графическую информацию (в од- ном цвете). Предусмотрена память дисплея на 64 строки. ПЭВМ НР-87 имеет емкость ОЗУ 16 кбайт, которая может наращиваться дополнительно Таблица 1.4 Характеристики некоторых зарубежных профессиональных ПЭВМ и вычислительных микросистем Характеристика Тип ЭВМ НР-85 TRS-80 Apple-Il PCjr Professional Formula-1 Страна-изготовитель США США США США США Япония Емкость ОЗУ, мин/макс., кбайт 16/32 8/32 64/1000 - 64/128 256 64 Емкость ПЗУ мин/макс., кбайт 32/200 32 16 64 800 4/68 Число клавиш пульта 92 56 165 знаков 62 91 91 Размер ЭЛТ дисплея по диагонали, см 127 Дисплей жидкокри- сталличе- ский 230 или 305 300 (цветной) 140 Матрица экрана при графике 256X192 240X64 — 640X200 1024X240 — Число строк/столбцов 16/32 8/20 24/80 24/80 24/80 24/132 24/80 Встроенные устройства д, п, Т, НМЛ, ПЗУ Д, Т, ПЗУ НМД, ПЗУ Т, ПЗУ, AM, Т д, т, пзу Д, П, Т, НМД (2 XI Мбайт, 2X0,7 Мбайт) Периферийные устрой- ства ПЗУ НМЛ, П д.п Д,П, НМД НМД ПЗУ Габариты, мм 158Х419Х Х452 220X300X Х50 380 X 397 X Х157 — 610Х375Х Х165 424X255X212 Масса, кг 9,06 1,6 И 16 15 Основные языки про- граммирования Бейсик Бейсик Бейсик, паскаль, фортран и др. Бейсик, паскаль, фортран и др. Бейсик, фортран Бейсик, фортран, паскаль и др. 16
г на 32 кбайт. Емкость ПЗУ этой ПЭВМ достигает 0,5 Мбайт (в стандартном варианте 32 кбайт). В ЭВМ встроен дисплей на ЭЛТ с большим диаметром по диагонали (260 мм), обеспечивающий получение графи- ческих изображений с повышенной разрешаю- щей способностью. Эта ЭВМ способна решать задачи линейного программирования с 200 переменными, системы линейных уравнений с порядком до 80 и т. д. Портативная (в виде небольшого чемо- данчика) ПЭВМ TRS-80 предназначена для руководителей и специалистов, часто бываю- щих в командировках. Дисплей у этой ПЭВМ жидкокристаллический (8 строк по 20 знаков). В ПЗУ TRS-80 зашито пять программ: интер- претатор расширенной версии бейсика (с гра- фикой), обработка текстов, составление пла- нов и расписаний, записная (адресная) книга и программа связи через телефонную сеть. ПЭВМ имеет ряд интерфейсов для связи с кас- сетным магнитофоном, принтером и др. Одной из наиболее распространенных ПЭВМ (их выпуск в США достиг 600 000 в год) является модель Apple-II (см. табл. 1.4) и ее модификация Apple-lie фирмы Apple Com- puter Inc. В последнее время по объему выпуска с этими моделями конкурируют ПЭВМ IBM PC фирмы IBM (США). Эти ПЭВМ выполнены в виде малогабаритных вычислительных микросистем (процессор, кла- вишный пульт, дисплей, принтер и другие узлы). Модель PCjr имеет беспроводный кла- вишный пульт. Связь пульта с процессором осуществляется с помощью инфракрасного светового излучения. Модели PC фирмы IBM обладают программной совместимостью. Большой емкостью ОЗУ (256 кбайт) и ПЗУ (до 5 Мбайт при расширении) отличается модель Professional (США). В нее встроен дисплей с необычно большой ЭЛТ (300 мм по диагонали), обеспечивающий получение мно- гоцветных (4 095 градаций цвета) изображе- ний с большой разрешающей способностью (матрица 1 024x240 элементов). Расширение ПЗУ достигается подключением накопителя на жестких (Винчестерских) дисках, имеющих емкость 5 Мбайт. К моноблочной профессиональной ПЭВМ относится модель Formula-1 (Япония), ориен- тированная на проведение сложных вычисле- ний. В эту ПЭВМ встроено два накопителя на гибких дисках (2X1 Мбайт и 2X0,7 Мбайт, запись двусторонняя), термопечатающее уст- ройство и дисплей. Машина может выполнять функции программатора ЗУ, вставляемых в колодку на ее передней панели. Термопринтер обеспечивает печать со скоростью 0,8 строк/с (в одной строке 80 знаков). Машина имеет мощное программное обеспечение, в частно- сти может программироваться на 25 языках высокого уровня, включая 5 расширенных вер- сий бейсика, паскаль, фортран, кобол и др. Принципиально новые средства общения с пользователем заложены в ПЭВМ Lisa и Macintosh фирмы Apple Computer Inc. (США). Эти ПЭВМ имеют два характерных признака: немерцающий цветной дисплей, ко- торый может работать в режиме полиэкрана (т?е. давать несколько не зависящих друг от друга изображений в специальных окнах), и устройство (контроллер) для перемещения маркера (курсора) дисплея типа «мышь». С последней особенностью связана принци- пиально иная процедура общения этих ПЭВМ с пользователем, чем у всех известных ранее ПЭВМ. «Мышь» представляет собой небольшую коробочку, которую можно перемещать в любых направлениях по гладкой поверхности, например стола. В ней расположены датчики перемещений, с помощью которых можно фор- мировать на экране дисплея сложные кривые либо указывать на отдельные фрагменты изо- бражений. Клавишный пульт ПЭВМ Lisa и Macintosh заметно упрощен — в нем нет функ- циональных клавиш. Команды ЭВМ отобра- жаются на дисплее наглядными изобразитель- ными средствами (их совокупность образует «меню» команд). Для ввода любой команды («блюда») достаточно подвести курсор к нужному рисунку и нажать специальную клавишу «мыши», вводящую команду в дей- ствие. Подобный подход к общению с ПЭВМ и ее программированию делает эти машины несовместимыми с ранее перечисленными моделями. Тем не менее он считается весьма перспективным, ибо облегчает диалог с пользо- вателем, впервые работающим на ПЭВМ. Отметим некоторые технические характе- ристики ПЭВМ Macintosh: емкость ОЗУ 128 кбайт, ПЗУ 64 кбайт, размер ЭЛТ дисплея 23 см по диагонали, число точек 512X342, встроенный накопитель на гибких дисках малого диаметра (0=89 мм фирмы Sony (Япония)) имеет емкость 0,4 Мбайт, интер- фейс ПЭВМ обеспечивает передачу данных по шине Apple Bus со скоростью 192 кбайт/с, масса 9 кг, объем 20 дм\ ПЭВМ использует 32-разрядный микропроцессор 68 000 фирмы Motorolla. Из разработок отечественных ПЭВМ к дан- ному классу можно отнести модель ПЭВМ Агат [14]. Ее характеристики: размер корпуса 500 X 350 X 180 мм, масса 9 кг, имеет откидной клавишный пульт с 59 клавишами. ПЭВМ Агат построена на 8-разрядном микропроцессоре, имеет ПЗУ емкостью 32 кбайт и ОЗУ емкостью 64, 128 и 256 кбайт. С помощью внешнего телевизора отображается 32X32 или 64X32 символов либо черно-белая графика с матри- цей экрана 256X256 ячеек. При отображении восьмицветных изображений матрица со- ставляет 128X128 точек, а шестнадцатицвет- ных— 64X64. Данные и программы могут записываться на обычный кассетный магнито- фон (емкость 125 кбайт) или на НМД типа ЕС-5088 или ЕС-5089 (емкость 250 кбайт для двух НМД). Потребляемая ПЭВМ Агат мощность 60 Вт. Некоторые модели отечественных микро- ЭВМ из-за относительно больших размеров, массы .и стоимости можно условно отнести к ПЭВМ, поскольку они отвечают главному кри- терию таких вычислительных средств — пре- доставлению ресурсов в индивидуальном порядке. Подобные ЭВМ вместе с перифе- рийным оборудованием образуют вычисли- 17
тельные микросистемы индивидуального поль- зования. В табл. 1.5 приведены краткие характеристики ряда отечественных вычисли- тельных микросистем индивидуального поль- зования [27]. Массовое применение нашли вычислитель- ные микросистемы на базе одноплатной микроЭВМ Электроника-С60, первые образцы которой программировались на упрощенной версии бейсика. В настоящее время для них используется расширенная версия бейсика дисковой операционной системы Рафос, в состав которой входят команды для работы и операций с символьными переменными. Эта версия бейсика совместима с применяемой в миниЭВМ серии СМ (бейсик-плюс [28]). Для проведения научно-технических и дру- гих расчетов широко применяются системы подготовки программ (СПП) на базе специа- лизированного вычислительного и управляю- щего устройства Электроника-ДЗ-28. Они имеют расширенную версию бейсика, причем расширение произведено в сторону увеличения числа операторов для вычисления математи- ческих функций. Все программы в справочнике даны на этой версии бейсика и могут легко переводиться на другие его версии. В последние гады освоено массовое про- изводство диалоговых вычислительных ком- плексов ДВК-1 и ДВК-2, построенных на основе одноплатной микроЭВМ Электроника- НЦ-80-20 и дисплея 15 ИЭ-00-013-01 (клавиатура его показана на рис. 1.6). Этот дисплей применяется и в СПП на базе микроЭВМ Электроника-ДЗ-28. В комплекс ДВК.-1 входят только упомянутые устройства. Комплексы ДВК-2 дополнительно укомплекто- ваны накопителем на гибком диске ГМД- 7012 и термопринтером. Последние модели ДВК (ДВК-3 или Элек- троника-НЦ-80-20/3 [27]) имеют обширное периферийное оборудование. Емкость ОЗУ 64 кбайт, ПЗУ — 8 кбайт. Накопитель на гибком диске Электроника-6021 имеет емкость 440 кбайт (40 дорожек с 14 секторами, время перемещения головки с одной дорожки на дру- гую 15 мс, время подвода головки 50 мс). ДВК-3 имеют быстродействие 500-103 опера- ций/с, программируются на языках бейсик, фортран, паскаль. Ассемблер этих микроЭВМ имеет систему команд, принятую для микро- ЭВМ Электроника-СбО. В комплексы входят принтеры (DZM-180, Д-100, PRT-80 или СМ-6310), графопостроитель и другие пери- ферийные устройства. , В значительной мере требованиям к про- фессиональным ПЭВМ отвечают микроЭВМ серийного производства Искра-226. ЦП этой ЭВМ с быстродействием 2-106 микрокоманд/с и разрядностью 8/16 имеет обращение к ОЗУ Таблица 1.5 Характеристики некоторых отечественных вычислительных микросистем индивидуального поль- зования Характеристика Тцп системы или микроЭВМ Электроника Искра-226 ТЗ-29 ТЗ-29М ДЗ-28 НМС *) ОН 00.1 Общая емкость ОЗУ, кбайт 64 288 16—128 56 112—176 Емкость ОЗУ пользователя, кбайт 32 256 — 48 64—128 Хранение программы-интер- претатора В ПЗУ В ПЗУ На магнит- ной ленте В ПЗУ В ПЗУ и на диске Среднее быстродействие процессора, тыс. оп/с 100 600 • __ 400 800 О^щая масса оборудова- ния, кг 117 120 85 116 166 Общая потребляемая мощ- ность, Вт 700 1000 500 800 2000 Язык программирования Бейсик Бейсик Бейсик Бейсик Бейсик, паскаль Встроенные устройства НМЛ НМЛ НМЛ Д Д Периферийные устройства д, тп, п д, тп, П Д, ТП,П, НМД, ГП ТП, НМД, ГП, ГД П, НМД, НМЛ ГД *) В тексте диалоговый вычислительный комплекс Электроника НМС 01100.1 на основе дисплея 15 ИЭ-00-013-01 и одноплатной микроЭВМ Электроника НМС 11100.1 обозначен как ДВК. Масса ДВК без периферийных устройств 36 кг, потребляемая мощность 275 Вт: 18
[JPeeucTpfcJ Q □ Латинский. Нижний Печать Дуплекс Линия Редактирование СДВ Передача api|ci|arz| |прд|прм|прс| пч|дуп|лин| STRESS 7 8 9 4 5 6 1 2 3 ) Рис. 1.6. Клавишный пульт дисплея 15 ИЭ-00-013-01, применяемого в диалоговых вычислительных комплексах ДВК-1, ДВК-2 и в системах подготовки программ на базе микроЭВМ Электроника-ДЗ-28 емкостью 64 кбайт и ПЗУ 48 кбайт (основной вариант). Встроенный алфавитно-цифровой и графический дисплей на ЭЛТ с размером 31 см по диагонали отображает 24 строки по 80 символов или 256X560 точек графиков. К нему может подключаться внешнее видеоконтроли- рующее устройство ВК40В60. Кассетный нако- питель Искра-005-33 имеет емкость 80 кбайт, скорость обмена 200 байт/с и среднее время доступа 180 с. Внешние накопители (НМД и НМЛ) увеличивают емкость ОЗУ на 5 и 10 Мбайт. ЭВМ может комплектоваться графопостроителем и принтером со скоростью печати до 180 знак/с. Вычислительные микросистемы на базе микроЭВМ Искра-226 выпускаются в нескольких модификациях. Приведенные в табл. 1.5 вычислительные микросистемы не обеспечивают возможности получения цветных графических изображений. В настоящее время завершена разработка профессиональной отечественной ПЭВМ, ана- логичной описанной выше модели Professional (США) и обеспечивающей получение цветных графических изображений с высокой разре- шающей способностью. Профессиональные ПЭВМ и вычислитель- ные микросистемы могут программироваться на многих языках: бейсик, фортран, паскаль, алгол и др. Однако наиболее распространен бейсик, обеспечивающий возможность работы на этих системах пользователей, не являющих- ся специалистами по программированию. § 1.5. Периферийное оборудование персональных ЭВМ Ниже даны краткие сведения о типовом периферийном оборудовании ПЭВМ, рассчи- танные на лиц, занятых их эксплуатацией. ч Одним из важнейших узлов ПЭВМ являет- ся дисплей — устройство на основе электрон- но-лучевой трубки, обеспечивающее отображе- ние алфавитно-цифровой и графической информации. В качестве дисплея ПЭВМ класса Home Computers обычно используются бытовые телевизоры. В состав ПЭВМ входит адаптер, преобразующий сигналы ПЭВМ в высокочастотные сигналы, принимаемые теле- визором по одному из телевизионных каналов. Весьма нежелательно совпадение номера этого канала с номером канала местной телевизион- ной станции, поскольку при этом возможны взаимные помехи — ПЭВМ может создавать помехи другим телевизорам, а местная стан- ция — искажать прием сигналов с ПЭВМ. Качество изображения можно значительно по- высить, подключив выход ПЭВМ ко входу видеосигналов телевизора (т. е. минуя пре- образование видеосигнала в высокочастотный сигнал). Сложные ПЭВМ могут комплектоваться специальными дисплеями и мониторами, обес- печивающими высокое качество изображения (монитором обычно называют дисплей с кла- вишным пультом). Другим распространенным устройством для подключения к ПЭВМ является кассетный магнитофон. Хотя многие ПЭВМ некритичны к качеству магнитофона, целесообразно при- менять магнитофоны класса не ниже третьего. Магнитофоны более высокого класса и спе- циальные кассетные накопители информации обычно имеют электромагниты управления лентопротяжным механизмом. Они обеспечи- вают возможность автоматического включения и выключения магнитофона в ходе ввода программ в ПЭВМ и их вывода на магнитофон. Для подключения магнитофона к ПЭВМ используется специальный адаптер, содержа- щий интерфейс сопряжения (иногда этот интерфейс входит в ПЭВМ). Основной недо- статок кассетного магнитофона — значитель- ное время поиска нужной информации, что связано с медленной протяжкой магнитной ленты. 19
К массовым периферийным устройствам профессиональных ПЭВМ относятся накопи- тели информации на вращающихся магнитных дисках. Они бывают двух типов: со сменными гибкими дисками и жесткими (Винчестер- скими). В основном в ПЭВМ применяются диски малого диаметра (0 = 133 мм). Запись блоком магнитных головок производится на одну или обе стороны диска, покрытого фер- ромагнитным материалом. На каждой стороне диска имеется несколько десятков дорожек записи, каждая из которых разбита на секторы. При записи и считывании информа- ции пользователь задает в виде специальных кодов сторону диска, номер дорожки и номер сектора, переключение дорожек производится быстро. Емкость одного диска лежит в преде- лах от 0,2 до 50-4-100 Мбайт (большие цифры — для жестких дисков с диаметром 203 мм). Скорость обмена данными весьма высока — до 0,1254- 10 Мбайт/с, что является большим достоинством НМД по сравнению с накопителями на магнитной ленте. В последнее время наблюдается тенденция перехода к малогабаритным НМД с диаметрами дисков 76, 82,5, 85 мм и меньше. Помимо накопителей информации на стан- дартных кассетах с магнитной лентой и маг- нитных дисках в некоторых ПЭВМ применяют- ся специальные типы накопителей: на микро- кассетах (уменьшенный вариант обычной кассеты), кассетах типа Catridge с бесконеч- ным рулоном ленты, свернутой в кольцо, и на магнитных картах. Однако широкого распространения такие накопители не полу- чили. В перспективе возможно оснащение ПЭВМ накопителями информации на опти- ческих дисках с лазерной записью и счи- тыванием. Из другого периферийного оборудования следует отметить принтеры — устройства для печати алфавитно-цифровой, а иногда и гра- фической информации. Принтеры подклю- чаются к ПЭВМ через интерфейс (обычно с передачей информации в параллельном коде). Скорость печати принтеров для ПЭВМ составляет от нескольких десятков до несколь- ких сотен знаков в секунду. Наиболее распро- странены мозаичные принтеры, обеспечиваю- щие точечную печать знаков с матрицей 5x7 элементов. Однако качество такой печати не считается достаточно высоким. Поэтому находят применение и принтеры, работающие по типу пишущей машинки. Высокое качество печати в сочетании с высокой скоростью имеют принтеры с шаровой печатающей головкой. У них знаки распределены по поверхности шара и нужный знак выбирается поворотом печатающей головки. Принтеры, разом печа- тающие целую строку, применяются в основ- ном в больших ЭВМ. Для высококачественного документиро- вания графической информации применяются графопостроители. Имеются графопострои- тели с числом перьев до 6—12, обеспечиваю- щие построение многоцветных графиков с высокой разрешающей способностью (до 0,1 мм и выше) и большой точностью задания координат (погрешность до 0,24-1 %). Ско- рость построения графиков лежит в пределах от 2 до 50 см/с. Преобразование координат точки (или точек графика) в цифровой код обеспечивают специальные планшеты. С этой целью при- меняются и устройства типа «мышь», содер- жащие поворотные датчики, реагирующие на перемещение «мыши» по гладкой поверхности. Погрешность преобразования для таких устройств составляет обычно доли процента. Для связи ПЭВМ с внешними накопи- телями информации через телефонную сеть служат акустические модемы: специальные микрофоны и излучатели, работающие на высоких звуковых и ультразвуковых частотах. Акустические модемы могут применяться в виде отдельных блоков или встраиваться в корпус ПЭВМ. Тогда в акустическом модеме закрепляется трубка телефонного аппарата, что обеспечивает акустический контакт с ПЭВМ.
ГЛАВА 2 БЕЙСИК — ОСНОВНОЙ ЯЗЫК ПЕРСОНАЛЬНЫХ ЭВМ §2.1. Алфавит и основные опера- торы языка бейсик Назначение языка бейсик (BASIC). Наиме- нование BASIC является сокращением англий- ских слов «Beginner All-purpose. Symbolic Instruction Code», что в переводе означает «многоцелевой язык символических команд для начинающих». BASIC был задуман раз- работчиками как язык, доступный для усвое- ния студентами гуманитарных вузов. Однако простота грамматики и синтаксиса, его схо- жесть с фортраном привели к широкому рас- пространению бейсика в практике математи- ческих и научно-технических расчетов. Бейсик — язык интерпретирующий. Работа на бейсике организуется с помощью специаль- ной программы-интерпретатора, которая запи- сана в ПЗУ или загружается в ОЗУ с внеш- него накопителя — магнитной ленты или диска. Эта программа переводит каждый опе- ратор бейсик-программы на машинно-ориенти- рованный язык конкретной ЭВМ. Бейсик —• язык высокого уровня. Многие версии бейсика имеют непринципиальные отличия в основных операторах. Поэтому воз- можен простой перевод программ с одной версии бейсика на другую. Однако не следует преуменьшать и различия между разными версиями. Так, простые версии бейсика имеют всего 30—40 операторов, тогда как у сложных их число достигает нескольких сотен. При переводе программ следует учитывать раз- личия в записи отдельных операторов, в их наборе и правилах синтаксиса. Различия в вер- сиях бейсика усугублялись использованием его для программирования наиболее массовых видов ЭВМ — ПЭВМ, число типов которых составляет многие тысячи. Бейсик — язык диалоговый. Это означает, что программными средствами на бейсике можно организовать диалоговый режим работы ПЭВМ с пользователем. При этом ПЭВМ сообщает пользователю о том, какими возможностями она обладает, как ею пользо- ваться, в каком порядке должна выполняться данная конкретная программа и т. д. Диалог задается пользователем и в его программах. Алфавит бейсика содержит 26 прописных латинских букв, цифры от 0 до 9, точку, запятую, кавычки, знаки арифметических опе- раций ( + , —, /, * (умножение) и “I (возве- дение в степень)), знаки отношения двух вели- чин (> , <, = ), скобки и другие спе- циальные знаки. Версии бейсика для отечест- венных микроЭВМ имеют в алфавите и русские буквы. Переменные бейсика делятся на 4 типа. 1. Простые переменные, обозначаемые ла- тинскими буквами, например А, В, С, ..X, Y, Z. 2. Простые переменные, обозначаемые ла- тинскими буквами с одной цифрой после них, например Al, D2, ..., Z9. 3. Индексированные переменные одномер- ных массивов вида А (а), В (а),..., Z (а), где а — число, простая переменная или ариф- метическое выражение. 4. Индексированные переменные двумер- ных массивов вида А (а, 0), В (а, р), ... ..., Z(a, Р), где аир — числа, простые пере- менные или арифметические выражения. Максимальные значения аир зависят от объема ОЗУ (обычно 256). Примеры. Х(8)—переменная одно- мерного массива X с номером 8, Y (2,3) — переменная двумерного массива, стоящая в третьей строке и четвертом столбце (нуме- рация строк и столбцов начинается с 0), Z (I, J*K) — переменная двумерного мас- сива, номер строки которой задается значе- нием целой части переменной I, а номер столб- ца — значением целой части произведения J*K. Числа могут вводиться в программу в качестве вещественных констант либо вво- диться с пульта для задания числовых значе- ний переменных. Числа задаются в естествен- ном виде с разделительной точкой, а не запя- той. Нуль перечеркивается наклонной чертой, что позволяет отличить его от буквы О Порядок числа указывается после буквы Е, например число 1,234 можно ввести в виде 1.234; .1234Е1; 123.4Е-2 и т. д. Перед мантиссой или порядком могут стоять знаки+ и —-, обычно знак + опускается. Например, число —0,000097 записывается в виде -0.000097; —.000097; —97Е—6; —9.7Е — 05 и т. д. Первый нуль мантиссы обычно можно не вводить. Максимальный порядок чисел зависит от типа ЭВМ и лежит в пределах от 30 до 252. Операторы бейсика — допустимые пред- писания, предназначенные для задания ЭВМ операций обработки информации. Операторы записываются в виде слов или предложений 21
большими латинскими буквами без пробелов в словах (у некоторых ПЭВМ пробелы игно- рируются) . Существуют также служебные опе- раторы (директивы), исполняемые сразу после их ввода с пульта (некоторые из них могут выполняться и по программе). Программа на бейсике есть последователь- ность операторов, записанных по определен- ным правилам и обеспечивающих решение заданной задачи на ЭВМ. В бейсике операторы записываются построчно. В одной строке может быть один оператор или несколько, раз- деленных специальным знаком (двоеточием : или наклонной чертой \). Строки должны иметь последовательную нумерацию. Реко- мендуется задавать номера строк с про- пусками, например 5, 10, 15, 20 и т. д. или 10, 20, 30 и т. д. Это позволит при необ- ходимости вставить между ними новые строки. Максимальный номер строки зависит от типа ПЭВМ. Таблица 2.1 Символы арифметических операций бейсика Символ Пример Операция. Приоритет операции "1 А~1В Возведение в Первый степень * А*В Умножение В горой / А/В Деление Второй ч- А+В Сложение Третий А-В Вычитание Т ретий Символы арифметических операций бей- сика даны в табл. 2.1. Там же отмечен при- оритет операций, т. е. порядок их выполнения при вычислении уарифметических выраже- ний. Приоритет может быть изменен вводом скобок. Операторы задания массивов DIM и СОМ. Одномерные и двумерные массивы занимают в ОЗУ ЭВМ определенную область памяти, обозначаемую как DIM или СОМ. Чтобы в эту область не попали другие данные, перед вво- дом и использованием массивов нужно заре- зервировать для них место. Это делается с помощью операторов DIM и СОМ, после кото- рых указываются переменная и скобки с указа- нием размеров массива. Так, полный оператор DIM А (9) резервирует в памяти место для одномерного массива А из 10 переменных от А(0) до А(9). Оператор DIM С (5, 6) резерви- рует место под двумерный массив С, содер- жащий шесть строк и семь столбцов (включая нулевые). Для обозначения размерности массивов можно использовать арифметические выраже- ния (причем их дробная часть отбрасывается), а также числовые значения переменных. Например, оператор DIM R (I*N, К) резерви- рует область памяти DIM под двумерный массив R с максимальным номером строки, равным целой части произведения I*N и максимальным номером столбца, равным целой части числового значения перемен- ной К. Операторы выполнения математических z функций на бейсике приведены в табл. 2.2. Аргумент функции должен заключаться в скобки. Им могут быть числа, переменные и арифметические выражения, например: SIN(30) — синус угла в 30 градусов, SIN(Z) —синус угла, заданного аргумен- том в виде числового значения переменной Z, EXP£SQR(2))—значение числа е^— =ехр V2- Аргумент и значение функций не должны выходить за пределы определения функции и за пределы разрядной сетки ЭВМ, иначе будет индицироваться ошибка. Вычисление функции имеет приоритет перед арифметическими опе- рациями. Исполняемые по программе основные опе- раторы версии бейсика для микроЭВМ Электроника-60, Электроника-ДЗ-28 даны в табл. 2.3. Рассмотрим их более детально. Оператор LET (от слова letter — буква) служит для присвоения буквенным перемен- ным, указанным слева от знака равенства, числового значения константы, переменной или арифметического выражения, записанных справа от знака равенства. Оператор DATA (от слова data — данные) служит для ввода в память ЭВМ определенной последовательности чисел. Они даются спис- ком с разделительными запятыми. Т а б л и ца 2.2 Операторы вычисления математических функций версии бейсика микроЭВМ Электроника-60 Запись оператора Запись функции Наименование функции Запись оператора Запись функции Наименование функции SIN(X) COS(X) ATN(X) sin x cos X arctg x Синус X Косинус X Арктангенс X RND (х) rnd х Генерация случайных чисел со значением от 0 до 1 SQR(X) EXP(X) ex = exp x Корень квадратный из X Экспонента X SGN(X) sign х Сигнум-функция (4-1 при л> 0, 0 при х = 0 и — 1 при х<0) LOG(X) In X Натуральный лога- рифм X FNa(X) — Функция, заданная пользователем ABS(X) INT(X) abs x int x Абсолютное значе- ние X Целая часть X EXF(X) Внешняя функция 22
Таблица 2.3 Основные операторы языка бейсик Операторы Примеры записи Пояснения LET LET A = 2 LET X = Y LET Z = a Переменной А присваивается значение 2 Переменной X присваивается значение переменной Y Переменной Z присваивается значение арифметического выражения a DIM COM DIM AJ5) COM A(I,J) DIM A(a,L) Задание одномерного массива А из шести переменных А(0), А( 1), ...» А(5) Задание двумерного массива с макси- мальным номером строки I и столбца J Задание двумерного массива с макси- мальным номером строки, равным целой части арифметического выражения а, и столбца с максимальным номером, определяемым численным значением пе- ременной L DATA DATA 1, 2, 3, 4 Ввод чисел I, 2, 3, 4 READ READ А, В, C, D Присвоение переменным А, В, С и 1D численных значений, заданных операто- ром DATA RESTORE RESTORE Поворот стека данных INPUT INPUT A INPUT 'A = 'A INPUT А, В, C Ввод значения А с пульта после появле- ния знака ? Ввод значения А после печати поясне- ния А=... Ввод значений А, В и С, разделенных запятыми PRINT PRINT 2 PRINT А, В, C PRINT 'A = 'A PRINT T = 'a Печать числа 2 Печать численных значений переменных А, В и С Печать численного значения А после комментария А — Печать численного значения арифмети- ческого выражения а после коммента- рия F = GOTO GOTO n Безусловный переход к строке с номером п IF ... THEN IF ... GOTO IF.a r p THEN n IF a r p GOTO n ‘IF a r p THEN у Условный переход к строке п, если справедливо отношение г (табл. 2.4) Выполнение операций у» если справед- ливо отношение г FOR ... TO ... STEP ... NEXT FOR a = 0 TO у STEP 6 NEXT a FOR a = p TO y NEXT a Организация цикла с управляющей пере- менной а, меняющейся от начального значения р до конечного у с шагом 6 (Р, у и 6 - числа, значения переменных или арифметических выражений) Организация цикла с шагом 6=4-1 GOSUB GOSUB n Обращение к подпрограмме, начинаю- щейся со строки п RETURN RETURN Возврат из подпрограммы 23
Таблица 2.3 (продолжение) Операторы Примеры записи Пояснения REM (REMARK) REM 'КОММЕНТАРИЙ' Печать комментария при выводе листинга программы STOP STOP Остановка вычислений в любом месте программы END END Конец программы и останов в конце программы DEF FN<V> (параметр) —a DEF FN Y(X)=SIN (X)/X Задание функции а пользователя; в при- мере Y (X) — sin х/х Оператор READ (read — читать) служит для чтения чисел из блока данных DATA и присвоения переменным своего списка4’ численных значений. Пример. В следующей программе чис- ленные значения переменных будут такими: A = l; В = 2; С = 3; D = 4 и Е2=-5-10-8. 10 DATA Ь2/3,4,-5Е-8 20 READ A/B>C,D 30 READ Е2 Оператор RESTORE (от слова restore — возвращать) служит для поворота стека дан- ных, который формируется в ОЗУ ЭВМ опера- тором DATA (стек можно уподобить обойме револьвера, если числа отождествлять с пат- ронами). Этот оператор необходим, если, например, одно из чисел в списке DATA нужно присвоить разным переменным. 10 DATA 1/2/3/4/-5Е-8 20 READ A,B>C/D,E2 30 RESTORE 48 READ F/L/L В приведенной программе вначале пере-* менным стека оператора READ в строке 20 присваиваются отмеченные выше численные значения. Затем оператор RESTORE в строке 30 обеспечивает поворот (возврат) стека. В ре- зультате переменной F присваивается значе- ние 1, а переменной L—сначала значение 2, а затем 3. Оператор INPUT (input — ввод) служит для ввода чисел с пульта по запросу ЭВМ. Он сопровождается печатью знака вопроса (?) или комментария, заключенного в апострофы (или кавычки), после слова INPUT, а также для присвоения числовых значений списку переменных. Примеры. 1) 10 INPUT А Печатается знак вопроса, и ЭВМ ждет число, значение которого (после ввода) будет присвоено переменной А. 2) 20 INPUT А, В, С, D Печатается знак вопроса, после чего надо ввести четыре числа, разделяя их запятыми. 3) 30 INPUT' ВВЕДИТЕ ЧИСЛО УРАВ- НЕНИЙ N='N 24 Печатается запрос ВВЕДИТЕ ЧИСЛО УРАВНЕНИЙ N = , после которого надо ввести значение N. 4) 10 INPUT' ВВЕДИТЕ А, В', А, В Печатается указание ВВЕДИТЕ А, В, после чего следует ввести значения А и В, разделив их запятой. У некоторых микроЭВМ, например Элек- троника-60, встречаются версии бейсика, у которых применение комментария после опе- ратора INPUT не предусмотрено. В этом слу- чае для вывода комментария используется оператор PRINT (см. ниже). Оператор PRINT (от слова print — печать) служит для задания вида печати (специаль- ным знаком после него), печати комментариев, заключенных в апострофы (или кавычки), печати числовых значений констант, перемен- ных и арифметических выражений, входящих в список этого оператора. Примеры. 1) 50 PRINT 125, 98, 36 Печатаются числа 125 98 36. 2) 50 PRINT А, В, С Печатаются числовые значения перемен- ных А, В, С. Так, если А = 125, В = 98 и С = 36, то печать имеет вид, аналогичный приведен- ному выше. 3) 50 PRINT' ЧИСЛЕННОЕ ИНТЕГРИ- РОВАНИЕ' Печатается комментарий ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ 4) 100 PRINT 'А = 'А2 Печатаются комментарии и значение пере- менной А2. Если А2= 125, печатается А= 125. 5) 60 PRINT 'F = 'SQR (А*В + С) Печатается F—a, где а — числовое зна- чение арифметического выражения VAB+~C\ 6) 70 PRINT Печатается пустая строка (т. е. пробелы). Если в списке оператора PRINT в качестве разделителя используется запятая, то каждое число (см. примеры 1) и 2)) печатается в соответствующей зоне одной строки: Послед-
няя разделяется обычно на пять зон печати. Если чисел больше пяти, то последующие печатаются с новой строки, и т. д. Для боле^ плотной печати в качестве разделителя можнс использовать знак ; (точка с запятой). Тогда очередное число будет следовать за предыдущим^ минимальным пробелом. Тип печатающего устройства указывается специальными знаками после оператора PRINT: Например, для системы подготовки программ на базе микроЭВМ Электроника- ДЗ-28 оператор PRINT после включения сис- темы обеспечивает вывод комментариев и чисел только на дисплей. Для печати принте- ром после оператора PRINT следует поставить знак #1, а для обратного переключения индикации на дисплей — знак Пример. 10 PRINT#©'ВЫЧИСЛЕНИЕ ЭКСПОНЕНТЫ* 20 INPUT X 30 PRINT#!’Xя*X/* ЕХР<Х>==* ЕХР<Х) 40 END В этом примере на экран дисплея будет выведено сообщение ВЫЧИСЛЕНИЕ ЭКС- ПОНЕНТЫ, а значения X и ЕХР(Х) будут напечатаны принтером. Таким образом, перво- начально'введенный знак #=0 или #1 сохра- няется до замены его другим, повторять этот знак в последующих операторах PRINT не нужно. Формат печати чисел также может указы- ваться специальным знаком в составе опера- тора PRINT. Так, для упомянутой выше системы возможны следующие форматы: !Fni7T2l — выводится знак числа, гц цифр до десятичной точки, десятичная точка, п2 цифр после десятичной точки, символ по- рядка Е, знак порядка и две значащие цифры порядка; !п1.п2! — выводится-знак числа, П\ цифр до десятичной точки, десятичная точка и п2 цифр после нее (если число не умещается в формате, выводится столько символов, сколько позиций отведено на печать); !Е! — число выводится в форме с плаваю- щей запятой и содержит знак числа, точку, 12 цифр мантиссы, символ порядка Е, знак порядка и две цифры порядка. При начальном включении системы уста- навливается формат !F 1.9!. При смене формата новый формат запоминается и дей- ствует до замены его другим. Внимание! Синтаксис и вид операторов IJ4PUT и PRINT у разных моделей ПЭВМ могут иметь некоторые различия. Например, комментарии могут вводиться в кавычках или апострофах, различны символы установки формата и типа печати. Поэтому общее зна- комство с этими операторами следует завер- шить уточнением формы их записи для каждой конкретной ПЭВМ Оператор GOTO п (от слов go to — идти к) обеспечивает безусловный переход к строке с номером п. В программе 10 INPUT*Xя*X 20 LETY«SIN<X) 25 PRINT*Vя* Y 30 GOTO 10 после ввода X и вычисления Y = sinX опе- ратор GOTO 10 в строке 30 обеспечивает пе- реход к строке 10, т. е. к вводу нового значения X по оператору INPUT. Таким образом, программа зацикливается. Операторы IF и THEN (if — еслр, then — тогда) служат для организации условных переходов. Общая форма их записи (вместо слова THEN возможно GOTO). IF а г р THEN п (или у) IF а г р GOTO п где а, р и у — арифметические выражения, п — номер строки, г — символ отношения аир (условия перехода) (табл. 2.4). Вместо аир могут стоять переменные и числа. Если пред- писанное отношение выполняется, происходит Таблица 2.4 Символы отношения г для операторов IF...THEN Символ бейсика Матема- .тический символ Пример записи оператора Значение символа — = А = В Равно А< Меньше < = А< = В Меньше или равно А> > В Больше = > А = > в Больше или равно < > А< > в Не равно переход к строке с адресом п (или выполняют- ся арифметические операции в выражении у). В противном случае выполняется последую- щая за операторами IF ... THEN часть про- граммы. Пример. 10 INPUT*Xя*X 20 IF Хя0 THEN 50 30 LETF=SIN<X)ZX 40 PRINT ’F«*Fl GOTO 10 50 LETF=1-’GOTO 40 В приведенной программе вычисляется функция F = sinx/x. При х = 0 получаем неопределенность вида 0/0, а поскольку деле- ние на 0 машина не производит, нужно этот случай исключить. Для этого в строке 20 зна- чение х сравнивается с нулем. Если х=0, происходит переход к строке 50, где перемен- ной F присваивается известное значение 1. Операторы организации циклов FOR ... ТО и STEP образуют цикл по схеме FOR а = р ТО у STEP 6 (тело цикла) NEXT а Эта запись означает следующее: для (for) переменной а, имеющей начальное значение р и меняющейся до (to) конечного значения у с шагом (step) б обеспечивается выполнение цикла, завершаемого оператором NEXT а (следующий). Если а достигает значения у, 25
происходи! выполнение следующего за циклом оператора. Переменная а должна быть про- стой, а р, у и 6 могут быть числами, пере- менными , или значениями арифметических выражений. Отсутствие в цикле оператора STEP автоматически придаст величине б зна- чение б=-|-1. Примеры применения операто- ров организации циклов даны в § 2.4. Оператор обращения к подпрограмме GOSUB п (от слов go subroutine — идти к подпрограмме) обеспечивает переход к выпол- нению подпрограммы, начинающейся со строки п. Подпрограммы применяются в том случае, когда нужно неоднократно выполнить одну и ту же группу операторов. Оператор возврата из подпрограммы RETURN (return — возвращение) обеспе- чивает возврат из подпрограммы после ее выполнения к оператору, следующему за обра- щением GOSUB п. Оператор RETURN ста- вится в конце подпрограммы. Циклы и подпрограммы могут быть вло- женными друг в друга (более подробно см. § 2.4). Оператор программных комментариев REMARK (или сокращенно REM, от слова remark — комментировать). Этот оператор служит для ввода в программу пояснений — комментариев, заключенных в апострофы или кавычки (или без них). Эт» комментарии вы- водятся на печать только при выводе листинга программы. Применение комментариев делает сложные программы более наглядными. Оператор останова STOP используется для остановки вычислений в любом месте про- граммы. Обычно при этом ПЭВМ выдает комментарий с указанием, в какой строке произошел останов, например: ОСТАНОВ В СТРОКЕ 100 ГОТОВ , ' Оператор окончания программы END слу- жит для фиксации конца программы, что необходимо, например, при записи программы на магнитную ленту ил'и диск. Если этот оператор поместить в середине программы, будет записана только ее часть — до опера- тора END. Оператор END также обеспечивает останов вычислений. Оператор задания функций пользовате- ля— DEF FN (переменная) (параметр) =а. где а — собственно функция. Например, выражение DEF EN Y(X) = SIN(X)/X за- дает функцию Y (X) = SIN (X)/X, которую можно использовать как обычную стандарт- ную функцию. Служебные операторы бейсика приведены в табл. 2.5. Вместо оператора стирания DELETE (от слова delete — уничтожать) часто используется оператор CLEAR (clear — стирать). Оператор SAVE записи программы на носитель и операторы загрузки программы в ЭВМ с носителя (OLD или LOAD) часто дополняются указаниями на тип носителя (перфолента, магнитофонная кассета, магнит- ный диск и т. д.) и на место записи или считывания (номер дорожки, сектора и т. д.). Полный вид этих операторов у различных ПЭВМ может иметь некоторые непринци- пиальные различия. Приведенные ниже при- меры относятся к работе с системой подготовки программ на базе микроЭВМ Электроника- ДЗ-28. При записи текста программы на магнит- ную ленту интерпретатор формирует так называемый программный файл, состоящий из заголовка, записи строк программы и закры- вающей файл записи. Для записи программы используется оператор SAVE (хранить). Примеры. 4 SAVE 50, 150 — записываются строки от 50 до 150 безымянной программы; SAVE 'СТАТИСТИКА' — записывается вся программа с именем СТАТИСТИКА; SAVE — записываются все строки (от 1 до 7 999) программ, имеющихся в ОЗУ; SAVE END — служебная запись, озна- чающая конец ленты. Чтение программных файлов с магнитной ленты и их загрузка в ОЗУ производится оператором LOAD (загрузить). Примеры. LOAD 'а' НС1, НС2 — в ОЗУ загружают- ся строки программы с именем а от НС1 до НС2; LOAD 'СТАТИСТИКА' — загружается вся программа с именем СТАТИСТИКА. Следует отметить, что имя программ рас- познается только по шести начальным сим- волам, включая пробелы. Если имя файла Таблица 2.5 Служебные операторы бейсика Запись оператора Действие оператора DELETE п Стирание строки с номером п DELETE т, п Стирание строк с номерами от т до п, LIST Вывод листинга (текста) всей программы LIST /t Вывод листинга строки с номером п LIST m, ri Вывод листинга части программы (строки от т до п) OLD или LOAD Загрузка программы с носителя RUN Пуск программы (вычислений) SAVE Запись программы на носитель СКЛ/Р Остановка программы с печатью знака ~1 скл/и Стирание вводимой строки ЗБ ; Забой (стирание) одного символа 26
не задано, при выполнении оператора SAVE произойдет загрузка очередного файла. Для записи на магнитную ленту блока данных применяется оператор DATA SAVE с последующим списком блока. Например, оператор DATA SAVE В(3), SIN (X-f-Y) ♦ Z, С обеспечивает запись на ленте значений переменной В(3) одномерного массива В, выражения Z * SIN (Х-|-Y), переменной С. Блоки могут объединяться в файлы дан- ных, которые начинаются с оператора (за- головка) DATA SAVE OPEN и заканчи- ваются оператором DATA SAVE END. После заголовка может указываться имя файла, заключенное в апострофы. Чтение с магнитной ленты блока данных с присвоением их переменным производится оператором DATA LOAD со списком пере- менных, разделенных запятыми. Оператор DATA LOAD 'а' обеспечивает поиск на маг- нитной ленте файла с именем а. Для про- пуска некоторого числа блоков или файлов используется оператор SKIP (перепрыгнуть), после которого указывается это число, на- пример, оператор SKIP 2 обеспечивает про- пуск двух блоков данных, а оператор SKIP 3 — пропуск трех файлов данных. Пе- ремотка ленты в начало производится опе- ратором REWIND (перемотать). Операторы SAVE и LOAD могут исполь- зоваться также при работе с дисковым накопителем. При этом после них указыва- ются: номер дисковода (=#=1), номер диска (О или 1 при двухдисковом дисководе), номер дорожки диска и номер сектора. .§ 2.2. Модификации языка бейсик Бейсик имеет десятки модификаций, рас- смотреть которые в одной книге едва ли воз- можно. Это и нецелесообразно, поскольку достаточно ознакомиться с несколькими ха- рактерными версиями бейсика, начиная с простых (§2.1) и кончая расширенными, описанными ниже. Версия бейсика систем подготовки про- грамм (СПП) на базе микроЭВМ Электро- ника-ДЗ-28 содержит ряд дополнительных операторов, приведенных в табл. 2.6. Прежде всего они расширяют набор используемых математических функций. Оператор PRINT TAB а обеспечивает перемещение места печати (или индикации) в строке на позицию с номером, задаваемым целой частью арифметического выражения, числа или переменной а. Этот оператор используется для табуляции табличных дан- ных и печати простых графиков (см. § 2.5). Оператор CALL (вызов) служит для вы- зова внешней подпрограммы с номером п. Внешняя подпрограмма должна завершаться оператором RTS (код 0511). Внешние про- граммы загружаются в начале диалога и могут писаться в кодах, что существенно ускоряет вычисления. Оператор ON (по) обеспечивает безуслов- ный переход (ветвление) по адресу, заданному целой частью арифметического выражения, числа или переменной а (косвенная адре- сация). Версия бейсика микроЭВМ FX-702P класса Pocket Computers содержит практически все операторы описанных выше версий. Допол- нительные операторы этой версии приведены в табл. 2.7. Они наглядно иллюстрируют большие функциональные возможности, ко- торыми могут обладать даже сверхминиатюр- ные ЭВМ класса Pocket Computers. В состав этой версии входит ряд допол- нительных операторов вычисления матема- тических функций: ! (факториала), FRAC (выделения дробной части чисел), DEG и DMS (преобразования углов), RPC и PRC Дополнительные операторы расширенной версии языка бейсик для системы подготовки программ на базе микроЭВМ Электроника-ДЗ-28 Таблица 2.6 Оператор Функция Пояснение DEG(X) X+- 180Х/Л Перевод угла из радиан в градусы RAD(X) X+- nX/180 Перевод угла из градусов в радианы TAN(X) tgx Вычисление тангенса ASN(X) arcsin x Вычисление арксинуса ACS(X) arccos x Вычисление арккосинуса HSN(X) sh x Вычисление гиперболического синуса HCS(X) ch x Вычисление гиперболического косинуса HTN(X) th x Вычисление гиперболического тангенса AHS(X) arsh x Вычисление обратного гиперболического синуса AHC(X) arch x Вычисление обратного гиперболического косинуса AHT(X) arth x Вычисление обратного гиперболического тангенса LGT(X) log x 10х Вычисление десятичного логарифма EXT(X) Вычисление функции 10х PRINT TAB a — Перемещение места печати (или индикации) в строке на позицию с номером, заданным целой частью арифметиче- ского выражения, числа или переменной а (от 0 до 10!) CALL n ON a Вызов внешней подпрограммы с номером п (от 1 до 7999) Безусловный переход по адресу, заданному целой частью арифметического выражения, числа илй переменной а 27
Таблица 2.7 Дополнительные операторы расширенной версии языка бейсик ПЭВМ FX-702P класса Pocket Computers Оператор Пояснение X FRAC X DEG(X, Y, Z) Вычисление факториала x\ Выделение дробной части числа х Преобразование угла, выраженного в градусах X, минутах Y и секундах Z, в угол, выраженный в десятичных долях градуса DMS X Преобразование угла, выраженного в градусах и их десятичных долях, в угол, выраженный в градусах, минутах и секундах с десятичными долями RPC X, Y PRC X, Y RND(a, Y) Преобразование прямоугольных координат в полярные Преобразование полярных координат в прямоугольные Округление численного значения арифметического выражения или числа a с погрешностью до 10 CNT SDX SDY SDXN SDYN MX MY sx SY SX2 SY2 SXY I RA LRB COR EOX у EOY v INP <V> AS Подсчет числа введенных чисел при статистических вычислениях Стандартное отклонение т, (смещенное) Стандартное отклонение у. (смещенное) Стандартное отклонение х; Стандартное отклонение yt Вычисление среднего значения х. Вычисление среднего значения у. Вычисление суммы х, Вычисление суммы у, Вычисление суммы х2 Вычисление суммы у. Вычисление суммы произведения х.у. Вычисление параметра а линейной регрессии у (х) —а-\- Ьх Вычисление коэффициента b линейной регрессии у (х) —а-^-Ьх Вычисление коэффициента парной корреляции г Вычисление х по заданному у при линейной регрессии Вычисление у по заданному х при линейной регрессии Присвоение символьной переменной AS значения символа (V) по опе- ратору INP S -"<V>" Присвоение символьной переменной S значения символа (V), содержа- щего до 30 знаков BS = "<V>" Присвоение символьной переменной BS значения символа <V>, содер- жащего до 7 знаков CS = ASH-BS LEN(CS) M1D (m [, n ] ) Суммирование символов символьных переменный AS и BS Вычисление числа символов в символьной переменной CS Выделение п символов символьной переменной S, начиная с символа AS = KEY VAC SAC CLR ALL PASS"K" GSB 4Fn GOTO с номера т Присвоение клавише А свойств клавиши пользователя Стирание всех ячеек памяти (обнуление всех переменных) Стирание ячеек памяти статистических расчетов Стирание всех программ (от Р0 до Р9) Кодирование (засекречивание) программы кодом К (до 8 знаков) Обращение к подпрограмме, помещенной в программную область Рп Безусловный переход к программе, помещенной в программной обла- сти Рп GSB a Обращение к подпрограмме с косвенно# адресацией (номер строки зада- ется арифметическим выражением а) GSB #a GOTO a GOTO 4^ a Безусловный переход с косвенной адресацией (адрес задается значением арифметического выражения а) Безусловный переход к программе Рп, номер которой п задается значением арифметического выражения a IF NS = "<V>" THEN n, #/r DEFM n CSR n Условный переход по адресу п или к программе Р/т, если символьная константа NS равна символу (V) Высвобождение памяти под 10 (/т-Н) переменных массивов, где п=**0-?19 Перемещение начала индикации или печати на позицию п (/т = 04-19), pkt #.*•## оператор используется вместе с оператором PRT Задание формата чисел в форме с фиксированной запятой (знак # PRT .. соответствует одной цифре) Задание формата чисел в экспоненциальной форме с плавающей запятой SET N (знак =Ц= соответствует одной цифре) Задание стандартной формы чисел с 10-ю знаками мантиссы 28
Таблица 2.7 (продолжение) , Оператор Пояснение SET Е п Задание экспоненциальной формы чисел с п знаками мантиссы (л<10) SET F п Задание формы чисел с фиксированной запятой и п знаками после деся- тичной точки WAIT п Задание индикации с перерывов счета на время, равное п«0,05 с = 0-7-1000) STAT а, 0 Проведение статистических расчетов с парой чисел X и Y, задаваемых значениями переменных X, Y, констант или арифметических выражений а и 0 MODE 4 Задание углов в градусах MODE 5 Задание углов в радианах MODE 6 Задание углов в градах SAVE <f> Запись программы Ря с наименованием файла {[) на кассетный магнитофон LOAD <f>. Ввод программы с наименованием файла (f) в область Рп с кассетного магнитофона SAVE ALL"<f>" Запись всех программ и данных с названием файла (f) на кассетный магнитофон LOAD ALL "<f>" Ввод всех программ и данных с названием файла (J) в микроЭВМ с кассетного магнитофона LIST Распечатка листинга программы Рп принтером LIST "K" Распечатка листинга засекреченной кодом "К" программы Рп принтером LIST ALL Распечатка всех программ (от Р0 до Р9) принтером LIST V Распечатка принтером значений переменной V PUT "<f>" A, В Запись файла данных (переменных А, В) с именем на кассетный магнитофон GET "<f>" S> C Вызов значений переменных S> С файла с именем <f> с кассетного магни- тофона VER "<f>" Контроль правильности считывания файла с именем <f> кассетным маг- нитофоном (преобразования координат), округления/чи- сел с погрешностью до 10\ вычисления 17 статистических характеристик двумерного массива чисел (см. § 5.3). В эту версию входит ряд операций с сим- вольными переменными. Символьной переменной называется пе- ременная (обозначаемая любой латинской буквой со знаком S после нее), которая может принимать значение символа <V>. Например, оператор BS="ABC" присваи- вает символьной переменной BS символ АВС, который должен помещаться в кавычки. При исполнении оператора PRINT BS на инди- кацию или печать будет выведен символ — в нашем случае АВС. Суммирование символьных переменных с помощью оператора вида CS^AS+BS означает простое суммирование символов: если AS="ABC", BS="DEF", то получим CS="ABCDEF". Оператор LEN (CS) обеспечивает под- счет числа знаков в символьной перемен- ной. В нашем примере после исполнения этого оператора получим число 6. Оператор MID (m, [, n]) *) выделяет п зна- ков символьной переменной 5, начиная с сим- вола с номером т. Допустим, символьная пере- менная 5 = "STARTFINISHEND". Для выде- ления слова, выделенного полужирным шриф- том, имеющего п=6 букв и начинающегося *) В квадратных скобках ставится необя- зательный элемент выражения. с символа F с номером т = 6, надо дать команду MID (6.6). Так, если A$=MID (6.6), то символьной переменной AS будет присвоен символ FINISH. Оператор AS— KEY обеспечивает при- своение клавише символьной переменной функции клавиши пользователе (key — кла- виша). Тогда, используя операторы вида IF AS="< V>" . THEN n, можно начать вы- полнение программы со строки с номером п, присвоив переменной AS значение символа (V) (например, с помощью оператора INP (сокращение от INPUT), см. § 2.5). Операторы стирания VAC, SAC и CLR ALL служат для обнуления всех перемен- ных (VAC), стирания ячеек памяти при ста- тистических расчетах (SAC) и общего стирания всех программ (CLR ALL). Опе- раторы VAC и SAC могут вводиться в про- грамму, оператор CLR ALL — служебный (выполняется в режиме записи программы MODE 1). Оператор кодирования программ PASS (код) служит для присвоения программам специального кода (до 8 знаков) в режиме ввода программ — MODE 1. Не зная кода, невозможно вывести листинг программы ^ли стереть программу оператором (JLR (стирание возможно командой CLR ALL). Для вывода листинга код надо указать в кавычках после оператора LIST п (п — номер строки) или LIST. Таким образом, оператор обеспечивает защиту программы пользователя. 29
Операторы GSB #лй GOTO #л служат для обращения к программной области Рл (напомним, что этих областей 10 с п от 0 до 9). Оператор GSB #л применяется, если про- граммная область Рп выполняет функции подпрограммы. При этом она должна завер- шаться оператором RET (сокращение от RETURN). Оператор GOTO =#л обеспечи- вает вход в программную область Р/г без автоматического возврата из нее. Операторы косвенной адресации. Опера- торы GSB a, GSB GOTO а и GOTO =#а обеспечивают обращение к под- программе или безусловные переходы с кос- венной адресацией — адрес указывается целой частью арифметического выражения или значения переменной а. Оператор DEFM п служит для задания массива из 10 (л-Н) ячеек памяти. Число п задается от 0 до 19. При этом число шагов программы сокращается с 1 680 до 80, т. е. увеличение п на 1 сокращает программу на 80 шагов. Оператор CSR в составе оператора PRT (сокращение от PRINT) служит для смеще- ния начала индикации на позицию, п (л = = 04-19). Он аналогичен оператору TAB в других версиях бейсика. Задание формата печати (индикации) обеспечивают операторы вида PRT & ф или PRT # #.#= Каждый символ # до и после десятичной точки задает соответственно печать или индикацию одной цифры результата. Если последний не умещается в формат, то на печать или индикацию выводятся знаки ф. Символ f задает переход к индикации чисел в экспоненциальной форме (см. при- меры ниже): К перспективным версиям языка бейсик принадлежит и бейсик-SO — алгоритмический диалоговый язык высокого уровня для ра- боты с новыми разработками отечественных персональных микроЭВМ и микропроцессор- ных сиртем [26]. В программы на языке бейсик-80 могут включаться подпрограммы, записанные на других языках: фортране, ПЛ/М-80, ассемблере. Бейсик-80 обеспечивает операции с целыми числами и числами с плавающей запятой с обычной и двойной точностью. Возможно представление чисел и в шестнадцатеричной форме. Бейсик-80 имеет мощные средства для эффективного редактирования программ и работы с внешним периферийным оборудо- ванием. Так, при работе с дисковыми нако- пителями бейсик-80 позволяет не только записывать и считывать информацию, но и читать и стирать оглавления файлов, создавать, переименовывать и изменять атри- буты без обращения к операционной системе. Бейсик-80 обеспечивает и работу с символь- ными (строчными) переменными. Алфавит бейсик-80 соответствует обще- принятому (см. § 2.1). В языке бейсик-80 различают директивы, операторы и функции. Директивы (табл. 2.8) — команды, вы- полняемые непосредственно после их ввода с пульта. Они управляют программами или файлами. Большинство директив может ис- пользоваться в операторах программ. Однако следует помнить, что многие из них останав- ливают выполнение программы, обнуляют значения переменных или делают их не- определенными. Операторы (табл. 2.9) выполняются по мере того, как они встречаются в программе. Оператор Индикация X —.0,123456789 Индикация Y = 12^3456789 PRT #; X; Y 0 PRT *.##; X; Y 0.12 *•## PRT **•##*: X;.Y 0.123 12.345 PRT' X; Y 1.235E —01 1.125Е01 Общее число знаков Ф после оператора PRT может быть до 10 включительно. Операторы SET N, SET Ел и SET Fn задают формы представления чисел: SET N — стандартную форму с 10-ю знаками ман- тиссы, SET Ел — экспоненциальную форму с л знаками мантиссы. Оператором SET Ел задается форма чисел с фиксированной запя- той и л знаками после нее. Оператор SET 5 обеспечивает округление последнего знака результата, а оператор SET 0 — сброс округ- ления. В последнем случае происходит усе- чение результата. Оператор задания паузы WAIT л обеспе- чивает по оператору PRINT паузу в вычис- лениях с выдачей результата на время л-0,05 с, причем л может задаваться от 0 до 1 000. Смцсл остальных операторов расширенной версии бейсика микроЭВМ FX-702P очевиден из пояснений, приведенных в табл. 2.7. 30 Они составляют большинство рабочих пред- писаний (команд) программ. Функции (табл. 2.10) служат для образо- вания арифметических и логических выраже- ний совместно с директивами и операторами. Функции подразделяются на арифметические и строчные (для работы с символьными переменными). В бейсике-80 21 директива, 39 операторов и 48 функций. Все они образуют инструк- ции данного языка. Представление данных в бейсике-80. Бей- сик-80 оперирует е арифметическими данными в виде констант и переменных. Константы с обычной точностью определяются суффик- сом I, который ставится после арифметиче- ского значения, или с помощью буквы Е, обозначающей представление константы в экспоненциальной форме с плавающей точкой (запятой). В последнем случае числа лежат в диапазоне от ±1.2Е — 38 до ±3.4Е-|-38.
Таблица 2.8 Директивы языка бейсик-80 Директива Описание Примеры ATTRIB Изменить атрибуты файла ATTRIB:"Fl :STAT,W" AUTO, Задать автоматическую нумерацию строк с заданным приращением и номером на- чальной строки AUTO 25, 500 CLEAR Установить дополнительную память для строк (в байтах) CLEAR 2000 CONT Продолжить выполнение программы CONT DELETE' Уничтожить строку (или строки) в про- грамме DELETE 700-875 DIR Прочесть оглавление файлов на диске DIR 1 EDIT Изменить указанный оператор программы EDIT 170 EXIT Вернуть управление операционной си- стеме EXIT KILL Уничтожить файл на диске KILL ":F1:STAT" LIST Вывести строку (или строки) программы LIST 300-400 LOAD Загрузить указанный файл с диска LOAD ": Fl: DATE S" MERGE Соединить указанный программный файл с текущей программой MERGE ": Fl: DATES" NEW Уничтожить текущую программу и очис- тить переменные NEW PRUN Выполнить программу, хранящуюся в ПЗУ PRUN 4 E00H RENAME Изменить имя файла RENAME ": Fl: SOUP" TO ": Fl: NUTS" RENUM Изменить номера строк программы RENUM RUN Начать выполнение программы ’RUN SAVE Записать программу или файл на диск SAVE ":Fl:INVEN" TRON Включить трассировку TRON TROF Выключить трассировку TROF WIDTH Изменить ширину строки W10TH 80 Операторы языка бейсик-80 Таблица 2.9 Оператор Описание Примеры CLOSE Закрыть один или более файлов CLOSE 3 DATA Задать значения, которые могут быть считаны оператором READ DATA 9, 0, ON DEF Определить написанную пользователем функцию DEF FNRT (Rh R2) = R1*R2/(R1 +R2) DEFDBL Определить переменные, имена которых начинаются с указанной литеры как пе- ременные с плавающей точкой с двойной точностью DEFDBL R — Z DEFINT Определить переменные, имена которых начинаются с указанной литерь! как цело- численные переменные DEFINT I - N DEFSNG Определить переменные, имена которых начинаются с указанной литеры как пе- ременные с плавающей точкой с обычной точностью DEFSNG В — H, X DEFSTR Определить переменные, имена которых начинаются с указанной литеры как строчные переменные DEFSTR К - О DEFUSR Ввести подпрограммы на другом языке DEFUSR - 4E00H DIM Зарезервировать память для переменных массива (массивов) DIM A(25,10,30) END Закончить программу END ERROR Имитировать ошибки с данным номером ERROR 12 31
Таблица 2.9 (продолжение) Оператор | Описание | Примеры FIELD Зарезервировать память для буфера файла прямого допуска FIELD ф 3,20, ASA 0 FOR...ТО...NEXT... STEP Х Создать цикл ... FOR 1 = 1 ТО 5 STEP. 5 NEXT I GET Прочесть данные на диске файла GET #2,4 GOSUB Выполнить подпрограмму GOSUB 500 GOTO Выполнить безусловный переход по ука- занному номеру строки GOTO 1000 IF...THEN...ELSE Выполнить оператор, если указанное вы- ражение истинно; если ложно — выпол- нить второй оператор IF A> В THEN 250 ELSE PRINT "END" INPUT I. Ввести данные с терминала 2. Прочесть данные из последователь- ного файла INPUT А, В, C INPUT #1, A 0, в а LET Присвоить значение переменной LET X=100 LINE INPUT Ввести целую строку из последователь- ного файла LINE INPUT A0 LSET Выровнять указанные строки по левому краю LSET A0 ==B 0 ON ERROR Перейти к строке с заданным номером, если появилась ошибка ON ERROR GOTO 900 ON GOTO Перейти к строке с номером, заданным значением выражения X ON X GOTO 10, 50, 80 ON GOSUB Перейти к подпрограмме, номер первой строки которой задается значением вы- ражения X ON X GOSUB 100, 200, 500 OPEN Создать файлы последовательного или прямого доступа OPEN "R", #3, "F1:PERSON" OPTION BASE Присвоить начальные значения элемен- там всех массивов (0 или 1) OPTION BASE 0 OUT Записать указанное целое число в устрой- ство ввода-вывода OUT 00F0, 12 POKE Записать байт в указанное место памяти POKE 0A077, 12 PRINT 1. Вывести значения переменных на тер- минал 2. Завести данные в последовательный файл на диске PRINT А, В, C PRINT #4, A0, B0 PRINT USING Представить текст в соответствии с дан- ным форматом PRINT USING "0 0 ##,##; 17.45; 24.67 PUT Занести данные в файл прямого доступа на диске PUT #3; A0, B0, C0 RANDOMIZE Инициализировать генератор случайных чисел RANDOMIZE READ Присвоить значения переменным про- граммы из списка оператора DATA READ A, KI, L, Z REM Напечатать комментарий в тексте про- граммы 10 REM START RESTORE Установить заново указатель для чтения данных из оператора DATA RESTORE RESUME Возобновить выполнение программы по- сле обнаружения ошибки RESUME RETURN Возвратить управление оператору, сле- дующему за последним GOSUB RETURN RSET Выровнять указанные строки по правому краю RSET L 0 =MK0 STOP Остановить выполнение программы STOP SWAP Провести обмен значениями для двух переменных одинакового типа SWAP Al 0, B2 0 WAIT Остановить выполнение программы до тех пор, пока при сравнении не получит- ся значение «Истинно» WAIT 1, 04H, 0AH LEN Определить число символов в указанной строке LEN (X0) 32
Таблица 2.9 (продолжение) Оператор Описание Примеры LOC Определить текущий номер записи в фай- LOC (#Х) LOF ле прямого доступа X или количество прочитанных или записанных секторов в последовательном файле X Вычислить число записей в файле прямо- LOF(X) LOG го доступа или число секторов с данными в последовательном файле X Вычислить натуральный логарифм от X LOG(X) M1D0 Указать J литер, начиная с 1-й, MID0 (AQ, I, J) мкю в строке АО Преобразовать 2-байтную строку в целое MKIO (AO) MKSQ значение Преобразовать 4-байтную строку в зна- mkso (AC) MKDO чение с плавающей точкой с обычной точностью Преобразовать 8-байтную строку АО MKDO (AO) оста в значение с плавающей точкой с двой- ной*точностью Преобразовать систему восьмеричных оста (X) РЕЕК цифр в эквивалент десятичного аргу- мента Указать отдельный байт памяти по PEEK(X) POS адресу X Указать позицию курсора после послед- POS (DUMMY ARGUMENT) RIGHT него PRINT Вывести I % правых литер в строке RIGHT (xa, I %) RND Выдать случайное число обычной точно- RND SGN сти со значением между 0 и 1 Указать знак X SGN(X) SIN • Вычислить синус SIN(X) SPACEO Вывести 1% пробелов SPACEa (X) SPC Указать строку Х% пробелов SPC(X%) SQR Вычислить корень квадратный из X SQR(X) STRO Преобразовать строку десятичных цифр sTRa (X) STRINGO в десятичный аргумент X Вывести первую литеру строки AQ, STRINGa (Y %, Aa> TAB повторенную Y% раз Начать вывод с позиции X дисплея или TAB(X) TAN принтера Вычислить тангенс X TAN(X) USR Обратиться к подпрограмме пользова- AX = USR 12(A1, A2) VAL теля от 0 до 24 Преобразовать числовое значение XQ VAL (XO) VARPTR аргумента Указать адрес-памяти X VARPTR(X) Функции языка бейсик*80 Таблица» 2.10 Функция Описание Примеры ABS Выдать абсолютное значение X ABS(X) ASC Выдать код КОИ8 для первой литеры указанной строки ASC(AO) ATN Вычислить арктангенс (в радианах) X ATN(X) . CDBL Вывести значение X с удвоенной точностью с плавающей CDBL(X) запятой chro Вывести литеру, соответствующую коду КОИ8 CHRa (X) CINT Округлить X до целого числа CINT(X) cos Вычислить косинус (в радианах) X COS(X) 2 В. П. Дьяконов
Таблица 2.10 (продолжение} Функция Описание Примеры CSNG Вывести значение X с обычной точностью с плавающей точкой CSNG(X) CVD Преобразовать 8-символьную строку в число с двойной точностью CVD(X#) CVI Преобразовать 2-символьную строку в целое число CVI(X%) CVS Преобразовать 4-символьную строку в число с обычной точностью CVS(X!) DSKF Указать число свободных 128-байтных блоков на ука- занном диске DSKF(l) EOF Выдать указание (да — 1, нет — 0) о том, достигнут ли конец файла при чтении последовательного файла дан- ных A = EOF(#X) ERL Указать номер строки, в которой произошла послед- няя ошибка ERL ERR Указать код последней ошибки ERR EXP Вычислить значение ех EXP(X) FIX Вычислить усеченное целое значение X FIX(X) FRE Определить число байт, оставшихся в памяти, при за- дании фиктивного аргумента X или XQ FRE(X) HEXd Представить целочисленный аргумент Х% (от —32768 до 32767) в 16-ричном виде HEX0 (X %) INP Вывести значение байта из устройства ввода-вывода, указанного выражением в скобках INP(X) INSTRCI Указать позицию, заданную XQ, в строке YQ INSTRCI (X0, Y0) INT Вычислить наибольшее целое значение, меньшее или равное значению (X) INT(X) LEFTCI Вывести X литер строки А0,начиная с ее левого конца LEFT (Ad, X) Примеры ввода констант: —1.414! (чис- ло— 1,414); 5.26Е —12 (число 5,26* 10“12). Константы с плавающей точкой с двойной точностью определяются суффиксом =#= или буквой D. Диапазон значений чисел при этом расши- ряется от ±2.2Е —308 до ±1.7Е-|-ЗО8. Примеры ввода констант с двойной точностью: —1.2345678912D 15 (число -1,2345678912-1015); -12,3=#= (число -12,3). Арифметические переменные бывают трех типов: целые, с плавающей точкой с обычной точностью и с двойной точностью. Они представляют значения чисел, которые могут изменяться в процессе выполнения программы. Арифметические переменные языка бейсик-80 могут изображаться одной или двумя буквами, за которыми может следовауь определяющий их тип суффикс. Первый элемент обозначе- ния переменных. обязательно должен быть буквой, второй — любым алфавитно-цифро- вым знаком. Если имя переменной содержит более чем две литеры (кроме суффикса, определяющего тип), остальные литеры имени переменной игнорируются. До присвоения переменным численного значения оно задается равным нулю. Дирек- тивы NEW, RUN, CLEAR, LOAD и MERGE обнуляют все переменные. С помощью операторов DEFINT, DEFSNG или DEFDBL можно определить ряд имен для обозначения арифметических переменных ука- занных типов. Группы переменных, которые начинаются с определенных букв, могут быть заданы с помощью этих операторов в следующем виде: DEFXXX М (N], где N — любая буква от А до Z, М — любая буква от N до Z. При этом все они задаются как переменные одного типа. По умолчанию все переменные имеют представление с обычной точностью. Если какие-то переменные должны быть иного типа, их следует определить в начале про- граммы. Определители имеют вид знаков: % для целочисленных переменных, ! для пере- менных с обычной точностью и # для пере- менных с двойной точностью. Строчные или символьные константы пред- ставляют собой группу знаков, заключенных в кавычки, например: "NEWTON METHOD" или "PI = 3.14159". Внутри этих переменных нельзя использовать кавычки. Число знаков (длина строки) может доходить до 255. Строчные переменные — переменные, при- нимающие по ходу выполнения программы символьные. значения. Имя строчной nepet менной задается одним или двумя знаками: первый обязательно буква, второй — любой. После них следует символО, определяю- щий символьную переменную. Например, переменная А10 NEWTON METHOD имеет имя A1Q и значение символа NEWTON METHOD. Преобразование данных из одного типа в другой в бейсике-80 обеспечивается с по-
мощью ряда специальных функций (см. табл. 2.10). Массивы (одномерные и двумерные) в бейсике-80 задаются, как и в других версиях языка бейсик, именем переменной и номе- рами строк и столбцов в скобках: напри- мер, А2(3,4) задает переменную массива А2 с индексами 3 и 4. Задание памяти под массив обеспечивается оператором DIM. В строчных переменных массивов необходим резервировать и число знаков в строке. Например, оператор DIMA ££(10,20,25) ре- зервирует память под строчную переменную из массива АО. Приоритет выполнения операций в бейси- ке-80. » Функция CSNG(X) вычисляет выраже- ние X с обычной точностью (до 7 десятичных позиций). Пример. Ю А=# = I.DO/3.DO 20 PRINT CSNG(A#)/2, А =#=/2 RUN .1666667 .166666666666667 Функции CVI, CVS, CVD преобразуют строки в числа: CVI — 2-символьную строку в целое число, CVS — 4-символьную строку в число с обычной точностью и CVD — 8-символьную строку в число с двойной точностью. Они используются для восстанов- ления числовых значений из поля буфера Операция Пример 1. Выражение в скобках 2. Возведение в степень 3. Отрицание (обозначается знаком —) 4. Умножение (♦) и деление (/) 5. Целочисленное деление (знак \) с преобразованием делимого, делителя и результата в целые числа 6. Модуль числа 7. Сложение и вычитание 8. Операции отношения (А + В) А^В -А А*В или А/В А\В AMOD A-j-B или А —В А> В и др. Самый низкий приоритет у логических операций. Они выполняются в порядке их наименования: НЕ, И, ИЛИ, исключающее ИЛИ, логическая импликация и логическая эквивалентность. Арифметические и логические выраже- ния в бейсике-80 строятся по правилам, ти- пичным для других версий (они описаны выше). Специальные функции языка бейсик-80 — такие функции, которые характерны для данной версии бейсика и имеют те или иные отличия от функций бейсика, описанных ранее. Арифметическая функция CDBL(X) изме- няет тип выражения X на представление с двойной точностью с плавающей точкой. В этом формате результат выдается с точ- ностью до 16 десятичных цифр. Пример. 10 А=#= = 1/3 20 B#==CDBL(l/3) 30 PRINT А=#=, В^ 40 END .333333 .333333333333333 Строчная функция CHRO (Выражение) приводит выражение к целому числу в интер- вале от 0 до 255. Арифметическая функция C1NT(X) округляет выражение (X) до целого значения. Пример. 10 INPUT А, В, С 20 PRINT (ClNT(A + B + C)/3) 30 END RUN ? 45, 24, 77 49 файла прямого доступа и являются обрат- ными функциями MKIO, MKSO и MKDO Функция INP (Выражение) вводит значение байта со входного порта, номер которого ука- зан целочисленным выражением (от 0 до 255). Функция INPUTO (Выражение; Номер файла) читает заданное количество символов из указанного номером файла. Пример. В программе 10 OPEN "1" =#=2, ":С1" 20 PRINT INPUTO (10,2) 30 CLOSE =#=2 40 END RUN 123456789 (ВК) 123456789 строка 20 печатает первые 10 символов файла #=2, а оператор CLOSE закрывает файл. Функция INSTR ищет первое вложение второй строки ВО в первой строке АО и определяет порядковый номер второй строки. Она формирует 0 при трех условиях: если I больше длины АО, если ВО не может быть найдена и если АО не содержит символа. Вид записи функции: INSTR ([1,1 Строчное выражение АО,. Строчное выражение ВО). Пример. 10 АО ="RANDON NUMBER SUBROUTINE" 20 BO="R" 30 PRINT INSTR (AO, BO) 40 PRINT INSTR (2, AO, BO) 50 END RUN 1 13 2* 35
Функция INT(X) отыскивает наибольшее целое значение, меньшее или равное ука- занному выражению или числу X. Например, если В = INT( 15,021), то распечатка В дает значение 15. Строчная функция LEFT0 (Строчная переменная. Выражение) находит значение строки Х0 и определяет I левых символов. Пример. 10 ха = "WHITE, SMITH, JONES, BLACK, GREEN" 20 Y0 = LEFT Q (Xa, 11) 30 PRINT Ya RUN WHITE, SMITH Строчная функция LEN(XO) подсчи- тывает количество символов строки Х0, включая непечатаемые символы и пробелы. Функция LOC в файле прямого доступа определяет текущий номер последней запи- санной или прочитанной записи. В последо- вательном файле функция LOC определяет число секторов, прочитанных или записан- ных со времени выполнения последнего оператора OPEN. Функция записывается в виде LOC (Номер файла) Пример. 10 OPEN "R", #=3,: Fl: RANDON 20 GET #3, 44 30 PRINT LOC(3) 40 END RUN 44 Функция LOF (Номер файла) вычисляет число записей в файле прямого доступа, а в файле последовательного доступа вычис- ляет число секторов с данными (128 байт на сектор) в файле. Функция MID0 (XQ, I [, J]) проверяет строку XQ и выделяет ее правые символы, начиная с позиции, заданной значением I. Здесь I и J — целые числа от 0 до 255. Если указан аргумент J, определяется J символов, начиная с позиции I. Если I больше, чем LEN (Х0), то MID0 формирует пустую строку. Если J больше числа символов в Ха справа от 1-й позиции или J не ука- зано, функция MID0 формирует остаток строки. Пример. 10Xa="JOHN J. JONES" 20 PRINT MID0 (Xa, 10, 3) 30 END RUN ONE Функция MKia, MKS0 и MKDa пре- образовывают данные как числовые значения в 2-, 4- или 8-байтные строки соответственно. МК1 0 используется для преобразования целого значения, MKS0 — для преобразо- вания значения с плавающей запятой с обыч- ной точностью и MKD0 — для преобразо- вания значения с плавающей запятой с двой- ной точностью. Функция ОСТ О (Выражение) определяет строку восьмеричных цифр, представляющую значение целого аргумента (выражения). Функция РЕЕК (Выражение) читает один байт памяти в указанном месте, а функция РОКЕ (см. далее) записывает один байт в указанное место памяти. Например: PRINT PEEK (0FABH) 200 где 200 — прочитанный байт из места 0FABH памяти. Функция POS (Целое число или Выра- жение) указывает позицию курсора после последнего оператора PRINT. В записи POS(I) аргумент 1 является фиктивным, самая левая позиция курсора соответствует Функция RANDOMIZE запрашивает ввод нового случайного числа, которое является начальным для функции генерации случай- ных чисел с равномерным распределением RDN. Если функция RANDOMIZE не исполь- зуется, то одна и та же последовательность случайных чисел будет повторяться каждый раз. Функция RANDOMIZE ’записывается в виде RANDOMIZE (Выражение) причем начальное случайное число задается выражением (либо константой или пере- менной). Функция RIGHT0 (Строка, Целое I) определяет I правых символов строки Х0. "Если 1=0, выдается пустая строка, а если I превышает длину строки Х0, то выдается вся строка. Пример. •10 Aa="JOHN J. JONES" 20 xa =right0 (Aa, 8) 30 PRINT xa 40 RUN J. JONES Функция SPACEa (Целочисленное вы- ражение) формирует в строке пустой интер- вал, состоящий из пробелов, число которых задается значением целочисленного выра- жения. Функция SPS (Целое число) совместно с оператором PRINT также формирует пустой интервал из N пробелов (N — целое число). Функция STRING0 (Целое, Целое) определяет строку, в которой заданный символ повторяется указанное число раз. В записи STRING0 (Целое, Строчное вы- ражение) заданное число раз повторяется первый символ строчного выражения. Функ- ция STR0 (Выражение) формирует строку десятичных знаков, которая представляет значение целочисленного выражения. Пример. 10 FOR 1=0 ТО 9 20 Aa=A0H-MIDa (STR0 (I), 2) 30 NEXT I 40 PRINT A0 RUN 0123456789 36
Функция USRN задает обращения к опре- деленным пользователем подпрограммам, записанным на языке ассемблера, фортран-80 или ПЛ/М-80. Оператор DEF USRN опре- деляет начальный адрес соответствующей подпрограммы USRN. Аргумент N может быть любым целым от 0 до 24; если он не указан, полагается N=0. Символ типа обозна- чает тип результата. Если обозначение типа отсутствует, результат определяется как целое число в регистрах Н и L микропро- цессора. Функция VAL (Строка) определяет числен- ное значение строки. Пример. 10 INPUT AQ 20 Al = VAL (AQ)*52 30 PRINT Al > RUN ? 4 (t. e. AQ ==4) 208 (т. e. имеем 4*52) Специальные директивы и операторы. Под специальными директивами и операто- рами языка бейсик-80 подразумеваются спе- цифические именно для него директивы и опе- раторы. Ниже они даны в алфавитном порядке. Директива* ATTRIB изменяет атрибуты файлов на дисках или защищает любой файл от записи, стирания или изменения имени. Защита файла выполняется директи- вой в виде ATTRIB:F Номер дисковода, "Имя фай- ла", "W!" Запись, стирание и изменение ранее защи- щенного файла обеспечивается директивой ATTRIB :F Номер дисковода, "Имя фай- ла", "W0" Директива AUTO обеспечивает автомати- ческое присвоение номера каждой строке программы. Она вводится в виде AUTO Приращение номера [, Номер первой строки] Так, директива AUTO 50, 300 задает номе- ра строк с приращением 50, начиная со стро- ки 300, т. е. строки будут иметь номера 300, 350, 400, 450 и т. д. По умолчанию, т. е. при вводе только директивы AUTO, приращению и номеру первой строки присваи- ваются значения 10. Если задаваемый дирек- тивой AUTO номер строки имеется в про- грамме, он отмечается знаком ♦. Директива CLEAR обнуляет все пере- менные и массивы, определения функций и закрывает файлы. Символьные перемен- ные при этом становятся пустыми строками. Эта директива может записываться в виде CLEAR [Выражение [Адрес]] Численное значение выражения указывает пространство для строк в байтах. Например, директива CLEAR 2000, 0D000H резерви- рует (высвобождает) 2000 байт для строк и не позволяет использовать адреса памяти выше 0D000H. Директива CLOSE [Номер] закрывает файл с заданным номером. Если аргумент (номер) не указан, директива CLOSE за- крывает все файлы. Все файлы закрывают также директивы END, NEW, MERGE, LOAD, RUN (без F), Директива DEF FN(X) задает функцию пользователя. Здесь FN — имя функции, X — аргумент (функция может быть с любым числом аргументов). Директива DELETE НС, где НС — номер строки, уничтожает одну строку с заданным номером, директива DELETE —НС уничто- жает строку с номером НС и все предшест- вующие ей строки. Директива DELETE НС1, НС2 уничтожает строки с номерами от НС1 до НС2. Директива DIR воспроизводит имена, число блоков и длины (в байтах) файлов, сохраняемых на указанном после нее диске. Оператор END останавливает выполнение программы и закрывает все файлы. Пере- менные при этом сохраняют свои значения. Оператор STOP действует как END, но файлы не закрываются и при его исполнении появляется сообщение BREAK IN НС (т. е. останов в строке НС). Оператор END рекомендуется ставить в конце программы, хотя это не обязательно. Оператор ERROR "Выражение" имитирует происхождение ошибки. Если ERROR выпол- няется с номером, который не соответствует сообщению об ошибке, будет напечатано сообщение UNPRINTABLE ERROR Оператор FIELD#: «Номер файла» ис- пользуется для назначения памяти в одном из шести 128-байтных буферов файлов прямого доступа. Для чтения определенной записи из дис- кового файла в 128-байтный буфер служит оператор GET[#] Номер файла [, Номер записи] Оператор условных переходов в бейсике-80 может иметь вид IF Выражение THEN Инструкция ELSE Инструкция Например, оператор 50 IF Х = 0 THEN А = 5 ELSE А = 20 означает, что если Х = 0, то А = 5, иначе А = 20. Оператор KILL Строчное выражение служит для исключения из дисковой памяти программы. Он также уничтожает заголовок программы в оглавлении. Оператор INPUT помимо обычного приме- нения (задания численных значений пере- менной или переменным списка) используется в составном операторе LINE INPUT. Послед- ний читает целую строку данных и присваи- вает ее указанной строчной переменной в качестве значения. Данные могут быть прочитаны из файла на диске или введены 37
с пульта. В последнем случае оператор LINE INPUT задается в форме LINE INPUT [Строчное выражение;] Строчная переменная; При этом оператор обеспечивает печать строчного выражения в качестве напоминания и ждет указания строчной переменной. При вводе данных с файла оператор запи- сывается в виде LINE INPUT & Номер файла, Строчная переменная Директива MERGE читает программу с диска и соединяет ее с текущей программой без изменения строк каждой из программ. Если программы имеют строки с одинаковыми номерами, то введенные с диска строки за- мещают строки текущей программы. Дирек- тива MERGE стирает все переменные. Она записывается в виде MERGE Строчное выражение Директива NEW стирает всю текущую программу и обнуляет все переменные. Оператор ON ERROR GOTO НС пере- дает управление на строку” с номером НС, если возникает ошибка. Оператор ON Выражение GOTO НС1, НС2, ... передает управление строкам НС1, НС2 и т. д. по результатам вычисления выражения (либо значения переменной). Оператор ON Выражение GOSUB НС1, НС2, ... обеспечивает обращение к подпрограммам, начинающимся со строк НС1, НС2 и т. д., по результатам вычисления выражения. Таким образом, операторы ON GOTO и ON GOSUB осуществляют1 косвенную адре- сацию. Оператор OPEN Тип, [#] Номер файла, Имя файла делает файл Операционной системы доступ- ным для программы. Тип файла указывается знаками: R — для файла с прямым доступом, 1 — для последовательного вводного файла и 0 — для последовательного выводного файла. Номер файла — целое число от О до 6, перед которым ставится знак =#. Одно- временно можно открыть только 6 файлов. Директива OPTION BASE N (где N=*=0 или 1) задает индексирование массивов с еди- ницы (N = l) или с О (N —0). Оператор OUT Номер порта, Выражение записывает значение выражения в виде це- лого числа от 0 до 255 в указанный номер порта. Оператор РОКЕ Ячейка, Выражение помещает значение выражения (округленное до целого числа) в указанную ячейку памяти. До использования этого оператора нужно использовать директиву CLEAR, чтобы за- резервировать свободную память. Оператор PRINT выводит на печать зна- чения выражений или текст. Литерные строки 38 текста заключаются в кавычки. Оператор PRINT USING Номер файла,] Строка формата; Выражение, ... обеспечивает вывод при специальных форма- тах. Строка формата определяет пробелы и дополнительные символы (*0) при печата- нии числовых полей или определяет части дан- ной строки при печатании строчных полей. Необязательный номер файла определяет последовательный дисковый файл. Для оператора PRINT USING со строч- ными полями существуют два формата: «!» определяет, что печатается первый символ каждой указанной строки; N пробелов опреде- ляют, что печатаются первые 2 + N символов (если используется обратная косая черта без пробелов, то печатаются 2 символа). Если поле содержит больше символов, чем принимаемая подстрока, лишние символы отбрасываются; если символов меньше — вставляются пробелы, чтобы заполнить поле. Пример. 10 ХО =«ONE» 20 Y0=«TWO» 30 PRINT USING <!»; X0; Y0 40 PRINT USING 5; X0; YO RUN ОТ ONE TWO Число цифр, выводимых на печать опе- ратором PRINT USING, указывается сим- волами =#=, между которыми может стоять знак «,» или «.». Число знаков # до знака «,» или «.» задает вывод целой части, а после этих знаков — дробной части. При необходимости числа округляются, например: PRINT USING «#=#,:#=#=»; 41.287 41.29 PRINT USING 71/100 0.71 Если число, которое выводится на печать, мало, чтобы заполнить все указанные цифры слева от десятичной точки, вставляются про- белы, заполняющие все поле. До 5 цифр можно напечатать для целого числа, до 7 — для числа с плавающей точкой с обычной точностью и до 15 — для числа с плавающей точкой с двойной точностью. Знак 4- может использоваться в начале или в конце поля символов формата. Он печатается в соответствующем месте. Знак — используется справа поля символов формата, чтобы вызвать печать замыкающего знака «минус», если число отрицательное (если число положительное, печатается про- бел). Если ни + , ни — не включены в формат, отрицательное число печатается со знаком —. Примеры. PRINT USING «+#.=#:#> 4. 89; -2.6689 + 4.89; -2.67 PRINT USING «=#=#:.=#»; —5.8; 96.2; -5.8 96.2
С помощью символов ** предшествующие пробелы заполняются звездочками: PRINT USING «**#=#=.=#=»; 4.8; 243,3; *♦*4.8 *243.3 Символы О 0 добавляют один знак 0 слева от формируемого числа: PRINT USING «0 0###.##>; —48.28; 364.90; - 048.280364.90 Знаки 0 0 определяют пространство для двух дополнительных символом, но добавлен- ный символ 0 использует одну позицию. Символы f 111 задают формат числа в экспоненциальной форме. Стрелки поме- щаются после цифровых символов формата. Символ % выдается перед числом, если оно не входит в формат: PRINT USING «##.##»; 40.48; 99,997; 40.48 %99997 Директива PR UN Адрес обеспечивает выполнение программы, хра- нящейся в ППЗУ. Адрес программы — целое число. Оператор PUT Номер файла, [Номер записи] передает данные из определенного файла в указанную запись диска. Оператор REM используется для ввода в программу программных комментариев, которые выводятся на печать только при выводе листинга программы. Комментарии записываются непосредственно после опера- тора REM, например: 10 REM ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ СИМПСОНА Директива RENAME "Старое иМя файла" ТО "Новое имя файла" изменяет имя указанного файла на новое с изменением ссылки в оглавлении. Директива RENUM [Новый номер] [, Старый номер] [, Приращение] переупорядочивает номера строк в программе независимо от того, появляются ли они в начале строки или являются аргументом в операторе GOTO. В директиве можно указать три необязательных аргумента: новый номер первой перенумерованной строки, старый номер перенумерованной строки и при- ращение строк. Если аргументы не указаны, первой строке присваивается номер 10 и при- ращение принимает значение 10. Пример. 20 INPUT А 40 PRINT «NEW»; А 15 RANDOMIZE 5 PRINT CHR0 (12) 52 A1=A*RND 58 A2 = INT(A) RENUM LIST 10 PRINT CHR0 (12) 20 RANDOMIZE 30 INPUT A 40 PRINT «NEW»; A 50 A1=A*RND 60 A2 = INT(A1) Оператор RESUME возобновляет выпол- нение программы после управляемой ошибки, которая обнаруживается. Выполнение про- граммы начинается с указанной строки. Если номер строки не указан, выполнение програм- мы происходит с оператора, в котором была обнаружена ошибка. Оператор RESUME [Номер строки] NEXT обеспечивает выполнение оператора, следую- щего за оператором с ошибкой. Директива RUN обеспечивает выполне- ние программы, начицая с наименьшего номера строки. Если за оператором RUN следует строчная переменная, обеспечивается поиск файла с заданным ею именем, за- грузка его в память и выполнение программы, начиная с наименьшего номера строки. Ввод символа |С, в том числе вместо данных по оператору INPUT, останавливает выполнение программы и вызывает печать сообщения BREAK IN НС (где НС — номер строки, на которой прервано выполнение программы). Директива SAVE Строчное выражение [А] заносит текущую программу на диск с ука- занным строчным выражением именем файла. Если файл с таким именем уже есть на диске, он будет заменен новым. Оператор SWAP Переменная 1, Переменная 2 обеспечивает обмен значениями двух перемен- ных: переменной 1 и переменной 2. Директивы TRON и TROF соответственно включают и выключают трассировку програм- мы, т. е. обеспечивает пооператорное выпол- нение программы. Директива WAIT Номер порта, Байт маски, Байт сравнения предписывает принять поступавшие с указан- ного порта байты. Эти байты проверяются по байту маски, который является целым выражением (от 0 до 255). Если байт срав- нения не указан, он задается равным 0. Директива WAIT выполняет операцию исклю- чающее ИЛИ над состоянием порта и байтом сравнения, а результат и байт маски подтверж- даются операцией И. Выполнение продол- жается до тех пор, пока не будет получена ненулевая величина. 39
Директива WIDTH Выражение задает ширину печатаемых на консоли строк к заданной выражением величине (от 15 до 255). Если выражение не указано, ширина строк задается с 72 знаками. Особенности ввода и редактирования про- грамм на бейсике-80. Бейсик-80 имеет ряд дополнительных возможностей для ввода и редактирования программ. Так, используя директиву AUTO, можно автоматически ну- меровать строки, начиная с заданного номера с заданным приращением. После ввода дирек- тивы AUTO бейсик-80 формирует номер стро- ки и ждет ввода операторов. Если ввод их закончен символом возврата каретки ВК, интерпретатор бейсик-80 формирует номер следующей строки и т. д. Ширина поля печати равна 72 символам, но может изме- няться директивой W1DHT. Бейсик-80 обеспечивает редактирование программ: стирание и замену текстов, отдель- ных строк и предложений, коррекцию сим- волов и предложений, коррекцию символов в операторах, объединение строк и др. Он имеет также возможности для работы с дис- ковым накопителем. Бейсик-80 включает в себя два типа операций ввода-вывода файлов на диске: последовательный и с прямым доступом. Последовательный позволяет читать и писать файл от начала до конца,- а с пря- мым доступом — указывать, где в файле вы- полняется чтение и запись. Операторы работы с файлами были описаны выше. Более по- дробные сведения о редактировании программ и работе с периферийным оборудованием можно получить из [26] и технической документации на вычислительные средства, использующие версию бейсик-80. Данные о некоторых других версиях бей- сика. В некоторых версиях бейсика, например, бейсике-плюс для серии отечественных мини- ЭВМ (включая ЭВМ СМ-4) и бейсик-ЗА-TDM для ЭВМ Электроника-ДЗ-28 имеется ряд дополнительных операторов. Прежде всего, к ним относятся операторы выполнения матричных операций. Оператор чтения элементов матриц МАТ READ А, В, С, ... обеспечивает чтение элементов матриц А, В, С, ... последователь- но по строкам. Массивы элементов матриц предварительно задаются операторами DIM и DATA: 10 DIM А<3.»3) 20 DATA 1 .«• 2* 3/ 4/ б/ 7/ У/ 9 30 MAT READ А Оператор ввода элемента матрицы с пульта MAT INPUT А обеспечивает ввод элемен- тов матрицы А построчно с клавишного пульта. Оператор вывода матрицы MAT PRINT А, В, С, ... обеспечивает вывод массива элементов матриц А, В, С, ... построчно и последовательно, т. е. вначале выводятся элементы матрицы А, затем В и т. д. Оператор задания нулевой матрицы MAT A = ZER формирует матрицу А, у кото- рой все элементы нулевые. Оператор задания матрицы с единичными элементами MAT A = CON создает матрицу А, у которой все элементы имеют значения 1. Оператор задания единичных элементов akk MAT A = IDM создает матрицу А, у кото- рой элементы ал*=1, а остальные 0. Если матрица А квадратная, то этот оператор создает единичную матрицу. Оператор транспонирования МАТ В = =TRN(A) обеспечивает транспонирование матрицы А, т. е. получение матрицы В, у ко- торой элементы Ь^ — ац. Матрицы А и В не должны совпадать, а их размерности должны соответствовать возможности транспониро- вания. В противном случае ПЭВМ выдает указание об ошибке. Оператор обращения матриц МАТ С = = INV (А, В) или MAT B = INV(A). Форма записи зависит от версии бейсика. В первом виде исходной является квадратная матри- ца С и должны быть зарезервированы два служебных массива А и В. После выполнения оператора MAT C = INV(A, В) обращенная матрица помещается на место исходной, а элементу А(0) присваивается значение определителя D исходной матрицы С. Во вто- ром виде оператора исходной является матри- ца А и формируется матрица В = А~’. Определитель при этом получается как зна- чение специальной переменной DET, которое может присваиваться обычной переменной (например, D = DET). Оператор умножения матриц МАТ С = = А*В формирует матрицу С, получаемую умножением матриц А и В. Матрицы А, В и С не должны совпадать. Особенности выбора размерности матриц при умножении описаны в § 3.4. Операторы арифметических действий с вы- ражениями (а) используются в виде МАТ В = А+(а) МАТ В=А+(а) МАТ В —А/(а) МАТ В = А*(а) В результате их выполнения получается матрица В, все элементы которой — преобра- зованные элементы матрицы А. Арифмети- ческое выражение (а) должно обязательно заключаться в скобки, матрицы А и В должны быть одинаковой размерности, допустимо совпадение имен матриц. Например, возможна запись МАТ С = С-Ь(а) и т. д. Матричный оператор присваивания МАТ В = А создает матрицу В, элементы которой bij — atj. Размер- ности массивов для матриц А и В должны быть одинаковыми. Операторы арифметических операций над матрицами используются в виде (сложение матриц) (вычитание матриц) (деление матриц) МАТ С = А + В МАТ С = А —В МАТ С = А/В МАТ С=Д**В (элементы возводятся в степень Ьц) Массивы матриц А, В' и С должны иметь одинаковые размерности. Допускается совпа- дение имен массивов. Оператор умножения матрицы на кон- станту (для версии бейсик-плюс) имеет вид • МАТ В = А*К, где К — константа. Его выполнение создает матрицу В, все элементу которой Z?// = a,/ К. 40
Особенности применения матричных опе- раторов. Применение матричных операторов существенно упрощает решение задач, связан- ных с использованием матриц (например, решение систем линейных уравнений). По- скольку при этом необходимые арифмети- ческие операции проводятся на машинном языке, существенно сокращается время вычис- лений. Перед использованием матричных операторов должны быть заданы и опреде- лены (с помощью оператора DIM) массивы под исходную вычисляемую и служебные матрицы. Массивы могут иметь любые имена (а не только А, В, С, как в приведенных условных формах записи операторов). Усло- вия совпадения имен оговорены выше. Операторы обращения по меткам. В неко- торые версии бейсика для ускорения вычис- лений вводятся операторы ON# Метка и GOSUB# Метка. Метка может быть числом (0-4-9) или любой латинской буквой (от А до Z). При выполнении этих операторов происходит безусловный переход (опера- тор ON) или обращение к подпрограмме (оператор GOSUB), которые следуют за строкой с меткой в виде REM# Метка. Оператор-переключатель строк имеет вид ON (a) HCI, НС2, НСЗ, ... где а — арифметическое выражение, указы- вающее порядок безусловных переходов к строкам с номерами НО, НС2, НСЗ и т. д. Если а принимает значение 1, происходит переход к строке с номером НО, если а принимает значение 2, переход идет к строке НС2, и т. д. (номера строк не совпадают со значениями а). Операторы ввода символьных последова- тельностей RED. Оператор присваивания REDL А = 'Символы' присваивает переменной А символьное зна- чение. Для такого присвоения при вводе символов с пульта используется оператор REDI А. Здесь А — любая переменная. Вывод символьной переменной, введенной операторами REDL и REDI, выполняется с помощью оператора PRINT DA, QB, ... Перед каждой символьной переменной из списка оператора PRINT должен стоять знакО. Вывод символьных переменных выпол- няется также операторами REDP . , или пробел REDP ; или / REDP # М [...] REDP А [(I [,К])] При пустом списке оператор REDP игнориру- ется, точка, запятая и пробел используются в качестве разделителей, знак ; обеспечивает пропуск одной позиции, знак / — перевод строки с возвратом каретки, #М — пропуск М позиций (где М — число), А — вывод строки, введенной операторами REDL и REDI. Широко распространенные операторы Обработки символьных переменных LEN и MID описаны в версии бейсика ПЭВМ FX-702P. Отметим, что обычно символьные пере- менные отождествляются с элементами одно- мерных и двумерных массивов, поэтому на их длину (число символов) наклады- ваются определенные ограничения (они за- висят от конкретной версии языка бейсик). В некоторых версиях бейсика имеются ограни- чения и на виды используемых символов (например, некоторые символы нельзя ис- пользовать в составе символьных пере- менных). , Все описанные выше директивы, опера- торы и функции присущи наиболее сложным версиям языка бейсик. В целом между отдельными версиями имеются существенные отличия, но они не затрагивают основные (характерные именно для этого языка) опе- раторы и функции. Программы, описанные в данном справочнике, используют, по возможности, только такие операторы и функции. Пакет программ, в которых ис- пользованы операторы матричных функций, дан в § П5.12. § 2.3. Арифметические и алгебраические операции, работа в режиме калькулятора Арифметические и алгебраические опе- рации микроЭВМ, программируемые на бей- сике, могут выполняться как по программе, так и в режиме калькулятора. В последнем случае они проводятся по командам, вводи- мым без указания номера строк в режиме вычислений. Примеры такого рода вычислений даны в табл. 2.11 (микроЭВМ FX-702P). У не- которых микроЭВМ, например Электрони- ка-Д 3-28, эти. операции выполняются после ввода оператора PRINT (печать). При этом аргумент функции должен заключаться в скобки. Из приведенных примеров видно, что вы- числения упрощаются при учете приоритета операций. В сомнительных случаях следует вводить скобки. При записи произведений между сомножителями обязателен знак умно- жения ♦. В отличие от вычислений на обычных калькуляторах [10, 20], ПЭВМ обеспечивают в калькуляторном режиме выполнение не только элементарных (сложение двух чисел, вычисление одной функции и т. д.), но и слож- ных последовательностей действий, в част- ности вычисление численных значений фор- мульных выражений. При этом в ходе ввода формулы возможна коррекция ошибочно вве- денных* знаков, операторов и числовых констант. По существу это означает програм- мирование разового процесса вычислений. Введенное формульное выражение в кальку- ляторном режиме стирается после одно- кратного вычисления его численного значе- ния. Отметим некоторые дополнительные виды вычислений, проводимые с использо- ванием программ, записанных в ПЗУ ПЭВМ (т. е. микропрограмм). Микропрограммно вычисляются и все эле- ментарные функции, включенные в набор команд ПЭВМ. 41
Таблица 2.11 Примеры вычислений в режиме калькулятора (для ПЭВМ FX-702P) Операция Показания дисплея при вводе Результат (после нажатия клавиши EXE) а^-2 Ь+-3 А=2 В = 3 С = 5 Переменным a, 6, с и d C-f-5 d^-1.5 D=1.5 присвоены значения 2, 3, 5 и 1,5 24-3*5/1,5 24-3*5/1.5 12 a + b'C/d A + B»C/D 12 5 sin 30° 5*SIN 30 2,5 -д/а tg 45° (SQRA)*TAN 45 1,414213562 20 Ig (3/1,5) a + 6 * к a 20*LOG (3/1.5) 6,020599913 sh d c ((A4-B)/C)*HSN D 2,129279455 cos 40°30'25,2" COS DEG (40,30,25.2) 0,7603266149 aed + b A*EXPD + B 11,96337814 b-cl B*C! 360 2,575 2.5 f 75 7,ОО649232Е 29 2nc 2*л*С 31,41592654 (c —a) arctg d (C —A)»ATN D 168,9297974 -2*io-5.e-‘8 — 2E —5»EXP -18 — 3,045995949Е—13 b In |a — B»LN ABS(A-C) 3,295836866 (int л)/2 INT n/2 . 1,5 int (л/2) 4-c INT (л/2)4-С 6 Преобразование полярных координат в прямоугольные (рис. 2.1, а) выполняется по формулам r=V?4=?2’ и 0 = arctg (у/х), где г — длина радиуса вектора. Для этого используются команды RPC х, у EXE X (получаем г) DMS Y ЕХЕ (получаем 0) Рис. 2.1. Преобразование координат Пример. Найти г и 0 при х= —1 и у — — 2. Вводимые команды Результат RPC -1, —2 ЕХЕ X ЕХЕ 2.236067977 = г DMS Y ЕХЕ Y ЕХЕ — 116°33'54.18" = 0 -116.5650512 = 0 Оператор DMS вводится, если угол 0 нужно получить в градусах, минутах и секундах с десятичными долями. Угол обычно опре- деляется в пределах ±180°. Преобразование прямоугольных координат в полярные (рис. 2.1,6) производится по формулам x = rcos0 и j/=rsin0 с примене- нием команд PRC г ,DEG(0°, 0', 0") EXE X ЕХЕ (получаем х) Y ЕХЕ (получаем у) Если угол вводится в градусах с десятич- ными долями, вместо оператора DEG(0°, 0', 0") вводится значение 0. Пример. Найти х и у при г=1 и 0 = 30°. Вводимые команды Результат PRC 1, 30 ЕХЕ X ЕХЕ Y ЕХЕ 0.8660254038=х 0,5 = 1/ При представлении углов в разных еди- ницах измерения используются следующие режимы работы: MODE4 — угол в градусах, MODE5 — угол в радианах и MODE6 — угол в градах (100 град соответствует 90°). Статистические вычисления могут выпол- няться в режиме калькулятора (см. подроб- нее § 5.3), где приведены и соответствующие формулы. 42
Отметим, что вычисления в режиме каль- кулятора могут проводиться в паузах между вычислениями по программе. Они исполь- зуются для предварительного преобразования вводимых в ПЭВМ данных, элементарной обработки полученных данных, проверки отдельных фрагментов программ, выполнения простых и редко повторяющихся вычисле- ний и т. д. В других случаях, когда вычисления сложны и требуют неоднократ- ного выполнения, их целесообразно про- водить по программам. § 2.4. Элементарное программирование на языке бейсик Некоторые правила программирования на языке бейсик были описаны при описании его операторов (§ 2.1, 2.2). Ниже они систе- матизируются. Поясним смысл основных по- нятий программирования. Алгоритм — то или иное описание всех действий, которые должны быть выполнены для решения данной задачи. Описательный алгоритм — алгоритм, со- ставленный на естественном, в частности математическом, языке. Графический алгоритм — компактная фор- ма записи алгоритма в виде специальных графических знаков (см. рис. 2.2) с указа- нием связей между ними. из строк со словами и предложениями, составленными из операторов. Строки нуме- руются от меньшего (0 или 1) до большего номера (максимальный номер зависит от типа ПЭВМ). Рекомендуется нумерация строк, кратная 5 или 10, например 10, 20, 30, 40 и т. д. Тогда в промежутки между номерами можно вставлять новые строки. Операторы или от- дельные предложения с ними разделяются в строках двумя точками. Неопытные пользователи часто записы- вают в каждой строке один оператор или одно предложение. Такая запись наглядна и упрощает замену ошибочных операторов. Однако ее не следует рекомендовать, так как в этом случае неэкономно используется память ПЭВМ (забивается множеством номеров), увеличивается время счета, сложные програм- мы получаются очень длинными, текст (лис- тинг) программы неудобно выводить и его распечатка ведет к неэкономному расходу дорогостоящей бумаги. Рекомендуется запи- сывать в строку несколько предложений с тем, чтобы строка при индикации дисплеем вме- щалась в ее формат (от 20 до 80 знаков в одной строке). Соответствие структуры программы алго- ритму является непременным условием для получения наглядной программы и обеспе- чения удобства и безошибочности работы с ней. Для этого программа разбивается на отдельные части: организация ввода исход- ных данных и констант, организация ввода г=х2 Рис. 2.2. Графические обозначения алгоритмов: начала и конца программы (а), ввода и вывода дан- ных (б), проведения операций (в), выполнения условных переходов (г) и циклов (д) Алгоритм в виде программы — конечный продукт разработки алгоритма в виде про- граммы, записанной на языке программи- рования (в нашем случае на бейсике). Сравнение форм записи алгоритмов. Бей- сик отличается от других языков програм- мирования простотой и наглядностью записи программ. Поэтому в большинстве случаев алгоритм целесообразно записывать в виде программы. Графический алгоритм целесо- образно приводить при укрупненном описа- нии сложных программ, содержащих большое число условных и безусловных переходов, циклов и подпрограмм. Если при описании алгоритма необходимы особые пояснения (например, вывод и преобразование формул), преимуществом может обладать описательный алгоритм. Общие правила записи программ. Как отмечалось, программа на бейсике состоит текущих переменных, организация начала циклов, построение тела циклов, организация конца циклов, вывод результатов на индика- цию и печать. Не рекомендуется смешивать в одной строке фрагменты этих блоков. Отдельно записываются подпрограммы, ко- торые можно сопровождать комментарием, записываемым с помощью оператора REM. В начале программы с помощью операторов REM или PRINT записывается название или код программы, в конце указывается опера- тор END. Отсутствие оператора END может привести к ошибкам при записи программы на магнитные накопители и ее считывании. Виды программ. Программы могут быть линейными, разветвляющимися и. цикличе- скими. Линейные программы имеют алгоритм, при котором каждая последующая операция выполняется строго за предыдущей. Все 43
операции исполняются от начала до конца — см. пример вычисления площади круга по формуле 5 = л£>2/4. Словесный алгоритм при этом следующий. 1. Введем численное значение D и при- своим его переменной D(D-<-D). 2. Вычислим nD2/4 и присвоим получен- ное значение переменной S (S-<-ji£>2/4). 3. Выведем на печать значение перемен- ной S. 4. Организуем останов ЭВМ. Рис. 2.3. Алгоритм вычисления пло- щади круга Соответствующий графический алгоритм показан на рис. 2.3; а, программа имеет вид 05 REM'ВЫЧИСЛЕНИЕ ПЛОШАЛИ КРУГА' 10 INPUT'ВВЕДИТЕ ДИАМЕТР КРУГА D='D 20 LETS=#PI*IT2/4 30 PRIНТ'ПЛОШАДЬ КРУГА S='S 4© END Обратите внимание на комментарии при операторах INPUT в строке 10 и PRINT в строке 30. У разветвляющихся программ вычисления производятся в различных частях в зави- симости от заданных исходных данных или результатов вычислений. Это обеспечивают операторы условных переходов. На рис. 2.4 Рис. 2.4. Алгоритм вычисления функции sin х/х 44 показан графический алгоритм вычисления функции F(x)=sinx/x при х=#0 и Г(х) = 1 при х = 0. Соответствующая программа при- ведена выше (в § 2.1) при описании опера- торов IF...THEN. Циклические программы обеспечивают циклическое (т.* е. повторяющееся) выпол- нение отдельных фрагментов заданное или конечное, но неопределенное число раз — до получения результата с заданной погреш- ностью. Циклы с заданным числом повто- рений организуются с помощью операторов FOR ... ТО ... STEP и NEXT. Примеры правильной и неправильной организации ряда циклов даны на рис. 2.5. -------/77/? 7=7 777 /У - — /77/? 7=2 ТО М r/77/? /T=J ТО Р - '-NEXT X.......... — NEXT J......... -----NEXT I а FOR Z=7 TO N --------------------FOE TO M p/77/? №5 P - -----NEXT I........... --NEXT T........... -NEXT К........... 5 Рис. 2.§. Правильная {а) и неправильная (б) организации циклов с помощью операторов FOR и NEXT Пример. Построение циклической про- граммы с циклом, повторяющимся заданное число раз. Пусть надо вычислить N-e число Фибоначчи. Напомним, что числа Фибоначчи образуют последовательность, у которой каждый очередной член равен сумме двух предыдущих: 1 2 3 5 24-3 = 5 8 13 21 34 ... 134-21=34 0 Словесное описание алгоритма может быть следующим. I. Задаем число N. 2. Присвоим переменной А значение 0 (А-«-0), а переменной В значение 1 (В-<-1). 3. Организуем цикл вычислений С = = А4-В, организовав счетчик цикла с по- мощью переменной I, значение которой должно меняться от начального 1=3 до конечного 1 = N с шагом, равным 1. В конце каждого числа проведем замену переменных: А—В и В«-С.
4. При I = N зададим выход из цикла и выведем на индикацию число С. 5. Перейдем к выполнению п. 1 с помощью операции безусловного перехода. Рис. 2.6. Алгоритм вычисления чисел Фибоначчи Графический алгоритм решения этой задачи показан на рис. 2.6. Программа имеет вид 16 INPUT'ЗАДАЙТЕ Н>=3 N»'№LETA«0:LETBs 20 FOR I»3 ТО N STEP 1 30 LETC=A+B:LETA=*B:LETB«C 40 NEXT I 50 PRINT'FN«'CxGOTO 10XEND 60 PRINTIF1.9!'FN«'C 70 GOTO 201END В строке 10 организован ввод значения N и присвоение переменным А и В значений 0 и 1. В строке 20 задан заголовок цикла и указаны пределы изменения (от 3 до N) управляющей переменной I. Далее в строке 30 проводятся вычисление переменной С = = А4~В, присвоение переменной А значения В и переменной В значения С. В строке 40 задан возврат из цикла, если I = N. И, на- конец, в строке 50 задается печать значения переменной С и безусловный переход к стро- ке 10. Задав, например, N==10, получим результат 34т Пример. Построение циклической про- граммы с циклом, повторяющимся до полу- чения результата с заданной точностью. Пусть надо вычислить обратный гиперболи ческий тангенс arth х с заданной точностью е = Е, используя разложение в ряд у® у** х7 arth х = х+— + -Е- + -7-+ •••, х<1. 3 о ( Для эрэго будем вычислять сумму членов х4// для i+-i 4-2 при начальном / = 1. Графический алгоритм вычислений пока- зан на рис. 2.7. Рис. 2.7. Алгоритм вычисления функции arth х раз- ложением ее в ряд В программе (см. с. 46, сверху) цикл орга- низован в строках 30 и 40 с помощью операто- ров IF ... THEN, ведущих сравнение разности (S — Z), где Z — предшествующее значение S, с числом Е, задающим погрешность. Если (S —Z)>E, то организуется условный пере- ход к выполнению строки 30. В противном случае выдается на индикацию или печать результат вычислений (строка 50) и происхо- дит безусловный переход (строка 60) к стро- ке 20, т. е. ввод нового значения аргумента х, и вычислению arth х. Подобным образом строится большинство программ вычисления специальных функций по их разложениям в ряд, вычисления рядов и сложных числовых последователь- ностей. Следует отметить, что остановка счета в данном случае возможна, если ряд яв- ляется сходящимся. Обращения к подпрограммам произво- дятся в том случае, когда отдельные фраг- менты программ должны выполняться при различных значениях исходных для их вычисления данных. Подпрограммы, как и циклы, могут вкладываться друг в друга (см. рис. 2.8). При завершении выполнения подпрограммы происходит возврат в исходную программу и выполнение оператора, следую- щего за обращением GOSUB п к под- программе, начинающейся со строки п. Это возвращение задается оператором RETURN в конце подпрограммы. Пример. Построение программы с подпрограммой. Пусть нужно вычислить 45
Описание программы приведено на с. 45. 10 INPUT*ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е=’Е 20 INPUT*ВВЕДИТЕ X=*Xs LET1=1s LETS=0 30 LET2=S:LETS=S+X~I/IsLETI=I+2 40 IF S-Z>E THEN 3© 50 PRINT*AHT<X)=*S 60 GOTO 20sEND Основная Программа Подпрограммы (ПП) Рис. 2.8. Структура организации подпрограмм с вложениями их друг в друга определенный интеграл ъ ь /=^ д/2х-|- 1 Kx)dx а а по простой формуле Симпсона p(a)+4f(-^±).+f(*)]. (2.1) В этом • случае нужно трижды вычислить значение подынтегральной функции Дх)= = 7^+1 для х = а, (а-[-Ь)/2 и Ь. Поэтому вычисление f(x) целесообразно вынести в под- программу. и засекают время ее исполнения. Деля его на А/, получают время исполнения пустого цикла /ц. Затем внутрь цикла вставляется команда с заданной операцией, например LET C=A-f-B, если нужно найти время про- ведения операции сложения. Снова опре- деляют общее время вычислений и делят его на N. От полученного времени отнимают /ц и получают время исполнения заданной опе- рации /оп- Время /оп сильно зависит от типа ПЭВМ, поэтому подобные испытания следует провести для конкретной ПЭВМ, имеющейся в распо- ряжении пользователя (разумеется, если нужных данных нет в ее описании). Ниже приведены типовые значения /оп для СПП 10 INPUT*ВВЕДИТЕ ПРЕДЕЛЫ ИНТЕГРИРОВАНИЯ А/В *А,В 2© LETX=A: GOSUB 60s LETS=F 30 LET-X=<A+B)/2: GOSUB 60s LETS=S+4*F 4© LETX=B: GOSUB 60s LETS=S+F 5© PRINT‘ЗНАЧЕНИЕ ИНТЕГРАЛА I=*S*<B-A)/6: STOP 55 REM* ПОДПРОГРАММА ВЫЧИСЛЕНИЯ F(X>* 6© LETF=SQR<2*X+1)s RETURN 70 END Здесь подпрограмма с оператором возвра- та занимает строку 60. Суммирование членов в квадратных скобках (2.1) производится с помощью вспомогательной переменной S. Для а = 0 и Ь=Л вычисления по этой про- грамме дают результат /=1,398150843. Оценка времени вычислений производится суммированием времен выполнения отдельных операций с учетом повторяемости их в циклах, и подпрограммах. Для приближенной оценки времени выполнения отдельных операций можно использовать следующую методику. Вначале определяют время проведения А/ цик- лов (W=100 или 1 000). Для этого, задав N, пускают простейшую программу 10 FOR 1 = 1 ТО N: NEXT 1 20 PRINT 'END': END на базе настольной ЭВМ Электроника-ДЗ-28 и ПЭВМ класса Pocket Computers FX-702P (/on в секундах): Операция /оп для ПЭВМ Электрони- ка-ДЗ-28 FX-702P Сложение и вычитание 0,03 0,05 Умножение и деление 0,04 0,065 Функция 0,06 0,07 Функции In х, 1g х, ех 0,05 0,18 Тригонометрические функ- 0,1 0,25 ции Обратные тригонометриче- ские функции 0,05—0,1 0,3 Г иперболические функции 0,065 °’2 46
Операция t01, для ПЭВМ Электрони- ка-ДЗ-28 FX-702P Обратные гиперболи- ческие функции 0,1 0,3 Функции int (х), abs (х) 0,025 0,04 Функция у* 0,08 0,33 Безусловный переход 0,01 0,03 Условный переход Обращение к подпро- 0,04 0,06 грамме и выход из нее 0,02 ~ 0,04 Один цикл (/ц) ' 0,012 0,02 В данном случае арифметические операции сложения, вычитания, умножения и деления выполняются почти за одинаковое время. Это не общее правило. У многих ПЭВМ операция деления производится медленнее, чем опе- рация умножения, а последняя, в свою очередь, выполняется медленнее, чем операции сложения и вычитания. Самой медленной обычно является операция возведения в сте- пень (/). Сложность подсчета числа операций, особенно если число циклов в программе не фиксировано, а задается погрешностью вычислений, делает целесообразным опреде- ление общего времени выполнения вычисле- ний по данным решения типового контроль- ного примера. Исключения возможны, если время выполнения всей программы менее 5—10 с. Оптимизация программ проводится с целью сокращения времени их исполнения и объема памяти ПЭВМ, придания про- граммам компактности и алгоритмической ясности. Поскольку эти качества часто взаимо- противоречивы, то процесс оптимизации носит субъективный характер. Для большинства пользователей ПЭВМ вполне справедливо правило — составляйте программу так, как это вам нравится и как это вам удобно. Это правило справедливо, если вычисления по программе носят единич- ный или эпизодический характер. В этом случае большие затраты времени на тща- тельную оптимизацию программы нерацио- нальны. Тем более, что нередко программу, составленную за десяток минут, можно оптимизировать многие дни, хотя конечный результат остается тем же. Большинство начинающих пользователей, как правило, размещают в каждой строке один оператор. Выше отмечались недостатки таких про- грамм: чрезмерная длина листинга програм- мы, неэкономное использование ОЗУ, труд- ность обозрения сразу всей программы, большой расход бумаги при распечатке программ принтером. Поэтому лучше сразу привыкнуть к размещению в строке несколь- ких простых операторов, если к иному не обязывает алгоритм вычислений. Программы, рассчитанные на многократное использо- вание, желательно тщательно оптимизи- ровать. Несмотря на субъективный характер под- готовки программ, есть ряд приемов, которые следует использовать при составлении и опти- мизации программ. Прежде всего необходимо особо внимательно отнестись к выбору алго- ритма. Порой затрата на это в 10—20 мин в дальнейшем сокращает время массовых вычислений на многие часы, сутки и даже месяцы. Например, переход от обычного спект- рального анализа к процедуре быстрого преобразования Фурье (БПФ) часто ведет к уменьшению времени счета в десятки и даже сотни раз. В программах надо учитывать реальное время выполнения операций (см. выше). Например, если ПЭВМ выполняет деление медленнее, чем умножение, то операцию вида В=А/2 лучше записать как В = .5*А. Возведение в малую целую степень ух (при х = 2,3,...) Л/1учше заменить умножением, например Y—>2 (или Y|2) следует заменить операцией Y*Y. При табуляции функций иногда полезно использовать не полностью завершенные циклы следующей конструкции: FOR I=A ТО 1Е99 STEP H:...:NEXT I Цикл практически не завершается, так как конечное значение управляющей переменной I задано очень большим (10"). Такой цикл аналогичен цепочке операторов HCI LET I—A НСМ LET I = 14-Н HCN GOTO HCI но выполняется существенно быстрее (вы- игрыш во времени до 3—5 раз при пустом цикле, т. е. учете затрат времени только на выполнение операторов в строках НСМ и HCN). Выход из цикла, если он нужен, задается рабочими операторами, записан- ными вместо многоточия. Арифметические выражения в программах целесообразно приводить к виду, позволяю- щему уменьшить число операций. Например, вычисление значения с = а2 — 2ab-}-tr при обычной записи c = a-a-\-2-a-b — b-b требует четырех операций умножения и по одной операции сложения и вычитания. Представив с — a — b и с — с*с, т. е. учитывая соотно- шение (а2 — 2аЬ + 62) = (а — Ь)2, получим тот же результат всего при одной операции вычитания и одной умножения. Аналогичным образом вычисление у = еа/еь лучше выполнить в виде у — еа~ь, что уменьшит число обра- щений к микропрограммам вычисления функ- ций. В простых программах такие преобра- зования опускаются, если они идут в ущерб наглядности программы или приводят к отказу от общепринятой формы записи вычисляе- мого арифметического выражения. Эффек- тивным приемом упрощения вычислительных операций и придания им более общего вида является нормирование арифметических вы- ражений. Следует по возможности убирать повто- ряющиеся фрагменты вычислений и сосредо- точивать их в одном месте. Особое внимание необходимо уделять «чистке циклов», т. е. 47
выносу за пределы циклов всех повторяю- щихся фрагментов вычислений. Например, выражение требует вычисления lna< и е/х 3000 раз. Между тем, представив это выражение в виде можно сразу сократить число вычислений Ina, до 30. Если позволяет память ЭВМ, можно отдельно сформировать массив экспо- нент E(J)—e’x и сократить до 100 число вычислений е/х. Однако при этом будет иметь место обращение к массиву £(/) 3000 раз. Тем не менее последний вариант по затратам машинного времени будет лучщим. При использовании переменных из мас- сивов нередко повторяются их индексы. Например, при каждом использовании вы- ражения A(J*K4-1)==A(J»K~H) + R к переменной A(J*K-H) прибавляется зна- чение R. Однако индекс (J*K+1) вычисля- ется при этом дважды — в левой и в правой частях равенства. Замена этого выражения фрагментом программы I=j*K + 1 :A(I) =A(I) +R ведет к экономии памяти (выражение стало короче) и сокращению времени счета (индекс вычисляется один раз). Эта эко- номия будет еще существеннее, если перемен- ные A(J*KH-1) используются в программе более двух раз, например в циклических фрагментах. Часто полезно заменять индексированную переменную простой переменной. Например, вычисление арифметического выражения у=А(ЬК+ 1)*А(ЬК+1) +Х можно выполнить в виде Z = A(I»K-M): Y = Z»Z + X Сокращение времени вычислений в этом случае связано и с тем, что ЭВМ опознает простую переменную быстрее, чем индекси- рованную. Иногда, в какой-то мере копируя подход, принятый при составлении программ на языке фортран, программы составляются по блоч- ному принципу: делается основная программа, в которой обеспечивается обращение к вспо- могательным подпрограммам. Если последние снабжены комментариями, в целом программа оказывается очень наглядной. Однако в общем случае не следует злоупотреблять обра- щениями к подпрограммам, так как на них затрачивается дополнительное время (особенно, когда обращения идут из циклов). 48 Необходимо также отметить, что исполь- зование особых «программных трюков» в на- стоящее время считается недостатком, а не достоинством программ. Сокращение времени вычислений не является самоцелью. В пра- вильно составленных программах прини- маются меры по устранению неоправданных потерь машинного времени. Поэтому реко- мендации по составлению программ не сле- дует абсолютизировать. В некоторых версиях языка бейсик имеются специальные операторы для вклю- чения в программы фрагментов, выполняемых на других языках, например на машинно- ориентированном языке конкретной ПЭВМ. Последнее позволяет уменьшить время выпол- нения программ (иногда в, десятки раз), со- хранить присущий, бейсику диалог ПЭВМ с пользователем и заметно расширить круг решаемых на данной ПЭВМ задач [29]. Однако этот прием носит частный характер, при его применении теряется наглядность самих программ, усложняется их отладка и исключается применение программ для ПЭВМ с другим машинно-ориентированным языком. § 2.5. Специальные вопросы программирования на языке бейсик Описанные в § 2.4 приемы программи- рования направлены на решение простых вычислительных задач. Рассмотрим некото- рые специальные вопросы программирова- ния, выявляющие более полно возможности языка бейсик. Организация диалога с пользователем. Простейший диалог с пользователем заложен в самой программе-интерпретаторе. Так, у большинства ПЭВМ загрузка этой про- граммы (с ПЗУ или магнитной ленты) сопровождается начальным диалогом: под- тверждается загрузка интерпретатора, у поль- зователя запрашивается, с каким оборудо- ванием он будет работать, будут ли исполь- зованы внешние подпрограммы и т. д. (см. Приложения 1 и 3). Комментарии могут вводиться пользова- телем в составе операторов INPUT (при вводе), PRINT (при выводе результатов вы- числений) и REM (внутри программы). Характер комментариев всецело задается пользователем. Он может быть очень кратким, например 10 INPUT D (при этом индицируется лишь знак ?), или детальным: 10 INPUT 'ВВЕДИТЕ ЧИСЛЕННОЕ ЗНАЧЕНИЕ ДИАМЕТРА ОКРУЖНОСТИ D = 'D Следует помнить, что слишком подробные комментарии удлиняют программу, увеличи- вают время счета, загружают память ЭВМ, затрудняют чтение программ. Такие коммен- тарии оправданы лишь в отдельных случаях —
когда программа рассчитана на пользователя, который не понимает сути вычислений. Спе- циалист может довольствоваться короткими комментариями, например 10 INPUT 'D = 'D (если он знает, что речь идет о площади круга, то вряд ли нужно особо указывать, что D — это диаметр окружности). Индикация ошибок предусмотрена у боль- шинства ПЭВМ. Сложные ПЭВМ дают по- дробное указание об ошибке, например такое: НЕТ ЗАКРЫВАЮЩЕЙ СКОБКИ В ОПЕРАТОРЕ LET В СТРОКЕ 150 Более простые ПЭВМ дают указания вида ОШИБКА <Номер) В СТРОКЕ <Номер) При этом характер ошибок определяется по их номеру с помощью специальных таблиц (см. Приложения 2 и 4). Вывод простых графиков. Многие ПЭВМ способны формировать сложные многоцветные графические изображения. Однако даже те ПЭВМ, у которых нет специальных команд построения графиков, могут создавать простые графические изображения с помощью операто- ров PRINT и TAB. Рисунки с помощью оператора PRINT формируются с помощью знаков, помещен- ных в апострофы или кавычки. Так, из знаков — можно создавать штриховые гори- зонтальные прямые, из знаков ! — верти- кальные линии и т. д. Ниже дана программа построения стилизованной электрической схемы. Она строится из различных знаков, присущих ПЭВМ без графики. Схема, сформированная в поле коммен- тариев PRINT, будет выведена на экран дисплея или печать после исполнения опера- тора RUN. Оператор TAB может использоваться для графического отображения решений; построения графиков функций, колебатель- ных процессов и т. д. При этом функция У(Х) строится с осью Y поперек, а с осью X вдоль направления печати. Зона печати при использовании оператора TAB разбивается на Ломакс (Ломакс— обычно 80 или 100) по- зиций, каждая из которых задается целой частью арифметического выражения. Так, приведенная ниже программа обеспечивает построение графика функции Y = X2, который строится с помощью знаков *. В этой программе изменение аргумента X от значения —6 до -|-6 задается циклом с началом в строке 10 и концом в строке 60. Если Х=/=0, осуществляется печать значений Y = X2 с помощью операторов PRINT TAB в строке 35 знаками ♦. Одновременно печа- тается знак !, образующий горизонтальную ось графика. При Х = 5 и X— — 5 (см. строки 40 и 50) вместо знака ! печатаются численные значения Х = 5! и Х= —5! на оси X, т. е. осуществляется масштабирование оси X. При Х = 0 вместо печати значения Y = X2 = 0 в строке 25 задана печать оси Y знаками — и цифрами 0, 10, 20 и 30, обеспечивающими ее масштабирование. График функции Y = X2, формируемый этой программой, дан на рис. 2.9. У .ПЭВМ, рассчитанных на вывод графи- ческой информации, имеются специальные операторы для построения графиков. Так, оператор PLOT X, Y, Z обеспечивает вывод точки с координатами X и Y (используются целые части значений переменных X и Y). Если Z=0, точка погашена, если Z = l, она высвечивается. С помощью оператора PLOT можно по точкам строить сложные графики, например, если Y и X связаны соотношением Y = X2, то будет построена линия, подобная приведенной на рис. 2.9 (однако график при 01 PRINT'ПРИМЕР ПОСТРОЕНИЯ ЭЛЕКТРОННОЙ СХЕМЫ' 02 PRINT' > ЙЛ PRINT' i i > 04 PRINT' C2 === 0У i ©5 PRINT' i R3 ! .» 06 PRINT' <-l ====== f 07 PRINT' RU ‘ * i i-*-> Л 08 PRINT' — 1 —) _ ii f 09 PRINT' i I C4 === » i i i f 10 PRINT' R12 ! i ii. । 11 PRINT' — ! i i .» 12 PRINT' I i .» 13 PRINT' — .• 20 END 05 PRINT#1'ПРИМЕР ПОСТРОЕНИЯ ГРАФИКА ФУНКЦИИ У=ХЛ2' 10 FOR Х=-6 ТО 6 STEP в 5 20 IF ХО0 THEN 35 25 PRINT'О--------10--------20--------30—Y=X~2' 30 GOTO 60 35 PRINT'!'TAB(X~2)'*' 40 IF X=-5 THEN PRINT'X=-5'л 50 IF X=5 THEN PRINT'X=5'; 60 HEXT Xs END 49
Пример построения гршрика, функции, у=хЧ I *' i * ! * д7=-5/ . * ! * * I * * I * i * * I* 0-------10-------20--------30----у=аГ2 - ! * ' * * i Рисд 2.9. График функции K = -V2 с координатными осями этом может иметь более высокую разрешаю- щую способность). С помощью оператора LINE X, Y вычерчивается прямая линия с концом, заданным целыми значениями X и Y, и началом, заданным предшествующим опе- ратором PLOT. Например, операторы PLOT О, 0, 1 и LINE 50, 50 обеспечивают построение прямой с началом в точке (0,0) и концом в точке (50,ЙО) декартовой системы координат на плоскости. С помощью этих операторов можно строить динамические, т. е. движущиеся изображения и сложные рисунки, Некоторые типы принтеров (например, Электроника-УВВПЧ-30-004, входящие в комплект последних моделей СПП на базе микроЭВМ Электроника-ДЗ-28) могут форми- ровать высококачественные одноцветные гра- фические изображения по точкам, причем печать графики возможна как вдоль, так и поперек бумажной ленты. Диалог с применением кодов. Часто нужно на ПЭВМ выполнить ту или иную операцию, например, провести расчет по той или иной формуле. Это можно сделать, используя операторы INPUT и IF, THEN. Диалог с применением клавиш пользо вателя. У ряда ПЭВМ есть команды присвое- ния клавишам функций клавиш пользователя. При этом пуск программы с заданного места производится нажатием только клавиш поль- зователя. Ниже дана программа для ПЭВМ FX-702P, иллюстрирующая применение кла- виш пользователя. После ввода значения х символьной пере- менной А$ командой KEY придается (стро- ка 20) свойство управляющей переменной. Теперь, если нажать клавишу 2, оператор IF в строке 30 передаст управление строке 200; если нажать клавишу 3, аналогичный оператор в строке 40 передаст управление строке. 300. Во всех других случаях происходит переход к строке 20 и ПЭВМ ждет нажатия одной из клавиш пользователя. Если ввести х==2 и нажать клавишу 2, будет получен результат Xf2=4, если нажать клавишу 3, то Xf3=8 (напомним, что в системе команд FX-702P стрелка f означает возведение в степень). Диалог с применением символьных конс- тант. Он наиболее близок к естественному, так как при нем машина задает вопросы, а пользователь отвечает на них на естествен- ном языке (словесном или математическом). Иллюстрацией к организации такого диалога на ПЭВМ FX-702P является следующая программа: IB IHP "Xм,X 28 INP “Xf2 OR Xf3 ?”$ 30 IF $==“Х42И THEN 200 40 IF $=nX|3” THEN 300 50 GOTO 20 200 PRT“Xt2=="J Xf2: GOTO 10 зев р₽тяХ13=и; xt3: goto 10 Здесь после задания x ПЭВМ в строке 20 задает пользователю вопрос: Xf2 OR Х|3? (х2 или х3?). Надо ответить фразой Х|2 или Х|3. Если ответ был Х|2, символьной переменной $ присваивается значение Xf2, а в строке 30 операторы IF ... THEN передают управление строке 200, т. е. вычислению и выдаче значения Х|2=х2. Если задать Х|3, то в строке 40 операторы IF ... THEN передадут управление строке 300, т. е. вычис- 10 INPUT'ВВЕДИТЕ Х=‘Х 20 PRINT'ДЛЯ ВЫЧИСЛЕНИЯ Х~2 УКАЖИТЕ КОД 2' 30 INPUT'ДЛЯ ВЫЧИСЛЕНИЯ Х'З УКАЖИТЕ КОД 3 КОД='К 40 IF К=2 THEN €0 50 IF К=3 GOTO 70s GOTO 2© б© PRINT'X~2='X~2: GOTO 10 70 PRINT'X~3«'X~3s GOTO 10sEND В этой программе при задании по запросу ЭВМ кода 2 вычисляется значение х2, а при задании кода 3—х3. При ошибочно введенном коде повторяется запрос кода. I© INP “ХилХ . 20 a$=key:if а$=и и then 20 30 IF А$=И2И THEN 200 40 IF А$=“3“ THEN 300 50 GOTO 20 200 PRT“Xt2=H* X42 ’ 300 PRTHXf3s”J Xt3: GOTO 10: END лению и выдаче значения Х|3. Во всех других случаях безусловный переход GOTO 20 ПЭИМ^ 50 К П0ВТ0Рению запРоса Переходы с косвенной адресацией; Они возможны в расширенных версиях бейсика. Так, у ПЭВМ FX-702P возможны 6 типов таких переходов: . 1. GOTO у 2. GOTO Фу 3. IF а (условие) 0; GOTO у 4. IF а (условие) 0; GOTO Фу 50
5. GSB у 6. GSB Здесь a, p и у — переменные или арифме- тические выражения. Номер строки или про- граммной области (при знаке =# перед y) задается целой частью арифметического вы- ражения или значения переменной у. Это значение не должно выходить за пределы 9 при адресации к программным областям и 10 000 при адресации к строкам Y- Применение косвенной адресации поясним таким примером: пусть надо выполнить интегрирование нескольких функций по фор- муле Симпсона, не меняя основную про- грамму. Для этого можно каждую функцию обозначить номером W (W=l, 2, 3 ...) и вы- числять подпрограммой, записанной, на- пример, со строк 100 А (100 при А=1, 200 при А = 2 и т. д.). Соответствующая программа имеет вид 05 IMP “F N=”zN I© IMP "В",В 20 х=а: bsb №*100: s=f 30 Х=(Й+В)/2: GSB №*100: S=S+4i*F 40 х=в: gsb №*10й: s=s+f 50 PRT “I=“ ? S*(B-A)/F.: АТПР 100 F=SQR<2*X+1): RET 200 F«l/(1+Xt2)i RET 300 F=10*LN X: RET 500 EMU При задании A=l, 2 или 3 эта программа будет вычислять соответственно интегралы ь 1) ( 1 dx\ ь 3) \ 10 In х dx. Задав, например, А = 1, a = 0 и b = 1, получим для первого интеграла значение /=1,398150843. § 2.6. Перевод программ с одной версии бейсика на другую Различия между версиями бейсика могут заключаться в синтаксисе (правилах записи операторов) и в словарном запасе операторов. Различия в синтаксисе, как правило, носят непринципиальный характер и сводятся к замене апострофов на кавычки, двоеточия на точку с запятой, знаков возведения в сте- пень (—। на f) нт. д. Такая замена легко формализуется, но требует знания синтак- сиса обеих версий бейсика — той, с которой переводят, и той, на которую переводят программы. Различия в словарном запасе операторов могут быть весьма существенными. Так, простые версии бейсика содержат до 20— 50 операторов, а сложные — до 200—300. Эти различия нередко носят принципиальный характер. Так, операторы косвенной адреса- ции, работы с целочисленными и символь- ными переменными и константами, вывода графиков и др., применяемые в сложных версиях бейсика, не имеют функциональных аналогов в простых версиях. Поэтому если перевод с простой версии на сложную доста- точно прост и формален, то обратный перевод весьма сложен, а подчас и принципиально невозможен. Перевод программ справочника на другие версии бейсика достаточно прост благодаря специальным мерам, принятым при состав- лении программ. Так, направленность спра- вочника на научно-технические, статисти- ческие и экономические расчеты позволила отказаться от использования операторов вывода сложных графиков и работы с сим- вольными (текстовыми) переменными. Все программы справочника даны на версии бейсика умеренной сложности, применяемой в массовых системах подготовки программ на базе настольной микроЭВМ Электро- ника-ДЗ-28. В эту версию бейсика входит основной набор операторов (табл. 2.1—2.4), применяемых в других версиях бейсика (для микроЭВМ Электроника-СбО, Искра-226, диа- логовых вычислительных комплексов ДВК-1, ДВК-2 и др.). Принятая версия бейсика является расширенной в части операторов вычисления математических функций (табл. 2.6), что упрощает запись программ. Однако перевод операторов этой версии на язык других версий (где эти операторы отсутствуют) носит формальный характер (см. табл. 2.12) и поэтому достаточно прост. Для облегчения перевода в прикладных про- граммах, как правило, не используются опе- раторы DATA, READ, RESTORE и ON, поскольку они легко заменяются другими (INPUT, LET, GOTO) и отсутствуют у не- которых версий бейсика (например, ПЭВМ FX-702P). Общие рекомендации по переводу про- грамм. При переводе программ рекомендуется придерживаться следующих правил. 1. Внимательно изучить особенности вер- сий бейсика (оригинала и той, которая нужна пользователю). В ходе этого изучения нужно выяснить, насколько родственны эти версии, прежде всего по словарному запасу операторов. 2. Если версии бейсика достаточно близки, следует использовать построчный или поопе- раторный перевод, учитывая при этом раз- личие в синтаксисе этих версий. 3. Если в оригинале встречаются опера- торы, отсутствующие в нужной версии, следует выяснить их смысл и заменить другими операторами. Так, для замены ряда операторов вычисления математических функ- ций можно использовать табл. 2.9. 4. Если версии бейсика сильно разли- чаются, целесообразно составить детальный описательный или графический алгоритм решения нужной задачи и затем по нему заново составить программу на нужной версии бейсика. Некоторые практические рекомендации по переводу программ. При переводе пользо- ватель может существенно изменить характер 51
Таблица 2.12 Формальные правила перевода операторов вычисления математических функций для некоторых версий бейсика (Р —л —3,141592654) Версии бейсика СПП на базе микроЭВМ МикроЭВМ Электроника-С60, Искра-226, ПЭВМ Электроника-ДЗ-28 комплексы ДВК-1, ДВК-2 FX-702P DEG(X) 180*Х/Р MODE4 RAD(X) Р*Х/180 MODE5 TAN(X) SIN(X)/COS(X) TAN X ASN(X) ATN(X/SQR(1 - Х*Х)) ASN X ACS(X) Р/2-ATN (X/SQR (1 - Х*Х)) ACS X HSN(X) (EXP (X) — ЕХР( —X) )/2 HSN X HCS(X) (ЕХР(Х) +ЕХР( -Х))/2 HCS X HTN(X) (ЕХР(Х) -ЕХР(— Х))/(ЕХР(Х) +ЕХР(-X)) HTN X AHS(X) LOG(X + SQR(X*X+ 1)) AHS X AHC(X) LOG(X + S0R(X*X- 1)) АНС X AHT(X) LOG((l+X)/(l-X))/2 АНТ X LGT(X) LOG (X)/LOG (10) LOG X LOG(X) LOG(X) LN X X —INT(X) X-INT(X) FRAC X EXT(X) xno Xf 10 диалога с ПЭВМ (сократить или, напротив, расширить его). При переводе зарубежных программ целесообразно перевести коммента- рии с английского языка на русский. У поль- зователей зарубежными ПЭВМ может возник- нуть необходимость в обратном переводе. У некоторых версий бейсика (например, для микроЭВМ Электроника-С60) коммен- тарии не вводятся с помощью оператора INPUT. В этом случае прн переводе исполь- зуется оператор PRINT. Пример. Версия для микроЭВМ Электрони- ка-ДЗ-28 10 INPUT 'ВВЕДИТЕ X, Y' X, Y Версия для микроЭВМ Электроника-СбО 10 PRINT "ВВЕДИТЕ X, У" 15 INPUT X, Y Переадресация и переиндексация мас- сивов и переменных бывает необходима при их специальной организации, применяемой в некоторых версиях бейёика. Например, в версии бейсик-CASIO, применяемой в ПЭВМ FX-702P, все массивы (одномерные и дву- мерные) организуются на основе одной пере- менной А: например, A(I), A(J, I). В боль- шинстве других версий переменные массивов могут обозначаться любыми буквами (или буквами с цифрой от 0 до 9): X(I), Z9(I, J) и т. д. Поэтому прямой перевод программ с версии бейсик-CASIO на другие версии возможен, а обратный требует переадресации массивов. Одновременно Возникает необходи- мость и в их переиндексацин. Например, три одномерных массива X(I), Y(J), Z(K) при 1< 10, J<20 и К<10 в версии бейсик- CASIO можно заменить массивами А(1), А (10 + 1) и А (30 + 1). В этой версии А5 = А(5), А(15)=В5, тогда как в других версиях А5 и А(5) — совершенно разные 52 переменные, как и А (15) и В5. В связи с этим, если одна из версий бейсика при переводе программ имеет подобные особен- ности, к их учету следует относиться с осо- бым вниманием. Приведение аргумента функций в допус- тимые пределы нередко необходимо при переводе программ. Например, аргумент тригонометрических функций в версии бейсик- CASIO должен лежать в пределах от —8л до +8л рад. В ряде других версий бейсика таких ограничений нет. Выход аргумента за допустимые пределы ведет к остановке вычислений с выдачей знака ошибки. Для приведения аргумента X в заданные пределы можно использовать фрагмент программы вида 50 IF Х<8*л THEN 70 60 Х = Х-8*л: GOTO 50 70 ...... ................... или 50 X = 2*n*FRAC(X/2/n) В последнем случае аргумент приводится к интервалу от —2л до +2л. Редактирование и отладка переведенных программ. Редактирование программ, получен- ных путем перевода, сводится к проверке правильности записи всех операторов. Если перевод сделан с простой версии бейсика на более сложную, следует изучить возмож- ность оптимизации программ, используя специфические возможности применяемой вер- сии бейсика. Например, выражение вида Х—^]А2-}-В2 на ПЭВМ FX-702P может вы- числяться с помощью оператора RPC А, В вместо выражения X = SQR(A*A+B*B) и т. д. Отладка полученных переводом программ существенно облегчается, если программа-оригинал была снабжена конт- рольными тестами (примерами). Прн редак-
тировании и отладке программ следует- использовать заложенный в основу бейсика начальный диалог. Так, при неточностях в записи операторов и в их синтаксисе ПЭВМ подсказывает пользователю характер и место ошибок, что позволяет легче найти и устра- нить их. Иногда причиной грубых расхождений ре- зультатов вычислений при правильном пере- воде программ являются особенности округ- ления чисел при исполнении операторов циклов вида FOR а = 0 ТО у STEP б. Малые погрешности в вычислении у, например, когда у есть целое число в целой степени, могут приводить к тому, что число циклов окажется на 1 меньше или больше, чем предполагаемое. Например, число циклов, заданных оператором FOR 1 = 1 ТО N13, при У = 2 может быть не 8, а 7 или 9 в зави- симости от того, как округляется N3. У не- которых ПЭВМ округление при возведении в целую степень целых чисел специально предусмотрено. Однако у других, в частно- сти у Электроники-ДЗ-28, этого нет (хотя при вычислении /V3 с помощью оператора PRINT N "13 будет получен точный резуль- тат — ошибка содержится в скрытых раз- рядах). В подобных ситуациях округление можно проводить с помощью оператора INT. Например, выполнение точно /V3 циклов гаран- тировано, если оператор цикла записать в виде FOR I = 1 ТО INT (N "1 3+1). Неболь- шая добавка 0,1 к N3 создает определен- ность в операции округления. Подобные си- туации возможны и при использовании операторов косвенной адресации вида ON а, GOTO а, GOSUB а, когда а задает номер строки, т. е. целое число. 53
Г Л А В A 3 АЛГОРИТМЫ И ПРОГРАММЫ ЭЛЕМЕНТАРНЫХ ВЫЧИСЛЕНИЙ § 3.1. Операции с действительными числами Перевод чисел из одной системы счисле- ния в другую выполняется по. правилам, описанным в [36]. Для перевода целого числа Хм с основанием М в число с основа- нием W число Хм делится на N1 (/=1,2,3,...), а последовательность остатков от деления умножается на М‘ (/==0,1,2,...) и склады- вается. Числа Хм в виде правильных дробей последовательно умножаются на Nl (i — = 1,2,3,...), целые части результата делятся на М‘ (/ = 1,2,3,.,.). В приведенных ниже программах операции над целыми и дробными частями Хм проводятся одновременно. Коли- чество цифр Хи ц XN не должно превышать разрядности ЭВМ. Программа 3.1. Пример. Для N = 23345, М = 9135 получим (W, М) = 1015, а для W = 238 и М = 347 (Af, М) =34. Разложение целого числа М на простые множители производится последовательным делением М на 2 и ряд простых чисел d (d = 3, 5, 7, 9, 11, 13, ...) по формуле Л4/ = М-\/d до тех пор, пока соблюдается условие Программа 3.3. Пример. Число 1234567890 расклады- вается на множители 2X3X3X5X3607X Х3803. Преобразование десятичного числа X в цепную, или непрерывную, дробь произво- дится выделением целой части X, а затем 10 PRINT'ПРЕОБРАЗОВАНИЕ ЧИСЛА ХМ В ЧИСЛО XN' 20 INPUT'ВВЕДИТЕ ХМ='Х:INPUT'ВВЕДИТЕ M=’Q 25 INPUT'ВВЕДИТЕ N='№LETU=0 30 LETS=10SLETK=10:LETM=Q:GOSUB 50 35 LETS=LsLETKs№LETX=UsLETMs10 40 GOSUB 50!PRINT’8.4!'XN='Us GOTO 2© 50 LETL=Ks LETD=1s LETE=1: LETU=0 60 LETC=INT<X)sLETW==X-C 70 FOR I=S TO 0 STEP -1 8© LETB=U*L!LETA=INT<B) 90 LETD=D*M:LETU=A/D+U 100 LETT=CsLETW=B-AsIF M=0 THEN 120 110 NEXT I 120 LETA=INT(T/L) 130 LETU=<T-A*L)*E+U:LETE=E*M 14© LETT=AsIF AO© THEN 128 150 RETURN:END Контрольные примеры. Xe== = 27-*X5 = 43 (M = 8, ^ = 5), X5 = 43-> ->X8 = 27 (M = 5, A/ = 8), X10= 100-* X2== = 1100100 (Af=10, jV = 2), время счета /с«5 с. Нахождение наибольшего общего дели- теля двух чисел N и М проводится с по- мощью рекуррентного соотношения £ = 2,3,..., где M> = max(|W|, |М|), /V, = min(|A/|, |M|). Если Nk станет нулевым, то наибольший общий делитель C=(jV, M)~Nk-\. Числа /V и М должны быть меньше 109 для ЭВМ с разрядностью 10. Программа 3.2. целых частей 1/(Х,_. । — int Х,_|), где int X;~i — целая часть Х(-|. Программа 3.4. Пример. Число Х = л = 3,14159264-*- ->[3, 7, 15, 1, 252, 1, 1, 1, 4], т. е. 2524-... Преобразование цепной дроби в деся- тичное число X производится непосред- 54
Программа 3.2. 10 PRIНТ'НАХОЖДЕНИЕ НАИБОЛЬШЕГО ОБЩЕГО ДЕЛИТЕЛЯ' 15 INPUT'ВВЕДИТЕ ПЕРВОЕ ЧИСЛО N='N 20 INPUT'ВВЕДИТЕ ВТОРОЕ ЧИСЛО М='М 30 LETI=INT<NzM):LETL=M 40 LETM=N-M*lsLETN=L 50 IF МО0 THEN 30 60 PRINT 19.01'НАИБОЛЬШИЙ ОБШИй ДЕЛИТЕЛЬ»'N 70 GOTO 15s END Программа 3.3. 05 PRINT'РАЗЛОЖЕНИЕ ЧИСЛА X НА ПРОСТЫЕ МНОЖИТЕЛИ' 10 INPUT'ВВЕДИТЕ Х«'А 15 PRINT 19.0!'МНОЖИТЕЛИ X'sGOTO 40 20 PRINT 21LETA=A/2 30 IF А-1=0 THEN 50 40 IF A/2-INT<Az2)»0 THEN 20 50 LETB=3 60 LETC=SQR<A>+1 70 IF B>=C THEN 140 80 IF A/B-INT<A/B>=0 THEN 100 90 LETB=B+2sGOTO 70 100 IF A/B*B-A=0 THEN 120 110 GOTO 90 120 PRINT В 130 LETA=A/BsGOTO 60 140 PRINT ASPRINT'КОНЕЦ':GOTO 10SEND Программа 3.4. 05 PRINT'ПРЕОБРАЗОВАНИЕ ДЕСЯТИЧНОГО ЧИСЛА В ЦЕПНУЮ ДРОБЬ' 10INPUT'ВВЕДИТЕ ДЕСЯТИЧНОЕ ЧИСЛО Х='Х 15 FOR 1=1 ТО 10 20 LETF=INT<X)sPRINT!9.0!F 30 LETX=lz<X-F>sNEXT I 40 GOTO 10sEND Программа 3.5. 05 PRINT'ПРЕОБРАЗОВАНИЕ ЦЕПНОЙ ДРОБИ В ДЕСЯТИЧНОЕ ЧИСЛО' 10 INPUT CSLETD=1SLETA=0SLETF=CSLETB=1 20 PRINT F/BsINPUT EsLETQ=C 30 LETC=C*E+D:LETD=QsLETQ=B 40 LETB=B*E+A:LETA=QsLETF=C 50 GOTO 20sEND Программа 3.6. 10 PRINT'ДЕЛЕНИЕ ЧИСЛА А НА ЧИСЛО В' 20 PRINT'С ПРОИЗВОЛЬНОЙ ТОЧНОСТЬЮ’ 30 INPUT'ВВЕДИТЕ Ал В 'Ал В 40 LETI=INT<A/B>:PRINT!9.0!'ЦЕЛАЯ ЧАСТЬ РЕЗУЛЬТАТА 'I 50 PRINT'ПОСЛЕДОВАТЕЛЬНОСТЬ ЦИФР РЕЗУЛЬТАТА' 60 LETF=INT<A/B)SPRINT 11.0! F; 70 LETA=<A-F*B)*10sGOTO 608END 55
ственным вычислением X по формуле цепной дроби. Программа 3.5. Пример. [3, 7, 15, 1, 292, 1, 1, <, 4J-> ->3,141592654. Деление числа А на число В с произволь- ной точностью выполняется выделением целой части отношения А/В при вычислении F=int(A/B) и затем использованием рекур- рентной формулы Л< = (Л,_| — FXB) X Ю. Программа 3.6. Пример. 32/9,3 = 3,4408602150537 ... Цифры результата выдаются до остановки ЭВМ пользователем. Получение N-ao числа Фибоначчи* т. е. числа из последовательности 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ..., у которой новый член равен сумме двух предыдущих (С|=0; С2=1): Ci^Cj-s-^Ci-2* i = 4, 5, ... Программа 3.7. 10 PRINT'ВЫДАЧА N-ГО ЧИСЛА ФИБОНАЧЧИ' 28 LETA=0:LETB=lsINPUT'ВВЕДИТЕ Н>=3 N»'N 30 FOR 1=3 TO N 40 LETC»A+B8LETA«BsLETB«C 50 NEXT I 60 PRINT!Fl.9! 'F№'C 70 GOTO 208END Для W=10 получим Сю = 34. § 3.2. Операции и функции с комплексными числами и переменными Комплексные числа записываются в алгеб- раической форме Z=A 4-/B = ReZ4-/lniZ или в тригонометрической Z = Re'°, причем R = -\/A2 + B2 и 0 = arctg (В/А). Сложение и вычитание комплексных чисел Zi^Ai+j Bi и Z2=A2 + j В% выполняется по формулам Zi -|-Z2=H 14-Л2)4-/ (Bi 4-В2), Zi —Z2 — (A 1 —Л2)4-/ (Bi — B2). Умножение и деление комплексных чисел Zi—Ai-{-jBi и Zi^A^-j-jВ2 выполняется по формулам Z|Z2=(Л 1Л 2 — BiB2)4~ / (Л i В2 4- В1Л2), Z1 _ Л|Л24-В|В2 . В1Л2—Л|В2 /п,ч ZT----лГ+вГ“+/ —лГ+й ’(ЗЛ) а в тригонометрической форме ZiZ2 = Rei*=:R cos 04*//? sin 0, где R — R1R2, 0 = 0| 4-02, и Zi/Z2 = Re/0 = B COS04-//? sin0, где R = Ri/R2* 0 = 0i —02. Программа 3.8. Контрольный пример. Вычисле- ние выражения (5-/-3)(3+/.2) (5+/.3)(2-/.4)+(0’5+/ ° дает результат ReZ0= 1,158823529 и ImZo = = 1,464705882, т. е. Zo= 1,158823529 4~/Х X 1,464705882. Программа 3.9. Для ZI=2e/’0,5 и Z2 = 3e/’0,25 получим ZiZ2 = Z1>=6e'0'75 и Z, //2 = 20=1,5^Д25 Алгебраические функции комплексного переменного: Z2 = (Л2 —В2) 4-/2ЛВ, 1 А В Z~A2 + B2 ’ Аг + В2 ’ I А2 —В1 . 2АВ г2 ~ <д24-в2)2 1 (л!+в2)2 ’ -Л4-7а24-В2 2 expZ=e2=a4 cos В 4- jeA sin В, In Z=XIn (Л24-В2) 4- j (arctg ^-±2л&), fe = 0, 1, 2, ..., Программа 3.8. 95 10 2© 30 40 50 60 70 80 9© PRINT!Fl.9! PRINT'АРИФМЕТИЧЕСКИЕ PRINT' 1-—- - INPUT'ВВЕДИТЕ RE Zb IM Z1 INPUT'ВВЕДИТЕ RE Z2j IM Z2 _ INPUT'ВВЕДИТЕ КОД ОПЕРАЦИИ +Ь-2,*3,/4 IF -------- - - - IF IF IF ОПЕРАЦИИ С КОМПЛЕКСНЫМИ' ЧИСЛАМИ В АЛГЕБРАИЧЕСКОЙ ФОРМЕ' - - - ,А,В 'C/D K=1 K==2 K=3 K=4 THEN THEN THEN THEN 110 130 140 168 'К 100 PRINT'КОД УКАЗАН НЕВЕРНО'sGOTO 58 110 LETA=A+CsLETB=B+D 120 PRINT'Z 0='A' + J*('B')'s60T0 40 130 LETA=A“C8LETB=B~D:6OTO 128 148 LETE=A*r:-B*D 8 LETF=A*D+C»B 158 LETA=ESLETB=FS6OTO 128 168 LETL=C*C+D*Ds LETE=A*C+B*Ds LETF=B*C-A*D 178 LETA=E/LSLETB»F/L8 6OTO 120sEND 56
Программа 3.9. IS PRIНТ'УМНОЖЕНИЕ И ДЕЛЕНИЕ КОМПЛЕКСНЫХ ' 20 PRINT'ЧИСЕЛ В ТРИГОНОМЕТРИЧЕСКОЙ ФОРМЕ' 30 INPUT'S КАКОЙ ФОРМЕ Z1 0-АЛГЕБ. 1-ТРИГОНОМ. 'К 40 IF К=1 THEN 70 50 INPUT'ВВЕДИТЕ RE Zb IM Zl 'A.B 60 LETR1=SQR<A*A+B*B>:LET01=ATN<BzA>!60T0 80 70 INPUT'ВВЕДИТЕ Rb QI 'RbQl 80 INPUT'В КАКОЙ ФОРМЕ Z2 0-АЛГЕБ. 1-ТРИГОНОМ. 'К 90 IF К=1 THEN 120 100 INPUT'ВВЕДИТЕ RE Z2, IM Z2 'C.-B 110 LETR2=SQR<C*iC+D*D>!LETQ2=ATN<D/C):&0T0 130 120 INPUT'ВВЕДИТЕ R2.. Q2 'R2/Q2 130 INPUT'ВВЕДИТЕ КОД ОПЕРАЦИИ Й *, 1 z 'К 140 IF К—0 THEN 160 150 LETR=RlzR2s|_ETQ=Ql-Q2!&0T0 170 160 LETR=R1*R2SLETQ=Q1+Q2 170 PRINT'Z0='R'* EXP<J*C'Q'>)' 180 LETR1=R:LETQ1=Q!6OTO 80SEND 7z=^e^=^cos A + jV^sin Ль A„ = f>/n + 3b0k/n, k — 0, 1, 2.n-1, Z" = R"e= R" cos+ jR" sin n0. Программа 3.10. 1Й PRINT'ВЫЧИСЛЕНИЕ F<Z>=Z"2' 2Й INPUT'ВВЕДИТЕ RE Z='As INPUT'ВВЕДИТЕ IM Z='B ЗЙ LETE=A’’2-B“l2s LETF=2*A*B 4Й LETA=ESL.ETB=F 5Й PRINT'RE F(Z>='A:PRINT'IM F(Z)='B бй ВСТО 20;END Пример. (3 + /-2)2 = 5 + /-12. Программа 3.11. 10 PRINT'ВЫЧИСЛЕНИЕ F<Z)=1/Z' 20 INPUT'ВВЕДИТЕ RE Z='As INPUT'ВВЕДИТЕ IM Z='B 30 LETG=A~2+B~2sLETE=A/& 40 LETF=-B/&sLETA=EsLETB=F 50 PRINT'RE F<Z)='AsPRlNT'IM F<Z)='B 60 GOTO 20s END Пример. 1/(3 +/-2) =0,2307692308-/-0,1538461538. Программа 3.12. 1й PRINT'ВЫЧИСЛЕНИЕ F < Z) = 1/Z~2' 20 INPUT'ВВЕДИТЕ RE Z='As INPUT'ВВЕДИТЕ IM Z='B 30 LET6=<A“’2+B“'2)”’2s LETE=(A‘“"2-B"’2)-ZG 40 LETF=-2*A#B-zGs LETA=Es LETB=F 50 PRINT'RE F(Z) = 'As PRINT'IM F<Z)='B 60 GOTO 20:END Пример. 1/(3+/-2)2 = 0,02958579882-/-0,07100591716. Программа 3.13. 10 PRINT'ВЫЧИСЛЕНИЕ F<Z)=SQR(Z>' 20 INPUT'ВВЕДИТЕ RE Z«'As INPUT'ВВЕДИТЕ IM .Z='B 30 LET G=SQR < A~2+B~2)s LETE=SQR< < A+6 >/2 > 40 LETF=SQR< <-A+G) /2 ) s LETA=Es LETB=F 50 PRINT'RE Z=+-'As PRINT'IM Z=+-'B 60 GOTO 20s END Пример. 73 + /-2= ± 1,817354021 ±/-0,5502505227. Программа 3.14. 10 PRINT'ВЫЧИСЛЕНИЕ F(Z>=EXP(X)' 20 INPUT'BBEAHTE RE Z=' As INPUT 'ВВЕДИТЕ IM Z=*'B 30 LETE=EXP(A > *COS(В> s LETF=EXP<A)*SIN(В) 40 LETA=EsLETB=F 50 PRINT'RE EXP<Z) = 'As PRINT'IM EXP<2> = 'B 60 GOTO 20 s END Пример, exp (3+ /-2) = -8,358532651 +/-18,26372704. 57
Программа 3.15. I© PRINT*ВЫЧИСЛЕНИЕ F(Z)=L0G<2)' 20 INPUT'BBEAHTE RE Z='As INPUT'ВВЕДИТЕ IM Z='B 3Q LETE==LOG(A~2+B~2>z2:LETF=ATN<BzA) 40 LETA=EsLETB=F 58 PRINT'F®'A'+J«C'B' +2*K*#PI)' 68 GOTO 205 END Пример. In (3 + /-2) = 1,282474679+/ (0,5880026035 + 2fen). Программа 3.16. 10 PRIНТ'ВЫЧИСЛЕНИЕ ФУНКЦИИ F(Z>=Z'<lzN>' 20 INPUT'ВВЕДИТЕ RE Z-'As INPUT'ВВЕДИТЕ IM Z«'B 30 INPUT'ВВЕДИТЕ N='NsLETX«SQR<A~2+B~2) 35 LETY=ATN(BzA)s LETA=X~<1zN >«COS < VzN > 40 LETB=X~<lzN)«SIN<YzN):PRINT'RE F<Z)='A 50 PRINT'IM F<Z)='BsEND Пример. ^3 + /-2== 1,36311829+ /-0,2018352064. Программа 3.17. 10 PRINT'ВЫЧИСЛЕНИЕ ФУНКЦИИ F(Z)=Z~N' 20 INPUT'ВВЕДИТЕ RE Z»'As INPUT'ВВЕДИТЕ IM Z«'B 30 INPUT'ВВЕДИТЕ №'N:LETX»SQR<A~2+B~2) 40 LETY=ATN(BzA) sLETA«X~N«COS<V«N) 50 LETB=X~N*SIN(Y*N):PRINT'RE F<Z>«'A 60 PRINT'IM F<Z)='B:END Пример. (3 + / • 2)3 = - 8,999999999 + j • 46. Тригонометрические функции комплексного переменного: sin Z — sin A ch В + j cos A sh В, cos Z = cos A ch В — j sin A sh Bt t z— sin 2A • sh 2B g cos 2A + ch 2B cos 2A + ch 2B * Программа 3.18. 10 PRINT'ВЫЧИСЛЕНИЕ F<Z)=SIN<Z)' 20 INPUT'BBEAHTE RE Z='As INPUT'ВВЕДИТЕ IM Z=='B 30 LETE=SIN<A)«HCS<B):LETF=COS<A>«HSN(B) 40 LETA=E8LETB==F 50 PRINT'RE F<Z>e'AsPRINT'IM F(Z)='B 60 GOTO 20:END Пример, sin (3 + /-2) =0,5309210863-/-3,59056459. Программа 3.19. 10 PRINT'ВЫЧИСЛЕНИЕ F(Z)=C0S<Z)' 20 INPUT'BBEAHTE RE Z='As INPUT'ВВЕДИТЕ IM Z»'B 38 LETE=COS(A>«HCS(B>:LETF=-SIN(A>«HSN<B> 40 LETA=E:LETB=F 50 PRINT'RE F<Z>«'AsPRINT'IM F<Z>='B 60 GOTO 20:END Пример, cos (3 + /-2) = -3,724545505-/-0,51182257. Программа 3.20. 10 PRINT'ВЫЧИСЛЕНИЕ F<Z>=TAN(Z)' 20 INPUT'BBEAHTE RE Z='As INPUT'ВВЕДИТЕ IM Z«'B 30 LETA=A«2 5 LETB=B«2 s LETG«C0S < A)+HCS < В > 35 LETE=SINCA>z&sLETF=HSN(B>z6 4© LETA=EsLETB=F 50 PRINT'RE F<Z>='AsPRINT'IM F<Z>»'B 60 GOTO 20sEND Пример. tg(3 + /-2) = —0,009884375039 +J-0,965385879. 58
Обратные тригонометрические функции комплексного пере- менного: arcsin Z=*arcsin ВдЧ-jln [Л^Ц-^/Л! — Г], arccos Z = arccos В* —/1п [Лл4-уЛ*-—1 ], x „ 1 4 / 2Л \ , L[n( Л2+(В-Ь1)2 \ arctg Z —garctg) + 4 ln\ д^^-Д^) ’ где 4*=±^/(4 + l)2 + B2 +^Н-')!+й1 и B^^(A + \)2 + B*(A-l)2+B*. Программа 3.21. 10 PRINT'ВЫЧИСЛЕНИЕ F<Z>»ASN<Z>' 20 INPUT'BBEAHTE RE Z='AiINPUT'ВВЕДИТЕ IM Z='B 25 LETC=SQR<<A+l>''2+B'‘2>/2 30 LETD»SQR<<A-1>''2+B"2>z2 35 LETE“C+D:LETF=C-D:I_ETA=ASH<F) 40 LETB=l_OG<E+SQR<E«E-l > > 50 PRINT'RE F<Z>»’AlPRINT’IM FCZ)-'B 60 GOTO 20:END Пример, arcsin (3+/-2) =0,9646585044 + j-1,968637926. Программа 3.22. IS PRINT'ВЫЧИСЛЕНИЕ F(Z)=ACS<Z)’ 20 INPUT'ВВЕДИТЕ RE Z='A:INPUT'ВВЕДИТЕ IM Z='B 25 LETC=SQR< <A+1 >'‘2+B''2)/'2 30 LETD=SQR < < A-1 > ~2+B>'2 > z2 35 LETE=C+D:LETF=C-D:LETA=ACS<F> 40 LETB=-LOG<E+SQR<E*E-1>> 50 PRINT'RE F<Z)='AsPRINT'IM F<Z>='B 60 GOTO 20:END Пример, arccos (3+/-2) =0,6061378224-/. 1,968637926. Программа 3.23. 10 PRINT'ВЫЧИСЛЕНИЕ F<Z>=AHT<Z>’ 20 INPUT'ВВЕДИТЕ RE Z='B:INPUT'ВВЕДИТЕ IM Z='AiLETB=-B 25 LETC=SQR<<A+i>"2+B*B)/2 30 LETE=ATN<2*A/<l-A»A-B*B)>/2 35 LETF=LOG< <A*A+<B+1 )*'2>/<A*A+<B-1 )~2) >/4 40 LETB=E:LETA=-F 50 PRINT'RE F(Z)='AlPRINT’IM<Z)-'B 60 GOTO 201END Пример, arctg (0,3 + j• 0,2) =0,3018746667 + /-0.1849946201. Гиперболические функции комплексного переменного: sh Z =sh A cos В + j ch A sin B, ch Z=ch A cos B + j sh A sin B, _ sh A sin 2B tg Z~ ch24+cos2S +l ch 2A + cos 2B ' Программа 3.24. 10 PRINT'ВЫЧИСЛЕНИЕ F<Z>=HSH<Z>' 20 IHPUT'BBEAMTE RE Z='AiINPUT'ВВЕДИТЕ IM Z='B 30 LETE=HSN<A>«COS<B):LETF=HCS<A)*SIN<B) 40 LETA=E:LETB=F 50 PRINT’RE F<Z>='AlPRINT'IM F<Z)='B 60 60T0 20:END Пример, sh (3+/-2) =-4,16890696+/-9,154499147. 59
Программа 3.25. 18 PRINT'ВЫЧИСЛЕНИЕ F<Z)=HCS(Z>' 28 IHPUT'ВВЕДИТЕ RE Z=’A:INPUT'ВВЕДИТЕ IM Z='B 30 LETE=HCS<A)*COS< В ):LETF=HSN<A>*SIN<B > 40 LETA=E:LETB=F 58 PRINT'RE F<Z>='AsPRlNT'IM F<Z)='B 60 GOTO 20:END Пример, ch (3 + /-2) =—4,189625691+/-9,109227894. Программа 3.26. 10 PRINT'ВЫЧИСЛЕНИЕ F<Z>=HTN<Z>' 28 1НРиТ'ВВЕДИТЕ RE Z='As INPUT'ВВЕДИТЕ IM Z='B 30 LET A=A*2:LETB=B*2:LETG=HCS <A)+COS < В) 35 LETE=HSN<A)/GtLETF=SIN<B>z6 48 LETA=E:LETB=F 58 PRINT’RE F<Z>='AtPRINT’IM F<Z>='B 60 GOTO 20:END Пример, th (3 + /-2) = l,003238627 —/-0,0037664025642. Обратные гиперболические функции комплексного перемен- ного: arsh Z= —/arcsin (/Z), arch Z= ±/arccos Z, arth Z= —/arctg (/Z). Программа 3.27. 10 PRINT’ВЫЧИСЛЕНИЕ F<Z)=AHS(Z)' 20 INPUT'ВВЕДИТЕ RE Z=’B:INPUT'ВВЕДИТЕ IM Z=’A:LETB=-B 25 LETC=SQRC<A+l>''2+B*B>/2 30 LETD=SQR<<A-1)~2+B*B>z2 35 LETE=C+D:LETF=C-D:LETB=ASN<F) 40 LETA=LOGCE+SQR(E*E-1>) 50 PRINT'RE F<Z)='A:PRINT'IM F<Z)=’B 60 GOTO 20:END Пример, arsh (3 + /-2) = 1,98338703+/-0,5076527843. Программа 3.28. 10 PRINT'ВЫЧИСЛЕНИЕ F<Z>=AHC<Z)' 20 INPUT'ВВЕДИТЕ RE Z='A:INPUT’ВВЕДИТЕ IM Z=’B 25 LETC=SQR<<A+1)''2+B»B)z2 38 LETD=SQR<(A-l)~2+B*B)z2 35 LETE=C+D:LETF=C-D:LETB=ACS(F) 40 LETA=LOG<E+SQR(E*E-1)> 58 PRINT'RE F<Z)=+-'AsPRlNT'IM F(Z>=+-’B 60 GOTO 20sEND Пример, arch (3 + /-2) = ± 1,968637926±/-0,6061378224. Программа 3.29. 10 PRINT’ВЫЧИСЛЕНИЕ F(Z>=AHT<Z>' 2И INPUT'ВВЕДИТЕ RE Z='B:INPUT'ВВЕДИТЕ IM Z='A:LETB=-B LETU^QR (•; A+1 > "Z’+BaB ) /2 3© LETE=ATN<2* Ax<1-A*A-B*B))/2 35 LETF=LOG<(A* A+(B+1> ~2)/<A*A+(B-1)~2 >)/4 4© LETB=EsLETA=~F 5© PRINT’RE F<Z)=-’AsPRINT4M(Z)=='B 6© ©OTO 2©5 END Пример, arth (0,3 + /-0,2) =0,2957499203 + /-0,2154744937. В описанных программах значения Re F (Z) и Im F (Z) придаются переменным А и В (A^ReF, Поэтому, опустив комментарии, программы можно использовать в качестве подпрограмм вычисления функций комплексного переменного. 60
§ 3.3. Вычисление степенных многочленов и дробно-рациональных функций Схема Горнера применяется для вычисле- ния степенных многочленов Р (Z) (поли- номов), Р (Z) = anZn-|-ал_\Zn 1 -j- ... -j-diZ-j-ao, и имеет вид P(Z)=(...(artZ4-art_i)Z + an-2)Z-F... • •• 4-fli) Z-j~ao. Коэффициенты ап, ап-\, ...» ai, »ao будем считать действительными. При действитель- ном аргументе x = Z схема Горнера приме- няется непосредственно, при комплексном Z—A+jB — с применением операций умно- жения и сложения комплексных чисел (см. § 3.2). Программа 3.30. Устойчивость многочлена, описывающего линейную систему с обратной связью (на- пример, электронный усилитель), оценива- ется с помощью критерия Гаусса—Гурвица. Для устойчивости необходимо, чтобы значение модуля многочлена 4(Z)=4(p), где p-ju, при фазовом угле 0 = 0 было менее 1 (т. е. годо- граф системы при со, меняющемся от 0 до оо, не должен охватывать точку 0,1 комплексной плоскости). Более удобно судить об устойчи- вости А (р) по его разложению в цепную дробь [cip, Сар, ...» спр]. Если все коэффи- циенты Ci этого разложения положительны, многочлен устойчив. Оценка устойчивости многочлена А (р) = апрп + ап-1рп~1 +... -haip + ao выполняется с помощью следующей про- граммы. 10 PRINT'ВЫЧИСЛЕНИЕ СТЕПЕННОГО МНОГОЧЛЕНА' 15 INPUT’ВВЕДИТЕ СТЕПЕНЬ МНОГОЧЛЕНА №'NsDIM АСЮ 20 FOR I=N ТО 0 STEP -1 30 PRINT!2.0!'ВВЕДИТЕ КОЭФФИЦИЕНТ А'1 35 INPUT ACI>sNEXT I j 40 INPUT'ВВЕДИТЕ ЗНАЧЕНИЕ X='XsLETY=0' 50 FOR I=N TO 1 STEP -1 60 LETY=CY+ACI))*XsNEXT I 70 LETY=Y+AC0):PRINT!F1.9!'ЗНАЧЕНИЕ PCX)='Y 80 GOTO 40:END Для многочлена Р(х) = 4х4-|-Зх3-|-2х2-|- Ч-1х-|-0 получим Р(1)=10, Р(2)=98. Программа 3.31. 10 PRINT'ВЫЧИСЛЕНИЕ ПОЛИНОМА С КОМПЛЕКСНЫМ АРГУМЕНТОМ' 15 INPUT'ВВЕДИТЕ СТЕПЕНЬ ПОЛИНОМА fi='NsDIM АСЮ 20 FOR I=N ТО 0 STEP -1 30 PRINT!2.0!'ВВЕДИТЕ КОЭФФИЦИЕНТ АС'1')=?' 35 INPUT" AC I):NEXT I » 40 INPUT'ВВЕДИТЕ RECZ>='Xs INPUT'ВВЕДИТЕ IMCZ)='Y 45 LETR=ACN)SLETJ=0 50 FOR 1=1 TO N 60 LETE=X*R-Y'*J+ACN-I> 70 LETF=Y*R+X*J:LETR=EsLETJ=F 80 NEXT IsPRINT!Fl.9! " 90 PRINT 'RE P(X) = 'Rs PRINT'.IM PCX) = 'J 100 GOTO 40SEND Для многочлена P(Z) = 8Z8-|-7Z7-|-6Z64- -4- 1Z4-1 получим P(1 +/• !•)= 144 — /• 113. Программа 3.32. 10 PRINT'ОЦЕНКА УСТОЙЧИВОСТИ МНОГОЧЛЕНА' 20 INPUT'ЗАДАЙТЕ СТЕПЕНЬ МНОГОЧЛЕНА N='N:DIM АСЮ 30 FOR I=N ТО 0 STEP -1sPRINT!2.0!'A'I'=' 40 INPUT ACDSNEXT lsLETW=N-2 50 LETN=W+2sLETZ=NsLETB=ACN):LETN=N-1sLETC=ACN)s LETN=N-2 60 IF C=0 GOTO 140 70 LETD=B*ACABSCN))sLETN=N+l 80 LETACABS С Ю )=<C*A < ABS CN))-И>/С 90 IF ACABSCN))<0 THEN 140 100 LETU=3-№ IF U>0 THEN 120 110 LETN=USGOTO 70 120 LETW=Z-3s IF ЫО0 THEN 50 130 PRINT'МНОГОЧЛЕН УСТОЙЧИВ'sSTOP 140 PRINT'МНОГОЧЛЕН НЕУСТОЙЧИВ'sEND 61
Пример. Многочлен А (р) =2р44~3р34- 4-р24-5р4-1 неустойчив, а многочлен А (р) = = 12р5 +12р4 4-16р3 4* 10р2 4~ 5р 4“ 1 устойчив. Вычисление значений дробно-рациональ- ной функции комплексного переменного F(Z)^-^- = 1 B(Z) . _________amZm 4~^m—iZm 14-... 4-aiZ4-ao bnZn •}- bn—\Zn *4-biZ-^rbo~ производится вычислением комплексных зна- чений многочленов A(Z) и B(Z) с после- дующим делением их по формуле (3.1). Программа 3.33. дробно-рациоиальной функции при задан* 1 ном Z. Так, для приведенного примера 1 МОДУЛЬ = 0,04454466144, ФАЗА= | ==-—65,45048284°. Возможно также вычисле- 1 нне операторной функции F (р), где p=/w 1 (вводится ReZ = 0 и lmZ = o)L а также вы- 1 числение функции F(Z) = 1/H(Z) (вводится ] т=1, О|=0 и ао = 1). Для вычисления дробно-рациональной функции вводится Re Z = x и Im Z=0. Деление степенного многочлена А(х) на двухчлен В (х) =s U2 4- b\x 4- &0) выполняется для понижения степени исходного много- члена А (х). Если А (х) — многочлен четной степени, то из него можно выделить квад- PRINT'ВЫЧИСЛЕНИЕ ДРОБНО-РАЦИОНАЛЬНОЙ ФУНКЦИИ' PRINT'F<Z>=ACZ)/B<Z> КОМПЛЕКСНОГО ПЕРЕМЕННОГО' INPUT'BBEAHTE СТЕПЕНИ МНОГОЧЛЕНОВ А<2) И B<Z) M,N 'M,N DIM A<M)?B<H):FOR I=M TO 0 STEP -1 PRINT!2.0!'ВВЕДИТЕ А'ПINPUT A<I>:NEXT I FOR I=N TO 0 STEP -is PRINT'ВВЕДИТЕ В'I INPUT BCD’.NEXT I INPUT'ВВЕДИТЕ RE Z/ IM Z'X/YsLETR=A<M):LETU=0 FOR 1=1 TO M:LETE=X*R-Y*J+A(M-I) 10 20 30 40 50 60 70 80 90 100 LETF=V»R+XMJ:LETR=E5LETJ=F:NEXT I 110 LETQ=R s LETU=J s LETR=B < N)8 LETJ=0 12a FOR 1=1 TO N:LETE=X«R-Y*J+B<N-I) 130 LETF=?»R+X*J8LETR=E5LETJ=FSNEXT I 140 LETC=R*R+F*F:LETD=Q*R+U*F 150 LETE=U*R-Q*FsLETP«D/CsLETI=E/C 160 PRINT!F1.9!'RE F<Z)='PsPRINT 'IM F<Z>«'I 170 LETMli=SQR<P*P+I*I>8LETQ=ATN<I/P> 175 PRINT'МОДУЛЬ M='M 180 PRINT'ФАЗА В РАДИАНАХ Q«'Q 190 PRINT'ФАЗА В ГРАДУСАХ Q='Q*180/#PI 200 GOTO 80:END Контрольный пример. Для функ- ции ял__ 3Z34-2Z2 + Z4-0,5 1 ; 5Z5 4- 4Z* 4- 3Z3 + 2Z2 + Z 4- 0,2 ’ где т — 3 и п = 5, при Z = 34"/*2 получим F (3 4- / * 2) = 0,01850739412-/- 0,040551793708. Программа 3.33 обеспечивает также вычис- ление модуля МОДУЛЬ F(Z) =V[Re Г (Z)]24- {Im F(Z)]2 и фазы ФАЗА F (Z) — arctg [Im F (Z)/Re F (Z)] ратичный множитель B(x) и использовать операцию деления для исключения двух корней, полученных из решения уравнения В(х)=0. В общем случае деление А(х) на В(х) дает многочлен D(x) и остаток R(x) =Г|х4-г0. Программа 3.34. Пример. Для выражения А(х) _ 1х6 4- 7х5 +.15х4 4-15х34-4х2 —Зх4-125 В(х) х2 —2x4-2 получим D(x) = 1х44-9х34-31х24-59х4-60 при остатке R(x) = — 1x4-5. Программа 3.34. 05 PRINT'ДЕЛЕНИЕ МНОГОЧЛЕНА АСХ) СТЕПЕНИ N' 10 PRINT'НА ДВУХЧЛЕН А(Х>=ХЛ2+В1*Х + В8' 20 INPUT'ВВЕДИТЕ НяВЬВ© 'N, С, В’. DIM A<N) 30 FOR I=N TO 0 STEP -1 40 PRINT!2.0!'ВВЕДИТЕ КОЭФФИЦИЕНТ A'I' =' 45 INPUT A<I):NEXT I 50 LETV=A<N):LETN=N-11LETX=A(N>:LETN=N-1 60 FOR I=N TO 0 STEP -1 80 60SUB 100:NEXT I 90 GOTO 120 100 LETD=X-Y*C:LETE=A<I):LETA<I)=Y 110 LETX=E-Y*B:LETY=D:RETURN 120 PRINT!F1.9!'ОСТАТОК R(X)='Y'*X + C'X')' 130 PRINT'КОЭФФИЦИЕНТЫ МНОГОЧЛЕНА-ЧАСТНОГО' 140 FOR I=N TO 0 STEP -1 150 PRINT!2.0!'A'I'='!F1.9!A<I) 160 NEXT BEND 62
Программа 3.35. 05 PRIНТ'ВЫЧИСЛЕНИЕ Р<С> И ДЕЛЕНИЕ Р(Х> НА СХ-СГ 10 INPUT'ВВЕДИТЕ ЗНАЧЕНИЯ НлС 'N/CsDIM А<Ю 20 FOR I==N ТО 0 STEP -1 30 PRINT’S.0!'А'!'«'•INPUT A<I)sNEXT I 40 PRINT«2.0»'B'N-1'='!F1.9!A<N) 50 FOR I=N-1 TO 0 STEP -1 60 LETA(I)=A<I)+A<I+1)«C 70 IF IO0 THEN PRINT’2.0!'B'1-1'»'!F1.9!A<I> 80 NEXT 18 PRINT?Fl.9•'P<X)«'A<0)8 END Программа 3.36. 10 PRIНТ'УМНОЖЕНИЕ МНОГОЧЛЕНА A<X) СТЕПЕНИ M' 20 PRINT' НА МНОГОЧЛЕН В<Х> СТЕПЕНИ N' 30 INPUT'ВВЕДИТЕ M/N 'M/N8DIM А<М+М+1> 40 FOR 1*М ТО 0 STEP -1 50 PRINT’S.0*'А'1'=':INPUT A<I>sNEXT I 60 FOR I=N+M TO M STEP -1 70 PRIHTI2.0!'B'I-M'='sINPUT W 80 FOR J=M TO 1 STEP -1 90 LETA<J+M+l)=A<J)*W+A<J+M)5NEXT J 100 LETA<M+1)=A(0)*W 110 PRINT’S.©*'C'1'='?F1.9»A<M+M+1>8NEXT I 120 FOR I*M-1 TO 0 STEP -1 130 PRINT’S.©*'C'1'='*F1.9*A(I+M+1> 140 NEXT DPRINT'KOHEU ВЫЧИСЛЕНИЙ'sEND Вычисление значения полинома P(x) = =anx',4-0n-ix',_| 4-... 4-0ix4-0o в точке х=с и деление Р(х) на (х — с) выполняется по следующему алгоритму. 1. Вводим коэффициенты дл, дл_|, ... ..., ai, а0 полинома Р (х). 2. Задаем ai—an (i = n). 3. Преобразуем а< по рекуррентной фор- муле а,=а, 4-0/-1с с помощью цикла с управ- ляющей переменной 4, меняющейся от зна- чения n—1 до 0 с шагом —1. 4. На каждом цикле п. 3, кроме 4 = 0, выводим значения полинома В (х) = =Л (х)/(х — с) = Ьл_1хл~| 4-5л_2х'”‘24- ... ...4-^>х4-^о, имеющего порядок (n—1). 5. По окончании цикла по п. 3, 4 выводим Р(х)=д0. Если с — корень Р(х), то деление Р(х) на (х—с) может применяться для понижения степени многочлена и поиска его очередного корня. Программа 3.35. Пример. Для многочлена Р(х) = Зх34- 4-2х2 —5x4-7 при п = 3 и с = 3 получим В (х)=3х24-Их4-28 и Р (с) =91. Умножение многочлена А (х) =аЛ1х'я4- 4-am_i хт~1 4- 4-0ix4-0o степени т на многочлен В (х) — bnxn-\-bn-\xn~{ 4- — 4-^ix4- -|-6о дает многочлен С(х) =c,„ + ,(x'"+rt4- 4-cm+n_ixm+''"14-... 4-йх4-с0 степени (т4-я). Эта операция выполняется по сле- дующему алгоритму. I. Вводим коэффициенты ат, ат_\, ... ..., О|, До- ' 2. Организуем внешний «цикл вычислений ci, задав начальное значение управляющей переменной цикла i—(n-\-m) и конечное значение т с шагом —-1. В начале каждого цикла вводим bt_m и переходим к п. 3. 3. Организуем внутренний цикл с управ- ляющей переменной /, меняющейся от j — m до 1 с шагом 1. В этом цикле преобразуем коэффициенты многочлена Д(х) по формуле #/+«+1 в0Д--л+а/+я. 4. При выходе из внутреннего цикла вы- числяем am+i=a06/-m, выводим на печать с,= а2т+1 и переходим к п. 2 (т. е. завершаем внешний цикл). 5. С-помощью цикла с управляющей пе- ременной 4, меняющейся от i — m — 1 до 0 с шагом —1, выводим на печать последние т значений Ct—ai+m+i. Программа 3.36. Пример. Для А (х) = 4х4 4-Зх2 + 2х 4- 4-1x4-0,5 и В(х) =2хй4-1х4-0,4 получим многочлен С (х) = 8х6 4-1 Ох5 4- 8,6х4 4- 5,2х3 4- 4- 2,8х2 4~ 0,9х 4“ 0,2. § 3.4. Вычисление ортогональных многочленов Ортогональные многочлены Чебышева Тл(х)=о)(х) являются решениями диффе- ренциального уравнения второго порядка (i-%2)4?‘_jc^r+n2<o=o- <з-2) Они могут вычисляться с помощью явного выражения Tn(x) = cos (n arccosx) (3.3) или по рекуррентным формулам Ti+i(x) = = 2хТ1(х)~Ti_\(x) при То(х)=1 и Г1(х)=х. Дифференциальному уравнению (3.2) со- ответствуют и решения в виде функций 63
Программа 3.37. 10 PRINT ’ВЫЧИСЛЕНИЕ МНОГОЧЛЕНА ЧЕБЫШЕВА' 15 INPUT ‘ВВЕДИТЕ N='N 20 INPUT 'МНОГОЧЛЕН 1-ГО ИЛИ 2-ГО РОДА' R 30 INPUT 'ВВЕДИТЕ Х='Х 40 IF R=2 THEN 60 50 PRINT 'TN<X)='COS<N*ACS<X)) : GOTO 30 60 PRINT 'UN<X))='SIN<<N+1)*ACS<X)>/SIN(ACS<X>) 70 60T0 30 s END Программа 3.38. 10 PRINT'ВЫЧИСЛЕНИЕ МНОГОЧЛЕНА ЛЕЖАНДРА' 20 INPUT'ВВЕДИТЕ N>=2 N='N 25 INPUT'ВВЕДИТЕ X='X:LETA=1:LETB=X 30 FOR 1=1 TO N-l 40 LETP=<<2*1+1)*X*B-I*A>/<1+1) 50 LETA=B5 LETB=Ps NEXT I 60 PRINT'PN<X)='PsGOTO 25:END Программа 3.39. 10 PRINT 'ВЫЧИСЛЕНИЕ МНОГОЧЛЕНА ЛАГЕРРА' 20 INPUT 'ВВЕДИТЕ N>=2 N='N 30 INPUT 'ВВЕДИТЕ X='X s LET A=1 s LET B=l-X 40 FOR 1=1 TO N-l 5© LET L=<<2*I+l-X)*B-I*A>/<1+1> 60 LET A=B s LET B=L s NEXT I 70 PRINT 'LN<X)='L : GOTO 30 s END Бесселя второго рода Un{x)-. L/o(x) = arcsin x, -d 1 — x^~ Un(x) — sin(n arccosx)=—------- (3.4) 4- T„(x). dx Они также 'могут вычисляться с помощью рекуррентных формул Ut + \—2xUl{x)—Ui~i(x), Z=l, 2...n-l, при Uo(x)— 1 и Ui(x) = 2x. Поскольку в большинстве версий языка бейсик предусмотрено вычисление обратных тригонометрических функций, вычисление Тп(х) и Un(x) целесообразно выполнять по явным формулам (3.3) и (3.4). Программа 3.37. Контрольные примеры. Г3(0,1) = = -0,26; (А(0,1 )=—0,392. Ортогональные многочлены Лежандра Рп(х) являются решениями дифференциаль- ного уравнения (1 ~х2) Д~Т"~2х ~т~ +« («+ 1) о> = 0 dx* dx ’ и могут вычисляться по рекуррентным формулам Р<+ |(х)=((2/+ 1) лР^-гЛ-^х^/ОЧ-1), /=1, 2, . . ., п-1, при Ро(х)=1 и Р|(х) = х. Программа 3.38. Пример. Для п =4 и х = 3 Р4(х) = 55,375. Ортогональные многочлены Лагерра Ln(x) являются решениями дифференциального 64 уравнения d2<i) , . dm . Л Z—+(1-х)-^г+л<о = 0 и вычисляются с помощью рекуррентных формул = ((2»+1-х) L, (х)—(х))/(<: +1), (=1, 2...п-1, при Lo(x)=l и Li(x)=l —х. Программа 3.39. Пример. L|0(3) = —0,7000223214; Lio(10) = 27,98412698. Ортогональные многочлены Эрмита Нп(х) соответствуют решениям дифференциального уравнения d2<o ———2х —-—L2nw = 0 dx* dx и вычисляются по рекуррентным формулам Ht+\ (х)—2хН, (х) (х), / = 1, 2, ..., п— 1, при Я0(х)=1, Hi(x)~2x. Программа 3.40. 10 PRINT'ВЫЧИСЛЕНИЕ МНОГОЧЛЕНА ЭРМИТА' 2© INPUT'ВВЕДИТЕ N>=2 N='N 30 INPUT'ВВЕДИТЕ X='Xs LETA=ls LETB=2*X 40 FOR 1=1 TO N-l 50 LETH=2*X*B-2*I*A 60 LETA=BsLETB=№NEXT I 70 PRINT'HN<X>='HsGOTO 30SEND Пример. tf10(3) = -3093984, H\Q(10) = = 8,09327821-10‘2.
f 3.5. Операции с матрицами Матрица — двумерный массив чисел вида du di2 «1з ••• ain Д__ 021 0,22 023 ••• 02/1 (3 5) dm I dm2 dm3 ••• 0mn Матрица характеризуется размерностью mXn, т. e. произведением числа столбцов п на число строк рг. Квадратная матрица имеет т = п и размерность п2 — пХп. У про- стейших ПЭВМ предусмотрено формирование одной-двух матриц размерностью 10X10 с коэффициентами Аи (например, у ПЭВМ класса Pocket Computers FX-702P можно формировать одну матрицу 10X20 или две матрицы 10X10, причем нумерация строк и столбцов начинается с 0, а не с 1). У более сложных ПЭВМ коэффициенты матрицы могут задаваться любой переменной, например В„, ZKL и т. д. Ввод матрицы обычно задается по строкам с помощью двух циклов. 1. Задаем значения / от 1 (или 0) до М (или М— 1) во внешнем цикле. 2. Задаем значения J от 1 (или 0) до V (или AZ— 1) во внутреннем цикле. 3. С помощью оператора INPUT задаем ввод А (/, /) каждого члена матрицы. Перед операторами ввода матрицы необ- ходимо задать размерность массива, напри- мер, с помощью операторов DIMA (М, N), СОМА (М, N) или других (зависят от кон- кретной версии бейсика, применяемой в ЭВМ). Программа 3.41. 19 REM'BBOA ЭЛЕМЕНТОВ МАТРИЦЫ M*N' 20 INPUT'ВВЕДИТЕ МлН 'Мл Ns DIM АСМлЮ 30 FOP 1=1 ТО Ms FOR J=1 ТО Н 40 PRINT 12.01'ВВЕДИТЕ ЭЛЕМЕНТ А' I'л' J 50 INPUT ACbJ)sNEXT JsNEXT I 500 END В ЭВМ с версией бейсика, имеющей матричные операторы, программа ввода суще- ственно упрощается (см. пример в § 2.2). Диагональная матрица является разно- видностью квадратной матрицы вида 0i 1 0 ... 0 А _ 0 022 ••• 0 0 0 ... йпп У нее все элементы нулевые, кроме диаго- нальных, т. е. А (/, /)#=0 при / = /. Программа 3.42. 10 REM'ФОРМИРОВАНИЕ ДИАГОНАЛЬНОЙ МАТРИЦЫ' 20 INPUT'ВВЕДИТЕ N='NsDIM АСЫлЮ Единичная матрица — разновидность диа- гональной матрицы, у которой А(/, /) = 1 при / = /. Программа 3.43. 10 REM' ФОРМИРОВАНИЕ ЕДИНИЧНОЙ МАТРИЦЫ •’ 20 INPUT'ВВЕДИТЕ N='№DIM АСНлН) 30 FOR 1 = 1 ТО № FOR 0=1 TO N 40 IF IO.J THEN 60 50 LETACb J)=lsGOTO 70 60 LETACbJ>=0 70 NEXT J:NEXT I 500 END Нулевая матрица — очищенный массив, т. е. матрица, у которой все А(/, /)=0. Для получения такой матрицы- иногда могут использоваться специальные операторы пол- ной очистки памяти данных (например, VAC у ПЭВМ FX-702P), исполняемые до ввода всех исходных данных. Если нулевую матрицу нужно формировать по ходу вычислений, можно использовать следующую программу: Программа 3.44. 10 REM'ФОРМИРОВАНИЕ НУЛЕВОЙ МАТРИЦЫ' 20 INPUT'ВВЕДИТЕ Мл Ы 'Мл Ns DIM АСМлЮ 30 FOR 1=1 ТО Ms FOR J=1 ТО N 40 LETACbJ)=0sNEXT J:HEXT I 500 END Операции с константами сводятся к сло- жению или вычитанию элементов матрицы А (/, /) с константой, например X, или умножению А (/, /)*Х или делению А (/, J)/X на константу. Все они могут проводиться в ходе ввода матрицы (см. программу 3.45). Программа 3.45. 10 PRINT'УМНОЖЕНИЕ МАТРИЦЫ N*N 15 PRINT’НА КОНСТАНТУ С' 29 INPUT'ВВЕДИТЕ N='N 251NPUT'ВВЕДИТЕ С'С:DIМ А СЫлN> 30 FOR 1 = 1 ТО Ns FOR .1=1 ТП N 4й PRINT 12.01'ВВЕДИТЕ ЭЛЕМЕНТ А'I'>'. I 50 INPUT АС 1л.J>s LETACb J)=A<Ь.ПжГ: 69 NEXT JsNEXT I 500 END Вывод матрицы на печать opi анизуется, как и ввод, с помощью двух циклов. Однако вместо оператора ввода во внутреннем цикле используется оператор вывода PRINT. Целе- сообразно вывод организовать так, чтобы индицировались индексы / и I каждого эле- мента в формате без дробных частей (см. при- мер вывода для программы 3.45). Программа 3.46. 70 FOR 1 = 1 ТО Ns FOR J=1 ТО N 80 PRINT12.0? 'A' Гл 'J'='ACb J) 90 NEXT JsNEXT I 500 END 30 FOR 1 = 1 TO Ns FOR J=1 TO N 40 IF IOJ THEN 60 50 PRINT!2.01'ВВЕДИТЕ A'lb'J 55 INPUT ACbJ)sGOTO 70 60 LETACb J)=0 70 NEXT J:NEXT I Пример. Для X = 2 и матрицы 500 END 2 3 5 6 8 9 выполнение совместно программ 3.45 и 3.46 3 В. П. Дьяконов 65
даст такие результаты (элементы выводятся построчно): А 1, 1 = 2 А 1,2 = 4 А 3, 3 = 18 Для матриц небольшой размерности выйбд можно задать и в естественном для матрицы виде. Программа 3.47. 76 PRINT 80 PRINT 90 PRINT 500 END A(bl)>A(b2>,A(b3) A<2/l)/A<2/2)fA<2/3) А(ЗМ>лА<Зл2)/А<3/3) Пример. Для приведенного вЫше при- мера совместное выполнение программ 3.45 и 3.47 ведет к выдаче результатов в форме 2 4 6 8 10 12 14 16 18 Транспонированной матрицей Ат называ- ется квадратная матрица, у которой столбцы соответствуют строкам -квадратной матри- цы А, например: Для матрицы 2X2, Z) — й!г1«22«3з4"«2>«^2«13 4~«l2«23"tbf — — «э । а&а i з — «з2«2.з«л —«2i«i2«;w для матрицы 3X3-и D = (011022 — «г20*21) (оззо44 —Х1ыа&} -f- + («13«21 -* О| 102э) f«32«44 — «34«4в) 4" -F («11024 — 014021) (0320И13—O33O4fj 4" 4“ («12023 — Or^Oji) (Оз»«44 — «34«4|)“Г 4-(Oj4«22 — 012024) («*1«43 — «З3«^|)4- -F («13«24 — О |4«2з) («3I «42 — «32(041) Для /Матрицы 4X4. Программа 3.49. Пример. 0=|> 2 | = -2 Программа 3.150. Пример. • 1 2 '3 . £) = 4 5 6 = 54. 7 8 — 9 Программа 3.31. Пример. 1 А = 4 7 2 3 5 6 8 9 Нетрудно заметить, что диагональные элементы у матриц А и Аг«одни и те же и операция транспонирования матрицы А сводится к перестановке остальных элементов симметрично относительно диагонали. Это реализуется с помощью Соотношения при Программа 3.48. Определители матриц с любой размер- ностью пХп вычисляются41 по методу v Payee а. Он сводится к преобразованию матриц к треугольному виду с помощью следующих формул преобразования элементов матри- цы А (3.5): М__ Ак-\) ° °" ~а" в,‘ где k—l, 2 (п—1) и ой‘ П#=’О.'Преобра- зование массива А(п, п) производится в на- правлении расположения столбцов слева 10 PRINT'ТРАНСПОНИРОВАНИЕ МАТРИЦЫ' 20 IHPUT'BBEftMTE N='№DIM A<N,N),B<H>N) 30 FOR 1=1 ТО № FOR J»1 TO N 40 PRINT>2.0!'ВВЕДИТЕ A'I'/'JsINPUT A<bJ) 50 NEXT JiNEXT I 60 FOR 1=1 T0№FOR J=I+1 TO N 70 LETC=A< b J)s LETAC bJ>=A<J,I)sLETACJ,I>=C 80 NEXT JsNEXT I 90 REM'ТРАНСПОНИРОВАННАЯ МАТРИЦА ЗАНЕСЕНА НА МЕСТО ИСХОДНОМ 500 END Определитель квадратной матрицы А — число Z), равное сумме nl членов ( — 1)' а|,|«2/2аз.-з...a«in, каждый из которых соответствует одному из nl различных упо- рядоченных множеств /|, j >......../\, получен- ных r-парными перестановками элементов из множества 1, 2, .. ., п. Определители матриц малой размерности (2X2, 3X3, 4X4) целесообразно вычис- лять по известным формулам: D =Д| 1«22 — «21«12 направо. Определитель вычисляется как произведение всех диагональных элементов преобразованной матрицы. Программа 3.52. Проверка программы производится по примерам, приведенным вЫше для программ 3.49 и 3.50. Необходимое -условие для реализации простого метода Гаусса заключается в неравенстве элемента нулю на всех этапах преобразования. В случае a4VIJ=0 произойдет останов ЭВМ, так как деление 66
Программа 3.49. 10 PRINT'ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ 2*2' 20 INPUT'ВВЕДИТЕ Al 1/ А12/ А2Ь А22 'А/ В/ C/D 30 PRINT'ОПРЕДЕЛИТЕЛЬ D=' A*D-C*B s END Программа 3.50. 10 PRINT'ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ 3*3' 20 INPUT'ВВЕДИТЕ A11/A12/A13 'А/В/С 30 INPUT'ВВЕДИТЕ А21/А22/А23 'D/E/F 40 INPUT'ВВЕДИТЕ A31/A32/A33 'G/H/I 50 LETS=A*<E*I-H*F)+C*<D*H~G*E)+B*<F*G-D*I> 60 PRINT'ОПРЕДЕЛИТЕЛЬ D='SsEND Программа 3.51 10 PRINT'ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ 4*4' 15 HIM A<4/4)sLETS=0 20 FOR 1 = 1 ТО 4s FOR J=1 TO 4 30 PRINT'BBEAHTE ЭЛЕМЕНТ A='’2.0’I'/'J 40 INPUT A<bJ)sNEXT JsNEXT I 50 LET0=lsLETP=2sLETQ=3sLETR=4sGOSUB 120 60 LET0=3sLETP=lsLETGl=2sLETR=4s GOSUB 12© 70 LETO=1:LETP=4sLETQ=2:LETR=3:60SUB 120 80 LET0=2sLETP=3sLETQ=lsLETR=4sGOSUB 120 90 LET0=4sLETP=2sLETQ=lsLETR=3sGOSUB 120 100 LET0=3:LETP=4sLETQ=lsLETR=2sGOSUB 120 110 PRINT I Fl«9!'ОПРЕДЕЛИТЕЛЬ D='SsSTOP 120 LETB=A<1/0)*A<2/P)-A<1/P)*A<2/0) 130 LETS=S+B*( A(3.» Q)*A(4, R)-A<3/R)*A(4.» Q) > 140 RETURN:END Программа 3.52. 10 PRINT'ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ' 20 INPUT'ВВЕДИТЕ ПОРЯДОК ОПРЕДЕЛИТЕЛЯ N='N 30 DIM A<N/N)sLETP=l 40 FOR 1 = 1 TO Ns FOR J=1 TO N 50 PRINT‘2.О’'ВВЕДИТЕ ЭЛЕМЕНТ A'I'/'J 60 INPUT A<1/.J)sNEXT JsNEXT I 70 FOR 1=1 TO N-1sFOR J=I + 1 TO N SO LETA<J/I)=A<J/I)/A<bI)sFOR K=I + 1 TO N 90 LETA<J/K)=A<J/K)-AGJ, I)*A(I/K)sNEXT K 100 HEXT JsLETP=P*A< I.»I):NEXT I 110 LETP=P*A<N/N)SPRINT’Fl.9!'ОПРЕДЕЛИТЕЛЬ D='P:END Программа 3.53. 10 PRINT'ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ ПО МЕТОДУ ГАУССА' 15 PRINT'С ВЫБОРОМ ГЛАВНОГО ЭЛЕМЕНТА ПО ВСЕЙ МАТРИЦЕ' 20 INPUT'ЗАДАЙТЕ ЗНАЧЕНИЕ N='NsDIM А(Н,Ю 25 FOR 1=0 ТО N-lsFOR J=0 ТО N-1 30 PRINT’2.0’'ВВЕДИТЕ ЭЛЕМЕНТ А'1+1'/'J+l'=' 40 INPUT A<bJ)sNEXT JsNEXT I*LETP=0 50 LETZ=1sLETD=l:FOR K=0 TO N-2 60 LETE»0sFOR I=K TO N-1 78 FOR J=K TO N-1sIF ABS(E)>=ABS(A(bJ)) THEN 90 80 LETE=A<I/J)sLETB=IsLETC=JsNEXT JsNEXT I 90 IF K=B THEN 120 100 FOR J=K TO N-1sLETS=A<K/J) 110 LETA<K/J)=A(B/J)sLETA<B/J)=S5NEXT JsLETZ=-Z 120 IF K=C THEN 150 125 FOR I=K TO N-1 130 LE TS=A < Ь К ) s LET A < Ь К > = A < I / C ) 140 LETA(I/C)=SsNEXT IsLETZ=-Z 150 FOR I=K+f TO N-lsLETG=A(bK>zA<K/K) 160 FOR J=K TO N-lsLETA(f, J)=A<b J)-G*A<K/ J) 170 NEXT JsNEXT Is NEXT K 180 FOR 1=0 TO N-lsLETD=D*A<bI) 190 NEXT IsLETD=D*ZSPRINT'ОПРЕДЕЛИТЕЛЬ D='’Fl.9‘DsEND 67 3*
Программа 3.49. 10 PRINT'ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ 2*2' 20 INPUT'ВВЕДИТЕ Alb А12/ А2ЬА22 'А/ В/ С/ И 30 PRINT'ОПРЕДЕЛИТЕЛЬ D='A*D-C*BsEND Программа 3.50. 10 PRINT'ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ 3*3' 2© INPUT'ВВЕДИТЕ AlbA12/A13 'А/В/С 30 INPUT'ВВЕДИТЕ A2bA22/A23 'D/E/F 40 INPUT'ВВЕДИТЕ A3bA32/A33 '6,НИ 5© LETS=A*(E*I-H*F)+C*(D*H-G*E)+B*(F*6-D*I> 60 PRINT'ОПРЕДЕЛИТЕЛЬ D='SsEND Программа 3.51 10 PRINT'ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ 4*4' 15 DIM A<4/4)SLETS=0 20 FOR 1=1 ТО 45 FOR J=1 ТО 4 30 PRINT'BBEAHTE ЭЛЕМЕНТ А='!2.0!I'/'J 40 INPUT A<bJ)sNEXT JsNEXT I 50 LETO=15LETP=25LETQ=3sLETR=456OSUB 120 60 LET0=35LETP=15LET0=2sLETR=4560SUB 120 70 LETO=15LETP=45LETQ=25LETR=356OSUB 12© 80 LETO=25LETP=35LETQ=15LETR=456OSUB 120 90 LETO=45LETP=25LETQ=15LETR=356OSUB 120 100 LETO=35LETP=45LETQ=15LETR=25GOSUB 120 110 PRINT!F1.9!'ОПРЕДЕЛИТЕЛЬ D='85STOP 120 LETB=A< b0>*A(2,P)-A<bP)*A<2>0> 130 LETS=S+B* < A < 3/Q > *A < 4/R > - A < 3/R > *A(4/Q)) 140 RETURNS END Программа 3.52. 10 PRINT'ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ' 20 INPUT'BBEAHTE ПОРЯДОК ОПРЕДЕЛИТЕЛЯ N='N 30 DIM A(N/N)sLETP=l 40 FOR 1 = 1 TO Ns FOR J=1 TO H 58 PRINT!2.0‘'ВВЕДИТЕ ЭЛЕМЕНТ A'lb'J 60 INPUT A<bJ)sNEXT JsNEXT I 70 FOR 1=1 TO N-lsFOR J=I + 1 TO N 80 LETAGJ, I>=A<JH)/A<bI)5F0R K=I + 1 TO N 90 LETA(J/K)=A<J>K)-A<J,I)*A(bK)5 NEXT K 100 NEXT JsLETP=P*A<b DsNEXT I 110 LETP=P*A<N/N)SPRINT!Fl.9!'ОПРЕДЕЛИТЕЛЬ D='PsEND Программа 3.53. 10 PRINT'ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ ПО МЕТОДУ ГАУССА' 15 PRINT'С ВЫБОРОМ ГЛАВНОГО ЭЛЕМЕНТА ПО ВСЕЙ МАТРИЦЕ' 20 INPUT'ЗАДАЙТЕ ЗНАЧЕНИЕ N='NsHIM А<Н,Ю 25 FOR 1=0 ТО N-is FOR J=0 ТО N-l 30 PRINT!2.0!'ВВЕДИТЕ ЭЛЕМЕНТ А'1+1b'J+1'=' 40 INPUT A<bJ)sNEXT JsNEXT IsLETP=0 50 LETZ=15LETD=lsF0R K=8 TO N-2 60 LETE=0sFOR I=K TO N-l 70 FOR J=K TO N-l5 IF ABS<E)>=ABS<A<bJ)> THEN 90 80 LETE=A<bJ)5LETB=IsLETC=JsNEXT JsNEXT I 98 IF K=B THEN 120 100 FOR J=K TO N-l5LETS=A<K?J) 110 LETA<K/J)=A<B,J)SLETA(B/J)=S8NEXT JsLETZ=-Z 120 IF K=C THEN 150 125 FOR I=K TO N-l 130 LETS=A<ЬK)5LETACbK)=A<bC) 140 LETA<bC)=SsNEXT IsLETZ=-Z 150 FOR I=K+f TO N-l:LET6=A<bK)/A<K/K) 160 FOR J=K TO N-lsLETACbJ>=A(b J)-G*A<K/ J) 170 NEXT JsNEXT P-NEXT K 180 FOR 1=0 TO N-lsLETD=D*A(bI) 190 NEXT IsLETD=D*ZSPRINT'ОПРЕДЕЛИТЕЛЬ D='!F1.9!DsEND 67 3
на 0 считается некорректной операцией. Большие погрешности возникают, если а1*~,)=#=0, но является малым числом. Для повышения точности вычисления определителя и исключения останова ЭВМ в ходе вычислений применяются варианты метода Гаусса с выбором главного элемента по столбцу, строке или по всей матрице. В последнем случае перед преобразованиями в матрице А (3.5) выбирают наибольший по модулю (главный) элемент, допустим а(/. Далее переставляют первую строку матрицы с i-й строкой (это и есть выбор главного элемента по строке), а первый столбец переставляют с /*-м (выбор главного элемента по столбцу). При каждой такой перестановке Решение этих уравнений определяет зна- чения всех элементов матрицы Л~‘хц. Оно выполняется по методам, описанным в § 4.1. Для простых матриц обращение выполняется по программам, реализующим готовые «ре- цепты» процедуры обращения. Программа 3.54. 1© PRIНТ‘ОБРАЩЕНИЕ МАТРИЦЫ 2*2' 29 INPUT’ВВЕДИТЕ AlbА12 ‘АлВ 25 INPUT’ВВЕДИТЕ А21/А22 ‘ОН 30 LETE=C*Bs LETF=A!LETE=D*F~E:LETA=D/E 40 LETD=FzEsLETC=-C/E5LETB=«B/E 50 PRINT ‘ОБРАЩЕННАЯ МАТРИЦА •’ 60 PRINT А/ВSPRINT HsENU Пример. знак определителя меняется, поэтому ре- зультат нужно умножить на (—1)р, где Р — число перестановок. Программа 3.53. Пример. 1 1 I 9 2 3 4 2 4 6 2 4 8 — — 20. 8 7 6 Отметим, что вычисление этого определителя по программе 3.52 ведет к останову ЭВМ с индикацией ошибки (некорректная мате- матическая операция). Обратной матрицей называется матри- ца Л-1, произведение которой на заданную матрицу А дает единичную матрицу. Обращение матрицы А заключается в на- хождении обратной матрицы А~'. Для обра- щения матрицы А используют следующие основные соотношения: А-А~' = <211 <212 <221 <222 <2Я1 <2я2 •.. <21 л .... <22п ... <2дд = = Х|| Х12 X21 Х22 ... Х|Я • • • Х2л = Х„1 Х«2 • • • v Хдл 1 0 0 1 0 0 0 0 ’’ i Перемножая матрицы Л и Л получим п систем уравнений с п2 неизвестными: <211*11 4“<212X21 4- ... 4“<2|nXnl <221X11 4-<222X21 4- ... 4“,<22пХп1 <2«|Х| 1 4“<2л2Х21 4“ ••• 4"<2плХл| = 1, =0, =0. (1) <211*12 "Ь 012*22 “Г ••• 4"<21/i*n2 = 0, <221*12 4- <222*22 4“ ... 4”<22п*п2= 1, (2) <2п1*12 4“<2п2*25 4" • •• 4" <2плХд2 — 0. <2| 1*1 п 4” <212*2п 4“ 4" <21 пХпп = 0, <221*1я4_<222*2п4” ••• 4“<22п*пп = 0, (н) <2nl*ln 4"<2п2*2п 4“ 4“<2nn*nn = 1 . 1,66666667 - 2,666666667 -1,333333333 2,333333333 Программа 3.55. Пример. 4 Л= 8 2 8 0 8 8 0 1 л-‘ = 0,083333 0,083333 -0,16666 -0,083333 0,041666 0,16666 0,66666 -0,33333 -0,33333 (указаны, 5 значащих Программа 3.56. цифр результата). Проверить эту программу можно по при- меру, приведенному к программе 3.55. Сложение и вычитание для двух матриц Л и В с одинаковой размерностью тХп производится по формуле <чj — CLij Mz bjj, где t = l, 2, m и / = 1, 2, ..., n. Здесь сц — элементы результирующей матрицы С. Программа 3.57. 05 PRINT‘СЛОЖЕНИЕ МАТРИЦ' 10 INPUT’ВВЕДИТЕ МлН ’МлН 15 DIM А(МлН>лВ<МлН>лС<МлН:) 20 FOR 1 = 1 ТО Ms FOR J=1 ТО N 30 PRINT‘2.01’ВВЕДИТЕ A‘lb‘J 40 INPUT АСЬ.J) s NEXT J: NEXT I 50 FOR 1 = 1 TO Ms FOR J=1 TO H 6© PR I NT •’ ВВЕДИТЕ ВЧ V J 65 INPUT B(bJ) 70 LET С ( b J ) = A < b J > +B < I л J ) 80 HEXT J5 HEXT Is END Пример. Для m — 2, n — 3 12 3 7 8 9 4 5 6’8 7 6 8 10 11 12 12 12 Умножение матриц А с размерностью mXn и В с размерностью пХ/ выполняется по формуле п cbl^ £ (aklbii), / = 1 где /=!, 2, ..., I и k—\t 2, ..., m, Полу- чаемая матрица С имеет размерность тХ/. 68
Программа 3.55 10 PRINT'ОБРАЩЕНИЕ МАТРИЦЫ 3*3':DIM А(ЗлЗ) 15 INPUT'ВВЕДИТЕ А11лА12лА13 ' А< 1л 1)л АС 1л 2)л Й< 1/3) 28 IHPUT' ВВЕДИТЕ А21 , А22л А23 ' А С2/ 1 > г А < 2.» 2 > > А < 2 л 3 ) 25 INPUT'ВВЕДИТЕ А31лА32лАЗЗ ' АСЗл1)л АСЗл 2>л АСЗл 3> 3© FOR К=1 ТО 3 35 ЦЕТА=АС2л 1 ).-'АС 1л 1 >: LETB=-A 40 LETC=A С 2 л 2 ) -А*А С 1л 2 >: LETD=А С 2 л 3) -А*А С 1л 3 > 50 ЬЕТА=АСЗл 1 >/АС 1л1 >: ЦЕТАС2л 3)=-А 60 ЕЕТАС2л 1 )=АСЗл2>-А*АС 1,2) 70 LET АС 2л2)=АСЗл3>-А*АС 1л3) 80 ЦЕТАСЗл 1 )=АС 1/ 2>/АС 1л 1) 90 LET А С 3/ 2 ) =А С1л 3 ) 'А < 1 л 1 > 100 ЕЕТА<ЗлЗ)=1'-'А<1л 1):LETA(1.> 1?=С 110 LETAС1л 2>=D:LETА С1л 3 >=В:NEXT К 120 PRINT'ОБРАЩЕННАЯ МАТРИЦА' 130 PRINT АС1л ПлАС1л2)л АС1лЗ) 140 PRINT АС2л1)лАС2л2)лА(2лЗ) 150 PRINT АСЗл 1)лАСЗл2)лА<ЗлЗ):ЕЫЛ Программа 3-56. 05 PRINT'ОБРАЩЕНИЕ МАТРИЦ МЕТОДОМ ГАУССА’ 18 PRINT'С ВЫБОРОМ ГЛАВНОГО ЭЛЕМЕНТА' 15 INPUT'ЗАДАЙТЕ N='N:DIM ЙСНлЮлРСИлН) 20 DIM ВСЮлССНлЮлБСЮлХСН) 25 FOR 1=1 ТО NsFOR J=1 ТО Ы 30 PRINT 12.0!'ВВЕДИТЕ А' I' л ' J' =': INPUT ACbJ) 35 LETPCb J>=ACbJJsNEXT JsNEXT I 40 FOR J2=l TO NSFOR 1=1 TO N 50 LETBCI>=0sNEXT I 60 LETBCJ2>=1 70 FOR J3=l TO NSFOR J4=l TO N 80 ЦЕТАСОЗл04)=РС03лJ4>sNEXT J4SNEXT J3 85 GOSUB 100 s FOR 1 = 1 TO N 90 PRINT!2.0!'X'I'л'J2'='!F1.9!XCI) 95 NEXT Is NEXT J2SST0P 100 LETNl=N-ls FOR K=1 TO Hl 110 IF АВ8СА(КлЮ>>0 БОТО 200 120 LETK1=K+1:FOR M=K1 TON 138 IF АВЗСАСМлК))>0 60T0 150 140 60T0 165 150 FOR L=1 TO N:LETU=ACKbL)sЦЕТАСКлЦ)=АСМлL) 160 ЦЕТА<МлЦ>=и8ЫЕХТ LsNEXT M 178 LETU=BС К)s LETB С К)=B С M)s LETBC M)=U 200 LE TG С К)=B С Ю zА С Кл К)s LETK1=K+1 210 FOR I=K1 TO NsLETBCI)=BCI)-AC1лK)*GCK) 220 FOR J1=K TO NsLETJ=N-Jl+KsLETCCK.-О)=ЙСКл J)zACK,IO 225 LETAC 1л J)=AC 1л J>-AC 1л ЮжССКл J) 230 NEXT Jis NEXT Is NEXT К 240 LETM=NsLETXCM)=BCM)zACM>M> 250 LETM=M-1sLETS=0sFOR L=M TO HI 260 ЕЕТ5=8+ССМлL+l)*XCL+1>sNEXT L 270 LETXCM>=GCM>-SsIF M>1 GOTO 250 280 RETURNS END Программа 3.58. 10 PRINT’УМНОЖЕНИЕ МАТРИЦ M*N И N*L' 20 INPUT'ВВЕДИТЕ МлНлЦ'МлНлЦ 30 DIM А<МлН)лВ<НлЦ)лС<НлЦ) 40 FOR 1=1 TO Ms FOR J=1 TO N 50 PRINT!2.0!'ВВЕДИТЕ A' I', ' Js INPUT A<bJ> 60 NEXT JSNEXT I 70 FOR 1=1 TO NsFOR J=1 TO L 80 PRINT'ВВЕДИТЕ В'I' л ' Js INPUT B(bJ) 90 NEXT JsNEXT I 100 FOR K=1 TO MsFOR J=1 TO LsLETS=0 110 FOR 1=1 TO NsLETS=S+A<K> 1)*В<1лJ)sNEXT I 120 LETC<K.«J)=5sNEXT JsNEXT К 130 PRINT'РЕЗУЛЬТАТ' 140 FOR K=1 TO MsFOR J=1 TO L 150 PRINT!2.0!'C'K’/'J'='!Р1.9!С<КлJ) 160 NEXT JsNEXT KsEND 69
Программа 3.58. Пример. Для zn = 4, п = 5, / = 3 12345 \23 15 30 45 6 7 8 9 1 2 , 31 62 93 2 3 4 5 6 Х 20 40 81 7 8 9 12 2 . 27 54 81 1 Z U Умножение матрицы на вектор R = d=(ri, г2, ...» Г/») выполняется по формуле п Ui= Z a‘iri- где i=|, 2, m. В результате получаем вектор U. = [Vb у2, ..., и,«}. Скалярное произведение векторов А = = {аь а2, ..., <2п) и В={6ь 62.Ьп} есть число п с= £ 1-1 где z= 1, 2, п. Ввиду простоты составления программ для двух последних операций они не приводятся. § 3.6. Вычисление факториалов и комбинаторика Факториал ври целом п 1 rt! = n-(n — 1)-(л —2)-... - 2-1 (3.6) с особым случаем 0! = 1 у ряда ПЭВМ может вычисляться микропрограммно (найгример, с помощью оператора ! у ПЭВМ БХ-702Р}. Если такой возможности нет, вычисление факториала проводится по формуле (3.6). Программа 3.59л 05 10 20 30 40 50 70 PRINT*ВЫЧИСЛЕНИЕ ФАКТОРИАЛА INPUT 'ВВЕДИТЕ ЧИСЛО ЧИСЕЛ I LET l=0s LET Р«1 LET I=I+ls LET P=P*I IF I<N THEN 30 PRINT 'ФАКТОРИАЛ N»='P GOTO 108 END N='H Пример 5! = 120, 101 = 3628800. При n>70 значения nt выходят за пре- делы разрядности болншинства ПЭВМ (и!> Ю90). Для приближенного вычисления фак- ториала больших чисел и Применяется формула Стирлинга [10, 36]. Функция nF! вычисляется ио формуле пц==-(п(п — 2)-... • 1 при нечетном л, |п(п — 2)-...-2 при четном п, Программа 3.60. Пример. 7!! = 105, 8!! = 384. Число перестановок Ря = л!, а число раз- мещений из п элементов по т АХ = М/(п-т).. Число сочетаний из п элементов по т С™ ~п\/((п~т)\т\), причем п>1 и 1<т<п. ’ Программа 3.61. Пример. Для т = 5 и н = 10 По- лучим Рю = 3628800, А?»=30240 и С?0 = 252. Подобным способом можно вычислять и другие функции, содержащие члены с фак- ториалами. Программа 3.60. 05 PRINT'ВЫЧИСЛЕНИЕ ФУНКЦИИ N! ' 10 INPUT'ВВЕДИТЕ ЧИСЛО N='HsLETA=N/2sLETB=l 15 FOR 1=1 ТО 10 20 IF A-INT<A)=0 THEN 60 30 FOR 1=1 TO N STEP 2 4© LETB=B»I;NEXT I 50 GOTO 80 60 FOR J=2 TO H STEP 2 70 LETB=B*.J8HEXT J 80 PRIНТ'ЗНАЧЕНИЕ N!!='B 90 GOTO 10sEND Программа 3.61. 10 PRINT'РАСЧЕТ ЧИСЛА ПЕРЕСТАНОВОК/ РАЗМЕЩЕНИЙ' 20 PRINT'И СОЧЕТАНИЙ ИЗ N ЭЛЕМЕНТОВ ПО М' 30 INPUT'ВВЕДИТЕ ЦЕЛЫЕ ЧИСЛА N, М 'N/M 40 LETX=NsGOSUB 100sLETP=R 50 LETX=N-MsGOSUB 100sLETA=P/R 60 LETX=MsGOSUB 100sLETC=A/R 70 PRINT'ЧИСЛО ПЕРЕСТАНОВОК PN='P 80 PRINT'ЧИСЛО РАЗМЕЩЕНИЙ A M/N='A 90 PRINT'ЧИСЛО СОЧЕТАНИЙ C M/N='CsSTOP 100 LETR=lsFOR I=X TO 1 STEP -1 110 LETR=R*IsNEXT IsRETURNS END 70
§ 3.7. Преобразования координат и векторный анализ Преобразование координат из декартовых в полярные на плоскости описывалось в § 2.3. Преобразование декартовых коорди- нат X, У, Z в сферические в пространстве (рис. 3.1) проводится по формулам fl=7x2+r2+Z2 . Q = arctg(//X), <p=arccos(Z/R), где R — полярный радиус, Q — долгота и Ф—широта. Обратные преобразования про- водятся по формулам X — R sin ср cos Q, Y — R sin ср cos Q, Z — = R cos (p. Таким образом, если положить Z = 0, <р = 90°, то из этих формул вытекают формулы для преобразования декартовых координат в по- лярные и наоборот на плоскости. Программа 3.62. Рис. 3.1. Декартова и сферическая системы координат 10 PRINT'ПРЕОБРАЗОВАНИЕ КООРДИНАТ В ПРОСТРАНСТВЕ' 20 PRINT'СФЕРИЧЕСКИХ В ДЕКАРТОВЫ -КОД 0' 30 PRINT'ДЕКАРТОВЫХ В СФЕРИЧЕСКИЕ-КОД 1' 40 INPUT'3AAAhTE КОД 'As IF А=1 THEN 110 50 INPUT'ВВЕДИТЕ ПОЛЯРНЫЙ РАДИУС R='R 60 INPUT'ВВЕДИТЕ ДОЛГОТУ-УГОЛ(ГРАД) Q='QsLETQl«RAD<0) 70 INPUT'BBEAHTE ШИРОТУ-УГОЛСГРАД) F='F:LETF1=RAD(F) 80 LETX=R*SIH(Fl)*COS<Ql)sLETY=R*SIN<Fl)*SIN<Ql) 90 LETZ=R*COS(Fi)sPRINT'ДЕКАРТОВЫ КООРДИНАТЫ' 100 PRINT'X='Хл'Y='Y>'ZS'Z:STOP 110 INPUT'ВВЕДИТЕ КООРДИНАТЫ ХлУл2 'ХлУлЗ 128 LETR=SQR< X«X+Y*Y+Z*Z)s LETF== ACS < Z/R)s LETQ«ATN < Y/X ) 130 PRINT'ПОЛЯРНЫЙ РАДИУС R='R#'ДОЛГОТА О='ПЕ&(О)'ГРАД' 140 PRINT'ШИРОТА F='DEG(F)'ГРАД'SEND Пример. Для R— 10, Q = 40° и — Р — = 60° получим (код 0) X — 6,634139482, Y — = 5,566703992 и Z = 5, а для X=y=Z= 10 получим (код 1) /?= 17,32050808, Q = 45° и ф = Г = 54,73561032° . Преобразование декартовых координат на плоскости при сдвиге и повороте коорди- натных осей (рис. 3.2) осуществляется по формулам (далее 0 = Q) X' = (X - X(l) cos Q -Н (Y - Го) si n Q, Y' = (Y- Уо) cos Q - (X - Xo) sin Q, где X' и У' — новые координаты точки (X, У), Хо и Уо—координаты центра новой системы координат. Программа 3.63. Рис. 3.2. Преобразование декартовых координат на плоскости при сдвиге и повороте осей 10 PRINT'ПРЕОБРАЗОВАНИЕ КООРДИНАТ НА ПЛОСКОСТИ' 20 INPUT'ЗАДАЙТЕ УГОЛ ПОВОРОТА ПЛОСКОСТЕЙ (ГРАД) Q='Q 30 LETO=RAIKQ)s INPUT'ЗАДАЙТЕ КООРДИНАТЫ ЦЕНТРА Х0лУ8 'Вл С 40 INPUT'ВВЕДИТЕ СТАРЫЕ КООРДИНАТЫ ХлУ 'X/Y 45 LETX1=<X-B)*COS<Q)+<Y-C)*SIN<Q) 50 LETY1=(Y-C)*COS(Q)-<X-B)*SIN<Q) 60 PRINT'НОВЫЕ КООРДИНАТЫ' 70 PRINT'Xl='Xb'Yl='Yls60T0 40SEND Пример. Для Q = 20°, Xo = 3, Уо = 2, X = 5 и У = 5 получим X' =2,905445672 и Y' =2,135037676. Вектор (отрезок) с координатами начала (Х|, У|) и конца (Х2, У2), лежащий на плоскости, имеет длину £>=У(Х2-Х|)2+(),2-Г1)2- Координаты точки (X, У), делящей этоТ отрезок в отношении M/N-. ч WX,+MX2 y_NY^MY2 M + N ’ M + N 71
Программа 3.64. 19 PRINT'ДЛИНА ОТРЕЗКА И ЕГО ДЕЛЕНИЕ В ОТНОШЕНИИ M/N' 20 INPUT‘ЗАДАЙТЕ КООРДИНАТЫ ТОЧКИ 1 XbYl 'XbYl 30 INPUT'ЗАДАЙТЕ КООРДИНАТЫ ТОЧКИ 2 X2/Y2 'X2,Y2 4© LETD=SQR<(Х2-Х1)~2+(¥2-Yl)”2) 50 PRINT'ДЛИНА ОТРЕЗКА D='D 60 INPUT*ЗАДАЙТЕ M,N 'M/N 70 LETX=<N*X1+M«X2)/<M+H> 80 LETY==<N»Yl+M*Y2)z<M+N> 90 PR I NT > КООРДИНАТЫ ТОЧКИ ДЕЛЕНИЯ ОТРЕЗКА** 100 PRINT'Х='Х/ 'Y='Y:END Пример. Для Xt = 2,3, У|=4, X2 = 8,5 и У2 = 0,7 получим £> = 7,023531875. За- дав М = 3 и N — 2, получим Х = 6,02 и У = 2,02. Полярными параметрами прямой ДХ4- 4- В У 4- С = 0, лежащей на плоскости (рис. 3.3), являются полярное расстояние от нее до точки (0,0) Р=|С|/л/л2 + б2 и полярный угол Q, вычисляемый из соотно- шений cos Q= +4/уД24-В2, sin Q = т5/д/л2 + б2, где знак — берется, если С> 0, а знак 4-, если С<0. Программа 3.65. Рис. 3.3. Полярные параметры прямой на пло скости 10 PRINT’ПОЛЯРНЫЕ ПАРАМЕТРЫ ПРЯМОЙ A«X+B»Y+C=0' 20 INPUT'ВВЕДИТЕ А/В/С 'А, В/С 30 LETD=1UF С>0 THEN LETD=-1 48 LETF=SQR<А*А+ВжВ)з LETP=ABS<C)/F 50 PRINT'КРАТЧАЙШЕЕ РАССТОЯНИЕ ДО ТОЧКИ* <0/0> Р«'Р 60 PRINT'COS(Q)='D*A/F/ 'SIN<Q)='D=*B/F 70 PRINT-’УГОЛ Q='HE6<ACS<B*A/F>)sEND Пример. Для 4=3, В=—4 и С=10 получим Р = 2, cosQ=—0,6, sinQ = 0,8 и Q = 126,8698976°. Вектор в пространстве с началом в точке (0,0,0) декартовой системы координат и концом в точке (X, У, Z) имеет длину о=л/х2+г2+г2 и образует с осями координат углы a = arccos (X/D), 0 = arccos (Y/D) у = arccos (Z/£>). Программа 3.66. 10 PRINT'ДЛИНА ВЕКТОРА И УГОЛ МЕЖДУ НИМ И КООРДИНАТНЫМИ ОСЯМИ'- 20 INPUT'ЗАДАЙТЕ КООРДИНАТЫ КОНЦА ВЕКТОРА XcY/Z 'X/Y/Z 30 L.ETD=SG!R<X«X+Y*Y+Z*Z> sLETA=X-'D:LETB=Y.'DsLETC=Z-'H 40 PRINT'COS АЛЬФА='А,'COS EETA='B/'COS ГАММА='С 50 PRINT'АЛЬФА='DE6<ACS<A)>,'БЕТА='DE6<ACS<B>)/ 60 PRINT'rAMMA='DE6<ACS<C))s0OTO 20s END 72
Пример. Для Х — 2, Y= — 2 и Z= — l получаем cos а = 0,666666667, cosp = = -0,666666667, cos у =—0,333333333, а = = 48,1896851°, р= 131,8103149° и у = = 109,4712206°. Два вектора с началом в точке (0,0,0) и концами в точках (Х>, У>, Zi) и (Х2, Уг, Z2) образуют между собой угол (рис. 3.4) Х|Х2У1 У2 "4” Z| Z2 Q = a rccos ---------— ' —~~~ • -д/^+И + Z? -yJXl+Yl + Zl Длина отрезка, заданного концами этих век- торов или просто точками с их-координатами, D=V(X, -Х2)2+(Г| - K2)2 + (Zi —Z2)2 • Координаты точки (X, У, Z), делящей этот отрезок в отношении M//V, выражаются формулами WX,+MX2 УУ14-МГ2 M+N ’ M+N ’ Рис. 3.4. Отрезок в пространстве, образован- ный двумя векторами, исходящими из точки (0, 0, 0) JVZ14-MZ2 M4-W Программа 3.67. 1© PRINT‘УГОЛ МЕЖДУ ДВУМЯ ВЕКТОРАМИ/ ДЛИНА ОТРЕЗКА МЕЖДУ' 20 PRINT'ИХ КОНЦАМИ И КООРДИНАТЫ ТОЧКИ/ДЕЛЯЩЕЙ ОТРЕЗОК В' 30 PRINT' ОТНОШЕНИИ М-'Н' 40 PRINT'ВВЕДИТЕ КООРДИНАТЫ КОНЦА ПЕРВОГО ВЕКТОРА' 50 INPUT'XI/VI/Z1 'А/В/С 60 PRINT'ВВЕДИТЕ КООРДИНАТЫ КОНЦА ВТОРОГО ВЕКТОРА' 70 INPUT'X2/V2/Z2 'D/E/F 80 LETS=SQR< <A-D)J‘‘2+<B-E)'%2+<C-F)^2) 90 LETQ=SQR ( A*A+B*B+C*C ) #SQR < D*D+E*E+F*F > 100 LETQ==<A*D+B*EK*F)/Q 110 PRINT'УГОЛ МЕЖДУ ВЕКТОРАМИ<ГРАД) Q=='DEG<ACS(Q) ) 120 PRINT'ДЛИНА ОТРЕЗКА H='S 130 INPUT'ЗАДАЙТЕ M/N 'M/№LETR=M+N 140 LETL=A:LETK=D5GOSUB 190:LETX=W 150 LETL=B5LETK=E:GOSUB 190sLETV=W 160 LETL=C:LETK=F!GOSUB 190!LETZ=U 170 PRINT'КООРДИНАТЫ ТОЧКИ ДЕЛЕНИЯ' 180 PRINT'X='X/'V='V/'Z='Z5 GOTO 130 190 LETW=<N*L+M*K)/R:RETURNs END Пример. Для векторов At (8; —3; 8) и Д2 (6; —1; 9) получим Q—14,6712486° и D = 3. Задав М=1 и V = 4, находим Х = 7,6, У=—’2,6 и Z = 8,2. Плоскость в пространстве декартовой системы координат, описываемая уравне- нием AXA-^YA-CZA-D — 0, имеет полярные параметры (см. рис. 3.5) р=|О|/л/Л7+В2’+'С5- a = arccos (ТЛ/д/'/42-Ь В2 -|- С2), р = arccos ( Т В/^А2'-|- В2 -j- С2), y = arccos (Т С/-\]~А'2 + В2 +-С2 L где Р — кратчайшее расстояние от точки (0,0,0) до плоскости, а, 0 и у — полярные углы (между перпендикуляром, опущенным на плоскость из точки (0,0,0) и осями коор- динат). Рис. 3.5. Полярные параметры плоскости, распо- ложенной в пространстве 73
Ориентированное расстояние от точки (Л|, И|, Zt) до дайной плоскости L H^+Br. + CZi+D т/Л’ + В’ + С2' Знак L указывает на расположение точки (Ль ZJ сверху или снизу плоскости. Программа 3.68. 1© PRINT'ПОЛЯРНЫЕ ПАРАМЕТРЫ ПЛОСКОСТИ A*X+B*Y+C*Z+D«0' 20 PRINT' И РАССТОЯНИЕ ОТ НЕЕ ДО ТОЧКИ MICXbVbZIV 30 INPUT'ВВЕДИТЕ ПАРАМЕТРЫ A/B/C/D 'А/В/С/И 40 LETR=lsIF D>0 THEN LETR=-1 50 LETM=SQR < A:*A+B*B+C*C ):LETA1 =DE6 < ACS ( R*A/M ) ) 60 LETB1=DEG(ACS<R»B/M) > 5LETG1==DEG<ACS<R*C/M> > 70 PRINT-'УГЛЫ В ГРАДУСАХ':PRINT'АЛЬФA='Al 86 PRINT'БЕТA='В1:PRINT'ГAMMA='61 90 INPUT'ВВЕДИТЕ КООРДИНАТЫ ТОЧКИ XbYl/Zl 'X>Y,Z 100 LETL=<A*X+B*Y+C*Z+D)/M 110 PRINT'РАССТОЯНИЕ ДО ТОЧКИ L='Ls&OTO 9©SEND Для 4<=1 В—~2, C = 2 и £>——3 —131,8103149° и у ==48,1896851°. Для точки получаем ₽i=l, а = 70,52877937°, ₽= (5,5,5) £ = 0,666666667.
ГЛABA 4 АЛГОРИТМЫ И ПРОГРАММЫ РЕАЛИЗАЦИИ ОСНОВНЫХ ЧИСЛЕННЫХ МЕТОДОВ §4.1. Решение систем линейных уравнений Системы, из п линейных уравнений вида- ОцХ| 4“'«12Х24“ . ..4“«1«Xrt = 6|, Я2|Х| 4-«22^2 + ... + «2пХл = &2, (4.1) «Ч1*1 4? «л2Х2 4~ • 4" dnnXn — Ьп решаются: точными и итерационными мето- дами. Точные методы даюъ точное решение за конечное число операций, если все они выполнялись без погрешности. Число операций у итерационных методов зависит от заданной, погрешности вычислений. Метод Гаусса или метод последователь- ного исключения неизвестных основан на- приведении матрицы -коэффициентов ац к тре- угольному виду. При этом алгоритм решения системы (4.1) следующий, I. С помощью двух циклов с управляю^ щимн переменными / = 1, 2, ..., п и / = = 1, 2, ..., п организуем ввод коэффициен- тов Oij и bj, образующих массивы А{1, J). и вцу: 2. Проводим прямой ход исключения пере- менных путем преобразования коэффициен- тов, (4.1) по формулам «р== ац/уц.\ ajk Qjk a^ciik', bf — bi 4" а^Ьн где /= 1; 2, ..., л.—1 ;./==/4-h <4*2, ..., п и. /?f=/’4“L /'4-2,..:, В конце этих пре- образований получаем Хп== Ь п/апп. 3. Организуем обратный ход (последо- вательное нахождение хЯт1, хя_2, .... х2, x\)f проводя вычисления цо формулам h-b, n Ji = h—Xian, где i — п — 1, и — 2..2, 1, / = 74~. 1, * 4“’2, .. . ..,, п и. x. — hjau. В результате формируется массив .Х.(/)< неизвестных к , xn_i, .... х2, xv. 4. Организуем вывод, массива Х(/). Программа 4.1.' Пример. Для системы (л = 3) 4х । .4- 0,241'2 — 0,08хз — 8, 0,09х>4г. Зх2-0,15хз = 9. С4'2) 0.04*1-0,08x2 4- 4 ц = 20 находим Xi ?= R909Н>8284; х2 = 3,194964417 и х4 = 5,044807306. Если, коэффициенты а,, близки к 0, может наступить аварийный останов ЭВМ, либо из-за погрешностей округ- ления точность сильно ухудшается. Это явля? ется недостатком простейшей реализации метода Гаусса. Метод Гаусса с выбором главного элемента заключается в том, что при прямом ходе производится выбор наибольшего по модулю' (главного), элемента и перестановка строк или столбцов (см. рис. 4.1). Последнее исключает деление на 0; если матрица А (/, /) содержит нулевые элементы, и повышает точность вычислений при наличии ошибок округления. Для ПЭВМ, ведущих вычисления с числами с плавающей запятой, достаточен выбор А (Д /) со- программа 4.2. Пример. Для системы 3xi 4“2х24“Хз = 4, Xi4~ х2—- хз=1, (4.3) Xt — 2х24-Хз = 3. получим Х| = 1,7; х2 =—0,6 и хз = 0,1. Метод вращения [24] является разно- видностью метода Гаусса, обладающей по* выщенной устойчивостью к «провалам» про- межуточных вычислений. Этот метод обеспе- чивает приведение исходной системы» (4.1) к системе с правой треугольной матрицей по следующему алгоритму. 1. Вводим ан и bt. 2. Вычисляем Л Л du 1 Мы ——-------- и Ьы—--------------, причем если а<?==а«=0, то Ж=1 и L*, = 0. Проводим преобразования системы по фор? мулам МщУ? ГыУь = Mkibi Lkibk, Lktyt Mkiyk.^^ Lkibi Мы-bk, где f= 1, 2.....n4- 1, fc = /4-1, /4-2,. ..., n,. у, и у* — левые части,, а b, и. bk — пра- вые части /-го и k-ro уравнений соответ- ственно. После п(п—1)/2 шагов приходим, к си* стеме с верхней треугольной матрицей. 3. Осуществляем обратный ход: Хт = (Й1? — 4-1 хт + I 7—-а\ппХп) /а\пт, где т — п, п — 1» ..., 1. 75
Программа 4.1. 05 PRINT'РЕШЕНИЕ СИСТЕМЫ ИЗ N ЛИНЕЙНЫХ УРАВНЕНИЙ' 10 INPUT 'ЧИСЛО УРАВНЕНИЙ N='N 20 DIM A(N,N),B<N>,X(N> 30 FOR 1=1 TO № PRINT «2.0»'ВВОД КОЭФ. УРАВНЕНИЯ 'I 40 FOR J=1 TO № INPUT A<bJ) 56 HEXT Js INPUT B<I>:NEXT I 6© FOR 1=1 TO N-l: FOR J=I + 1 JO N 70 LETA<J,I)=-A<J>I)/A(I,I)sFOR K=I + 1 TO N 80 LETACJjK>=A<JjK>+A<J/ I.WbK)! NEXT К 90 LETB(J>=B<J)+ACJ,I)*B<I>: NEXT Js NEXT I 100 LETX<N)=B(N)/A(N/N> 110 FOR I=H-1 TO 1 STEP -is LETH=B<I) 120 FOR J=I+1 TO Ns LETH=H-XGJ)*A(b JMNEXT J 130 LETX<I)=H/A(I, I)’.NEXT I 140 PRINT 'КОРНИ СИСТЕМЫ УРАВНЕНИЙ' 150 FOR 1=1 TO Ns PRINT‘2.0» 'X<'I')='sPRINT!E? X<I) 160 NEXT IS END Программа 4.2. 10 PRINT'РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ МЕТОДОМ' 20 PRINT' ГАУССА С ВЫБОРОМ ГЛАВНОГО ЭЛЕМЕНТА' 30 INPUT'ЗАДАЙТЕ ЧИСЛО УРАВНЕНИЙ N= 'N 40 DIM A(NfN)/B<H)/C<H/N)/0<H>/X<N) 50 FOR 1=1 ТО Ns FOR J=1 TO N 60 PRINT!2.0!'ВВЕДИТЕ A' I'/' J'='s INPUT A<bJ)sNEXT J 70 PRINT'BBEAHTE B'I'='sINPUT B<I)sNEXT I 80 GOSUB 100 85 FOR 1=1 TO N 90 PRINT!2.0?'X'I'='!F1.9!X<I)sNEXT BSTOP 100 LETNl=N-ls FOR K=1 TO Hl 116 IF ABS<A(K/K))>0 GOTO 200 120 LETKl=K+lsFOR M=K1 TON 130 IF ABS<A<M/K))>0 GOTO 150 140 GOTO 165 150 FOR L=1 TO NsLETU=A(K.»L)sLETA<K^L)=A<M/L) 160 LETA<M/L)=U*NEXT L 165 NEXT M 170 LETU=B<K)sLETB<K)=B<M)sLETB<M)=U 200 LETG<K)=B<K)/A<K,K):LETK1=K+1 210 FOR I=K1 TO №LETB(I)=B<I)-A<I.»K)*G<K> 220 FOR J1=K TO NsLETJ=N-Jl+KsLETC<K> J>=A<K^J)/A<K/K> 225 LETA<bJ)=A(bJ)-A<bK)*C(K, J) 23© NEXT Jis NEXT Is NEXT К , 240 LETM=NSLETX<M)=B<M)/A<M^MX 250 LETM=M-lsLETS=0:FOR L=M TO N1 260 LETS=S+C(M,L+l)*X<L+l)sNEXT L 270 LETX<M)=G(M>-SsIF M>1 GOTO 250 280 RETURNS END 76
/И7=Ж-7 /Г=7 нет /аММ да /7=/Г+7 L-1 М=М+1 X 1А(ММ>0 да M*N ON V=B(B); В(К)-В(М)\ BM=V;G(B)=B(K)/A(K,^ V=A(K,L) A(K,L)=A(M,L) *i A(M,L)=V 7=/Г+7 L-L^1 B(l)=B(l)~A(I,K}* *G(K) J1=K Л=^+4 нет L— Л=Л4-7 J=N-J1^K;C(K,J)= jAtZ^Afl,^- -А(1,К)*С(НД) нет T1>N да JON да K>N1 да M=N BfM) Рис. 4.1. Алгоритм реализации метода Гаусса с выбором главного элемента 77
Программа 4.3. 10 PRINT'РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ УРАВНЕНИЙ > 15 PRINT' МЕТОДОМ ВРАЩЕНИЯ' 20 INPUT'ВВЕДИТЕ ЧИСЛО УРАВНЕНИЙ N='№LETM=0sDIM A(N/N) 25 FOR 1=1 ТО NsFOR J=1 TO N 30 PRINT«2.0»'ВВЕДИТЕ КОЭФФИЦИЕНТ A'I'/'J 40 INPUT Ad, J) 5 IF JON THEN 60 50 PRINT'ВВЕДИТЕ В'В INPUT А(Ь0) 68 NEXT J5NEXT I 78 FOR 1=1 TO N-lsFOR K=I+1 TO N 80 IF А(Ы)О0 THEN 118 90 IF АСК/I >08 THEN 118 180 LETM=lsLETL=0s6OTO 138 110 LETM=SQR<Ad, I>л2+А<К, I )~2) 128 LETL=-A<KH)/MsLETM=A<bI)/M 138 FOR J=1 TO NsLETR=M*A<bJ)-L*A<K,J) 148 LETA<K/J)=L*A<bJ)+M*A(K, J) 158 LETACbJ)=R:NEXT J 168 LETR=M*Ad,8)-L*A(K/6) 178 LETACK/8>=L«A<b0)+M*A(K/0> 180 LETAC b0>=R:NEXT K: NEXT I 198 FOR I=N TO 1 STEP -1:LETM=8 200 FOR K=8 TO N-I-l 218 LETM=M+AC0/N-K>MACbN-K>’.NEXT К 220 LETAC8/ I>=САСЬ8)-М)/АСЬ I) 238 PRINT12.8!'КОРЕНЬ X'l '='1F1.9!AC8/I? 240 NEXT BEND Для проверки программы можно решить уравнение (4.3). Результат совпадает с ука- занным выше. Метод простых итераций, описанный В § 4.4 для систем нелинейных уравнений, применим и для решения систем линейных уравнений. Однако его сходимость гаранти- руется, если значения диагональных элемен- тов матрицы Д(/, /) превосходят остальные, что снижает применимость метода простых итераций (хотя любые системы линейных уравнений можно свести к нужному для сходимости виду с помощью преобразований, описанных в [7]). Сказанное относится и к методу Зейделя. Программы реализации этих и некото- рых других методов частного применения даны в Приложении 5. Отметим, что итерационные методы обла- дают свойством самоисправления ошибок в ходе вычислений и могут применяться в особых случаях, например, когда матрица коэффициентов at/ сильно разрежена, т. е. содержит много нулей. Метод минимизации заключается в поиске минимума целевой функции F(xb х2, ...» Xn)=lfl(Xl, х2, ...» хя)14~... ...4- lh(xi, х2, хя)|, компоненты которой формируются из урав- нений решаемой системы /|(хь х2, ..., хя) —ацХ]4-ai2x2-|-... ...4-а1яхя — bi, fi(xi, х2, ..., xrt)=a2|Xi4-a22x2-f-...* ... 4-а2яхл — bi, /n(xi, х2, ..., хя) = аЯ|Х|4-ая2х24-... • ♦ • 4" аппхп Ьп. Если Х|, х2, ..., хп — решение (4.1), то функ- 78 ция F (х\, х2, ..., хя)=0. Для реализации этого метода могут использоваться программы поиска минимума функции ряда переменных, описанные в § 5.6. § 4.2. Интерполяция и экстраполяция Интерполяция функции у (х) одной пере- менной х, заданной («4-1) узлами yt (х<), где / —О, 1, 2, ..., п, заключается в нахожде- нии значений у по значениям х, находя- щихся в промежутках между узлами х,. При интерполяции функция у (х) заменяется ин? терполяционцым полиномом Р (х), значения которого Р (х,) в узлах точно совпадают с у (х,). Значение п задает степень поли- нома Р (х). Формулы Лагранжа для интерполяции при равномерном расположении узлов обеспе- чивают наименьшее время интерполяции, не требуют обновления ввода у, и хо для вычис- ления каждого у(х) и позволяют вычислять у, в узлах Xi (например, для контроля правиль- ности вычислений). В этих формулах индек- сом 0 обозначается центральный узел. Для «4-1=24-6 формулы Лагранжа имеют вид [36] «Хх)2=(1 -р)уо + ру,+0,125Н^'(1У. * Z +0,065ft V" (5); ,2+Л(р).
I где I (0;02WV (g)llpH,0<p< 1». [ 10a042h*y v (g) прд. — 1 .< p < O.< ! 1:<р<2< g | f ±Др(р’-«) >l+. + ,,+w где. f 0,012Л»/й) при IpKl, ^=U,031ft5/a) при l<fp|<2; ^..= _M-'hp-w-3) 120 , Pto-IHP2-4)(p-3) +----------24-------y-' - (р2.-1>(Д2-4)(р-3) , ,. p(p.+ l)(p2-4)(p —3) + _ if, . p(p2-I)(p.+ 2)(/?-3). .. , -----------24....... *i + +-------[go-----Уз "* 'Pi' где .0.0049/ЛЛ'‘(5) ПРИ 0<р<1, _ '.0,0071A*/'®. RtP)—. при — 1<р<0. 1<р<2, 0.Q24 Л6/'(^) при —2<р< —1, 2<р<3. В этих формулах *=xo-Fpx, Р=(х^Хо)/Л, где Л — шаг расположения узлов, индекс у у(х) соответствует числу узлов (ft^-l), 4п+,(В) — максимальное значение производной у(х) аля точки х = £, лежащей в пределах интерполяции. Последний член формулы (он в программах не вычисляется) харак- теризует погрешность интерполяции. Пример (к программе 4.4). Для кон- троля этой программы выполним интерполя- цию функции Струве На (х)=у (х) [36], за- данной таблицей, при х0=1 и Л = 0,2: 4-2 = 0,36699114; ! =0,4739944; 40 = = 0,5686566; 41=0,648855 ; 42 = 0,7117925 и 4з~ 0,7570255. 1. При линейной интерполяции (Л4 = 1) для х=1,1 получим 4(1,1) =0,6087558. 2. При квадратичной интерполяции (Л4 = 2) получим 4(0$) =0,5231716; 4(1,1) = = 0,6104494. 3. При кубической интерполяции (М=3). получим 4(0,9) =0^5230539688; 4(1,1) = = 0,6105670313, 4. При Л4 = 4 получим 4(0,9) = = 0,5230357695; у (I,L) = 0,6105779508. 5. При М=5, получим 4(0,9).= = 0,5230350945; у( 1 •! ).= 0,6105786258. > M«*MsLETN«M+l *2/Hi IF N=3 THEN 10B *АгВ Программа 4.4, 10 PRINT'ИНТЕРПОЛЯПИЯПРИ H«CONST ПО ФОРМУЛАМ ЛАГРАНЖА* 20 30 40 50 60 70 80 90_____ 100 IHPUT'BBEAHTE Y-lrY0rYl 110 INPUT*ВВЕДИТЕ X-*X:LETP*<X-Z>zH 120 130 140 158 160 170 180 190 208 210 228 238 240 258 260 270 288 298 380 INPUT*ЗАДАЙТЕ СТЕПЕНЬ ПОЛИНОМА М=1-5 IHPUT'BBEAHTE Х0гН IF н>4 THEN 140 IF Н»5 THEN 190 IF N®6 THEN 250 IHPUT'BBEAHTE Y0/Y1 INPUT'ВВЕДИТЕ X«*XiLETP»<X-Z>/H LETY*<l~P)*A+P*BiPRINT*Y»'Y*GOTO 80 , U-t-UA.UI 'АлВ/С LETY»P»<P-i >»A/2+<1-P«P>«B+P»<P+1>«C/2 PRINT*Y«*YiGOTO 110 IHPUT'BBEAHTE Y-bY0/Yl,Y2 INPUT'BBEAHTE X«*XiLETP»(X-Z>/HiLETE«<P-2)/2 LETY»-P*<P-1>*E»A/3+<P«P-l>«E*6 LETY=Y-P*<P+1>«E*C*P«<P»P“1>*0/6 PRINT*Y«*Yi60T0 150 INPUT * ВВЕДИТЕ Y-2, Y-Ь Y0, Yb Y2 Ar В/ Cr Dr E IHPUT'BBEAHTE X»*XiLETP»<X-Z)/H LETF*(P*P-l>/2«LETK«(P»P-4>/2 LETY«F»P*<P-2 > «А/12-< P-1>*P*K«B/3+F*K*C LETY”Y-<P+1>*P*K*D/3+F*P«<P+2>«Ez12 PRIHT'Y«'Yi60T0 200 _ л _ INPUT'BBEAHTE Y-2rY-lrY0rYlrY2rY3 'ArBrCrDrErF INPUT'BBEAHTE X»*X1LETP«<X-Z>/HtLETM»P«P-1 LETI«M/24iLETJ«-P»I»<P-3>iLETK»M-3iLETL»K*<P-3)/12 LETY«J*<P-2>*A/5+L«P*CP-l>*B/2-M*L«C LETY«Y+P*<P*1 )«L»IHJ»<P- ‘'*= PRINT*Y»*Y1GOTO 260>END 7?
Точные значения Но(х): //о(0,9) =0,523035 и Яо( 1,1) = 0,6105787. Существует ряд специальных видов поли- нома Р(х) (Ньютона, Эверетта и др.) [4, 5, 7, 18, 24, 30, 38]. Однако следует помнить, что полином Р(х\ имеющий P(xi)=yfa), является всегда единственным. Поэтому при пренебре- жении погрешностью вычислений ЭВМ все виды интерполяции должны давать одина- ковый результат. Это характерно для совре- менных ПЭВМ, оперирующих числами с пла- вающей запятой й имеющих нередко скрытые разряды для повышения точности вычислений. Интерполяция по методу Эйткена заклю- чается в вычислении у(х) при произвольно расположенных узлах без явного построения интерполяционного полинома. Последнее достигается путем последовательного приме- нения формул линейной интерполяции: и т. д. В приведенной ниже программе с М = 2~-6 для ускорения счета интерпо- ляция ведется прямо по приведенным фор- мулам. Программа 4.5. у( 1,55) = 0,8888683478 (все цифры результата верные). Интерполяция полиномом Лагранжа при произвольном расположении узлов в общем случае сводится к вычислению y(x) = Ln(x) с помощью интерполяционного полинома, имеющего вид (рис. 4.2) [ (Y\_ (* х ।) (х х%)... (х Хп) } (xo-XI)(xo-x2)...(xo-Xn)^ + | (х —хо)(х —х2) ... (х — Хп) (X!— Хо)(Х|— х2) ... (Xi— Хп) (х —Хр) (х — Х| ) . . . (XХп—। ) (Хп Хо) (.Хп ” Х|) . . . (хп Хп—1) Программа 4.6. Пример. Используя данные примера к программе 4.5, получим (/(1,55) = 0,888868348. Интерполяция с одновременным полу- чением коэффициентов полинома P(x) = anxn~l-an—ixn 1-|-...-j-aix 4~оо может выполняться с применением интер- поляционной формулы Ньютона [4, 24]: Рп-1(х) = {/1+(х — Х|)/(Хь х2)Ч- + (Х — Х1)(х — x2)f(xr, х2; Хз)+(х—Х1)(х —х2)... п — 1 ... (х — Хп—1) f (Xj; х2; ...; х„) = £ Л*ф<; ( = 0 где Л0 = (/ь Л* = /(хь х2; ..., xft+i) — разде- ленные разности К-го порядка (К=1, 2, 05 PRINT'ИНТЕРПОЛЯЦИЯ ТАБЛИЦ С ЧИСЛОМ УЗЛОВ ДО ШЕСТИ' 10 INPUT 'ЧИСЛО УЗЛОВ АО ШЕСТИ №'М 20 LETB2«08 LETB3=0sLETB4=0sLETB5«08 LETB6=0s LETX3=0sLETX4=0sLETX5»© 30 INPUT 'ВВЕДИТЕ X0>Y8' X0/Y8 40 INPUT 'ВВЕДИТЕ XbYl'XbYl 50 LETB0«Y0ILETQ1»<V1-Y0>/<X1-X0)SLETB1=Q1 60 IF M»2 THEN 210 70 INPUT 'ВВЕДИТЕ Х2лУ2'Х2лУ2 80 LETQ2«<Y2-Y0>/<X2-X0)8LETR2«<Q2-Q1>/<X2-Xl> 90 LETB2«R2s IF M»3 THEN 210 100 INPUT 'ВВЕДИТЕ X3,Y3'X3,Y3 110 LETQ3=<Y3-Y0)/<X3-X0)s LETR3*<Q3-Q1)/<X3-Xl) 120 LETS3«<R3-R2>/<X3~X2>8LETB3»S3s IF M«4 THEN 210 130 INPUT 'ВВЕДИТЕ Х4лУ4'Х4/У4 140 LETQ4*<Y4-Y0>Z<X4-X0>8LETR4«(Q4-Q1)z<X4-Xl> 150 LETS4»<R4-R2)/<X4~X2)sLETL4’=<S4~S3>/<X4-X3> 160 LETB4«L4s IF M=5 THEN 210 170 INPUT 'ВВЕДИТЕ X5/Y5' X5/Y5 180 LETQ5=<Y5-Y0>/<X5-X0)8LETR5«<Q5-Q1>/(X5-X1) 190 LETS5«<R5-R2)/<X5-X2>8LETL5=<S5-S3>/(X5-X3> 208 LETB5«<L5-L4>z(X5-X4> 210 INPUT 'ВВЕДИТЕ X»'X 220 PRINT'?®'<(<<В5*(Х-Х4)+В4>ж(Х-ХЗ>+ВЗ>*<Х-Х2>+В2>*(Х-Х1)+В1)*<Х-Х0)+В0 230 GOTO 2108 END Пример. Для контроля этой программы проведем интерполяцию гамма-функции Г(х)—У(х\ заданной А4 = 6 значениями х, и у< (36]< х0=1,5; i/0 = 0,8862269255; xi = = 1,51; 1/1=0,886591685; х2= 1,525; у% — =0,8872930231; х3=1,54; (/3 = 0,8881776586; х4=1,54; (/4 = 0,889639199; х5=1,59 и (/5 = =0,8924282141. Тогда для х=1,55 получим 3, ...» /г — 1) и ф0=1; i l k ч>|= П (x~xi)= Е Ф/х‘~'; Ф‘*=(-1)' п xi> z /-о А /=1 Z (-ir+'oi-z+m Z(-1Ap)ra; m=l р=1 Фо=1; »=1, 2, .... n-l; k=\, 2...i. 80
Программа 4.6. 1й PRINT'ИНТЕРПОЛЯЦИЯ ПО ЛАГРАНЖУ ДЛЯ N+1 УЗЛОВ* 2й INPUT*ВВЕДИТЕ №=*№ГПМ A<N)sDIM В<Ю 7.й FOR 1=0 ТО № PRINT!3.0!'ВВЕДИТЕ X* I 4й INPUT А<1)SPRINT ‘ВВЕДИТЕ ‘т, л I INPUT B<I)SNEXT I INPUT'ВВЕДИТЕ Х=лXsLET8=0 , _. IF X=A<0) THEN PR1NT!F1.9‘?Y<X.J = -B'JJ?SbOTU ьИ FOR J=1 TO NsLETC=1sFOR 1=1 TO N LETD=A< J)~A< I >s IF I=J THEN LETD=X-A's J? _ _ i IF D=0 THEN PRINT!1.9!лУ<Х)=ЛB<I)sbUTU bb i LETC=C*<X-A(I>>/DsNEXT I i LETS=5+C:*B<J)sNEXT J t PRINT!1.9!* V<* X ’ ) = * S s ВОТU bbs END 50 : во : 70 : 80 I 90 I 100 110 120 130 81
Программа 4.7. 10 PRINT*ПОСТРОЕНИЕ ИНТЕРПОЛЯЦИОННОГО ПОЛИНОМА НЬЮТОНА* 20 PRINT*И ИНТЕРПОЛЯЦИЯ ПРИ ПРОИЗВОЛЬНО РАСПОЛОЖЕННЫХ УЗЛАХ* 30 INPUT*ЗАДАЙТЕ ЧИСЛО УЗЛОВ N«'NiDIM А<Н)лЕ<ЮлХ<НЪУ(Н> 40 FOR I«1 ТО Hi PRINT!2.0!'ВВЕДИТЕ Х*1* л Y'J 50 INPUT Х<1ЪV<I>iNEXT HLETA<1)«1ILETF<N>=Y<1) 60 FOR I«1 TO H-ltLETF<I)»0iNEXT I 70 FOR K«1 TO N-lIFOR I«1 TO N-K 80 LEmfXV<I*D-Y<I»/<X<r+X)-X<I)>iHEXT I 90 LETR-HIF K/2-INT<K/2>OQ THEN LETR«-1 100 LETP«HFOR J«1 TO KiLETP«P*X<J>iNEXT J 110 LETACK+l>=R*PlIF K»1 THEN 170 120 FOR L=1 TO KitETW«0iFOR M«=l TO L 130 LETRMHF K/2-INT(K/2><>0 THEN LETR«-i 140 LETS«0iFOR P«1 TO KiLETS»S+R*<l/X<P>>^iNEXT P 150 LETW*W+<-R>«A<K+l+M-L>»SiNEXT M 160 LETA<K-L+l>«W/LiHEXT L 170 FOR J=H TO N-K STEP -1 1S0 LETF<J>«F<J>+A(J-H+K+l>*Y<i):NEXT JiNEXT К 190 PRINT'КОЭФФИЦИЕНТЫ СТЕПЕННОГО МНОГОЧЛЕНА' 200 FOR I«1 TO NiPRINT»2.0!'A'H-I!F1.9!'*'F<I)iNEXT I 210 INPUT'ВВЕДИТЕ ЗНАЧЕНИЕ X«'XiLETS=F(l>iFOR 1=1 TO N-l 220 LETS=S*X+F(I+l>iNEXT I 230 PRINT1F1.9!'Y<X>«'StGOTO 210IENB Пример. Пусть надо построить интер- поляционный полином для интеграла вероят- ности у (х) = Фо (х) = (1 Л/2л) 5 ехр (— /2) dt, о заданного пятью узлами у{ (2,2) =±=0,4860966; У2 (2,3) = 0,4892759; у3 (2,4) = 0,4918025; у4 (2,5) =0,4937903 и у5 (2,6) =0,4953388. Вве- дя эти значения, найдем: а0= —0,1706447; а । ==0,805165666; а2=-0,3712775; а3 = = 0,07783333333 и 04= —0,0625. Далее можно вычислить у(х) для заданного х (в том числе и в узлах интерполяции). Экстраполяция — получение значений у(х) при х, не принадлежащем отрезку (х0, хп] или [xi, Xn+i],- также осуществляется по описанным выше программам, но с суще- ственно большей погрешностью. Для гладких у(х) экстраполяция целесообразна при х, выходящих за указанные пределы не более чем на Л/2. Обратная интерполяция — процесс на- хождения значений х по заданным значе- ниям у. Она может выполняться по любой программе интерполяции с произвольно рас- положенными узлами. При этом вместо зна- чений Xi вводятся значения «/,, а вместо у, — значения xt. Многоинтервальная интерполяция заклю- чается в интерполяции у{х$ в ряде частич- ных интервалов (ограниченных двумя узлами или группой узлов) отдельными полиномами невысокой степени. Такая интерполяция может применяться при широком общем отрезке [а, 6], когда обычная интерполя- ция полиномом высокой степени дает большую погрешность и ведет к большому времени вычислений. Заметим также, что по виду полинома и значениям его коэффициентов трудно судить о виде зависимости «/(х). Многоинтервальная кусочно-линейная интерполяция при равномерном расположе- нии узлов сводится к заданию начального значения х^-а, шага h (расстояния между узлами), номера п последнего узла и (n-j-l) ординат i/о, i/i, ..., уп, после чего вычисление у(х) при заданном х выполняется по фор- мулам i = int ((х-—а)/А), , 4/W=yi+{yi +1 — У<) —ih — a)/h. На примере многоинтервальной кусочно- линейной интерполяции отчетливо видны общие свойства многоинтервальной интер- поляции: степень интерполирующего поли- нома (в данном случае 1) не зависит от числа узлов; с ростом последнего погреш- ность интерполяции монотонно стремится к нулю; для любого интервала вычисление у(х) производится по одним и тем же* относи- тельно простым (из-за малой степени поли- нома) формулам, поэтому время вычислений г/(х) при заданных х мало; массив yi несет* наглядную информацию о виде зависи- мости £/(х). Задание асимптотического поведения у(х) при x<Zxo — a и х^> b~a-\-nh заклю- чается в линейной экстраполяции, т. е. вычислении у(х) за пределами отрезка [а, 6] по формулам у(х) = £/о+(х — а)(у}— yo)/h при х<а, «/W = i/nH-(x — b)(yn — yn-\)/h при х>6. Такое задание не всегда строго, но позво- ляет избежать грубых искажений асимптоти- ческого поведения экстраполирующей функ- ции у(х) за пределами отрезка [а, , которые нередко наблюдаются при обычной поли- номиальной экстраполяции. Многоинтервальная квадратичная интер- поляция заключается в задании четного числа парных интервалов (п — четное число) с вычислением «/(х) при заданном х по фор- мулам (хо — а) f ==int ((х—-a)/2/i)-|-1, р = (х — a — ih) и +Й+0,,,.,. 82
Выражение для у(х) есть интерполяцион- ная формула «Лагранжа для трех ординат, применяемая для каждого частичного интер- вала. Асимптотическое поведение у(х) задается с помощью линейной экстраполяции с вы- числением первой производной в концах общего отрезка [а, 6] по формулам числен- ного. дифференцирования для трех точек: у(х)—уо+(х — а)(4у1—у2~Зуо)/2/1 при х<а, =уп 4- (х — Ь) (Зуп 4-уп _ 2 — 4уп _•) )/2/i при х>6. Сплайн-интерполяция есть специальный вид многоинтервальной интерполяции, при котором интерполирующий полином обеспе- чивает не только равенство у(х) значениям у, в узлах, но и непрерывность заданного числа первых производных на границах частичных интервалов. В общем случае сплайн задается глобальным способом, т. е. с использованием всех узлов при любом их расположении (см. § П5.11 Приложения 5). Ниже рассматривается задание кубичекого сплайна локальным способом, которое реали- зуется сравнительно просто и требует суще- ственно меньшего объема памяти ЭВМ,- чем при глобальном способе задания. Кубический сплайн, заданный локально,— это интерполирующая функция в виде поли- нома третьей степени, вычисляемая по формулам [6], z = int ((х — а)/К), h 4. (х-х.')2№+1—х) + д) yf+ , _|_ (х,+ |— Х)2(Х — X,) m _|-------—--------frll — h' где m, и mi+\ — первые производные у(х). Производные локального сплайна могут зада- ваться двумя способами. Способ 1. Производные mt и вычисляются с помощью формул численного дифференцирования по трем точкам: mt = (yi+[ — yi-\)/2h для z = l, 2, ..., и—1, m0 — (4yi — у2 — 3yo)/2h для z = 0, тп = (Зуп+уп-2 — 4yn-\)/2h для i = n. Способ удобен тем, что для задания сплайна требуется вводить лишь ординаты yt (зна- чения вычисляются программой). Для уменьшения времени многократных вычисле- ний у(х) желательно предварительно вычис- лить массив mi и хранить его в памяти ЭВМ. Способ 2. Значения mt (вычисленные отдельно или полученные из графика как наклоны его в узлах) задаются непосред- ственно в виде массива ть Задание асимптотического поведения z/(x) за пределами отрезка [а, Ь] осуществляется так же, как и при многоинтервальной квад- ратичной интерполяции. У рассмотренного локально заданного сплайна непрерывны лишь нулевая и первая производные (у гло- бально заданных кубических сплайнов не- прерывна также и вторая производная). Кусочно-линейная и многоинтервальная квад- ратичная интерполяция рассматриваются как дефектные сплайны, у которых обеспечива- ется непрерывность только нулевой произ- водной. Все эти виды интерполяции реали- зуются программой 4.8. После задания нужного вида интерполяции вычисления у(х) выполняются подпрограммами: кусочно- линейная интерполяция — экстраполяция со строки 1000, квадратичная — со строки 2000 и кубическая — со строки 3000. Эти под- программы могут использоваться для задания (аппроксимации) нелинейных зависимостей z/(x) в дополнительных программах, вписы- ваемых пользователем в программу 4.8. Программа 4.8. 10 PRINT'АППРОКСИМАЦИЯ/ИНТЕРПОЛЯЦИЯ И ЭКСТРАПОЛЯЦИЯ*’ 20 PRINT'СПЛАЙНАМИ ПРИ ЛОКАЛЬНОМ ИХ ЗАДАНИИ' 30 INPUT'ВВЕДИТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ Х0=*А 40 INPUT'ВВЕДИТЕ ШАГ Н='Н 50 INPUT'ВВЕДИТЕ НОМЕР ПОСЛЕДНЕГО УЗЛА Н='№П1М 7<Н) 60 FOR 1=0 ТО Ns PRINT*3.0*'ВВЕДИТЕ V'I 70 INPUT Y<I)sHEXT I 80 INPUT'ВВЕДИТЕ ПОРЯДОК 1/2 ИЛИ 3 ПОЛИНОМА'Р 90 IF Р=2 THEN 130 100 IF Р=3 THEN 150 . 110 INPUT'ВВЕДИТЕ X='XsGOSUB 1000 120 PRINT*F1.9*'Y<X>='WsGOTO 110 130 INPUT'ВВЕДИТЕ X='XsGOSUB 2000 140 PRINT*F1.9’.'Y(X)='WsGOTO 130 150 PRINT'3AAAATE КОД 0-DY/DX HE ЗАДАЕТСЯ'sDIM M(N> 160 INPUT'ЗАДАЙТЕ КОД 1-DY/DX ЗАДАЕТСЯ'К 170 IF K=0 THEN 200 180 FOR 1=0 TO Ns PRINT*3.0»'ВВЕДИТЕ DY/DX'I 190 INPUT MOSNEXT Is GOTO 230 208 LETM<0>=<4»Y<l)-Y<2)-3»Y<0))/2/H 210 LETM<N)=<3*Y(N)+V(N-2)-4*Y<N-lH/2/H 220 FOR 1=1 TO N-lsLETM<I)=(Y<I+l)-V<I-l)>/2/HsNEXT I 230 INPUT'ВВЕДИТЕ X='XsGOSUB 3000 83
240 PRINT!F1.9!'Y(X>«'W8GOTO 230 1000 REM'ВЫЧИСЛЕНИЕ Y<X)»W ПРИ СТЕПЕНИ ПОЛИНОМА 1' 1010 IF Х<«А THEN 1050 1020 LETB»A+H*HiIF X>=B THEN 106© 1030 LETI«INT<<X-A)/H)8LETW»V<I) 1040 LETW«W+<V<I+1)-V<I))»<X-I*H-A)/H8RETURN 1050 LETW»Y<0>+<X~A>*<V<1)-V<0))/HiRETURN 1060 LETW«V<H)+<X-B>*<V<N)-Y<N-1»/HtRETURN 2000 REM'ВЫЧИСЛЕНИЕ Y<X)«W ПРИ СТЕПЕНИ ПОЛИНОМА 2' 2010 IF XOA THEN 2060 2020 LETB«A*H»№IF X>=B THEN 2070 2030 LETI«l+2»INT<(X-A>/2/H)sLETP«(X-A-I*H)/H 2040 LETW«P*<P-l)*Y<I-l)/2+<l-P*P)*Y<I) 2050 LETW«W+P*<P+1)*Y<1+1>/2iRETURN 2060 LETU=V<0>-KX-A)*<4*Y<l)-Y<2)-3*Y<0)>/2/HrRETURN 2070 LETW=V(N)+<X-B)*<3*Y<N)+Y(N-2>-4»Y^H-l))/2/HsRETURN 3000 REM'ВЫЧИСЛЕНИЕ Y<X)«W ПРИ СТЕПЕНИ ПОЛИНОМА 3' 3010 IF X<«A THEN 3080 3020 LETB»A+N*H:IF X>«B THEN 3090 3830 LETI»INT < < X-A >/Н > 8 LETB=A+H*I 3840 LETC»B+H8LETD«X-C8LETE»X-B 3050 LETW=D*D*<E+E+H)*Y(I)+E*E*<H-D-D)*Y<I+l> 3060 LETW«W/H+D«B*E*M<I> 3070 3080 LETU=(W+E*E*D*M(I+1)J/H/H8 RETURN LETW«Y< 0 >♦< X-A > *M < 8)s RETURN 3098 LETW*=Y<N)+<X«B>mM(H)8RETUR№END Пример. Провести интерполяцию (ап- проксимацию) W-образной вольт-ампёрной характеристики туннельного диода, заданной в виде влияние на ход у(х) по всей кривой, что качественно неверно описывает физические явления, лежащие в основе нелинейности интерполируемой функции. Xi=Ut В 0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 yi = 1, мА 0 10 4 2 1,5 2 5 9 13 Задаем хо=О, /i = 0,l и п — 8. Введя ординаты yt для кусочно-линейной интер- поляции — экстраполяции, будем иметь 8/(0,1) = 10, (/(— 0,1) = — 10, 8/(0,05) = 5, 8/(0,8) = = 13 и т. д. Для многоинтервальной квад- ратичной интерполяции — экстраполяции у(0, 1) = 10, у( - 0,1) = - 18, 8/(0,25) = 2,8125, 8/(1) = 21 и т. д. Для кубической сплайн- интерполяции и экстраполяции i/(0,l)=10; 8/(0,25) = 2,65625, у( - 0,1) = -18, у( 1) = = 21 и т. д. Из этого примера видно, что для задания сплайна, аппроксимирующего некоторую за- висимость 8/t(x<), достаточно задать лишь определенное число ее ординат 8/t. Массив значений yi сохраняется в памяти ЭВМ и в любой момент может быть использован для восстановления вида аппроксимируемой зависимости, например, для вывода по точкам ее графика. Достоинством локально заданных сплай- нов является описание свойств зависимо- сти yi (xf) на каждом частичном интервале независимо от ее свойств на других ин- тервалах. Подобное поведение нередко встре- чается на практике, например, восходя- щие туннельная и диффузионная ветви W-образной вольт-амперной характеристики туннельного диода обусловлены совершенно различными физическими явлениями. Отме- тим, что у обычной полиномиальной аппрок- симации этого свойства нет и изменение 8/(х) вблизи какого-либо узла оказывает 84 Более точной, но и более сложной, является аппроксимация сплайнами при глобальном их задании. В этом случае коэффициенты т( вы- числяются по всем узлам yi (х/). Этот вид ап- проксимации рассматривается в § П5.11. Интерполяция функции двух переменных х и у по трем точкам (см. рис. 4.3, а) выпол- няется по формулам Кх, y)=(i-p—q)foo+pfto + qhi, где р=(х —xo)/h и q—(y—ya}/l. Здесь h — шаг изменения х, а / — шаг измене- ния у. Несколько лучшие результаты дает интерполяция по четырем точкам (рис. 4.3, б): f(x, «/) = (! -р)(1 —q)fbQ-^p(l-q)f[^ + ?(1— Р) foi+pt/fii. Ошибка при этом пропорциональна Л2. При интерполяции по шести точкам (рис. 4,3, в) р (р —2р4-1) + (l+p<Z-p2-^)foo+ 2 f,o+ , q(.q—2p+i)c , __с т-----2~—'°' + wn1 погрешность пропорциональна h3.
У "(0,1) (0,0) (l,0) О зв "(0,l)»(1,l) (0,0) (1,0) О X У "(0,1)*(1,1) ^0,0) (1,0) (-1,0) О х: "(0,~1) Рис. 4.3. Расположение равноотстоящих узлов при интерполяции функции двух переменных по 3(a), 4(6) и 7(в) точкам Программа 4.9. 10 PRINT ’ИНТЕРПОЛЯЦИЯ ФУНКЦИИ ДВУХ ПЕРЕМЕННЫХ' 20 PRINT’FCX/Y) ПО 3,4 И 6 ТОЧКАМ' 30 INPUT'ЗАДАЙТЕ ШАГ X Н='Н 40 INPUT’ЗАДАЙТЕ ШАГ V L=’L 50 INPUT’ЗАДАЙТЕ ЧИСЛО ТОЧЕК 3/4 ИЛИ 6 N=’N 60 IF N=4 THEN 90 70 IF N=6 THEN 100 80 INPUT'ВВЕДИТЕ F00/F1G/FG1 ’А, В?C:GOTO 110 90 INPUT’ВВЕДИТЕ FGG, Fl О/ FGl, Fl 1 ' А,Вл С/ Ds GOTO 110 100 INPUT'ВВЕДИТЕ FG-l? F-10, FGG? FIG? F01 .<• Fl 1 'A,B/C?D/E, I 110 INPUT'ВВЕДИТЕ ЗНАЧЕНИЯ XG/YG 'XG/YG 12G INPUT’ВВЕДИТЕ X/Y 'X/Y 130 LETP=<X-XG)zHsLETQ=(Y-YG)zLsIF N=4 THEN 160 140 IF N=6 THEN 170 150 LETF=( 1-Р-0)жА+РжВ+С.!жС! GOTO 19G 160 LETF= (1-P > ж(1-Q)жй+Рж< 1 -G!>жВ+Сгж (1 -P )жС+РжОжЦs GOT0 19G 170 ЕЕТР=0ж<0-1>жА/2+Рж(Р-1)жВ/2+<Д+Р*б-РжР-0жб)жС 18G L.ETF=F+P*(P-2*Q+1 )жВ/2+бж<13-2жР+1 )жЕ/2+Рж0ж! 190 PRINT'F<X/Y)='FsGOTO 12G8END Контрольные примеры. Интер- поляция функции последействия М= \у-^‘-г -хе ‘ dz, заданной таблично. 1. Интерполяция по трем точкам. Задано: и = 3; Л = 0,3; / = 0,1; хо = О,4; t/o = O; /оо = 2,5; /01 =2,456 и /.о =1,429. Получим [(0,7; 0,05) = = 1,407; /(0,4; 0,05)^2,478 и т. д. 2. Интерполяция по четырем точкам. Задано: п = 4, h — 0,3; I — 0,1; хо = О,4; z/0 = 0; /оо = 2,5; До= 1,429; Д, =2,456 и fn = l,4. Получим ДО,7; 0,05)= 1,4145; ДО,5; 0,08) = = 2,1118 и т. д. 3. Интерполяция по шести точкам. Задано: м = 6, А = 0,3; / = 0,1; хо = О,7; //о = 0,05; Д_| = 1,429; /-.0 = 2,487; /00=1,419, До = = 0,995; /о1 = 1,4; /и =0,981. Получим ДО,4; 0) = 2,502; ДО,5; 0,03) = 2,065857778. Многоинтервальная квадратичная интер- поляция — аппроксимация функции двух пе- ременных может использоваться, когда не- обходимо интерполировать или аппрокси- мировать таблично или графически задан- ные функции двух переменных. Такая интер- поляция — аппроксимация удобна, например, для вычисления токов по заданным напря- жениям у приборов с графически опреде- ленным семейством вольт-амперных харак- теристик (биполярных и полевых транзисто- ров, тиристоров и т. д.). Алгоритм интер- поляции — аппроксимации следующий. 1. Функция Дх, у) задается в виде матри- цы F(I, J), где / — номер строки таблицы (или кривой графика), J — номер столбца (или точки на кривой). При нумерации I и J с 0 имеем 0^/^/V—1 и 1, где А— число строк (кривых), М — число столбцов (точек на каждой кривой). Кроме того, задаются приращения (шаги) Ax = /i = = const и Az/ = / = const и начальные зна- чения хо~а и уо = Ь. 2. Для каждого значения х и у вычис- ляются: J = int ((х — a)/h), если J = 0, то берем 7=1, Z = int((i/ — если / = 0, то берем /=1, Р = (х — a — Jh), Q — (у — b — II). 3. Для каждого / = /—1, /, /4-1 (в пра- вой части / соответствует вычисленному в п. 2) вычисляется значение Z = P(P—\) F(l, / — 1 )/2-J-(1 — Р2)Л(/, /) + 4-Р (Р4-1) F (/, J + D/2. Эти значения присваиваются переменным С, D и Е. Таким образом, обеспечивается тройная квадратичная интерполяция по переменной х. 4. Выполняется квадратичная интерпо- ляция по переменной у; Z = Q(Q- 1) C/2 + (l -Q2) D + Q(Q+ 1) Е/2. Считаем Р(х, z/) = Z. 85
При аппроксимации неоднократно исполь- зуются п. 2, 3 и 4 алгоритма. Общее время вычислений примерно в 4 раза больше, чем при квадратичной интерполяции — аппрокси- мации функций одной переменной. Программа 4.10. всех корней сводится к локализации. корня с последующим сужением отрезков локализации корня [а, 6] одним из описан- ных далее методов. IS PRINT'МНОГОИНТЕРВАЛЬНАЯ ДВУХМЕРНАЯ КВАДРАТИЧНАЯ •' 20 PR I NT •’ ИНТЕРПОЛЯЦИЯ-АППРОКСИМАЦИЯ ФУНКЦИИ F(X,Y)' 30 INPUT‘ЗАДАЙТЕ ЧИСЛО ТОЧЕК КАЖДОЙ КРИВОЙ М=‘М:LETM=M-1 40 INPUT‘ЗАДАЙТЕ ЧИСЛО КРИВЫХ Ы=л№LETN=N-1sDIM F(N,M) 5© INPUT ‘ЗАДАЙТЕ X0/Y0 'А/В 60 INPUT’ЗАДАЙТЕ ПРИРАЩЕНИЯ ПО X И Y - Н,L ЛН,Е 70 FOR 1=0 ТО № FOR J=0 TO M 80 PRINT! 3.0?‘ВВЕДИТЕ Y? Г'’ Js INPUT F(bJ) 30 NEXT Js NEXT I 100 INPUT'ВВЕДИТЕ Y/X л‘AXsGOSUB 4000 110 PRINT!F1.9!’F<X/Y)=,ZsG0T0 100 4000 REM’ПОДПРОГРАММА ВЫЧИСЛЕНИЯ F<X/Y)? 4010 LETJ=INT<<X-A)/H)sIF J=© THEN LETJ=1 4020 LETI=INT<<Y-B)xL)sIF 1=0 THEN LETI=1 4030 LETP= < X-A-J*H)/Н:LETQ=(Y-B-1)xL 4040 LET1=1-1:GOSUB 4080:LETC=Z 4050 LETI=I+2:GOSUB 408©:LETE=Z 4060 LET1=1-1:GOSUB 4©8©:LETD=Z 4070 LETZ=Q* < Q-1)ЖС/2+ < 1 -Q*Q > *H+C'* < Q+1) *E/2: RETURN 4030 LETZ=P* (P-1 >-*F < I / J-1) /2+ < 1-РЖР ) *F < I r J ) 4090 LETZ=Z+P*(P+1)*F<IrJ+1)/2!RETURN:END Пример. Пусть требуется провести интерполяцию для семейства вольт-амперных характеристик мощного полевого транзистора (F(x, y} — lc(Uv, U3), где Ic — ток стока, х=(Д. — напряжение на стоке и у — U3 — напряжение на затворе), если она задана таблицей (Д/ = Л4 = 6, /? = 10, /—1, t/o = 3, хо = 0): Метод простых итераций основан на пред- ставлении (4.4) в виде x = f(x) (4.5) и многократном применении итерационной формулы хп+1 =f(xn) до тех пор, пока соблю- дается условие |хн+.| — xj ^>Е, (4.6} Напряжение на затворе /Л в Напряжение на стоке х, В 0 1° 20 30 40 50 3 0 0 0 0 0 о. 4 0 0,35 0,4 0,45 0,5 0,55 5 0 0,8 1,1 1,2 1,22 1,25 6 0 1,25 1,8 2 2,12 2,15 7 0 1,8 2,7 3,15 3,17 3,2 8 0 2,95 4 4,45 4,5 4,7 Значения токов приведены в амперах. Введя эти данные, будем получать F(35; 5,5) — 1,631875 А; Л45; 7,5) = 3,8375 А и т. д. Отметим, что этот метод обеспечивает высокую точность аппроксимации для семейств доста- точно сложных кривых, в том числе не моно- тонных. § 4.3. Решение нелинейных и транс- цендентных уравнений Решение нелинейных (в частности, транс- цендентных) уравнений вида Г(х) = 0 (4.4) заключается в отыскании одного или всех корней на отрезке [а, 6] изменения х. Обычно стараются локализовать каждый корень в своем отрезке [а, Ь]. Тогда нахождение 86 где £ — заданная погрешность вычисления корня х. Итерационный процесс сходится (т. е. хп -* х при и-> оо), если соблюдается условие f' (х) < 1 при a<Zx<Zb. Программа 4.11. В строке 70 программы 4.11 записано выражение f(x)~sin x-f-0,25 (подпрограмма), соответствующее решению трансцендентного уравнения F(x) = x — sin х — 0,25 = 0. (4.7) Для начального значения х = х()=1,2 и-По- грешности е = Е=1 -10"6 получим х — = 1,71230493 при времени счета около 5 с. Метод Ньютона (касательных) основан на замене F(x) в точке начального прибли- жения х = хо касательной, пересечение кото- рой с осью х дает первое приближение хь и т. д. (см. рис. 4.4). Таким образом, итера- ционный процесс схождения к корню реали-
Программа 4.11. 10 PRIНТ’РЕШЕНИЕ УРАВНЕНИЯ X=F(X) МЕТОДОМ’ 15 PRINT' ПРОСТЫХ ИТЕРАЦИЙ-’ 20 INPUT’ЗАДАЙТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ X Х0=’Х 25 INPUT’ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е=’Е 30 GOSUB 70 40 IF ABS(F-X)<E THEN 6© 50 LETX=F:60T0 30 60 PRINT'КОРЕНЬ X=’Xs GOTO 20 65 REM’ПОДПРОГРАММА ВЫЧИСЛЕНИЯ F(X)' 70 LETF=SIN<X)+.25 75 RETURN:END зуется формулой хл+) =хл —F(xn)/F'(x„), (4.8) до тех пор, пока соблюдается условие (4.6). Метод обеспечивает быструю (квадратич- ную) сходимость, если F(xo) F"(x0)> 0. (4.9) В качестве хо выбирают тот конец отрезка [а, Ь], на котором знаки F(xo) и F"(xo) совпа- дают. Выигрыш во времени вычислений за счет быстрой сходимости уменьшается из-за необходимости вычисления помимо Г(хл) производной F'(xn). Исключение составляют частные случаи, когда выражение, по ко- торому вычисляется F(xn)/F'(xn), не сложнее выражения для вычисления F(x«) отдельно. Программа 4.12. Рис. 4.4. Решение уравнения F (х) =0 методом Ньютона (касательных) 10 PRINT'РЕШЕНИЕ УРАВНЕНИЯ F<X)=0 МЕТОДОМ НЬЮТОНА' 20 INPUT’ЗАДАЙТЕ НАЧАЛЬНОЕ ПРИБЛИЖЕНИЕ Х0='Х 25 INPUT•’ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е='Е 30 GOSUB 60!LETX*X-F 40 IF ABS<F)>E THEN 30 50 PRINT'КОРЕНЬ УРАВНЕНИЯ X='X:GOTO 20 55 REM'ПОДПРОГРАММА ВЫЧИСЛЕНИЯ F(X)/<DF/DX)' 60 LETF= <X-SIN< X ) -. 25 ) •••- (1 -COS < X ) ) 70 RETURN:END Пример. Вычислить корень уравнения (4.7) на отрезке [1,1; 1,2]. В данном случае F'(x) — 1 — cos х, так что F(xn) _ х —sin х—-0,25 F'(xn) 1 — cos x Вычисление этого выражения оформлено подпрограммой, записанной со строки 60. Поскольку F" (х) — sin х> 0 и F (х)> 0 при х = Ь, в качестве начального приближения возьмем хо = 6=1,2. Тогда при погрешности е=1-10“6 получим 7=1,171229656 при вре- мени счета /с «3,5 с. Модифицированный метод Ньютона заклю- чается в том, что вместо вычисления про- изводной F' (хл) на каждом шаге итера- ций находится ее приближенное значение F'(xn)=dF(xn)/dx~(F(xn-\-\x) — — Г(хл) )/Ax = AF(xn)/Ax, где Ах = е. Следо- вательно, итерационная формула имеет вид _ Ах F(xn) . хл+1-х„ F(Xn + Ax)_fM • Значение Ах не обязательно должно быть равно е. Равенство Ах = е позволяет умень- шить число* исходных данных при вводе. Программа 4.13. 1Й PRINT'РЕШЕНИЕ УРАВНЕНИЯ F<X)=0 МОДИФИЦИРОВАННЫМ' 15 PRINT' МЕТОДОМ НЬЮТОНА' 20 INPUT'ЗАДАЙТЕ НАЧАЛЬНОЕ ПРИБЛИЖЕНИЕ Х0='Х 25 INPUT'ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е='Е 30 GOSUB 70s LETL=F: LETX=X+E 40 GOSUB 70:LETL=E*L/<F-L):LETX=X-L“E 50 IF ABS<L)>E THEN 30 60 PRINT'КОРЕНЬ УРАВНЕНИЯ X='X:GOTO 20 70 LETF=X-SIN(X>-.25 80 RETURN:END 87
Пример. Вычисление F(xn) выполняется подпрограммой, записанной со строки 70. Для приведенного выше примера расчет дает х= 1,171229653 при /с~4 с. При модифи- цированном методе Ньютона отпадает необхо- димость вычисления £'(хЛ), но добавляется вычисление Г(хл-|-Дх). Метод Рыбакова также можно рассматри- вать как модификацию метода Ньютона при замене F'(xn) некоторым числом M^F'(g), где g — значение х на отрезке [а, 6], при котором F'(x) максимальна. При M^>F'(l) сходимость не нарушается, но замедляет- ся. Метод Рыбакова удобен для поиска всех корней уравнения (4.4) на отрез- ке [а, д] с помощью следующего алго- ритма [24]. 1. Задаем начальные значения х—хо — а. 2. Для каждой n-й итерации (п = 0, 1, 2, ...) вычисляем (4.10) и проверяем условие x„+i <Ь. (4.И) Если (4.11) не выполняется, значит, найдены все корни. В противном случае проверяем выполнение условия |x«+i — xrt|> е. Если оно выполняется, повторяем цикл вычислений по формуле (4.10). Если это условие не выпол- нено, значит, Хп+\ есть один из корней и значение хп+\ выводится на печать. После этого переходим к выполнению следующего пункта. 3. Задаем начальное приближение к оче- редному корню х0 = Хп+14“ е и, если хо<Ь, идем к выполнению п. 2. Если х0^Ь, вы- числения считаем законченными. Число итераций при реализации метода Рыбакова N—(b — a) М/г. Функция F (х) на отрезке [а, 6] может иметь производную с разрывами первого рода. Программа 4.14. Метод деления отрезка [a, 6J пополам (метод дихотомии) реализуется следующим алгоритмом (для F (а) > 0). 1. Находим х=(а4-д)/2. 2. Вычисляем F(x). 3. Если Г(х)> 0, задаем а=х, иначе Ь—х. 4. Проверяем условие Ь — а> е; если оно выполняется, идем к п. 1, если не ‘выпол- няется, ^заканчиваем вычисления и считаем, что х — х с заданной точностью е. Число итераций при использовании этого метода 1п((Ь —а)/е) 1п 2 значительно, и поэтому сходимость его медленная. Однако при любой ширине отрезка [а, Ь] сходимость гарантирована. Кроме того, простота реализации метода уменьшает число вспомогательных операций и частично компенсирует увеличение общего времени счета из-за медленной сходимости. Программа 4.15. Пример. Для уравнения F(x)=E —х — — Я/о(ехр (Dx) — 1) при Е = 2, /? = 10, /0 = ==Ы(Г* £> = 20, 4 = 0, В = 2 и е = /7 = = 1-1СГ4. Получим х=0,8143920898. При F (а) < 0 берем F (x) = — F (х). Метод поразрядного приближения для поиска всех корней отрезка [а, 6] реали- зуется следующим алгоритмом. 1. Задаем шаг с = /г, х = а, /г = 0 и находим lF=sgn F(x). 2. Задаем значение х = (х-|-с) и проверяем условие (х—-с)^Ь. Если оно выполняется, заканчиваем счет, иначе идем к п. 3. 3. Вычисляем F(x) и проверяем условие FW/O 0. Если оно выполняется, идем к п. 2, иначе к п. 4. 4. Задаем с—— c/R, где R— показатель разрядности (уменьшения шага с), и прове- ряем выполнение условия |с|> г/R, где е — 10 PRINT"НАХОЖДЕНИЕ ВСЕХ КОРНЕЙ УРАВНЕНИЯ F<X)=0" 15 PRINT"В ИНТЕРВАЛЕ ОТ А ДО В МЕТОДОМ РЫБАКОВА" 20 INPUT"ВВЕДИТЕ ГРАНИЦЫ ИНТЕРВАЛА А/В "А>В 25 INPUT"ЗАДАЙТЕ ПОГРЕШНОСТЬ.НАХОЖДЕНИЯ КОРНЯ Е="Е 30 INPUT"ЗАДАЙТЕ ЧИСЛО M="M:LETX=A:LETT=0:LETI=0 40 GOSUB-120:LETZsX+ABS<F>/M 50 IF Z>=B GOTO 115 60 IF Z-X>«E GOTO 90 70 IF T=0 THEN LETU=Z SO LETX=Z+E!LETY=Z:LETT=1!GOTO 48 90 IF TO1 THEN 110 100 LETI=I+1 SPRINT’2.0’ "X" I" =" IF1.9! (Y+W>/2sLETT=0 110 LETX»ZsGOTO 40 115 PRINT"КОНЕЦ ВЫЧИСЛЕНИЙ":STOP 120 LETF=X~4-13*X~2+36 130 RETURN:END Пример. Найти все корни уравнения F(x)=x4—13x4-36 = 0 на отрезке [ — 4,4], т. е. а=—4, Ь = 4, с точностью е= 1 • 10-3. Задав 44=100, получим: х\ = —2,9987453; х2=-1,999170328; х3 = 2,000132432 и х4 = = 3,000785311. Общее время вычислений около 2 мин. заданная погрешность вычисления корня. Если это условие выполняется, идем к п. 2, иначе к п. 5. 5. Задаем £ = &4-1 и выводим на пе- чать (индикацию) значение &-го корня хй = х. Затем полагаем c—h, U7= —IF и идем к п. 2. 88
Программа 4.15. 01 PRINT'РЕШЕНИЕ УРАВНЕНИЕ F<X)=0 МЕТОДОМ ДИХОТОМИИ' 05 INPUT 'E/R/I0/D' E/R/I0/D 10 INPUT 'А/В/Н' A/B/H 20 LETX=(A+B)/2 30 GOSUB 90 40 IF F>0 THEN 60 50 LETB=X: GOTO 70 60 LETA=X 70 IF B-A>H THEN 20 80 PRINT 'KOPEHb='Xs STOP 90 LETF=E-X-R*I0#(EXP<D*X)-1) 100 RETURN: END Программа 4.16. 10 PRINT'ВЫЧИСЛЕНИЕ ВСЕХ КОРНЕЙ НЕЛИНЕЙНОГО УРАВНЕНИЯ F(X)=0' 20 PRIНТ'В ИНТЕРВАЛЕ <А/В> МЕТОДОМ ПОРАЗРЯДНОГО ПРИБЛИЖЕНИЯ' 30 INPUT'ЗАДАЙТЕ ГРАНИЦЫ ИНТЕРВАЛА А/В 'А,В 40 INPUT'ЗАДАЙТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЯ КОРНЕЙ Е='Е 50 INPUT'ЗАДАЙТЕ ШАГ НАЧАЛЬНОГО ПОИСКА Н='Н 60 LETC=HsLETK=0sLETX=AsGOSUB 120sLETW=SGNCF> 70 LETX=X+CsIF X-C>«B THEN PRINT'КОНЕЦ'sSTOP 80 GOSUB 120s IF F«W/C>0 THEN 70 90 LETC=~C/4sIF ABS(C)>E/4 THEN 78 100 LETK«K+1SPRINT!2.0!'X'K!F1.9!'«'X 110 LETC=H5LETW=-WsGOTO 70 120 LETI=.2718*X*EXP(-10*X)+1E-8*(EXP<20*X)-1) 130 LETF=<1-X)z125-Is RETURNSEND Пример. Найти напряжения на туннель- ном диоде из решения уравнения F(U) = (E-U)/R-1(U) = O, (4.12) где Е — напряжение источника питания, R — сопротивление в его цепи и ](U) = I = AUe~aU + D(e*U - 1) — М-образная вольт-амперная характерис- тика туннельного диода. Для х = U, А = 0,2718, а=10, Г>=1-10 8, р = 20, Е=1 В и R = 125 Ом получаем подпрограмму, записан- ную в строках 120 и 130. Задав а = 0, Ь = Е и е = £1 =0,001, получим X! =0,043 В, х2 = 0,234 В и = 0,625 В. Следовательно, в данном случае линия нагрузки резистора R пересекает вольт-амперную характеристику в трех точках. Метод подекадного приближения анало- гичен методу поразрядного приближения при R = 10. Метод дает все верные цифры резуль- тата в пределах заданной погрешности е (остальные цифры — нули). Метод хорд (см. рис. 4.5, а). При этом методе каждое значение хл+| находится как точка пересечения оси абсцисс с хордой, проведенной через точки F(a) и F(b), причем одна из этих точек фиксируется — та, для которой знаки F(x) и F"(x) одинаковы. Если неподвижен конец хорды х = а, то Е(Х«) 7 „X Г(А,л)_ца) IX» а)> а если неподвижен конец хорды х — Ь, то Е(хп) ,, х Если |хл+1—Х„|> Е, то в первом случае считаем Ь=хп+\, во втором а = хп+\ и повторяем вычисле- ния. При использовании метода хорд пола- гается, что корень х находится на отрез- ке [а, Ь]. Метод секущих (см. рис. 4.5, б) реали- зуется алгоритмом, описанным выше, если абсциссы а и b взяты с одной стороны от корня и не фиксируются. Необходимость вычисления F' (х) (условия сходимости этих методов аналогичны (4.9)) и выбора одной из двух формул затрудняют практическое применение методов хорд и секущих в отдельности. Комбинированный метод секущих — хорд обеспечивает гарантированную сходимость при выборе в пределах отрезка [а, 6] двух приближений: нулевого х0 и первого Х|. Он реализуется алгоритмом, описанным для ме- тода Ньютона с заменой производной Е'(х) ее приближенным значением — множитель перед F (х„): Хл 1 — А п Хп Хп_ 1 F (Хп) — Р (Х„— 1) F(xn). 89
Рис. 4.5. Решение уравнения F (х)= = 0 методом хорд (а) и секу- щих (6) 01 PR I NT' РЕШЕНИЕ УРАВНЕНИЯ F(X)=0 КОМБИНИРОВАННЫМ •' 62 PRINT'* ' МЕТОДОМ СЕКУШИХ-ХОРД'* 05 INPUT Е/R/Ю// D ‘Е/R/10/D 10 INPUT 'Х0/Х1/Н' Х0/ XI/ Н 20 LETX=X0S GOSUB 80 30 LETA=Fs LETX=Xls GOSUB 80 40 LETB=F! LETY=X0-A*<X1-X0)/(B-A) 50 LETX0=XB LETX1=Y 60 IF ABS<X1-X0)>H THEN 20 70 PRINT *KOPEHb=,Xls STOP 80 LETF=E-X-R*10* < EXP < D*X> -1 > 90 RETURNS END 100 RETURNS END Пример. Для уравнения F(x)=x3 + x2 — — x — 1 при xq — 2, xi = 1,5 и е=1 • 10“5 находим х=1 при /С«Ю с. Аналогичный результат получим при хо = 0,5 и xi = l,5. Вычисление F(x) оформляется подпрограммой, записанной со строки 90. Метод Эйткена — Стеффенсона с уско- ренной сходимостью обеспечивает решение уравнения (4.5) по следующему алгоритму. 1. Задаем начальное приближение хп.— хо. 2. Находим первое xi==f(xo) и второе X2==f(xi) приближения. 3. Вычисляем хл+1 — (х0х2 —х?)/(х0 —2хН~ -р *•>). 4. Проверяем условия |хл + |—хл|>е, хо —2xi-f-x2=/=0. Если эти условия соблю- даются, идем к п. 1, т. е. задаем хп новое значение хл+|, в противном случае останав- ливаем счет и получаем х==хл+!. Метод Эйткена — Стеффенсона при слож- ных f(x) имеет ускоренную сходимость (по сравнению с методом простых итераций). Однако при простых функциях f(x) время счета практически не уменьшается, так как число дополнительных операций в этом методе существенно больше, чем в методе простых итераций. Программа 4.18. Пример. Используя данные к програм- ме 4.11, при 8— 1 -10~6 получим корень (4.7) х— 1,171229421 при tc&l с. Вычисление функ- ции f(x) выполняется подпрограммой, запи- санной в строках 90 и 100. Метод обратной интерполяции — экстра- поляции заключается в вычислении ряда значений yi — F(xi) для заданных х, на отрезке [а, 6]. Затем, полагая у — 0, с помощью обратной интерполяции находим х, (рис. 4.6, а). Корень может быть найден и за пределами отрезка [а, Ь] (рис. 4.6,6). В последнем случае применяется обратная экстраполяция. Для реализации этого метода могут исполь- зоваться описанные в § 4.2 программы. К сожалению, для произвольных F(x) оценка погрешности этого метода отсутствует. Однако для получения результата с задан- ной погрешностью можно построить итера- ционную процедуру уточнения корня. Отме- тим, что при пг = 2 отсчетах F(x) данный метод фактически является комбинированным методом секущих — хорд, реализующим ли- нейную интерполяцию — экстраполяцию. Метод обратной квадратичной интерпо- ляции — экстраполяции заключается в за- мене F(x) полиномом Лагранжа второй степени (число отсчетов т = 3). При этом можно 05 PRINT*РЕШЕНИЕ ‘/РАВНЕНИЯ X=F(X) МЕТОДОМ'1 18 PR I НТ •* ЭйТКЕНА-СТЕФФЕНСОНА •* 15 INPUT’ЗАДАЙТЕ НАЧАЛЬНОЕ ПРИБЛИЖЕНИЕ Х0='Х 20 INPUT‘ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е=‘Е 30 LETA=XsGOSUB 90sLETB=F:LETX=F 40 GOSUB 90s LETC=<A-2*B+F) 50 IF »>© THEN 70 60 LET X=(A*F-B*B >/С 70 IF ABS(X-F)>E THEN 30 80 PRINT’КОРЕНЬ УРАВНЕНИЯ X=?X:GOTO 20 SO LETF=SIbkX) + .25 100 RETURN: END 90
y=F(X) y=F(x) Рис. 4.6. Решение уравнения Л{х)=О методом обратной интерполяции (а) и экстраполяции (б) получить аналитическое выражение для при- ближенного значения корня. Действительно, заменив х- на у и у на х, полином Лагранжа второй степени можно представить в виде х(#) = 6о4- Ь\(у — £/<>)-|- Сходимость данного алгоритма основана на свойстве интерполяционного полинома давать точные значения х при заданном у- в узле интерполяции (т. е. в точке Xi). Программа 4.49. 16 PRINT*РЕШЕНИЕ УРАВНЕНИЯ F<X)=0 МЕТОДОМ КВАДРАТИЧНОЙ" 20 PRINT* ИНТЕРПОЛЯЦИИ-ЭКСТРАПОЛЯЦИИ * 30 INPUT'ЗАДАЙТЕ ГРАНИЦЫ Ал В *АлВ 35 INPUT*ЗАДАЙТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЙ Е=*Е 40 INPUT'ЗАДАЙТЕ НАЧАЛЬНОЕ ПРИБЛИЖЕНИЕ Х1 = 'С 50 LETX=AsGOSUB 120sLETL=F 60 LETX=B!GOSUB 120sLETM=F 70 LETX=CsGOSUB 120sLETQ=C 80 LETN= < C-A >/< F-L > s LETP= < B-A)/< M-L > 90 LETC=A-L*<N+(N-P)*F/(M-F>> 100 IF ABS<Q-C>>E THEN 70 110 PRINT'KOPEHb X='CsSTOP 120 LETF«X-SIN(X >-.25:RETURN s END — (y — i/1)- Для .£/ = 0 находим x = 60 — b\y^-^b^y\. (4.13) В соответствии с методом Эйткена и с учетом взаимной Замены переменных х и у имеем д() = Х(>, Xt — Хр У\~Уь ’ <?2 = Ь2 У 2 — у о У-2 — bi У'2 — У\ Подставив 6о, Ь\ и Ь2 в (4.13), после элемен- тарных преобразований получим - /Х| — А',, х—хо — у и (---- 4- ХЮ — */<> (Х|— x^Kyt — у1>)—(хг—Хп)/(у1— Ун}, \ -f—— -------—---------------------УI J • У2-У1 / (4.14) Приведем алгоритм вычислений этим мето- дом (один из возможных). 1. Полагаем х<> = а и вычисляем F(xt<) = //<>. 2. Полагаем хг = 6 и вычисляем F(x2) = y2- 3. Задаем начальное приближение к корню x = xj и вычисляем /?(xi) = z/1. _ 4. По формуле (4.14) находим корень х (см. рис. 4.6). 5. Проверяем условие |х —xj>t; если оно выполняется, задаем xi=x и идем к п. 3, если не выполняется, останавливаем счет и считаем х корнем. Пример. Используя данные программы 4.11, при е=5= 1 • 10 ’6 получим х= 1,171229661 при /( «4 с. § 4.4. Решение систем нелинейных уравнений Решение систем нелинейных уравнений может выполняться описанными выше ме- тодами, применяемыми поочередно к каждому из уравнений системы с контролем погреш- ности схождения каждой переменной к корню с заданной погрешностью. Остановимся на описании двух модификаций метода итераций. Решение системы нелинейных уравнений методом простых итераций заключается в реа- лизации итерационного процесса по следую- щей формуле: (4.15) применяемой после преобразования системы нелинейных уравнений общего вида ад)=о (4.16) к виду Х( = Д(Х). Здесь / - номер перемен- ной (1, 2Ч ..., N), п — номер итерации. Вычисления ведутся до тех пор, пока соблю- дается условие |X/(n+i) —Xi(nJ> в, где е — заданная точность. Метод Зейделя отличается от метода простых итераций тем, что уточненные 91
X(n_|_i) сразу подставляются в последующие уравнения. Обычно (но не всегда) метод Зейделя дает лучшую сходимость. Необходимость преобразования (4.16) и трудности в обеспечении быстрой сходимости ограничивают применение этих методов. Однако программная реализация их довольно проста (см. Приложение 5). Метод Ньютона (или Ньютона — Раф- сона) является наиболее распространенным методом решения системы уравнений (4.16). Он реализуется следующим алгоритмом. 1. Задаем абсолютную или относитель- ную погрешность е = £, число уравнений А/, максимальное число итераций М и вектор начальных приближений Хо (с компонентами Х10> Х20> •••» Хд^о) • 2. Используя разложение Х(Х) в ряд Тейлора, формируем матрицу Якоби [dF(/dX], необходимую для расчета приращений Х(Х) при малом изменении переменных. Матрица Якоби в развернутом виде записывается следующим образом: " dF\/dx\ dF\/dx2 ... dF\/dxN dF2/dx\ dF2/dx2 ... dF2/dxN _ dFN/dx\ dFN/dx2 ... dFN/dxN Поскольку аналитическое дифференциро- вание Л(Х) в общем случае нежелательно, заменяем частные производные в матрице Якоби их приближенными конечно-разност- ными значениями dFt ~ Х{Х4-#)-Л(Х) дХ, ~ Н где Hi — малое приращение X, например Hi = z\Xt\. 3. Составляем и решаем систему ли- нейных уравнений для малых прираще- ний X,: ' dF\/dx\ dF\/dx2 ... dF\/dxN 1 Г Дх(' dF2/dx\ dF2/dx2 ... dF2/dxN . Дх2 __ dFN/dxx dFN/dx> dFN/dxN _\xN- r-r, ~f2 Решение этой системы дает Дхь Дх2, .... Дх^, т. е. ДХ- 4. Вычисляем уточненные значения Х|(п+ 1) = Х|(п)4“ ДХ|, Х2(п+ 1) = Х2(Я) Ч" ДХ2, X/V (л 4-1) — XN (п) 4-ДХд^. или в общем виде Х(п+1) = ХпЧ-ДХ. 5. Для всех ДХ проверяем одно из усло- вий: |ДХ1> е, |ДХ/Х1> е. Если оно выполняется, идем к п. 2, т. е. выполняем новую итерацию. Иначе считаем вектор Х(«+1) найденным решением. Отметим, что решение системы нелинейных уравнений (4.16) можно представить и в виде Х(.л+1)==Х(п) — и^(п)'Л(Х(П)), где F(„) — обра- щенная матрица Якоби. Обращение матрицы Якоби осуществляется в ходе решения системы линейных уравнений для приращений ДХ методом Гаусса. Программа 4.20. 10 PRINT'РЕШЕНИЕ СИСТЕМЫ НЕЛИНЕЙНЫХ УРАВНЕНИЙ* 20 PRINT** . МОДИФИЦИРОВАННЫМ МЕТОДОМ НЬЮТОНА* 30 INPUT ЗАДАЙТЕ ЧИСЛО УРАВНЕНИЙ Н=*№1ПМ A<N,N),B<N)>X<N),F<N) 40 INPUT*ЗАДАЙТЕ МАКСИМАЛЬНОЕ ЧИСЛО ИТЕРАЦИЙ М=*М 50 INPUT*ЗАДАЙТЕ ОТНОСИТЕЛЬНУЮ ПОГРЕШНОСТЬ E=*E:LETS=0 6© FOR 1=1 ТО Ns PRINT! 2.0 ** ВВЕДИТЕ ХЧ*<8>* 70 INPUT Х<I)«NEXT I 80 60SUB 260:FOR I»1 TO NsLETB<I>=-F<I)8NEXT I 90 FOR J=1 TO NsLETX=X<J):LETH=E»ABS<X) 108 LETX<J)»X+H:60SUB 260:FOR I»1 TO N 110 LETACbJ)=<F<D+B<D)zH:NEXT I:LETX<J)=X:NEXT J 120 LETS=S+1:IF S=M+1 THEN PRINT*4HCDO ИТЕРАЦИЙ S=M*sSTOP 130 FOR 1=1 TO N-l:FOR J=I + 1 TO N 140 LETA< J# D=“A< I>/A< I/I)s FOR K=I + 1 TO N 150 LETA<J,K>»A<J,K>+A(J, D*A<bK>:NEXT К 160 LETB<J>=B<J>+A<J/D*B<D:NEXT J:NEXT I 170 LETF<N)=B<N)/A<N,N>sFOR I=N-1 TO 1 STEP -1 180 LETH=B<I>:FOR J=I+1 TO NsLETH=H-F<J)*A<bJ):NEXT J 190 LETF<I)=H/A(I,I>:NEXT l:LETR=0 200 FOR 1=1 TO N«LETX< D=X< I >+F< I) 210 IF ABS<F<DZX< DDE THEN LETR=1 220 NEXT is IF R«1 THEN 80 230 PRINT'РЕШЕНИЕ СИСТЕМЫ* 240 FOR 1=1 TO N:PRINT!2.0’*X*I!F1.9!*«*X<DsNEXT I 245 PRINT 12.0!*ЧИСЛО ИТЕРАЦИЙ S=*SsSTOP 250 REM*ПОДПРОГРАММА ВЫЧИСЛЕНИЯ F<D=F<X<1>,Х<2Ъ.../X<N>)* 260 LETF<1>=X< D+3*L6T <X<1))-X<2>*X<2) 270 LETF<2)=2«X<1)*X<D-X< 1)*Х<2>-5жХ<1) + l 280 RETURNSEND 92
Пример. В программе со строки 260 записывается подпрограмма вычисления пра- вых частей (4.16) в виде F(J)=(Функция переменных Х(Г)). В данном случае подпрограмма служит для решения системы уравнений XI 4-3 IgXi — Х2 = 0, 2xi — xjx2 —5х( 4-1=0. Задав А = 2, Л4=10 (максимальное число итераций для случая, если решение расхо- дится), е = Е=1-10~4, Х|о = Х1(О) = 3,4 и х2о = Х2(0) = 2,2, получим xt =3,487442788, х2 = 2,261628631 и S = 3. Значение перемен- ной S дает число итераций, а значения Е(/) — невязки системы. Время счета контроль- ного примера 16 с. Решение (4.16) с помощью методов мини- мизации функций ряда переменных описано в § 4.6. § 4.5. Решение алгебраических уравнений с действительными и комплексными коэффициентами Алгебраические (но не трансцендентные) уравнения сводятся к канонической форме Аогл4-Л12п-14-...Ч-Лп-|24-Лп = О,(4.17) где коэффициенты А о, ..., Ап— в общем случае комплексные ’ числа. В таком виде алгебраические уравнения используются редко. На практике обычно встречаются поли- номиальные уравнения с действительными коэффициентами амсп + а\хп~' +... 4-an-ix4-a„ = 0, (4.18) причем нередко (4.18) записывается в другой форме: апхп + ап_\хп~[ 4-...4-aix4-ao = 0. (4.19) Отметим некоторые известные свойства алгебраических уравнений, на которых бази- руются методы их решения. 1. Корни алгебраических уравнений могут быть действительными и комплексно сопря- женными, причем на комплексной плоскости все они лежат в пределах кольца, ограни-, ценного окружностями с радиусами #=14- 4-|амакс/аЛ| И Г == 1 4" | Омакс/Яп I , ГДС Пмакс наибольший по модулю коэффициент поли- нома, амакс — следующий наибольший по модулю коэффициент (т. е. без учета аМакс). 2. Число корней с учетом их кратности равно п, причем полиномы нечетной степени обязательно имеют хотя бы один действи- тельный корень. 3. Число положительных (отрицательных) корней равно числу перемен (постоянств) знаков в последовательности ап, ап_\, ..., ао коэффициентов или меньше его на четное число. Квадратное уравнение a2x24-aix4-ao = O (4.20) имеет решение в виде 01 // О| \2 ао х' 2~ 2а2 ± V \ 2а2) ~ а2 ’ причем если подкоренное выражение отрица- тельно, корни получаются комплексно сопря- женными, если оно положительно, они действи- тельные. Программа 4.21. Пример. Для уравнения 2х2 — 5х —-10 = = 0 получим xi = —1,311737691 и х2 = 3,811737691, а для уравнения х24-2х4~ 4-15 = 0 получим Х|,2= — 1 ±/-3,741657387. Приведенное кубическое уравнение x34-a2x24-aix4-ao —0 (4.21) может решаться по точным формулам [18]. Однако более компактное решение получается при использовании следующего алгоритма. Вначале методом половинного деления с е = 1. 1О~10 находится действительный корень хз (он обязательно существует). Затем делением (4.21) на (х—хз) получается квад- ратное уравнение, из которого вычисляются два других корня xi и х2. Программа 4.22. Пример. Для уравнения х3 — 6х24-21х — — 52 = 0 получаем xi.2= 1 ±/-3,464101615 и хз —4, а для уравнения х3 — 6х24- Их — 6 = 0 получим xi=3, х2 —2 и хз=1. Уравнение (4.19) с действительными коэффициентами решается методом Хичкока. При этом (вначале) итерационным методом из (4.19) выделяется квадратичный мно- житель (если п >2) и вычисляются два его корня. Затем (4J9) делится на этот множи- тель, т. е. п уменьшается на 2, и процесс повторяется до вычисления всех корней. Программа 4.23. Пример. Для уравнения х44-9х34- 4-31x^4-59x 4-60 = 0 прлучим корни Х| = = —14-/-2, х2= —1—у-2, хз=—34-/-0, Х4=—44-/-0 (т. е. хз и х< действительны), а для уравнения х54-8х4±31х34-80х24-94х4- 4-20 = 0 получим xi =—0,2679491924, х2 = = — 2, хз—— 14-/-3, х4 = —-1 —/'• 3 и х5 = = —3,732050808 (при вычислениях принима- лось е= 1 • 10“6). Решение уравнения общего вида (4.17) с комплексными коэффициентами Ai=ai+jbi обобщенным методом Ньютона реализуется следующим алгоритмом. 1. Вводим массив Лх и задаем точность вычислений е. 2. Задаем начальное приближение Zo = = хо4-///о, в частности х0 — Ь и t/o = 0 (Метод дает сходимость к какому-либо корню при любых начальных приближениях). 3. По методу Ньютона (но с применением аппарата комплексной арифметики) находим корень (4.17) Zi. 4. Делим (4.17) на (Z —ZJ, т. е. пони- жаем степень (4.17) на единицу и повто- ряем вычисления с п. 2 до нахождения второго корня и т. д. до тех пор, пока не будут вычислены все корни. Более подробное описание этого метода см. в [24]. При использовании програм- 93
Программа 4.21. 05 PRINT3РЕШЕНИЕ КВАДРАТНОГО УРАВНЕНИЯ' 10 INPUT'BBEAHTE A2='CsINPUT'ВВЕДИТЕ А1='В 15 INPUT'ВВЕДИТЕ А0='А 20 LETD=B/2/CsLETF=D'*D-A/C 30 IF F>0 THEN ,68 40 PRINT'X1/2='-D'+- J*'SQR <-F> 50 GOTO 10 60 PRINT'Xl='-D-SQR(F) 70 PRINT'X2='-H+SQR < F) 80 GOTO 18s END Программа 4.22. 05 PRINT'РЕШЕНИЕ ПРИВЕДЕННОГО КУБИЧЕСКОГО УРАВНЕНИЯ1 10 1НРиТ'ВВЕДИТЕ A2='CsINPUT'ВВЕДИТЕ А1='В 15 INPUT'ВВЕДИТЕ А8='As INPUT'ВВЕДИТЕ /А МАХ/='К 20 LETX=05LETK=K+1 25 LETG=X+C:LETL=G»X+B 30 IF L*X+A>=0 THEN 50 40 LETX=X+K 50 LETK=K/2SLETX=X-K 60 IF K>=1E-10 THEN 25 70 LETE*-G/28LET№E«E-L 80 IF M>=0 THEN 130 90 PRINT'Xb2=='E'+- J*'SQR(-M> 100 PRIHT'X3='X5STOP 130 LETF=SQR< M ):LETH=F+E s LETI=E-F 140 PRINT'X1»'H:PRINT'X2='Is PRINT'X3='X s END Программа 4.23. 05 PRINT'ВЫЧИСЛЕНИЕ ВСЕХ КОРНЕЙ ПОЛИНОМА' 10 PRINT'С ДЕЙСТВИТЕЛЬНЫМИ КОЭФФИЦИЕНТАМИ' 15 INPUT'ЗАДАЙТЕ ПОГРЕШНОСТЬ Е='Е 20 INPUT'ЗАДАЙТЕ СТЕПЕНЬ ПОЛИНОМА N='№DIM А<2*Н+1) 25 FOR J=1 ТО N+is PRINT'ВВЕДИТЕ A'12.01N+1-J 30 INPUT A(J)sNEXT JsLETK=l 35 LETT=1:LETC=A<2)/A<1> 40 IF N=1 THEN LETP=-CsLETGb=05 6OTO 270 50 IF N=2 THEN LETH=C**C/4-A<3)/A< 1) s GOTO 220 60 LETM=10;LETC=45LETD=85LETU=4 70 LETU=8s LETF=l: LETU=2sLETT=8 80 IF MO10 THEN 100 85 LETP=C s LETM=0sLETQ=D s LETC=U s LETD=U 90 LETU=PsLETU=QsLETV«C:LETZ=DsLETF=-F 100 LETM«=M+1LETH=0s LETQ=A< 1) s LETP=A < 2 >-C*Q s LETL=Q 120 FOR J=3 TO №LETR=P5LETP=A<J)-C*R-D*Q 130 LETQ=R!LETR4JLETL*Q-C*R-H«D5LETH=R5NEXT j 140 LETQ=A<N+1)-D*Q:LETS«L+C*R 150 IF T=0 THEN LETX=D*RsLETH=R*X+S*LsIF H=8 THEN 80 160 LETC=C+<P*S-Q*R>/Hs LETD«D+<P*X+Q*L)/H 170 IF C-V+D-ZO0 THEN 190 180 IF F=-kl THEN PR I NT'НЕТ РЕШЕНИЯ'sSTOP 185 LETW=-F 190 LETH=C*C/4-D:IF SQR(<Q-P*C/2)"2+P*P*ABS<H))>E/N THEN 80 200 LETT=0sLETA<2)=A<2)-C*A(l)sFOR J=3 TO N-l 210 LETA(J)=A<J)-C*A<J~1)-D*A(J-2)5 NEXT J 220 LETP=”C/25LETQ=SQR<ABS<H>) 230 IF H>=0 THEN LETM=P+Q5LETP»P-QsLETQ=056OTO 258 248 LETM=P 250 PRIHT!2.8! 'XCK')=' !F1.9!M' +J*('Q')' sLETK=K+l 278 PRINT*2.0!'X('K')='!F1.9!P' +J*<'-Q')'5LETK=K+1 290 IF TOG THEN 358 308 LETN=N-2sLETA=0 318 IF SQR((S4?*C/2r2+R*R*ABS<H))<=E THEN LETA=1 328 LETB=8slF N>=2 THEN LETB=1 330 IF A+B=2 THEN LETT=lsGOTO 110 348 GOTO 35 358 PRINT'ВЫЧИСЛЕНИЯ ЗАКОНЧЕНЫ'SEND 94
мы 4.22, реализующей этот метод, вводятся: степень полинома n = N, погрешность равен- ства нулю-производной £1, погрешность вы- числения корней е = £2 и массив действи- тельных at и мнимых bt частей коэффициен- тов At. Если Ai = ai — действительные числа, задаем dz = 0. Программа 4.24. Пример. Решить уравнение Z6 + 8Z4 -F 31Z3 4- 80Z2 + 94Z + 20 = 0. Вводим /V = 5, 0.0=1, Я|—8, а2 = 31, а:} = 80, а4 = 94, аб = 20 и до4-/>5 = 0. Результат полу- чаем (при £1 = Ы0“3 и £2=1-10'5) с округлением на пятой цифре: ReZ(l) = -2,67949-10-' ReZ(2)=—2,00000 ReZ(3)=—3,73205 ReZ(4)= - 1,00000 ReZ(5)= —1,00000 ImZ(l) = -7,96970- IO"17 1 1 m Z(2) = 1,51995 • 10 ~16 K&) = 1 ImZ(3)= -4,61589-10~17 K(3)= 1 ImZ(4) = 3,00000 K(4)=l ImZ(5)= -3,00000 1 Значения K(i) указывают на кратность /-1'0 корня. Для ImZ(l), ImZ(2) и ImZ(3) значения меньше заданной погрешности £2, поэтому их следует считать нулевыми. Таким Программа 4.24. 05 PRINT*ВЫЧИСЛЕНИЕ КОРНЕЙ ПОЛИНОМА PCZ)* 10 PRINT'C КОМПЛЕКСНЫМИ КОЭФФИЦИЕНТАМИ* 15»INPUT*ЗАДАЙТЕ СТЕПЕНЬ ПОЛИНОМА N= *N:LETH=N 20 DIM CCN+l>/DCN+l)/ECH+l)/F(N+l>/Gl(N+l> 25 DIM A<N+1)/B<N+1>>F1<N+1>/K<N>/D1(N)/Z1<N) 30 LETX0=08LETV0=0s INPUT'BBEAHTE ЕЬЕ2 *ЕЬЕ2 40 FOR 1=1 TO N+l8 PRINT 12.0!'ВВЕДИТЕ AC* 1-1* ЪВС* J-l* )* 50 INPUT ACI)лВСD8NEXT IsLETIl=l 120 LETX=X08LETY=V08LETS=lsFOR 1=1 TO N+l 140 LETFCI>=ACI)sLETGlCI>«BCI)8LETCCI)=ACI)8LETDCI>=BCI) 150 NEXT I1LETM=N86OTO 500 170 LETU1«U8LETU1=UsLETL=186OTO 670 190 FOR 1=1 TO N+L-l 200 LETFCI>=CCI)sLETGlCI)«DCI)sHEXT 1 220 LET M=N«“L8LETS=28 6OTO600 230 IF SQRCU~2+U~2)>=E1 THEN 260 240 LETL=L+18G0T0 670 260 LET Z4T2+U~2 270 LET G=*-CUl*U+Ul*U)zZ 200 LETU=C U1*U-U1*U)zZs LETZ=SQR< 6*6+W*W) s LETW1=W/Z 300 IF ABSCW/Z>>1 THEN LETWl=SI6HCWzZ) 310 LETF2=ASNCW1>/L 320 IF G<=0 THEN LETF2=#PI/L-ASNCW1>zL 330 LETZ=EXP <LOG < Z > zL)s LET6=Z*C0S C F2 > 340 LETW=Z*SIN<F2 > 8 LETT=1s LETS=3s LETM=N 350 FOR 1=1 TO N+l 360 LETF<I)=A<I)sLETGl<I>=B(I>sNEXT I 370 LETX=X0+Ts*G:LETY=Y0+T*W8 6OTO 6©0 390 IF CU~2+U~2><CUi~2+Ul~2)THEN 405 408 LETT=Tz2sGOTO370 410 IF T*SQRC6~2+IT2)<E2 THEN 460 420 LETX0=X:LETY0=YsLETS=1sFOR 1=1 TO H+l 440 LETCCI)=ACI)sLETDCI>=BCI)sNEXT Is GOTO 170 460 LETKCI1>=L8LETD1<11>=XsLETZ1C11>=Y 470 FOR J=1 TO L8LETQ=H~J+1sGOTO 700 500 FOR 1=1 TO Q8LETA<I)=E<I>8LETB<I)=F1<I)8NEXT DNEXT J 520 IF N-L<=0 THEN 560 530 LETI1=I1+18LETN=N-18GOTO 120 560 FOR 1=1 TO H 570 PRINT‘2.0!*RE ZC*I*>=*IF1.51D1CI)!2.8!* IM ZC* I*) = *1F1.5IZ1CI) 580 PRINT 12»01 * КС * I *)=*КС I)sNEXT BSTOP 600 LETU=F<1)sLETU=G1<1) 610 FOR 1=2 ТО M+l 620 LETZ=U*X4l*Y+FCI)sLET U=U*Y+U*X+G1CI)sLETU=Z 640 NEXT 18 IF 8=1 GOTO 170 650 IF 8=2 GOTO 230 660 GOTO 390 670 FOR 1=1 TO M 680 LETCCI>=CM-I + l)*CCI)sLETIi<I)=CM--I + l)*DCI) 690 NEXT Is GOTO 190 700 LETEC1)=A<1)8LETF1<1)=8<1> 710 FOR 1=2 TO Q 728 LETECI)«A<I)+E<1-1>*X-F1<1-1)*Y 730 LETF1<I>=B<I>+ECI-1>*Y+F1CI-1>*X 740 NEXT IsGOTO 500s END 95
образом, уравнение имеет три действительных корня Zi =—0,267949, Z2—— 2 и Z3 = = —3,73205 и два комплексно сопряженных Z4,5= —1±/-3. Время счета контрольного примера около J0 мин. §4.6. Поиск экстремумов функ- ций одной и множества пере- менных На практике часто необходимо найти экстремум (или экстремумы) некоторой це- левой функции F(xi, %2, ...» хя) п переменных X, (проектных параметров). Такая функция описывает (n-f-1)-мерную поверхность. Со- ответственно функция /F(x) одного парамет- ра х\=х описывает некоторую кривую на плоскости (рис. 4.7, а). Поиск экстремумов функций одной переменной является само- стоятельной и часто встречаемой задачей. Кроме того, к нему сводится гораздо более сложная задача поиска экстремумов функций множества переменных [3, 41]. В общем случае функция F(x) может иметь несколько экстремумов (максимумов или минимумов). Из них главный (оптимальное решение для пространства проектирования) называется глобальным. Задача поиска экс- тремумов сводится к их локализации и уточ- нению значений х и F(x) в точке экстремума. В дальнейшем для функций одной перемен- ной под экстремумом будем подразумевать максимум F(x). Поскольку максимуму функ- ции F(x) соответствует минимум функции — F(x), то, сменив знак у F(x),. программами поиска максимума можно пользоваться и для поиска минимума функций. Будем также полагать, что на изменения х (если это особо не оговорено) накладываются ограни- чения в виде неравенств а^х^.Ь, где а и b — границы интервала поиска. В пределах отрезка [а, Ь] функцию считаем унимодаль- ной, т. е. содержащей один максимум (рис. 4.7, б). Метод равномерного поиска основан на том, что переменной х присваиваются значения х-|-Ах с шагом Ax = const и вычисляются значения F(x). Если Г(хя+»)> Г(хя), перемен- ной х даётся новое приращение. Как только F(Xn+\) станет меньше F(xn), поиск останав- ливается. При малой заданной погрешности этот метод неэкономичен по затратам машин- ного времени. Метод поразрядного приближения явля- ется разновидностью метода равномерного Рис. 4.7 Функция с несколькими экстрему- мами (а) и унимодальная функция с одним экстремумом максимумом (6) поиска и реализуется следующим алгорит- мом. 1. Задаем начальное приближение х=х0 слева от максимума F(x) и вычисляем F(xo). Задаем D — h, где /г = Ах—начальный шаг поиска. 2. Полагаем G = F(xn\ где вначале Е(хя) = = Г(л'о), задаем x — x-FD и вычисляем Е(хл+1) = Е(х). 3. Проверяем условие F(x«+i)> G; если оно выполняется, идем к п. 3, если нет — к п. 4. 4. Полагаем D= —D/4. Проверяем усло- вие |D|> Е/4, где Е — заданная погреш- ность вычисления хт в точке максимума. Если оно выполняется, идем к п. 2, т. е. обеспечиваем поиск максимума в другом направлении с шагом в 4 раза меньше прежнего. Если данное условие выполняется, заканчиваем счет. Программа 4.25. 10 PRINT’ПОИСК МАКСИМУМА F<X) МЕТОДОМ' 15 PRINT' ПОРАЗРЯДНОГО ПРИБЛИЖЕНИЯ' 2© INPUT'ВВЕДИТЕ НАЧАЛЬНЫЙ ШАГ ПОИСКА Н= 'Н 25 INPUT'ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е= 'Е 30 INPUT'ЗАДАЙТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ X Х0= 'X 35 LETD=Hs60SUB 80 40 LET6=FsLETX=X+D:&0SUB 80 50 IF F>6 THEN 40 60 LETD=-D/4s IF ABS(D>>E/4 THEN 40 70 PRINT'XM='X:PRINT'F < XM)='F s STOP 80 LETF=<<.1*X-2)*X+10)*X 90 RETURNS END 96
Пример. Найти максимум функции F(x) = 0,1 х3 — 2л2 -j- 1 Ох. (4.22) Подпрограмма вычисления F(x) записана со строки 80. Задав £=1, £ = 0,001 и хо = 2, получим хт = 3,33203125 и F(Xm)= 14,81481312. Метод дихотомии (деления интервала поиска [а, 6] пополам) реализуется следую- щим алгоритмом. 1. Проверяем условие \Ь — а\<2Е, где Е — заданная погрешность вычисления хт. Если это условие выполняется, идем к п. 6; если не выполняется, идем к п. 2. 2. Делим интервал поиска [а, 6] пополам и вычисляем две абсциссы, симметрично расположенные относительно точки х= = (а4-6)/2: xi = (a + b — в)/2 и х2 = (а + Ь + 3. Для этих значений х вычисляем r(xi) и F(x2). 4. Проверяем условие F(xi)> £(х2). Если оно выполняется, полагаем 6 = х2 и идем к п. 1. Если не выполняется, идем к п. 5. 5. Полагаем a = xt и идем к п. 1. 6. Выводим на печать xm= (a-j-b) /2 и вычисляем F (хт). Программа 4.26. (см. алгоритм ниже). Он позволяет сужать отрезок [а, Ь], каждый раз вычисляя лишь одно значение F(x), а не два, как в методе дихотомии. Данный метод реализуется сле- дующим алгоритмом. 1. Находим коэффициент дробления /г = =(-\/5— 1)/2 отрезка [а, Ь]. 2. Находим абсциссу Xi =a-j-(l -— k) (b—-a) и вычисляем F(xj). 3. Находим абсциссу х2 = а + (d — а) и вы- числяем £(х2). 4. Проверяем выполнение условия |х2—xi|<£, где Е — заданная погрешность вычисления хт. Если это условие выпол- няется, вычисляем xm= (xi-|-х2)/2 и F(xm), после чего останавливаем счет с выдачей значений хт и F(xm). Если данное условие не выполняется, идем к п. 5. 5. Проверяем условие F(xi)<F(x2). Если оно выполняется, полагаем a=xi, xi=x2 и F(xi) = F(x2), после чего выполняем п. 3 и п. 4. 6. Если £(xi)>£(х2), полагаем 6=х2, x2 = xi, f(x2) = f(xi), после чего выполняем п. 2 и п. 4. Программа 4.27. Пример. Со строки 180 записана под- программа вычисления £(х) для функции I© PRINT‘ПОИСК МАКСИМУМА F(X> МЕТОДОМ ДИХОТОМИИ3 20 INPUT3ВВЕДИТЕ ГРАНИЦЫ ИНТЕРВАЛА ПОИСКА Ал В3Ал В 25 INPUT3ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е«3Е 30 IF АВ8<В-АХ2жЕ THEN 100 40 LETC=< A+B-E >/2 s LETD»< A+B+E)/2 50 LETX=C:GOSUB 120:LETK«F 60 LETX=D:GOSUB 1205LETL*=F 70 IF K>L THEN 90 80 LETAC: GOTO 30 90 LETB=Ds GOTO 30 100 LETX==<A+B)/25GOSUB 120 11© PRINT3 XM=3X’-PRINT3F<XM)=3 F:STOP 120 LETFCG Г*Х-2>жХ+10)жХ 130 RETURNS END Пример. Co строки 120 записана под- программа поиска максимума функции Г(х) по формуле (4.22). При а —2, Ь = 5 и Е = 0,001 получим хт = 3,333429565 и £(хт)= 14,81481481. Метод золотого сечения основан на делении отрезка [а, 6] по правилу золотого сечения (4.22). Для а = 2, £ = 5 и £ = 0,001 получим хт = 3,33495386 и F (хт) = 14,81481479. Метод квадратичной интерполяции — экстраполяции заключается в замене £(х) в промежутке Xi±/i, где xi — начальное при- ближение, квадратической параболой, экстре- Программа 4.27. 10 20 25 30 40 PRINT3ПОИСК МАКСИМУМА F(X) МЕТОДОМ ЗОЛОТОГО СЕЧЕНИЯ3 INPUT3ВВЕДИТЕ ПРЕДЕЛЫ ИЗМЕНЕНИЯ X Ал В 3 Ал В INPUT3ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е= 3Е LETK=<SQR<5)“1)/2 GOSUB 140 50 GOSUB 160 б© IF ABS(D-CXE THEN 120 70 IF L>M THEN 100 80 LETAC: LETC=D s LETL=M 90 GOSUB 160"GOTO 60 100 LETB=DSLETD=CSLETM=L 110 GOSUB 140:GOTO 6© 120 LETX= < C+D >/2:PRINT3 XM=3X 130 GOSUB 180:PRINT3F<XM)=3F:STOP 140 LETCC+(1-K)*<B-A) 150 LETXC: GOSUB 180:LETL=F:RETURN 160 LETD=A+K*<B-A) 170 LETX=H:GOSUB 180:LETM=F:RETURN 180 LETF=((.1жХ-2)жХ+10 >жХ 190 RETURN:END 4 В. П. Дьяконов 97
мум которой вычисляется аналитически. После приближенного нахождения экстремума хт (максимума или минимума) можно задать xi=xm и повторить поиск, Таким образом, с помощью итерационной процедуры значение хт уточняется до получения его с заданной погрешностью е. Как видно из рис. 4.8, этот метод обеспечивает поиск как максимумов, так и минимумов F(x), в том числе для случая F (х) =0, причем точка хт может лежать в ин- тервале xi±/i (интерполяция) и быть вне его (экстраполяция). Алгоритм реализации этого метода следующий. 1. Задаем начальное приближение Х| для хм и вычисляем два смежных значения аргумента /?(х):хо=Х1 — h и X2 = xi-j-/z, где h — полуинтервал интерполяции — экстрапо- ляции. 2. Вычисляем три значения F (х): F (х0) = — Ло, F(xi)=/7i и F(x2)—F2. 3. Находим коэффициенты Fo Fi F2 __ 1 , p x С-'2Лг Тг4"2Л!Г“'2Л:г(?" 2F'+ 2)’ — Fo(2xi 4-/i)4-4FiX!—^г(2х| h) &=---------------2jj!------------- параболы y(x)—x2 + bx + c, проходящей через выбранные три узла интерполяции — экстра- поляции F(x), и по ним вычисляем анали- тически положение экстремума b 2с" 1 Л)(2х| 4~^)4"4F[Xi-j-/\>(2xi — Л) = 2 Л, —2F, ’ 4. Проверяем выполнение условия (хт~Xi) <8. Если оно не выполняется, задаем х\—хт и идем к п. 1. Если выполняется, считаем хт найденным с заданной погреш- ностью 8, вычисляем F (хт) и останавливаем счет. Программа 4.28. Рис. 4.8. Поиск экстремумов максимума (а) и минимума (6) методом квадратичной интер- поляции —- экстраполяции причем в обоих случаях экстремумы находи- лись за пределами интервала xi±/z. Сравнение методов одномерной оптими- зации показывает, что для простой функции Л(х). например вида (4.22), они обеспечивают примерно одинаковое время поиска (около 10 с). Исключением является последний ме- тод, имеющий время поиска примерно в 2,5 ра- за меньше. Последнее связано с тем, что функция (4.22) близка к квадратичной пара- боле из-за малости коэффициента при х3. 10 PRINT'ВЫЧИСЛЕНИЕ ЭКСТРЕМУМОВ ФУНКЦИИ ОДНОЙ ПЕРЕМЕННОЙ' 20 PRINT'МЕТОДОМ КВАДРАТИЧНОЙ ИНТЕРПОЛЯЦИИ-ЭКСТРАПОЛЯЦИИ' 100 INPUT'ВВЕДИТЕ ШАГ №'Н 105 INPUT'ВВЕДИТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ X1='Z 110 1МРиТ'ЗАДАйТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е='Е 115 LETX=Zs60SUB 20©sLETU=F 120 LETX=Z-Hs80SUB 2©0:LETW=F 130 LETX=Z+Hs60SUB 200sLETU=F 140 LETT=W«(2*Z+H)-4*U*Z+U*< 2*Z-H) 150 LETT=T/<W-2«U+U)/2 160 IF ABS<T-ZXE THEN 18© 170 LETZ=T:60T0 115 180 PRINT'XM='T 190 PRINT'F<XM>='UsSTOP 200 LETF=((.1*X-2)*X+10)*X 210 RETURNS END Пример. Вычисление f(x) для функции (4.22) производится подпрограммой, запи- санной со строки 200. Для h = 0,1; Х|=3 и е = 0,001 получим хт = 3,33383342 и F (хт) = = 14,8148146, а для х,=8 xw = 9,999499962 и F (хп1) =2,414881321 • 10“7. Значения F (хт) показывают, что в первом случае обнаружен максимум F(x), а во втором — минимум, 98 В большинстве случаев для гладких F(x\ метод квадратичной интерполяции — экстра полиции дает заметный выигрыш во времени вычислений. Удобно и то, что он без всякой перестройки программ обнаруживает как максимумы, так и минимумы F(x), причем даже за пределами первоначально заданного интервала поиска. Преимущество метода
золотого сечения перед методами поразряд- ного приближения и дихотомии при простых £(х) не выявляется, поскольку программная реализация первого метода сложнее и необхо- димо выполнение ряда вспомогательных опе- раций. Однако при сложных F(x) метод золотого сечения может давать существенный выигрыш во времени. Для поиска экстремумов пользуются также методом с числами Фибо- наччи [3, 41], однако особым преимуществом перед методом золотого сечения он не обла- дает. Многомерная оптимизация заключается в поиске экстремумов функции многих пере- менных F(xi, х2, ...» хп). Методы такой опти- мизации детально описаны в [3, 38, 41]. Из всего многообразия методов многомерной оптимизации ограничимся рассмотрением трех относительно простых методов поиска мини- мума £(Х|, Х2, ...» Хп). Метод координатного спуска заключается в поочередном поиске минимума по коор- динате Х|, затем х2 и т. д. После нахождения точки минимума по координате Х| переходим к нахождению точки минимума по коорди- нате Х2 и т. д. Поиск ведется с одинаковым шагом, который уменьшается после нахож- дения всех значений Xim, x2m, ..., xnm. Таким образом, алгоритм реализации этого метода подобен алгоритму метода поразрядного при- ближения и лишь дополняется циклом задания переменных хь х2, ..., хп, внутри которого оценивается погрешность нахождения х^ для каждой переменной. Программа 4.29. Метод спирального координатного спуска отличается от рассмотренного выше лишь тем, что шаг Н меняется каждый раз при переходе от поиска минимума по одной переменной к поиску минимума по другой переменной. В трехмерном пространстве это напоминает спуск во впадину по спирали. Обычно этот метод дает некоторое сокращение времени поиска. Программа 4.30. Со строки 120 записана подпрограмма вычисления функции (4.23). Для хю^хы** =хзо=0,5; 77 — 0,5 и £=1.10~4 получим Х1ш= 1,000032; х2т» 2,000032; x3™*3,000032 и F (xi)мин = 3,735451795 при /сл?1,5 мин. Метод координатного спуска с квадратич- ной интерполяцией — экстраполяцией основан на последовательном поиске минимума каждой переменной с применением для этого метода квадратичной интерполяции — экстраполяции. Программа 4.31. Пример. Со строки 250 записана под- программа вычисления функции (4.23). При л =0,01; £=1-10~4; Хю=х2о=х3о.= О,5 по- лучим %i,n= 1,000033409; х2да = 2,000016758; х3,н = 3,000008995 и F (х<) иин= 3,735514058 (/с~1 мин). Применение многомерной оптимизации для решения систем уравнений (линейных и не- линейных). Если дана система уравнений ’ /|(Х|, х2, ..., хя) = 0, fa(xi, х2, ..., х„)=0, /п(Х|, х2, ..., хй)=й=0, I© PRINT’МИНИМИЗАЦИЯ ФУНКЦИЙ Н ПЕРЕМЕННЫХ МЕТОДОМ’ 15 PRINT’ КООРДИНАТНОГО СПУСКА’ 20 INPUT’ЗАДАЙТЕ ЧИСЛО ПЕРЕМЕННЫХ №’№ШМ A(N) 25 INPUT’ЗАДАЙТЕ НАЧАЛЬНЫЙ ШАГ ПОИСКА H=’HsLETL=H 30 INPUT’ЗАДАЙТЕ ТОЧНОСТЬ РЕЗУЛЬТАТА Е=’Е 35 FOR 1=1 ТО N 40 PRINT!2.0!’ВВЕДИТЕ НАЧАЛЬНЫЕ X’I’ 0= ’ 45 INPUT A(I)sNEXT I 50 FOR 1=1 TO №LETB=.9E98 60 LETA<I)=A<I>+H5 6OSUB 150sLETC=B.“LETB=F 7© IF F-C<0 THEN 60 80 LETH=-H/3sIF ABSCH)>=ABS<L/3> THEN 60 90 LETH=L’-NEXT I 100 LETL=L/9sLETH=L 110 IF E/9<=L THEN 50 115 PRINT1F1.9!’F<XI MIN)=’F 120 FOR 1=1 TO N 130 PRINT 12.01’X’I’ MIN=’!F1.9!A(I) 135 NEXT I SPRINT’КОНЕЦ ВЫЧИСЛЕНИЙ’sSTOP 140 NEXT ISPRINT’КОНЕЦ ВЫЧИСЛЕНИЙ’sSTOP 150 LETF=EXP<A<1)+A(2)+A<3))/<A<1>*A<2)*A<2)*A<3)*A(3)*A<3)> 160 RETURNS END Пример. Co строки 150 записана под- программа вычисления функции ч exp(xi +х24-х3) F(x,. Х2, х3)=-------—5-5------ Х|Х2Хз (4.23) трех переменных. Для начальных значений хю = Х2о=хзо = О,5, шага // = 0,5 и погреш- ности £=1-10~4 получим Xim = 0,9999745973; х2от = 1,999974597; х3« = 2,999979597 и F (xi) «„и = 3,735451794. Время счета около 1,5 мин. 4* то поиск минимума функций п п £ 1МХ')1 или to)= £ (to))2 1=1 i ==) дает неизвестные этой системы. Пример. Найти неизвестные системы из двух нелинейных уравнений х?4-х2=1? х?—х2=0. 99
Программа 4.30. 10 15 20 25 30 35 PRINT'МИНИМИЗАЦИЯ ФУНКЦИЙ N ПЕРЕМЕННЫХ МЕТОДОМ PRINT'* СПИРАЛЬНОГО КООРДИНАТНОГО СПУСКА' INPUT’ЗАДАЙТЕ ЧИСЛО ПЕРЕМЕННЫХ N='NsDIM АСЮ INPUT'ЗАДАЙТЕ НАЧАЛЬНЫЙ ШАГ ПОИСКА Н='Н INPUT'ЗАДАЙТЕ ТОЧНОСТЬ РЕЗУЛЬТАТА Е='Е FOR 1=1 ТО N 40 PRINT!2.0!'ВВЕДИТЕ НАЧАЛЬНЫЕ Х'1' 0=' 45 INPUT ACDsNEXT I 50 FOR 1=1 TO NsLETB=.9E98 60 70 75 LETACI)=ACI>+Hs 6QSUB 120s LETC=B:LETB=F IF F~C<0 THEN 60 NEXT I 80 LETH=-H/5: IF ABSCH)>E/5 THEN 50 90 PRINT’Fl.9!'FCXI MIN)='F 100 FOR 1=1 TO N 110 PRINT!2.0!'X'I' MIN='?F1.9!ACI) 115 NEXT I SPRINT'КОНЕЦ ВЫЧИСЛЕНИЙ'sSTOP 120 LETF=EXPCAC1)+AC2>+AC3))/CAC1)*AC2)*AC2)*AC3)*AC3)*AC3>) 130 RETURNS END Программа 4.31. 10 PRINT'МИНИМИЗАЦИЯ ФУНКЦИЙ N ПЕРЕМЕННЫХ FCXI) МЕТОДОМ' 15 PRINT' КВАДРАТИЧНОЙ ИНТЕРПОЛЯЦИИ-ЭКСТРАПОЛЯЦИИ' 20 INPUT'ЗАДАЙТЕ ЧИСЛО ПЕРЕМЕННЫХ N='NsDIM АСЮ 25 INPUT'ЗАДАЙТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЯ Е='Е 30 INPUT'ЗАДАЙТЕ ИНТЕРВАЛ ИНТЕРПОЛЯЦИИ Н='Н 35 FOR 1=1 ТО N 40 PRINT!2.8!'ВВЕДИТЕ НАЧАЛЬНЫЕ ЗНАЧЕНИЯ Х'1'НАЧ=' 50 INPUT ACI>sHEXT I 100 LETS=0 110 FOR 1=1 TO N 120 LETZ=ACI)s60SUB 250sLETU=F 130 LETACI>=Z-Hs60SUB 250sLETW=F 140 LETACI>=Z+HsGOSUB 250sLETU=F 150 LEТТ=Ы* C 2*Z+H)-4*U*Z+U* C 2*Z-H) 160 LETT=T/CW-2'*U+U)/2 17© IF ABSCT-Z)>E THEN LETS=1 180 LETACI)=TsNEXT I 190 IF SO0 THEN 100 200 PRINT!F1.9!'FCXI MIN>='F 210 FOR 1=1 TO N 220 PRINT!2.0!'X'T'MIN='!F1.9! AC I) 230 NEXT I 240 РР1НТ'КОНЕЦ ВЫЧИСЛЕНИЙ'sSTOP 250 LETF=EXPCAC1)+AC2)+AC3)>/CAC1>*AC2)*AC2)*AC3)*AC3>*AC3)) 260 RETURNS END Для них имеем F(X\, X2) = (^?+x2— l)2 + (x? —%2)2- Воспользовавшись программой 4.31 при /7 = 0,01; Е=Ы0’4 и х|О = х2о=1, получим xim = 0,8259; х2т = 0,5636 и F (х1т, х2т) = = 2,2726-10-4. Подстановка xlfn и х2т в исход- ные уравнения дает x'i,tl -J-xL = 0,9998~ 1 и x3im — х2т = — 2-10—4 ~ 0. мул. Для функций, заданных таблично со случайной погрешностью, точность чис- ленного дифференцирования может быть низкой. Численное дифференцирование при равно- мерно расположенных узлах с интерполя- цией реализуется следующими формулами (для 3, 4 и 5 узлов): /(хо4-р/?)з = § 4.7. Численное дифференцирование и вычисление коэффициентов чувствительности =-— 0,5) у-1 — 2pt/o-F(p + 0,5) yi], // । t,\ 1/ 3p~ — 6/? —|—2 У (xо -Г ---------q-------У -1 + Численное дифференцирование аналити- чески или таблично заданной функции у(х) заключается в замене у(х) интерполяцион- ным полиномом Р(х), производные dnJ\x')/dxn ~ ~dny(x)/dxn которого можно найти анали- тически с помощью соответствующих фор- 3/?2 —4p—1 2 100
„ , 1 / 2р3-Зр2-р+1 у (xn + ph)i=- ----У-г — 4р3-Зр2-8р + 4 2р’-5р -------6-----У-'+----2---У" ~ 4р’ + 3р2 —8р —4 2р' + 3р2-р—1\ -------6-----У' +------12----У2)- В этих формулах p = (x — xo)/h и x = xo + p/i. Вычисление у'(х) по последней формуле реали- зовано программой 4.32, в которой ординаты у~2, у-\, уо, у\ и у2 обозначены как А, В, С, D и Е. Программа 4.32. Формулы численного дифференцирования для узлов у(х) существенно проще приведен- ных, так как в узлах Р принимает фикси- рованные значения. Особенно простыми явля- ются формулы для центрального узла (Р = 0) (см. табл. 4.1). Эти формулы удобны для численного дифференцирования таблично за- данных функций в точке х = х<>. Частные производные функции ряда пере- менных f(xi, х2, ..., х„) вычисляются по при- веденным выше формулам, если задавать приращение одной „из переменных и оставлять неизменными (равными заданным значениям) остальные переменные. Анализ чувствительности функции Дх,, х2, ..., хп) к изменению ее параметров х,, 10 PR I NT> ВЫЧИСЛЕНИЕ ПЕРВОЙ ПРОИЗВОДНОЙ/ ТАБ ЛИЧНО ЗАДАННОЙ' 20 PRINT'N=3-5 ОРДИНАТАМИ ФУНКЦИИ ПРИ РАВНОМЕРНОМ' 30 PRINT'РАСПОЛОЖЕНИИ УЗЛОВ ИНТЕРПОЛЯЦИИ':PRINT" 40 INPUT'ВВЕДИТЕ Х0='Ы:INPUT'ВВЕДИТЕ ШАГ Н='Н 50 INPUT'ЗАДАЙТЕ ЧИСЛО ОРДИНАТ N='N 60 IF N=3 GOTO 100 70 IF N=4 GOTO 110 80 IF №5 GOTO 120 90 INPUT'ПОВТОРИТЕ ВВОД N='№GOTO 60 100 INPUT'ВВЕДИТЕ ОРДИНАТЫ V-l/ V©/ VI 'А/ В/ С: GOTO 13© И© 1НРиТ'ВВЕДИТЕ ОРДИНАТЫ V-ЬV©/VI/V2'A/В/C/D:GOTO 130 120 INPUT'ВВЕДИТЕ ОРДИНАТЫ V-l/V-l/V0/V1/V2'A/B/C/D/E 130 INPUT'ВВЕДИТЕ Х='Х: LETP=<X-W)/H 140 if №4 GOTO 180 150 IF N=5 GOTO 210 16© LETF= < <P-.5)жА-2жрж©+ < P+.5)жС)/Н 170 PRINT'DV/DX^'F!GOTO 138 18© LETF= <-< Зжржр-6жр+2)ЖА/6+ < Зжржр-4жр-1)ЖВ/2 ) 190 ЬЕТЕ=(-<Зжржр-2жР-2)жС/2+<Зжржр-1)жЦ/6) 200 LETF=(F+E)/H:GOTO 17© 210 LETF=< < <2ЖР-3)жр-1>жр+1)жА/12 220 LETF=F-(< <4жР-3)жр-8)жр+4)жВ/6 230 СЕТР=Р+<2жржр-5)жржС/2 240 LETF=F-<(<4жр+3)жР-8)жр-4)жЦ/6 250 LETF5=F+ < < <2жр+3 )жр-1) жр-1)жЕ/12 260 LETF=F/HSGOTO 170:END Пример. Найти производную /(х) в точке х = 0,51 функции у(х), заданной при хо = 0,5 и h = 0,02 пятью значениями у,:у_> = = 0,35889029, у_1 = 0,35553253, у о = = 0,35206533, yi =0,34849251 и t/2 = 0,344818. Введя эти данные, получим /(0,51) = = -0,1786491875. х2, ..., Хп основан на вычислении абсолют- ного приращения функции по формуле Ах, + дх2 дхп А/(Х|, Х2, ...; Х„) = А Таблица 4.1 Формулы численного дифференцирования (производные в центральных узлах) Число узлов Производные Погрешности У = У» 3 У' = У" = (У1-2уо + У-\)/к2 -к'у"'1Ь -h2yv/t2 5 у' = (— f/2-pBi/i—8у~ । -}~У- 2)/ 12А /' = ( — (/2-1- 16(/, — ЗО(/оЧ- 16(/_, — y-z)/\2h2 У"' = (y2 — 2yl+2y_i—y_2)/2h3 -h'y^O -rfy1/* 7 У' = (Уз — 9(/2 -1- 45(/1 — 45у _ । + 9е/ _ 2 — у - з)/60Л у" = (2(/3 — 27 у2 + 270(/1 — 49О(/о + 270(/ _, — 27 у _ 2 + 2у _ :J) /180/г' у"' — уз + 8(/2 — 1 Зу\ -f-1 Зу~ । — 8(/_2 -р 1/-з)/8А3 -Л6/”/140 -Л6/"'/560 7 Л4/"/120 101
где коэффициенты дЦдх, являются абсолют- ными коэффициентами чувствительности к изменению параметра xz. Применяют и относи- тельные коэффициенты чувствительности з; _ж dxi/xi Нт о Axj/x, (4.24) С их помощью легко вычисляется относи- тельное приращение функции при заданных относительных изменениях параметров (пере- менных) Axz/x/o: Пример. Найти три производные функ- ции нормального распоеделения ф(х)=/(х) = в точке хо==О,5. Подпрограмма вычисления f (х) при х==Х(1) записывается со строки 400. Задав Н = 0,001, получим выдачу в виде D1F/DX1 = - 1,760326635- 10’1, D2F/DX2— -2,640406667- Ю"1, D3F/DX3 = 4,845-10-1, S=-2,500000002 -Ю"1, F(X10) = 3,3520653268-10“‘. А/ f(xi<}, х2о, ...» xrth) Точные значения производных и функ- ции Дхо): = s, -^-+S2 АД-4-... + Sn-^i-. *10 X20 XnO Вычисление трех частных производных и относительных коэффициентов чувстви- тельности функции f(xi, Х2, ...» хп) ряда пере- менных можно организовать следующим образом. 1. Будем считать переменные xi, х2, ...» хп переменными массива Х(1) и организуем ввод числа переменных N и начальных значений переменных хю, Х20, ..., хпо. 2. Вводим приращение Ах — //. 3. Организуем цикл вычислений частных производных по каждой переменной с управ- ляющей переменной /=1, 2, ..., /V. Внутри цикла задаем х, = (х^ — 2/i), (х/0 —/г), (х/о 4- 2/г) • (для 5 узлов) и для этих значений Xi, обращаясь к подпрограмме вычисления f(xi, Х2, ..., Хп), находим ординаты /„2 = 1/-2, ...» /2 ==*/2. После этого вычисляем производные Нхю)==/(х/о), * /"(*«<)) =*/'(*<0), 1"'(хю)—у"'(хю) по формулам табл. 4.1 и ко- эффициенты S, (4.24) и выводим их на печать. 4. После выхода из цикла идем к п 2 и повторяем вычисления (если это необхо- димо). При Л/1 по этому алгоритму вычисля- ются три производные и коэффициент S функции одной переменной f(x). Программа 4.33. -^-=±=—0,1760326633, ах -0,2640489951, ах d?f -7-^=0,48408982, dx* Дх0) = 0,3520653267. Если значения хю, Х20, ..., хЛо сильно различаются, то для повышения точности численного дифференцирования целесообраз- но задавать не абсолютные приращения Дх, = /г, а относительные р = Дх</х,-о. Тогда при вычислениях п. 3 в описанном выше алгоритме нужно задавать абсциссы (х.о — 2рх,(1), (Х/О —рх,о), ..., (х,о + 2рх/О). Кроме того, в этом случае Si^(dfi/dXi)/p. Программа 4.34. Работу этой программы можно проверить по примеру, приведенному выше для про- граммы 4.33 (при р = 0,002 получим анало- гичные результаты). Подобные программы могут быть состав- лены и для численного дифференцирова- ния аналитически заданных функций по 7 точкам. 10 PRINT'ВЫЧИСЛЕНИЕ ТРЕХ ЧАСТНЫХ ПРОИЗВОДНЫХ И' 20 PRINT'ОТНОСИТЕЛЬНОГО КОЭФФИЦИЕНТА ЧУВСТВИТЕЛЬНОСТИ' 30 PRINT'ФУНКЦИИ F<XI) РЯДА ПЕРЕМЕННЫХ, ЗАДАННОЙ' 40 PRINT'S ОРДИНАТАМИ-ПОДПРОГРАММА СО СТРОКИ 400' 50 INPUT'BBEAHTE ЧИСЛО ПЕРЕМЕННЫХ N='N 60 DIM X(N>,А<Ю,B<N>,C<N),S<N)sFOR 1=1 TO N 70 PRINT 12.0!'ВВЕДИТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ XC'I')' 80 INPUT XCI): NEXT I 90 INPUT'ЗАДАЙТЕ АБСОЛЮТНОЕ ПРИРАЩЕНИЕ Х<1) Н='Н 100 FOR 1=1 ТО №LETX<0)=X< I > 110 LETX<I)=X(0)-2*HsGOSUB 400sLETF2=FsGOSUB 400sLETFl=F 120 GOSUB 400sLETF0=FsGOSUB 400sLETEl=FsGOSUB 400sLETE2=F 130 LETX <I)=X < 0)sLETA < I)=C-E2+8*E1-8*F1+F2 >/12/H 140 LETS<I)=A(I)*X(I)/F0 150 LETB <I)=<-E2+16*E1-30«F0+16*F1-F2)z12/H/H 160 LETCCI)=<E2-2*El+2*Fl-F2)/2/H/H/HsNEXT I 200 FOR 1=1 TO № PRINT 12.0!'ДЛЯ ПЕРЕМЕННОЙ XC'I')' 210 PRINT!F1.9!'D1F/DX1='A(I> 220 PRINT'D2F/DX2='B<I)sPRINT'D3FzDX3='C<I) 230 PRINT'S='S<I>sNEXT I 240 PRINT'ЗНАЧЕНИЕ ФУНКЦИИ F(XI0>='F0SGOTO 90 400 LETF=EXP <-X <1> л2/2)zSQR < 2*#PI) 410 LETXCI)=X<I)+HsRETURNS END 102
Программа 4.34. 10 PRINT'ВЫЧИСЛЕНИЕ ТРЕХ ЧАСТНЫХ ПРОИЗВОДНЫХ И' 20 PRINT‘ОТНОСИТЕЛЬНОГО КОЭФФИЦИЕНТА ЧУВСТВИТЕЛЬНОСТИ' 30 PRINT'ФУНКЦИИ F(XI) РЯДА ПЕРЕМЕННЫХ/ ЗАДАННОЙ' 40 PRINT'АНАЛИТИЧЕСКИ-ПОДПРОГРАММА СО СТРОКИ 400' 45 PRINT'ПРИ ЗАДАНИИ ОТНОСИТЕЛЬНОГО ИЗМЕНЕНИЯ ПЕРЕМЕННЫХ' 50 INPUT'ВВЕДИТЕ ЧИСЛО ПЕРЕМЕННЫХ N='N 60 DIM X(N)/A<N>/B<N>/C(N)/S<N):FOR 1=1 ТО N 70 PRINT!2.0?'ВВЕДИТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ Х('Г‘>' 80 INPUT Х<1): NEXT I 90 INPUT'ЗАДАЙТЕ ОТНОСИТЕЛЬНОЕ ПРИРАЩЕНИЕ XCI) Р='Р 100 FOR 1=1 ТО N:LETX<0)=X<I):LETH=P*X<0) 110 LETX(I)=X<0)-2*HsGOSUB 400sLETF2=FsGOSUB 40©sLETFl=F 120 GOSUB 400sLETF0=FsGOSUB 400sLETEl=FsGOSUB 480sLETE2=F 130 LETX(I)=X(0)s LETA < D = <-E2+8*E1-8*F1+F2)/12/H 140 LETS<I)=A(I)*X<I)/F0 150 LETB <I)=(-E2+16*E1-30*F8+16*F1-F2)/12/H/H 160 LETC(I)=(E2-2*El+2*Fl-F2>/2/H/H/HsNEXT I 200 FOR 1 = 1 TO Ns PRINT!2.0!'ДЛЯ ПЕРЕМЕННОЙ XC'I')' 210 PRINT!F1.9!'DlFzDXl='A<I) 220 PRINT'D2F/DX2='B(I)sPRINT'D3F/DX3»'C<I) 230 PRINT'S»'S(I)sNEXT I 240 PRINT'ЗНАЧЕНИЕ ФУНКЦИИ F<XI0)='F0SGOTO 90 400 LETF=EXP<-X< 1 r-2/2VSQR<2*#PI > 410 LE TX(I)=X <I') +H s RETURN s END Программа 4.35. 10 PRINT'ВЫЧИСЛЕНИЕ ТРЕХ ЧАСТНЫХ ПРОИЗВОДНЫХ И' 28 PRINT'ОТНОСИТЕЛЬНОГО КОЭФФИЦИЕНТА ЧУВСТВИТЕЛЬНОСТИ' 30 PRINT'ФУНКЦИИ FCXI) РЯДА ПЕРЕМЕННЫХ/ ЗАДАННОЙ' 40 PRINT'АНАЛИТИЧЕСКИ-ПОДПРОГРАММА СО СТРОКИ 400' 50 INPUT'ВВЕДИТЕ ЧИСЛО ПЕРЕМЕННЫХ N='N 60 DIM X<H)/A<N)/B<N)/C<N>/S<N)sFOR I«1 TO N 70 PRINT*2.0!'ВВЕДИТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ X<'I')' 80 INPUT X<I)s NEXT I 90 INPUT'ЗАДАЙТЕ ОТНОСИТЕЛЬНОЕ ПРИРАЩЕНИЕ Х<1) Р='Р 100 FOR 1=1 ТО №LETX<0>=X<I)5LETH=X(0)*P 110 LETX<I>=X<0)-3*HsGOSUB 400sLETF3=F 120 GOSUB 400sLETF2=FsGOSUB 400sLETFl=FsGOSUB 400sLETE©=F 130 GOSUB 400sLETE1=FsGOSUB 400sLETE2=FsGOSUB 400sLETE3=F 140 LETA<I)=<E3-9*E2+45*El-45*Fl+9*F2-F3>/60/H 150 LETB<I)=2*E3~27*E2+270*E1~490*E0 160 LETB(I>=<B<I>+270»Fl-27*F2+2*F3>/180/<H»H) 170 LETC(I)=< 8ЖЕ2-E3-13*E1+13*F1-8»F2+F3)/8/< H~3) 180 LETS<I)=A<I)*X(0)/E05LETX<I>=X<0)sNEXT I 200 FOR 1 = 1 TO Ns PRINT!2.0!'ДЛЯ ПЕРЕМЕННОЙ X('I'>' 210 PRINT !F1.9!' D1F<DX1 = 'AC I) 220 PRINT'D2F/DX2='В <I> s PRINT'D3F/DX3='CCD 230 PRINT'S='S<I)8NEXT I 240 PRINT'ЗНАЧЕНИЕ ФУНКЦИИ FCXI©)»'E05GOTO 98 400 LETF=EXPC-XC1>~2/2)/SQR<2*#PI) 410 LETXCI)«XCI)+HsRETURNS END Пример. Используя данные програм- мы 4.33, получим D1F/DX1 = — 1,760326636-10~1, D2F/DX2 = -2,640489378-10“ D3F/DX3 = 4,840943756 • 16“ S=-2,500000004-10“', F(XI0)=3,3520653268- IO-1. В этой программе Н = const. В приведен- ной ниже программе задается Р = Дхг/х/0~ = const. 103
Программа 4.36. 10 PRINT‘ВЫЧИСЛЕНИЕ ТРЕХ ЧАСТНЫХ ПРОИЗВОДНЫХ И" 20 PRINT"ОТНОСИТЕЛЬНОГО КОЭФФИЦИЕНТА ЧУВСТВИТЕЛЬНОСТИ" 30 PRINT"ФУНКЦИИ F£XI> РЯДА ПЕРЕМЕННЫХ/ ЗАДАННОЙ" 40 PRINT"АНАЛИТИЧЕСКИ-ПОДПРОГРАМПА СО СТРОКИ 400" 50 INPUT"ВВЕДИТЕ ЧИСЛО ПЕРЕМЕННЫХ N="N 60 DIM X<N)/A<N)/B(N>/C<N>/S(N)sFOR 1=1 ТО N 70 PRINT 12.0!"ВВЕДИТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ Х<"I">" 80 INPUT Х<I>s NEXT I 90 INPUT"ЗАДАЙТЕ АБСОЛЮТНОЕ ПРИРАЩЕНИЕ X(I) H="H 100 FOR 1=1 TO №LETX(0)=X< I) 110 LETX<I)=X<0)-3*HsGOSUB 400sLETF3=F 120 GOSUB 400sLETF2=F:GOSUB 400sLETF1=Fs60808 400sLETE8=F 130 GOSUB 400sLETEl=FsGOSUB 400sLETE2=FsGOSUB 400sLETE3=F 140 LETA <I>=< E3-9*E2+45*E1-45*F1+9*F2-F3 >/60/Н 150 LETB<I)=2*E3-27*E2+270*E1-490«E0 160 LETB<I)=(B<I)+270*F1-27>F2+2*F3)/180/<H*H) 170 LETC< I)=< З.ЖЕ2-ЕЗ-13*E 1 +13*F 1 -8*F2+F3 ) '8/ < H~3 ) 180 LETS<I)=A<I>*X(0)/E0sLETX(I)=X(0)5NEXT I 200 FOR 1=1 TO Ns PRINT*2.0!"ДЛЯ ПЕРЕМЕННОЙ X("I">" 210 PRINT!F1.9!"D1F/DX1="A<I) 220 PRINT"D2F/DX2»"B(I)sPRINT"D3F/I*X3="C(I) 230 PRINT'S»"S<I>sNEXT I 240 PRINT"ЗНАЧЕНИЕ ФУНКЦИИ FCXI0>="E0SGOTO 98 400 LETF=EXP(“X(1)л2/2)/SQR< 2ж#РI) 410 LETX<I>«X<I)+HsRETURNSEND Работу этой программы также можно проверить по приведенному выше примеру. Следует отметить, что из-за ошибок округ- ления точность численного дифференциро- вания при малых hup при 7 точках улучша- ется незначительно, а иногда даже ухудшается (в сравнении с дифференцированием по 5 точкам). § 4.8. Вычисление определенных интегралов Определенный интеграл ь .1 =$ fW dx а (4.25) с пределами интегрирования а и b можно трактовать как площадь фигуры (рис. 4.9), ограниченной ординатами а и Ь, осью абсцисс х и графиком подынтегральной функции f (х). Рис. 4.9. Графическая Иллюстрация численного интегрирования Обыкновенный определенный интеграл, у которого известна его первообразная F(x), вычисляется по формуле Ньютона — Лейбница / = F(&)-F(a). Поэтому, достаточно вычислить значения функции F(x). Большое количество опреде- ленных интегралов приведено в книге [30]. Численное интегрирование применяется, если нахождение F(x) сложно или невозможно. Оно заключается в интерполяции Дх) на от- резке [а, 6] подходящим полиномом, для которого определенный интеграл вычисляется по формулам численного интегрирования. Обычно отрезок [а, /?] разбивается на m частей, к каждой из которых применяется соответствующая простая формула. Таким образом получают составные (или сложные) формулы численного интегрирования. Метод прямоугольников — простейший прием численного интегрирования, при ко- тором функция y = f(x) заменяется интерпо- ляционным многочленом нулевого порядка. Для повышения точности интегрирования отрезок [а, /?] разбивается на m частей и формула прямоугольника применяется к каждому отрезку. Приведем обобщенную формулу прямоугольников: ш— 1 / = 0 Вследствие низкой точности этот метод почти не применяется. Модифицированный метод прямоуголь- ников базируется на представлении Дх) ординатами, смещенными на величину 0,5/i, где h = (b — a)/nv. l~h £ f(x/ + 0,5ft)+— где /"(5) — значение второй производной Дх) в точке х = £, где она максимальна. Метод трапеций заключается в линейной аппроксимации Дх) на отрезке [а, Ь]. Для уменьшения погрешности [а, разбивается 104
на т частей длины h — (b — a)/m (при методе прямоугольников f(x() = const = yt на этом отрезке). С учетом суммирования смежных орди- нат внутри отрезка [а, Ь] обобщенная фор- мула метода трапеций имеет вид - - (5). В связи с легкостью программной реали- зации и низкой точностью рассмотренных методов программы для них не приво- дятся. Метод Ньютона — Котеса основан на интерполяции f(x) в п промежутках полино- мом Лагранжа. В общем случае f(x) должна задаваться (п 4-1) ординатами. Формулы интегрирования точны, если f (х) — много- член п-й степени. При п=\ получаем метод трапеций. Метод Симпсона (парабол) — частный случай метода Ньютона — Котеса при п — 2. При разбиении отрезка [а, Ь] на m равных отрезков получим обобщенную формулу Симпсона ( h / = f(x)dx ~ х |«а)+4Да+Л)+2Да + 2Л)+ и а +4Ka + 3/i)+...+4K*-/i)+f(*)]-^-f,V(5). Выражение для остаточного члена показы- вает, что формула Симпсона точна, даже если /(х) — многочлен третьей степени. Эта частная особенность формулы Симпсона объясняет ее преимущественное применение — у некоторых ЭВМ вычисление по ней реали- зовано микропрограммно. Алгоритм реализации метода Симпсона дан на рис. 4.10. Программа 4.37. Пример. Вычислить интеграл j / = $ V2x+ 1 dx= 1,398717474 о (4.26) при а==0 и Ь — \. Вычисление подынтеграль- ной функции оформляется подпрограммой — см. строку 110. Для т — М — % получим /=1,39871724 при /с«5 с. Программа 4.37. Рис. 4.10. Алгоритм численного интегрирования по составной формуле Симпсона Интегрирование по формуле Бодэ /= J f(x)dx=^-(7yn + 32yi + l2y2 + XQ 4о + 32j/3 + 7j/4) 10 PRINT 'ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ СИМПСОНА’ 20 INPUT 'ВВЕДИТЕ НИМНИй ПРЕДЕЛ ИНТЕГРИРОВАНИЯ А='А 25 INPUT 'ВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В»'В 30 INPUT 'ВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ ИНТЕГРИРОВАНИЯ М=’М 40 LET Н=<В-А)/М/2 s LET Х=А 50 60SUB 110 I LET I=F s LET N=0 60 LET X«X+H s 60SUB 110 s LET I=I+4*F 70 LET N=N+2 • IF N=2*M THEN 90 80 LET X=X+H s 60SUB 110 t LET I»I+2*F s 60T0 60 90 LET X=B : 60SUB 110 s LET I*CI+F)*Hz3 95 PRINT 'ДЛЯ A=’A’ B='B' И M«’Ms PRINT" 100 PRINT'ЗНАЧЕНИЕ ИНТЕГРАЛА 1='Is GOTO 30 110 LET F=SQR<2»X+1> s RETURN : END 105
примененной к каждому из т отрезков разбиения [a, 6J, реализует следующая программа. Программа 4.38. по формуле, содержащей одинаковые мно- жители‘д,—. 2/л перед /(/,). Однако при этом абсциссы h располагаются неравномерно. Так, для л = 3 /| = — ^/2/2, /2 = 0 и /3 = У2/2 10 PRINT'ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ ПО ФОРМУЛЕ БОДЭ' 20 INPUT'ВВЕДИТЕ НИЖНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ А='А 30 INPUT'ВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В='В 40 INPUT'ВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ ИНТЕГРИРОВАНИЯ М«'М 50 LETH=<B-A>/M!LETE«Hz4sLETX=As60SUB 1308 LETI=7*F 60 FOR N=1 TO MSLJETX=X+E 70 GOSUB 1308LETI=I+32*FsLETX=X+E 80 GOSUB 130:LETI=I+12*FsLETX=X+E 90 GOSUB 130sLET1=1+32*FsLETX=X+E 100 GOSUB 1308LETI=I+14*F 110 NEXT N 120 LETI=I-7*F!LETI = I.*2*E/45 125 PRINT'ЗНАЧЕНИЕ ИНТЕГРАЛА 1=4 8 GOTO 40 130 LETF=SQR(2*X+l)sRETURN:END Пример. Для интеграла (4.26) при т — 4 получим /=1,398717463 при /с~5 с. Подпрограмма вычисления f(x) записывается со строки 130. Метод Уэддля базируется на применении к каждому из т отрезков разбиения [а, /?] формулы / — $ f(x)dx = Х() — jo G/o + 5//i+//2 4-6г/з4-//4 4-5#5-+-*/б)4- । 47/i7 fVI + 12700 I Программа 4.39. Пример. Для интеграла (4.26) при т = 4 получим /=1,398717474 при /с~5 с. Подпрограмма вычисления f(x) записывается со строки 170. Формула Ньютона — Котеса с повышенной (в сравнении с формулой Уэддля) точностью для т=6 / = Jf (х) rfxsi-A- (411/0 + 2161/!+ 271/2 + Х() + 272i/3 + 27i/4 + 216i/5 + 41i/6) —^LfvltI Ц) реализована в следующей программе. Программа 4.40. Пример. Для интеграла (4.26) при т = 4 получим /=1,398717474 при /с~5 с. Подпрограмма вычисления f(x) записывается со строки 130? Приведенные выше методы интегрирования имеют равномерное расположение абсцисс х,, для которых вычисляются yi~f(Xi). При этом крайние значения х, равны а и b (за исклю- чением модифицированного метода прямо- угольников). Метод Чебышева основан на вычислении значения определенного интеграла -Н 9 п п /= 5 w <4-27> — j i = I i = I интеграл (4.27) приводится к виду (4.25) подстановкой х=-Ур- + -^-/. (4.28) Формула (4.27) точна для полиномов сте- пени п. Программа 4.41. Пример. Для интеграла (4.26) при т = 8 получим /=1,398717533 при /с«6 с. Вычйсление f(x) оформлено подпрограммой (строка 140). Метод Гаусса основан на интерполяции f(x) полиномом Лагранжа, но абсциссы х, выбираются из условия обеспечения минимума погрешности интерполяции. При этом интег- рал (4.25) подстановкой (4.28) сводится к виду + I п -I t=l (4.29) Метод Гаусса обычно обеспечивает повы- шенную точность — формула (4.29) верна для полиномов до (2л—1)-й_степени. Для п — = 3 Д,=5/9, /, = — УГ/З, Д2 = 8/9, /2 = 0, Д3 = 5/9 и /з = <Г73. Остаточный член (по- грешность) при этом равен Для повышения точности интегрирования отрезок [а, дробитря на m частей. Программа 4.42. Пример. Для интеграла (4.26) при М — 8 получим /=1,398717474 при /с«6 с. Подпрограмма вычисления f(x) записана со строки 130. При численном интегрировании с заданной точностью оценка погрешности интегрирования обычно сложна и требует вычисления высших производных f(x). Поэтому на практике принято проводить интегриро- вание для ряда т = 2, 4, 8 и т. д., считая верным число совпадающих первых цифр ре- зультата. Этот процесс легко автоматизиро- вать, что положено в основу программы 4.43. 106
Программа 4.39. 10 PRINT’ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ УЭДДЛЯ' 30 INPUT’ВВЕДИТЕ НИЖНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ А='О 30 INPUT'ВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ 8='В 40 INPUT’ВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ ИНТЕГРИРОВАНИЯ М='М 50 LETAM?’LETH=<B~A>zMsLETX=A:GOSUB 170 55 LETI=FsLETL=Hz6 60 FOR E=1 TO M 70 LETX=X+LsGOSUB 170:LETI=I+5*F 80 LETX=X+L:GOSUB 1705 LET1*1+F 98 LETX=X+LsGOSUB 170sLETI=I+6*F 100 LETX=X+L:GOSUB 170sLETI=I+F 110 LETX=X+LsGOSUB 170sLETI=I+5*F 120 LETX*X+L:GOSUB 170 s LETI = I+2*F 130 LETA*Xs NEXT E 140 LETI=<I~F>*3.*L/10 150 PRINT'ДЛЯ A*'Q'B«'B'M M«'M 160 PRINT'ЗНАЧЕНИЕ ИНТЕГРАЛА I*'I:GOTO 40 170 LETF=SQR(l+2*X)sRETURNS END Программа 4.40. 10 PRINT'ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ НЬИТОНА-КОТЕСА' 20 INPUT'BBEAHTE НИЖНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ А='А 25 INPUT'ВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В='В 30 INPUT'ВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ ИНТЕГРИРОВАНИЯ №'М 35 LETH=<B-A>/MsLETE=H/6 40 LETX=AsGOSUB 130sLETI=41*F 50 FOR N=1 TO MsLETX=X+E 60 GOSUB 130sLETI=I+216*F8LETX=X+E 70 GOSUB 130"LETI=I+27*FsLETX=X+E 86 GOSUB 130SLETI=I+272*FSLETX=X+E 90 GOSUB 130 s LETI = I+27*FsLETX=X+E 100 GOSUB 1305LETI=I+216*FsLETX=X+E 110 GOSUB 1305LETI=I+82*FsNEXT N 120 LETI=<I-41*F>*E/140 125 PRINT'ЗНАЧЕНИЕ ИНТЕГРАЛА 1='Is GOTO 30 130 LETF=SQR<2*X+1> s RETURNS END Программа 4.41. 10 PRINT 'ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ ЧЕБЫШЕВА' 20 INPUT'ВВЕДИТЕ НИЖНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ A='Q 30 INPUT'ВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В='В 40 INPUT'ВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ ИНТЕГРИРОВАНИЯ М='М 50 LETA=Q:LETT=SQR < 2 >/2 s LETI=0 s LETH= < В-А >/М 68 FOR E=1 TO MsLETW=A+H8LETC=CM+A)/2 70 LETD=(U-A)/2sLETX=C-D*TsGOSUB 120 80 LETI=I+FsLETX=CsGOSUB 120 90 LETI*I+FsLETX«X+D*TsGOSUB 120 100 LETI*I+FsLETA«WsNEXT E 110 LETI=I*H/3sPRINT'ЗНАЧЕНИЕ ИНТЕГРАЛА I='I8&OTO 40 120 LETF=SQR(2*X+1>sRETURNSEND Программа 4.42. 05 PRINT'ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ ГАУССА' 10 INPUT'ВВЕДИТЕ НИЖНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ А='О 12 INPUT'ВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В='В 15 INPUT'ВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ ИНТЕГРИРОВАНИЯ M=’MsLETA=Q 20 LETT«SQR ( 0.6 ) s LET I ==0 s LETH= (В-A >/М 30 FOR E=1 TO Ms LETB1=A+H 40 LETC=<Bl+A)/2s LETD=<B1-AV2 50 LETX=C-D*Ts GOSUB 130 60 LETV*D*5*F/9s LETI=1+7 70 LETX=Cs GOSUB 130 80 LETY=D*8*F/9s LETI=I+V 90 LETX=C+D«Ts GOSUB 130 100 LETY=D*5*F/9s LETI=I+V 110 LETA=Bls NEXT E 115 PRINT'ДЛЯ А='О'В='В'И M='MsPRINT" 120 PRINT' ЗНАЧЕНИЕ ИНТЕГРАЛА I='D GOTO 15 130 LET F=SQR<2*X+1>:RETURNS END lt»7
Программа 4.43. 1© PRINT'ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ С ЗАДАННОЙ ТОЧНОСТЬЮ' 15 PRINT' МЕТОДОМ ГАУССА' 20 INPUT'BBEAHTE НИИНИй ПРЕДЕЛ ИНТЕГРИРОВАНИЯ A'Q 22 IHPUT'BBEAHTE ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В'В 25 INPUT'BBEAHTE ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е='Н 30 LETN==N*60 s LETM= 18 LETK=0 40 LETM»2*MsLETA=Q 45 LETT=SQR<.6)8 LETI=08 LETH=<B-A>/М 50 FOR J=1 TO M8LETW=A+HsLETC«<W+A)/2 55 LETD»(W-A)/28LETE«D*5/9 60 LETL»D*8/9SLETD=D*T 70 LETX=C-DsGOSUB 150sLETI=I+E*F 80 LETX=Cs60SUB 150:LETI=I+L*F 98 LETXSC+Ds GOSUB 150sLETI=I+E*F 100 LETA=WsHEXT J 110 120 130 LETL=K:LETK=I IF ABS<I-L)>N THEN 40 PRINT'ЗНАЧЕНИЕ ИНТЕГРАЛА 1='Is STOP 150 LETF=SQR<2*X+1>sRETURN;END Для погрешносчи i =1-10“6 вычисление интеграла (4.26) дает /=1,398717485 при /с«8 с. Подпрограмма вычисления f(x) запи- сывается со строки 150. §4.9. Вычисление определенных ин- тегралов специального вида Несобственными интегралами называются интегралы, у которых f (х) оо на отрезке [а, 6] либо I (а) -> оо или f (6) -> оо. Вычисление несобственных интегралов с f (х) -> оо на концах отрезка [а, 6] в прин- ципе осуществляется методами Гаусса и Че- бышева, так как у них в ходе вычислений узлы интерполяции f (х) не совпадают с пре- делами интегрирования. Наличие особенности может повлиять на точность интегрирования. Методы Ньютона — Котеса (в частности, метод Симпсона) удобно применять, если f (хо) -> оо при хо, принадлежащем интер- валу (а, Ь). Равномерное расположение уз- лов интерполяции у этих методов облегчает контроль за их положением и исключение в ходе вычислений значений х, = хо. Если f (х) имеет на концах предела интегрируе- мости устранимую особенность, например не- определенность 0/0 или оо/оо, можно использовать эти методы с отдельным вводом значений f (а) и f (b). Программа 4.44. Пример. При £=1-10~4 получим для интеграла (4.26) значение /=1,3987 при tc «4 с. Сходящиеся несобственные интегралы с бесконечными пределами интегрирования вы- числяются различными приемами [4]. Так, интеграл вида / = f f (х) dx—\ f (х) dx-\- J f (x) dx (4.30) a a b . может вычисляться как обыкновенный при выборе вспомогательного промежуточного предела интегрирования из условия /=$ f (х) dx<e, ь где е — заданная погрешность интегрирова- ния. Другой прием заключается в автомати- ческом изменении 6, например как 6о, 26о, 46о, 86о и т. д., где до — начальное значе- ние b с контролем на каждой /-й стадии условия 1А-//_1|<е=Е. При выполнении этого условия счет прекра- щается. Последний способ реализован в программе 4.45, где вычисляются несобствен- ные интегралы вида (4.30) методом Гаусса. Программа 4.45. Пример. Для функции f (х) =хе-х, а = = 0 при и 6о=Ю получим /=1,000457964 при /с«20 с. Отметим, что при малых Е время счета может резко возрастать, а из-за погрешностей вычисле- ния А и А-i программа может зациклиться. В строке 150 записана подпрограмма, вы- числяющая f (х). Двойные (кратные) интегралы вида !=\\f у) dxdy а с могут вычисляться по кубатурной формуле Симпсона. При этом область интегрирова- ния в плоскости х, у разбивается на четыре квадрата (рис. 4.11, а), а значение / вычис- ляется по формуле* [7] hk 1(*о, Уо) 47 (*2, Уо) 47 (*о, 4/г) 4“ + f (*2, «/г)) 4- 4 [f (xi, уо) -|- f (хо, У\) + + f (*2,4/i)+f (х,, г/2)] 4-16/ (х,, t/i)), Программа 4.46. Пример. Для интеграла (подпрограмма записана со строки 140) 4 4 2.6 / = ( \ -* dy = In 3• In 1,1 = 0,02500598522, 3 J xy 4 2 (4.31) введя a = 4, 6 = 4,4, c — 2 и d = 2,6, получим / = 0,02500698577. Для повышения точности область интегрирования можно разбить на 108
Программа 4.44. 10 PRINT'ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ СИМПСОНА С ЗАДАННОЙ' 15 PRINT'ТОЧНОСТЬЮ Е И F<X) С ОСОБЕННОСТЯМИ ПРИ Х=А И Х=В' 20 PRINT" •INPUT'ВВЕДИТЕ НИИНИй ПРЕДЕЛ ИНТЕГРИРОВАНИЯ А«'А 25 INPUT'ВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В»'В 30 INPUT'ВВЕДИТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА E='EsLETM=l 40 PRINT'ВВЕДИТЕ 0 ЕСЛИ НЕТ ОСОБЕННОСТИ ПРИ Х=А‘ 45 INPUT'И 1 ЕСЛИ ЕСТЬ ОСОБЕННОСТЬ ПРИ Х=А 'S 50 IF S=0 THEN 65 60 INPUT'ВВЕДИТЕ ЗНАЧЕНИЕ F(A)='CsGOTO 70 65 LETX=AsGOSUB 210sLETC=F 70 PRINT'ВВЕДИТЕ 0 ЕСЛИ НЕТ ОСОБЕННОСТИ ПРИ Х=В' 75 INPUT'И 1 ЕСЛИ ЕСТЬ ОСОБЕННОСТЬ ПРИ Х=В 'S 80 IF S=0 THEN 100 90 INPUT'ВВЕДИТЕ ЗНАЧЕНИЕ F<B>='DsGOTO 110 100 LETX=BsGOSUB 210sLETD=FsLETJ=0 110 LETM=M*2sLETH=<B-A)/M/2 120 LETN=08LETI=0:LETX=A 130 LETX=X+HsGOSUB 210 140 LETI=I+4*F:LETN=N+2 150 IF N=2*M THEN 180 160 LETX=X+HsGOSUB 210 170 LETI=I+2*FsGOTO 130 180 LETI=<I+C+D)*H/3sLETK=JsLETJ=I 190 IF ABS<I-K)>E*15 THEN 118 280 PRINT" sPRINT'ЗНАЧЕНИЕ ИНТЕГРАЛА I»'DSTOP 205 REM'ПОДПРОГРАММА ВЫЧИСЛЕНИЯ FCX)' 210 LETF=SIN(X)/XsRETURNS END Программа 4.45. 05 PRINT'ВЫЧИСЛ. НЕСОБСТВ. ИНТЕГРАЛА МЕТОДОМ ГАУССА' 10 INPUT'ВВЕДИТЕ НИКНИй ПРЕДЕЛ ИНТЕГРИРОВАНИЯ А='О 15 INPUT'ВВЕДИТЕ НАЧАЛЬНЫЙ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГР. B0='Z 20 INPUT'ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА E='N 25 LETM=11LETK=0sLETB=Z/2sLETT=SQR<.6)8 LETU=8 30 LETB=B*2 35 LETM=M*2s LETA=Q 8 LETI=0s LETH= < В-A >/М 48 FOR J=1 TO MsLETC=A+H/2sLETD=H/2 50 LETE=D*5/98 LETL=D*8/9s LETD=D*T 60 LETX=C-DsGOSUB 150sLETI=I+E*F 70 LETX=CsGOSUB 150sLETI=I+L*F 80 LETX=C+DsGOSUB 15©sLETI=I+E*F 90 LETA=A+HsNEXT J 100 LETL=KsLETK=I 110 IF ABS<I-L)>N*30 THEN 35 120 LETU=UsLETU=I 130 IF ABS<I-U)>N/2 THEN 30 140 PRINT'ЗНАЧЕНИЕ ИНТЕГРАЛА 1='Is STOP 150 LETF=X*EXP<-X>sRETURNa END Программа 4.46: 10 PRINT'ВЫЧИСЛЕНИЕ ДВОЙНОГО ИНТЕГРАЛА ПО ПРОСТОЙ' 15 PRINT' ФОРМУЛЕ СИМПСОНА'sLETS=0 20 INPUT'ВВЕДИТЕ ПРЕДЕЛЫ АлВлС/D 'А/В/СлВ 30 LETH=(B-A)/2s LETK=( П-О/2 40 LETX=As LETV=Cs GOSUB 140s LETS=S+F 50 LETX=Bs GOSUB 1408 LETS=S+F 60 LETX=A8 LETY=Ds GOSUB 140s LETS=S+F 70 LETX=B: 60SUB 140s LETS=S+F 80 LETX=A+Hs LETV=C8 GOSUB 140s LETS=S+4*F 98 LETY=Ds GOSUB 1408 LETS=S+4*F 100 LETX=A8 LETY=C+Ks GOSUB 140s LETS=S+4*F 110 LETX=B8 GOSUB 140" LETS=S+4*F 120 LETX=A+Hs GOSUB 140s LETS=S+16*F 130 PRINT'ЗНАЧЕНИЕ ИНТЕГРАЛА I='S*H*K/9s60T0 20 140 LETF=1/X/Ys RETURNS END 109
Рис. 4.11. Расположение узлов при вычислении двойных определенных интегралов методом Симпсона (а) и Гаусса (б) несколько квадратов, вычислив /, для каждого Z-го квадрата. Программа 4.46 предусматри- вает последовательное суммирование значе- ний /,. Например, разбив область интегри- рования (4.31) на 4 квадрата (а|=4; 6i=4,2; С! =2,3; d\ =2,6; а2 = 4,2; 6г — 4,4; с2 = 2,3; d2 = 2,6; а3 = 4,2; 63 = 4,4; с3 = 2; б/з=2,3; 414 = 4; 6д = 4,2; С4 = 2 и ^4 = 2,3 — см. рис. 4.11,6), получим / = 0,02500605059. Время счета для каждого квадрата менее 2 с. Кубатурная формула Гаусса с п = 2 имеет вид ь d f (•*• y) = PR If (*l. yi) +f (*2. У2> + a c + f (x3,^)+f (X4.I/4)]. (4.32) где />=(/>—a)/2, R=(d—c)/2, а узлы интерполяции расположены на расстоянии ±КР и ±KR от осей, где К—Д/3. Программа 4.47. Пример. Для интеграла (4.31) с об- ластью интегрирования в виде одного квад- рата получим / = 0,02500532089, а с областью интегрирования в виде четырех прямоуголь- ников — / = 0,02500594169. Время вычисления для одного квадрата области интегрирова- ния — около 1,5 с. Сложная кубатурная формула Гаусса реализуется разбивкой отрезков [а, 6] на М и [с, d] на N частей с применением для каждого элементарного прямоугольника фор- мулы (4.32). Программа 4.48. Пример. Для интеграла (4.31), задав М —М = 4 (всего 16 прямоугольников), по- лучим / = 0,02500598247 при /с = 24 с. Аналогичным образом могут быть состав- лены программы для вычисления интегралов с большей кратностью. Формулы численного интегрирования для них приведены в [18, 36]. Интегралы большой кратности вычисляются методом Монте-Карло (см. [4]). Программа 4.47. 10 PRINT*ВЫЧИСЛЕНИЕ ДВОЙНОГО ИНТЕГРАЛА ПО ПРОСТОЙ’ 15 PRINT* ФОРМУЛЕ ГАУССА**LETS=0 20 INPUT*ВВЕДИТЕ ПРЕДЕЛЫ АлВ/C/D *A/B/C^D 30 LET0=(A+B>/2’. LETP=(B-A)/2s LETQ=<C+D>/2 40 LETR=<D~C)/2sLETK=SQP<1/3) 50 LETX=O+P«KsLETY=Q+R»KsGOSUB 100 60 LETX=O-P*KsGOSUB 10© 70 LETY=Q-R*KsGOSUB 100 80 LETX=O+P*KsGOSUB 10© 9© PRINT*ЗНАЧЕНИЕ ИНТЕГРАЛА I=*S*R*PsGOTO 20 10© LETF=1/X/Ys LETS=S+Fs RETURNS END Программа 4.48. 1© PRINT*ВЫЧИСЛЕНИЕ ДВОЙНОГО ИНТЕГРАЛА ПО СЛОЖНОЙ* 15 PRINT* ФОРМУЛЕ ГАУССА*sLETS=0 20 INPUT* ВВЕДИТЕ ПРЕДЕЛЫ A/B/C,D *bbB/C/D 25 IHPUT'BBEAHTE ЧИСЛА MzN *M,N 30 LETH= < В-Ы)/М s LETL= < D-C >/Нs LETK=SQR<1/3) 40 FOR 1=1 TO № LETD=C+L 50 LETQ=<C+D)/2sLETR=L/2sLETA=W 60 FOR J=1 TO MsLETB=A+HsLET0=<A+B)/2sLETP=H/2 70 LETX=O+P«KsLETY=Q+R»KsGOSUB 140 8© LETX=O-P*KsGOSUB 140 90 LETY=Q-R*KsGOSUB 14© 10© LETX=O+P*KsGOSUB 140 11© LETA=BsNEXT J 120 LETC=DSNEXT I 130 PRINT*ЗНАЧЕНИЕ ИНТЕГРАЛА I=*S*H*L/4sST0P 140 LETF=i/XzYs LETS=S+FsRETURNS END 110
§ 4.10. Решение систем дифференциальных уравнений Задача Коши заключается в решении си- стем обыкновенных дифференциальных урав- нений первого порядка, представляемых в виде (х, i/i.yj..ук\ ^=Fi(x’ У'............УЬ---' </л/).(4.33) -^-=Fn (х, у.....у,......yN), где /=14-М— номер каждой зависимой переменной yh х — независимая переменная. Если задача Коши решается для анализа поведения системы или объекта во времени, то х является временем (х = /). Решение системы (4.33) при заданных начальных условиях X —Хо, У\ (Хо) = 1/10, уч (Хо) = #20, • . . ..., у^х^ — ум сводится к нахождению зависимостей (интегральных кривых) у\ (х), У2 (х), ..., #/(х), ..., yN (х), проходящих через точки, заданные начальными усло- виями (хо, #ю), (Хо, #20), ...» (Хо, #/о), ... ..., (хо, f/л/о)- Задача Коши сводится к инте- грированию дифференциальных уравнений. Порядок метода численного интегрирования при этом определяет и порядок метода решения (4.33). Обобщенная форма записи каждого из уравнений системы (4.33) может быть пред- ставлена в общем виде где У/ в правой части уравнения — векторы переменных у\, у^ Уь •••> Уль а — правая часть каждого из уравнений (4.33). В частности, одно дифференциальное урав- нение (1/=У/ = У| и = F —Л) записывается в виде <«.»>. Дифференциальные уравнения высшего порядка = F (х, у, у’, у".(4.35) где (п) — порядок уравнения, могут быть сведены к системам вида (4.33) или (4.34) с помощью следующих преобразований: —^———Уп-\, (4.36) ах dyn — । г> / \ = Г (х, #, #ь ...» уп-0- Следовательно, решение (4.35) сводится к ре- шению системы дифференциальных уравне- ний первого порядка (4.36). Метод Эйлера — Коши — простейший ме- тод первого порядка для численного инте- грирования дифференциальных уравнений. Он реализуется следующей рекуррентной формулой: Г((, + 1) =Yn+hFi (хь У/(), где h — шаг интегрирования (приращение переменной х). Этот метод обладает боль- шой погрешностью и имеет систематическое накопление ошибок. Погрешность метода R~(h2), т. е. пропорциональна /г2. Метод Эйлера — Коши с итерациями за- ключается в вычислении на каждом шаге начального значения У$+1)=У,, + ЙА,- (х„ У,.). Затем с помощью итерационной формулы /^+1)=^+4 <*'+'• ^‘+нч решение уточняется. Итерации проводят до тех пор, пока не совпадает заданное число цифр результата на двух последних шагах итераций. Погрешность метода /?~(/г3). Обычно число итераций не должно превы- шать 3—4, иначе нужно уменьшить шаг Л. Модифицированный метод Эйлера второго порядка реализуется следующими рекур- рентными формулами: + (Хё + Л/2, УГоч-1/2)), где (Xi,Yji)/2. Метод дает погрешность (/г3) и имеет меньшее время вычислений, поскольку вместо нескольких итераций производится вычисление только одного значения У^о + 1/2). Метод трапеций — одна из модификаций метода Эйлера второго порядка. Он реали- зуется применением на каждом шаге формулы где "K^hF, (х„ У,,), Кц — hFi (х,+Л. У„ + Ч-K/i), и дает погрешность R~ (/i3). Этот ме- тод относится к общим методам Рунге — Кутта (см. далее). Программа 4.49. Пример. Вычисление функций F; (х, У,) оформляется подпрограммой, записываемой со строки 200 и завершаемой операторами RETURN и END. При этом форма записи каждой функции следующая: F (J) = (функция X, Y (1), Y (2),..., Y (N) >, где J — номер, соответствующий номеру j в обобщенной форме записи Fj(x,yj). Ha-t пример, для решения системы дифферен- циальных уравнений —T~~—F\ (х,у,,у2)=уг, ах (*. </ь У1) —У*) -J-У' 111
Программа 4.49. 10 PRINT'РЕШЕНИЕ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ ' 2© PRINT' УРАВНЕНИЙ МЕТОДОМ ТРАПЕЦИЙ' 30 INPUT'ЗАДАЙТЕ ЧИСЛО УРАВНЕНИЙ N='N 40 DIM Y(N),W<N),K<N)/F(N) 100 INPUT 'ВВЕДИТЕ НАЧАЛЬНОЕ X0='X 110 FOR J=1 ТО № PRINT’2.0!'ВВЕДИТЕ НАЧАЛЬНОЕ YOC'J')' 120 INPUT Ы<J):LETY<J)=W<J):NEXT J 130 INPUT'ВВЕДИТЕ ШАГ H='H 140 GOSUB 2©0:FOR J=1 TO N 15© LETK<J)«H*F<J):LETY<J)=W<J)+K<J):NEXT J 160 LETX=X+№PRIHT’F1.91'ДЛЯ X='X:GOSUB 2©0 170 FOR J=1 TO №LETV<J)=W<.J)+<K<J)+H*F<J))/2 180 PRINT»2.0!'Y('J')='!F1.9’Y<J) 190 LETWCJNEXT J:GOTO 148, 20© LETF<1)=Y<2):LETF<2)=<Y<1)/X-Y<2>)/X-Y<1> 210 RETURN:END подпрограмму следует записать в виде F(1)=Y(2), F (2) = (Y (1)/Х—-Y (2))/Х —Y (1) (см. Также выражения в строке 200 про- граммы 4.49). Для W = 2; ft = 0,1; хо = О,2; {/.о = 0,099500833 и {/го = 0,49235 получим: X У\ У2 0,3 0,148367183 0,4830282264 0,4 0,1961203205 0,4701529365 0,5 0,2424068609 0,4537779586 1,0 0,440372468 0,3249711437 и т. д. Время счета на каждом шаге около 1,5 с. Не рекомендуется применять этот метод, если возможны изменения (х) с сильно различающейся крутизной (например, одни K3/=ftF, (x,+^ К,?) . Kai = hFj (xt 4- Л, Yц 4- К3/); Г/о+1)=*я+ (К>/+2К2(+2Кз/ + К<;). При переходе от одной формулы к дру- гой задаются или вычисляются соответствую- щие значения х и У, и находятся по под- программе значения функций Ft (х, Yj). Решение одного дифференциального урав- нения методом Рунге — Кутта производится по приведенным формулам, если в них опустить индекс /, а из алгоритма исклю- чить циклы.. Последнее резко упрощает программу и позволяет получить минималь- но возможное время счета. Программа 4.50. 10 PRINT'РЕШЕНИЕ ОДНОГО ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ ' 28 PRINT' МЕТОДОМ РУНГЕ-КУТТА' 30 INPUT'ЗАДАЙТЕ ШАГ Н='№INPUT'ЗАДАЙТЕ НАЧАЛЬНОЕ Х0='Х 4© INPUT'ВВЕДИТЕ НАЧАЛЬНОЕ Y8='Z:LETY=Z 50 GOSUB 100sLETA=F*H:LETX=X+H/2:LETV=Z+A/2 60 GOSUB 100:LETB=F*H:LETV«Z+B/2 78 GOSUB 100:LETC=F*H:LETX=X+Hz2:LETV=Z+C 80 GOSUB 100:LETY=Z+<A+2*<B+C>+H*F)/6:LETZ«V 90 PRINT'ДЛЯ X='X:PRINT'Y='Y:GOTO 50 100 LETF=-Y:RETURN:END участки кривых у, (x) плавные, а другие рез- кие), поскольку при этом возможно возник- новение численной неустойчивости решения. Ее устранение может потребовать выбора очень малого шага ft, что значительно уве- личивает общее время вычислений. Метод Рунге — Kytra четвертого порядка является наиболее распространенным ,мето- дом решения систем (4.34) при шаге ft = = const. Его достоинством является высокая точность — погрешность R~ (ft5) — и мень- шая склонность к возникновению неустойчи- вости решения. Алгоритм реализации метода Рунге — Кутта заключается в циклических вычислениях Y/o+i) на каждом 14-1 шаге по следующим формулам: K^hF^x,, Y^-.K^hF,^- , У„+1 К,/); , 1,2 Пример. Для дифференциального урав- нения у'—— у/т— — у при т = 1, ft = 0,l, хо = О и {/о=1 будем получать j/(0,l) = =0,9048375, у (0,2) =0,8187309014, у (0,3) = = 0,740818422, у (0,4) =0,6703202889’, у (0,5) =0,6065309344. Время выдачи одного значения у (х) около 1 с. Подпрограмма вычисления F — dy/dx записывается со строки 100. Реализация решения системы из /V диф- ференциальных уравнений иллюстрируется программой 4.51. Максимальное число N зависит от сложности уравнений и объема ОЗУ ЭВМ. Для ПЭВМ типовые максималь- ные значения W лежат от 10—20 (для ПЭВМ класса Pocket Computers) до 50—100 (для профессиональных ЭВМ).
Программа 4.51. 10 PRINT'РЕШЕНИЕ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ' 2© PRINT'УРАВНЕНИЙ МЕТОДОМ РУНГЕ-КУТТА' 30 INPUT'BBEAHTE ЧИСЛО УРАВНЕНИЙ №'N 40 DIM Y<N)/A<N>/K<N),F<N>/W<N> 5© INPUT'ЗАДАЙТЕ ШАГ Н«'Н 60 INPUT'ЗАДАЙТЕ НАЧАЛЬНОЕ ХО^'Х 70 FOR J=1 ТО № PRINT!2.0!'ЗАДАЙТЕ НАЧАЛЬНОЕ Y8<'J')' 80 INPUT Ы<J)sLETY<J)=W<J):NEXT J 90 GOSUB 200:FOR J=1 TO №LETU»H*F<J> 100 LETK<.J)=USLETY(J)=W<J)+U/25NEXT J 110 LETX=X+H/2sGOSUB 200:FOR J=1 TO N 120 LETU=H*F< J > s LETK < J)=K < J >+2«U 13© LETY<J)*WGJ)+U/2sNEXT J 14© GOSUB 200s FOR J=1 TO №LETU=H**F<J> 150 LETK<J)=K<J)+2*U5LET¥<J)=W<J>+UsNEXT J 160 LETX=X+H/2sPRIHT!Fl.9!'ДЛЯ X«'XsGOSUB 200 170 FOR J==l 10 HsLETYCJ)=WCJ)+(K<J>+H*F<J))/6 180 PRINT?2.0!'Y<'J')='!F1.9!V<J> 190 LETW<J)=Y<J)sNEXT JsGOTO 90 20© LETF<1)=Y<2)sLETF<2)=<Y<1>/X-Y<2> >/X-Y<1) 210 RETURN: END. Пример. Для системы уравнений (см. подпрограмму, записанную со строки 200) при W = 2, Л = 0,1, хо = О,2, с« о = 0,099500833 и 1/20 = 0,49235 будем получать следующие значения х, у\ и уч'. вида y"=4v=f (*> У’у'')’ dx имеющий погрешность /?~(Л5), реализуется с помощью следующих формул [36]: K\—hF (Xi\ yr, у'}\ Kz^hF (xi+~ ; yi+4-У' +~ Кг, у' + ф) ; ' Z Z О Z / - х у\ уъ 0,3 0,1483051278 0,4831085139 0,4 0,1960019791 > 0,4702289086 0,5 • 0,2422342383 0,453843868 1 0,4399784882 0,3250861127 iz i c i h । h j. , , Кч\ K3 = hF +-g- Kii У‘ 4—2 / ’ K4 = hF (м-Л; y, + htf 4-A Кз; y'i + Кз) ; 1,5 0,5578420795 0,1398423554 </;+! =У< + Л +"g" (^1 + Кз + Кз) 2,0 0,5766255981 - 0,06446334779 Ввиду особого значения и широкого при- менения дифференциальных уравнений вто- рого порядка полезно иметь специальную программу для их решения. Метод Рунге — Кутта для дифферен- циального уравнения второго порядка yf+1=yf+4- (*|+2К2 + 2*з + К4). Перед началом вычислений надо задать шаг h и начальные значения хо, у (хо)=£/о и у' (хо) = Со- программа 4.52. 18 PRINT'РЕШЕНИЕ ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ ВТОРОГО' 20 PRINT' ПОРЯДКА МЕТОДОМ РУНГЕ-КУТТА' 30 IHPUT'BBEAHTE ШАГ Н='Hi INPUT'BBEAHTE НАЧАЛЬНОЕ Х8=*'Х 48 INPUT'BBEAHTE НАЧАЛЬНОЕ V8='W 50 INPUT'BBEAHTE НАЧАЛЬНОЕ DY/DX0»'UiLETY«W:LETZ=U 60 GOSUB 150sLETA=*H*F-.LETX=X+H/2 70 LETY=W+U*H/2+A*H/88LETZ=U+A/2 88 GOSUB 1508LETB«H*FsLETZ=U+B/2 90 GOSUB 1508LETC=H*F8LETX=X+H/2 108 LETY=W+H*U+H«C/28LETZ=U+CsGOSUB 158 118 LETY=U+H»<U+<A+B+C)/6)iLETW«Y 120 LETZ=U+<A+(B+C>»2+H»F>/68 LETU=Z 130 PRINT'ADfl X='X--PRINT'Y='Y 140 PRINT'DY/DX='ZsGOTO 68 158 LETF»-Y+ <1-Y*Y >«2*28 8 RETURN s END
Пример. Для дифференциального урав- нения (см. подпрограмму, записанную в стро- ке 150) F~y"^-y+(\--y2) (20/) при h = 0,003125, Хо = О, будем получать: * У 0,003125 2,007690786 0,00625 2,007665302 6,009375 . 2,007626354 0,0125 2,00757266 0,015625 2,007516959 уо = 2,0077 и / = 0 У' — 0,00571555801 — 0,01044479113 -0,01435793978 -0,01759589125 -0,02027523125 Автоматическое изменение шага в ходе решения систем дифференциальных уравне- ний необходимо, если решение требуется получить с заданной точностью. При высо- кой точности (погрешность e^£=l-10“3) и решении в виде кривых с сильно разли- чающейся крутизной автоматическое измене- ние шага обеспечивает уменьшение общего числа шагов в несколько раз, резко умень- шает вероятность возникновения числовой неустойчивости, дает более равномерное рас- положение точек графика кривых (решений) при их выводе на печать. Метод Рунге — Кутта с автоматическим изменением шага заключается в том, что после вычисления К/(< + 1) с шагом h все вы- числения проводятся повторно с шагом Л/2. Полученный результат Kfb+i) сравнивается с У/(/+1). Если | У/(4Ч_|)— У/*оч-|)| <с, вычис- ления продолжают с шагом А, в противном случае шаг уменьшают. Если это неравен- ство слишком сильное, шаг, напротив, увели- чивают. При той же погрешности R~(h5) лучшие результаты дает описанный ниже метод. Метод Рунге — Кутта — Мерсона с авто- матическим изменением шага обеспечивает приближенную оценку погрешности на каж- дом шаге интегрирования. Погрешность интегрированйя имеет порядок /г5 [31]. Этот метод реализуется следующим алго- ритмом. 1. Задаем число уравнений /V, погреш- ность е = £, начальный шаг интегрирования h^H и начальное значение хо, t/io...7/vo- 2. С помощью 5 циклов с управляющей переменной 7 = 1, 2, ..., W вычисляем коэф- фициенты: Koj^hFf (xr, Y,,); К\j = hF—д' Л; "Tjr Ко, K2/==/iF//i; Kj/+-g-Ko/+-g-Ki/^ : K^hFi(x,+4-Л; r,,+4-Ko,+4 Z О О / = + Yi, 4-y Ko,—-|-K2/ + 2K.0 • 3. Находим (в последнем цикле) зна- чение у/(/+«= у/7 4- (Kni + 4Кз/ + Ktj) /6 и погрешность Rid+ п=» (-2Ко/+9К2/ -8Кз/ + Kai) /30. 4. Проверяем выполнение условий I/?;•(,+1)| < £, 1Ян, + 1й>£/30. Если первое условие не выполняется, де- лим шаг h на 2 и повторяем вычисления с п. 2, восстановив .начальные значения Y}i. Если это условие выполняется и выпол- няется второе условие, значения Xi+i=x,-4-h и Yj(i+\) выводятся на печать. Если второе условие не выполняется, шаг h увеличи- вается вдвое и вычисления опять повто- ряются с п. 2. Таким образом, У/(л+1> выводится на пе- чать только при одновременном выполнении условий этого пункта. Программа 4.53. Пример. Для системы дифференциаль- ных уравнений £i = у\-|- */2 — х’-|-х^-2, ах f2=^-=-2i/,+4y2+2x2-4x-7 при К = 2, 6 = 0,1, £=1.10-7, хо = 0, ун1 = 0 и //20 = 2 получим: х у\ уч 0,025 6,25-10"4 2,025 0,05 2,5-10“3 2,05 0,075 5,625-10-3 2,075 0,1 1-10“2 2,1 Следовательно, в данном случае имеет место автоматическое уменьшение шага. Для Л = = 0,02 и £=1-10“3 получим: X У< f/2 0,02 6,731133879-IO"4 2,020963777 0,04 1,898781104-10'3 2,041032153 0,08 6,756088366-10 '3 2,081182964 0,16 2,609871963 • 10 _ 2 2,161549932 0,32 1,033398344-10-1 2,322641762 0,64 4,127175414-Ю-1 2,74775972 0,96 9,309436052-10' 1 2,981657806 1,28 1,665020406 3,338953272 В данном случае шаг автоматически уве- личивается от значения /i = 0,02 до /i = 0,32. Время вычислений на одном шаге (кроме начального при уменьшении h) составляет около 5 с. Подпрограмма вычисления производных записывается со строки 400. Как отмечалось, погрешность Ящ+\) на каждом шаге метода Рунге — Кутта — Мер- сона оценивается приближенно. При решении нелинейных дифференциальных уравнений истинная погрешность может отличаться в несколько раз от заданной £. 114
Программа 4.53. 05 PRIНТ'РЕШЕНИЕ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ' 10 PRINT'МЕТОДОМ РУНГЕ-КУТТА-МЕРСОНА С АВТОМАТИЧЕСКИМ' 15 PRINT' ВЫБОРОМ ШАГА'SPRINT!2.0! 40 INPUT'ВВЕДИТЕ ЧИСЛО УРАВНЕНИЙ Н='Н 45 DIM УСЮ'ЫСИЪA(N)>C<H>/D<N),E<N>,F(N) 50 INPUT-ЗАДАЙТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЙ Е='Е1 60 INPUT'ЗАДАЙТЕ НАЧАЛЬНЫЙ ШАГ Н='Н 70 INPUT'ЗАДАЙТЕ НАЧАЛЬНОЕ Х0='Х 80 FOR J=1 ТО Ns PRINT'ВВЕДИТЕ НАЧАЛЬНОЕ Y0<'J’)=' 90 INPUT W(J>:LETV<J>=W<J)sNEXT J 110 LETE3=0sGOSUB 400sLETD=0sFOR J=1 TO N 120 LETACJ)=F<J>*HsLETY<J)=W<J>+A<J>/3sNEXT J 130 LETX=X+H/3sGOSUB 400s FOR J=1 TO H 140 LETY<J)=U<J)+CACJ>+FCJ)*H>/6sNEXT J 150 GOSUB 400SFOR J=1 TO NsLETCCJ)=F<J>*H 160 LETY<J>=W<J)+A<J>''8+.375*C<J>sHEXT J 170 LETX=X+H/6sGOSUB 400s FOR J=1 TO N 180 LETD<J)=F<J>*HsLETY<J)=W<J)+A<J>/2-1.5*C<J)+2»D<J> 190 NEXT JsLETX=X+H/2s60SUB 400 200 FOR J=1 TO NsLETECJ>=F<J>*H 210 LETY<J>=W<J) + <A<J)+4*D<J)+E<.J))/6 220 LETE2=ABS<-2*A<J)+9*C<J)-3*D< J)+E(J >)/30 230 IF E2<=E1 THEN 250 240 LETE3=lsG0T0 260 250 IF E2<El/20 THEN LETD=D+1 260 NEXT JsIF E3=0 THEN 290 270 LETX=X-HsFOR J=1 TO NsLETY<.J)=hl<J):NEXT J 280 LETH=H/2sGOTO 110 290 IF D=N THEN LETH=H+H 300 PRINT!Fl.9!'ДЛЯ X='XsFOR J=1 TO N 310 PRINT12.0!’Y<’J')='!F1.9!Y<J> 320 LEWJ>=Y<J>sNEXT JsGOTO 110 400 LETF<l)=Y<l)+Y<2>-X*X+X-2 410 LETF<2>=-2*Y<1>+4*Y<2)+2*X*X-4*X-7 420 RETURNS END Метод Рунге — Кутта — Фельберга с ав- томатическим изменением шага дает более точную оценку погрешности на каждом шаге и реализуется последовательным цикличе- ским вычислением по следующим формулам [31]: K0/ = /iF,(x,; У„); K\i = hFl^x,-\-—h\ Y:, +-g- Ku} ; K2i = hFi^x,-[--^ ft; Yj, + *jy K\t^; „ iv / , 3 , v , 69 143 „ - hF, (x, + — h; Y„ Kn, -~K„ + . 135 К Y + “6ГХ2'/- K^hFiix. + h; Yl,-~.Kttl-)~Kti- -^Кг,+^кЛ. /<5/ _ h Fjxt 4- -g- h; Уц -J- - _ Koj —Ki / + x v io +-fg- +-^ Ky, 4--^- K<t Yj(«+1) = + g + 20 ^2/ + 45 +42 . (4.37) Погрешность ??K'+l)=7So Ko'—Too /f2'+4I’K3l+ + 20 Kti 25 Кз' в этом методе — разность приращений K/o+i), вычисленных по двум формулам: порядка п = 4 (4.37) и порядка «+1. Последняя формула не приводится, но использована для вычисления + Если d> Е, шаг h уменьшается вдвое, если Rj(l + \)<E/20, он увеличивается вдвое. Этот метод имеет четвер- тый порядок. 115
Программа 4.54. 05 PRINT'РЕШЕНИЕ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ' 18 PRINT'МЕТОДОМ РУНГЕ-КУТТА-ФЕЛЬБЕРГА С АВТОМАТИЧЕСКИМ' 15 PRINT' ВЫБОРОМ ШАГА'sPRINT 12.0! 40 INPUT'BBEAHTE ЧИСЛО УРАВНЕНИЙ N='N 45 DIM Y(N)/L<N),W<N),A(N),B<N)>C<N)/D<N)/E<N>>F<N) 50 INPUT'ЗАДАЙТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЙ Е='Е1 60 INPUT'ЗАДАЙТЕ НАЧАЛЬНЫЙ ШАГ Н='Н 70 INPUT'ЗАДАЙТЕ НАЧАЛЬНОЕ Х0='Х 80 FOR J=1 ТО N:PRINT'ВВЕДИТЕ НАЧАЛЬНОЕ S'0<'J')=' 9© INPUT W(.J)2LETV(J>=W<J>8NEXT J 1 110 LETE3=0:GOSUB 400SLETD=05FOR J=1 TO N j 120 LETA<J)«F<J)*H:LETV<J>=W(J)+2*AGJ)/9:NEXT J * 130 LETX=X+2*H/9:GOSUB 400:FOR J=1 TO N 14© LETB(.J)=H*F< J>: LETY<«J)=bK J)+A<.J)zl2+B( J)z4:NEXT J 156 LETX=X+H/9:60SUB 400:FOR J=1 TO N 160 LETC(J)=H*F<.J):LETY(d)=W< J) + <34.5*A(.J>-121.5*BGJ) + 135#C(J>)/64 170 NEXT J:LETX=X+H/2.4:60SUB 400:FOR d«l TO N 180 LETD(J)==H*F< J)sLETQ=W < J)-17*A < J)z12+6.75*B < J > 185 LETY<d)=Q-5.4*C<d>+16*D<d)/15:NEXT J 19© LETX=X+H/4:60SUB 400:FOR d=l TO N 195 LETE < d> =H*F ( d ): LETQ=W< d) +65*A < J > z432-.3125*B(d) 20© LETY<d)»Q+.8125*C(d)+4*D<d)/27+5:*E(d)/144:NEXT J 205 LETX=X-H/6:GOSUB 400:FOR d=l TO N 210 LETL(J)=H*F<J):LETY(J)=W<J)+A<J)z9+.-45*C<J) + 16*D<J)/45+E<J)/12 220 LETO A<J)/150-.©3*C(d)+16*D < d)/75+Е < J)/28 230 LETE2=ABS(Q-.24*L<d)):IF E2<=E1 THEN 250 240 LETE3=l:G0T0 260 258 IF E2<Elz20 THEN LETD=D+1 260 NEXT J:LETX=X+H/6:GOSUB 400:IF E3=8 THEN 290 270 LETX=X-H:FOR d=l TO N:LETY(J>=U<J):NEXT J 280 LETH=H/2:G0T0 118 290 IF D=N THEN LETH=H+H 300 PRINT!Fl.9!'ДЛЯ X='X:FOR d=l TO N 310 PRINT’2.0!'Y<'d')=' !F1.9!Y(J) 320 LETWCd)=V(d):NEXT J:GOTO 110 400 LETF<l)=Y(l)+Y(2)-X*X+X-2 410 LETF < 2)=-2* V(1)+4*V(2 >+2*X*X-4*X-7 428 RETURN:END Пример. Для системы дифференциаль- ных уравнений и данных к программе 4.53 будем получать: X У\ У2 0,05 2,499985857-10~3 2,049999950 0,1 9,999968178-10-3 2,099999890 0,15 2,249994626 • 10 “2 2,149999819 0,2 3,999991927 • 10“2 2,199999736 0,25 6,249988623 • 10“2 2,249999637 Время счета для одной точки около 10 с, т. е. вдвое больше, чем у программы 4.53. Однако вдвое больше и выбранный про- граммой шаг h. В целом скорость счета у программ 4.53 и 4.54 примерно одинакова и зависит от характера решаемой системы дифференциальных уравнений. О дно шаговые методы решения систем дифференциальных уравнений, к которым от- носятся все описанные выше методы, осно- ваны на вычислениях по рекуррентным фор- мулам, содержащим данные, полученные из решения на одном предшествующем шаге. Эти методы обеспечивают автоматическое начало вычислений при заданных началь- ных условиях и изменение (в том числе автоматическое) шага в ходе вычислений. Многошаговые методы решения диффе- ренциальных уравнений базируются на ис- пользовании данных решения на нескольких предшествующих шагах. Это позволяет по- выбить скорость вычислений. Однако для начала вычислений приходится выполнять одношаговыми методами несколько первых шагов. Аналогично это делается при каж- дой смене шага интегрирования. Методы прогноза и коррекции — разно- видности многошаговых методов, при кото- рых решение вначале проводится по формуле прогноза, а затем уточняется по формуле коррекции. Ввиду сложности программной реализа- ции многошаговых методов, а также неявных методов численного интегрирования (послед- ние лишены численной неустойчивости реше- ния), они очень редко используются при решении задач на персональных ЭВМ. Алго- ритмы их реализации описаны в [10, 18, 24, 36]. § 4.11. Гармонический синтез Гармонический синтез — получение коле- баний сложной формы путем суммирования их гармонических составляющих (гармоник). Гармонический синтез может иметь как само- стоятельное значение, так и использоваться как средство тригонометрической интерполя- ции функций (совместно со спектральным анализом — см. §5.1). 116
Гармонический синтез с помощью ряда Фурье (1 вариант) заключается в вычисле- нии ограниченного т гармониками ряда Фурье т у (/) {Ak sin 2Tckf\t-\-Bk cos 2nkfit), k= I где t — время, fi — частота первой гармо- ники, Ak и Bk — коэффициенты ряда Фурье. Программа 4.55. § 4.12. Вычисление собственных значений и векторов матриц Собственные значения К (/=1, 2, ..., п) квадратной матрицы А = [а,,] n-го порядка есть числа (действительные или комплекс- ные), удовлетворяющие условиям Лх = Х,х. В механике собственные значения характе- ризуют, например, _ внутренние напряжения в объекте, находящимся под воздействием 10 PRINT'ГАРМОНИЧЕСКИЙ СИНТЕЗ 1' 20 INPUT' ВВЕДИТЕ ЧИСЛО ГАРМОНИК М='М:ШМ А<М)лВ<М) 30 PRINT'ВВЕДИТЕ А 0'sINPUT А 40 FOR N=1 ТО Ms PRINT!2.0!'ВВЕДИТЕ A'N 50 INPUT A<N>SPRINT'ВВЕДИТЕ B'NsINPUT B(N>sHEXT N 60 INPUT'ВВЕДИТЕ ЧАСТОТУ F«'F 70 INPUT'ВВЕДИТЕ ВРЕМЯ T='TsLETC=2*#PI*F*T:LETS=0 80 FOR N=1 TO Ms LETD=C*N 90 LETS«S+(A<H)*COS<D>+B<N>*SIN(D>)sNEXT N 100 LETY=A/2+SsPRINT'Y(T)='!F1.9!Ys60T0 70SEND Пример. Для Ло = 4, Ai = 10, Bi =5, Л2 = 8, В2=±2у Л3 = 4, Вз=1, Л4=1, В4=0,2, Л& = 0,1, #5 = 0,05 и Ji = 1 будем получать: у (0) = 25,1;; у (0,1) = 16,32687379; у (0,2) = = 0,9348395361. Гармонический синтез с помощью ряда Фурье (2 вариант) сводится к вычислению ряда т i/(0=Jy-+^ Ak cos (2nkfit + Qk)f k= i заданного гармониками с амплитудой Ak и фазовым углом Qk (рад). Программа 4.56. внешних усилий, действующих со всех сто- рон. В электро-радиотехнических устройст- вах собственные значения матриц опреде- ляют характеристические постоянные вре- мени и режимы работы этих устройств. Все это говорит о практической важности задач на нахождение собственных значений [4, 24, 41]. Определитель D (Х) = а 11 — X a 12 ... а।н <221 0,22 — X . • • О2п On 1 ... ... Опп X называется характеристическим многочленом 10 PRINT'ГАРМОНИЧЕСКИЙ СИНТЕЗ 2' 20 INPUT'ВВЕДИТЕ ЧИСЛО ГАРМОНИК M='MsDIM А<М.Ъб<М) 30 PRINT'ВВЕДИТЕ А 0'sINPUT А 4й FOR N=1 ТО Ms PRINT!2.0!'ВВЕДИТЕ A'N 50 INPUT A<N)sPRINT!2.0!'ВВЕДИТЕ ФАЗУ В РАДИАНАХ Q'N 55 INPUT Q<N)SNEXT N 68 INPUT'ВВЕДИТЕ ЧАСТОТУ F='F 70 INPUT'ВВЕДИТЕ ВРЕМЯ T='TsLETC=2*#PI*F*TsLETS=0 80 FOR N=1 TO MsLETS=S+A(N)*COS<C*N+Q(N))sNEXT N 100 LETY=A/2+S:PRINT'Y(T>=' !F1.9!Ys&0T0 7©sENIl Пример. Для Ло = 4, Л| = 10, Qi=0, Л2 = 8, Q2 = 0,5, Лз = 5, фз = 0,8, Л4 = 2, Q4 = 2, Л5 = 0,5, Q5 = 3 и fi = 1 будем полу- чать: 1/(0) = 21,17690412; £/ (0,1) =4,223677837; у (0,2) = -2,576641635. Аналогичным образом осуществляется гар- монический синтез при других тригонометри- ческих рядах. Например, при ряде Котель- никова с ограниченным числом членов [18] V /I. АА Sin * (t/M — k) У ~ Д У (k л (t/bt-k) ’ Л = 0 где А/ — шаг, с которым задаются отсчеты y(k\t). В некоторых случаях гармониче- ский синтез упрощается. Так, если предпо- лагаемая функция у (/) симметрична отно- сительно оси /, то амплитуды всех четных гармоник равны нулю. (полиномом) матрицы А. Уравнение Лх = Хх эквивалентно уравнению (Л — ХЕ) х = 0. Урав- нение det (Л—ХЕ) =0 называется характе- ристическим многочленом матрицы Л: det (Л-ХЕ)=Р (Х) = = —— а2Х —язХ2 — ... — аА”-1+ Хл = 0. Его корни определяют все собственные зна- чения X,. Каждому X, соответствует принадлежа- щий ему собственный вектор Yi с компонен- тами уп, у,2, ..., yin. Они удовлетворяют решению системы уравнений ЛУ/ = Х,У,-. Коэффициенты at характеристического по- линома Р (X) находятся методом Данилев- ского. Для этого рассматривается специаль- ным образом преобразованная последова- тельность матриц Л(1), Л(2), ..., А(Ы\ при- 117
Корни полиномов Р (Л) могут быть вы- числены по программам, описанным в § 4.5. Максимальное собственное значение ма- трицы (действительное) и принадлежащий ему собственный вектор могут вычисляться степенным методом по следующему алго- ритму. 1. По формуле где “fl|| ai 2 ... Oln <221 O22 . • • O2n _ On I <2n2 • • • <2nn- вычисляется вектор У*'* (перед началом вы- числений задается произвольный исходный вектор У*0)). 2. Находятся приближения к наиболь- шему собственному значению п 1-1 3. Вектор У^ нормируется, т. е. вместо него получается вектор рю=------!— УЧ max У}с) 4. Проверяется выполнение условия —Цг-11 <8, где е — заданная погрешность вычисления максимального по модулю собственного зна- чения. Если это условие выполняется, счи- таем р-с максимальным по модулю собствен- ным значением, а вектор г® — принадле- жащим ему собственным вектором. Если дан- ное условие не выполняется, идем к п. 1, приняв за У^Л — ° вектор Программа 4.58. твердого материала со всех сторон действуют силы, которые в матричной форме записы- ваются в виде (все элементы матрицы нор- мированы, реальные усилия получаем их умножением на 106 Н/м2) Г 10 5 6 " л_ 5 20 4 6 4 30 ’ При М = 3 и е = £=1*10~4 находим р,макс = = £макс = 33,70906694. Кроме того, вычис- ляется принадлежащий ему вектор: yi — = 0,3408143922, t/2 = 0,4160822399 и у3=1. Все действительные собственные значе- ния симметричной матрицы (или заданное их число) могут определяться методом ска- лярных произведений, реализованным с по- мощью следующего алгоритма. 1. Вычисляем вектор Y^-AiY^- °, где k — номер итерации, Д,- — матрица Д. Находим начальные приближения к мак- симальному собственному значению 3. Нормируем вектор Y*k\ т. е. заменяем его вектором р)=у(*)/ 4. Проверяем выполнение неравенства |рЛ —ц*_|| <8. Если оно выполняется, считаем ц* наи- большим собственным значением матрицы А„ а — принадлежащим ему собствен- ным вектором. Если данное условие не выполняется, повторяем ^вычисления с п. 1, приняв за г*+,) вектор 5. Если задано число искомых собствен- ных значений < = 1, 2, ..., k, то для каж- дого i повторяем вычисления по п. 1—4, пре- образовав матрицу Ai по формуле Ai^Ai-y-K [Uh Ufi\, /=1, 2.......Л-1, где [Uit U'i] — произведение вектора-столбца на вектор-строку. 10 PRINT'ВЫЧИСЛЕНИЕ МАКСИМАЛЬНОГО СОБСТВЕННОГО ЗНАЧЕНИЯ' 15 PRINT'МАТРИЦЫ И ПРИНАДЛЕЖАЩЕГО ЕМУ НОРМИРОВАННОГО ВЕКТОРА' 20 INPUT'BBEAHTE Н,Е 'H,E«DIM ACN,N>«FOR I«1 ТО N«FOR J«1 TO N 30 PRINT'BBEAMTE A'12.0!I','J«INPUT ACbJMNEXT JiNEXT I 40 FOR 1-1 TO Hi PRINT 12.01'ВВЕДИТЕ Y0C'I')' 50 INPUT AC0,I>«NEXT I«LETW»0 60 LETL-0tLETC«0iLETR»0iFOR J-l TO N«LETS«0 70 FOR I«1 TO N«LETS«S+ACI,J>*AC0,I)«NEXT I 80 LETACJ,0>«SiIF ABSCS)>R THEN LETR»ABSCS> 98 IF S«0 THEN 120 100 IF AC0,J)«0 THEN 120 110 LETC«C+11LETL-L+ACJ,0)/AC8,J> 120 NEXT JiLETL»L/C 130 FOR J«i TO №LETACB,J>«ACJ,0>/R«NEXT J 140 IF ABSCL-W>>«E THEN LETW«L«60T0 68 150 PRINTIFl.9!'МАКСИМАЛЬНОЕ СОБСТВЕННОЕ ЗНАЧЕНИЕ L*'L 160 PRINT'ВЕКТОР'«FOR I«1 TO N 170 PRINTI2.0!'Y'I'«'IF1.9IAC0,I>«NEXT BEND Пример. Для контроля этой программы Этот метод применим, если все собствен- воспользуемся примером из [41]: на куб ные значения матрицы А действительны, 119
а наибольшее собственное значение не кратно. Перед началом вычислений вводится матрица А, задается погрешность вычисле- ний е — Е, число искомых собственных зна- чений и векторов К = и на- чальный вектор У(|)=(7. Для экономии памяти ПЭВМ симметричная матрица за- дается своим нижним треугольником по- строчно и занимает одномерный массив с объемом элементов, равным А(А-|-1)/2. Программа 4.59. 2. Вычисляем первую преграду 3. Находим внедиагональный элемент а,,, по модулю превосходящий а* (k — 0, 1,2,...). Если его нет, выполняем п. 5 алгоритма, иначе идем к п. 4. 10 PRINT'ВЫЧИСЛЕНИЕ СОБСТВЕННЫХ ЗНАЧЕНИЙ И ПРИНАДЛЕЖАЩИХ ИМ' 15 PRINT'ВЕКТОРОВ АЛЯ СИММЕТРИЧНОЙ МАТРИЦЫ МЕТОДОМ СКАЛЯРНЫХ' 20 PRINT' ПРОИЗВЕДЕНИЙ С ИСЧЕРПЫВАНИЕМ' 25 INPUT'BBEAHTE N/E/K 'NtE/KsLETW=N*<N+l>/2lLETU=W+NsDIM A<U+N> 30 LETH=0sFOR 1=1 ТО NsFOR J=1 ТО DLETH-H+l 40 PRINT!2.0! 'ВВЕДИТЕ А' Г,' Js INPUT A(H\ 50 NEXT JsNEXT Is FOR В=1 TO К 60 FOR 1=1 TO №LETA(W4-I)=1:HEXT IsLETF«0 70 FOR 1=1 TO HsLETA<U+I>=0sFOR J=1 TO I 80 LETA<U+I)=A<U+I)+A<I»<I-l)/2+J>»A<W+J)sNEXT J 90 NEXT isFOR J=1 TO N-18FOR I«J+1 TO N 100 LETA<U+J>«A<U+J>+A<I*<1-1)/2+j)*A<W+I) 110 NEXT I8NEXT J8LETP=0sLETR=0 120 FOR 1=1 TO N8LETP=P+A<U+I>*A(U+P 130 LETR=R+A<W+I!>»A<U+I):NEXT I 140 LETL=P/R8LETC«SQR<P>:LETP«0 150 FOR 1=1 TO NSLETA<W+I>«A<U+I>/C 160 IF ABS<A<W+I))>=P THEN LETP»ABS(A<W-H>) 170 NEXT 18 IF ABS<P-F>>E THEN LETF«Ps&OTO 70 180 PRINT 'СОБСТВЕННОЕ ЗНАЧЕНИЕ L И ЕГО ВЕКТОР V' 190 PRINT!2.0!'L'I'='!F1.9!L 200 FOR I«1 TO N8PRINT!2.0!'V'I'='!F1.9!A<W+I> 210 NEXT 18 IF B=K THEN 240 220 FOR 1=1 TO N8FOR J=1 TO BLETD=I«<I-l)/2+J 230 LETA<D>=A<D>-L»A<W+I)*A<W+J>8NEXT JsNEXT I 240 HEXT BsEND Пример. Для матрицы из примера к программе 4.58 получаем: 1) L = 33,70917846. (/! =0,300158658, £/2 = 0,3664623805, »3 = 0,8806872904; 2) £=19,14906125, w, =0,1967307594, £/2 = 0,8796183084, ^=—0,4330919532 и 3) £ = 7,141760291, £/,=0,933376197, £/2= -0,3032741433, £/з = - 0,19192099959, Для отыскания всех собственных значе- ний матрицы применяется также метод Якоби с преградами. Его суть заключается в проведении цепочки преобразований подо- бия, в ходе которых получается некото- рая диагональная матрица А(Л): A(ft)=T’AT, имеющая те же собственные значения, что и матрица А. Матрица Т является произве- дением всех матриц Tih где Тц — элементар- ные матрицы вращения, имеющие вид 4. Анализируем элемент а,,. Для этого вы- числяем У~(ац — ап) /2, {— £ если £/ = 0, — sign (у) Д«/ л/а2 4-У2, если £/#=0, S=х/ф (1—^1—х2), С = Vi -S2. Затем преобразуем £-й и /-й столбцы матрицы Л(Л) по формулам В, = CAi- SAh В, = SAf + C A j и заменяем £-й и /-й столбцы матрицы Л столбцами В, и В,. В результате на месте матрицы Л получаем матрицу В. Далее £-ю и /*-ю строки матрицы В преобразуем по формулам Ci = CAi - SAh Cj = SA, + CAi и заменяем £-ю и /-ю строки матрицы В строками Ci и Cj. При этом вместо матрицы В получаем матрицу A(ft + I). Столбцы i и j матрицы Tij заменяем на столбцы В, и В/. 5. Находим новую преграду ал+|==ал/л(2(^1)+«) Алгоритм реализации метода Якоби с пре- градами следующий. 1. Задаем Тм = Е, где Е — единичная матрица порядка п. и повторяем вычисления с п. 1, до тех пор, пока все внедиагональные элементы не ста- нут меньше числа Р = еао, где е — заданная погрешность вычислений. В результате собст- 120
венные значения оказываются диагональ- ными элементами матрицы А. Ввиду симметрии матрицы она задается построчно нижним треугольником и зани- мает одномерный массив с числом элементов ЛЦМ-Н)/2. Программа 4.60. Пример. Для матрицы А из примера к программе 4.58 вычисления по программе 4.60 дают Li =7,14176, 19,14906 и L3 = 33,70917 (tf = 3, t=E== 1.10-5). Программы 4.57—4.60 получены перево- дом программ. для ЭВМ «Мир-2» с языка аналитик [24] на язык бейсик. 10 PRINT*ВЫЧИСЛЕНИЕ ВСЕХ СОБСТВЕННЫХ ЗНАЧЕНИЙ МАТРИЦЫ* 15 PRINT* МЕТОДОМ ЯКОБИ С ПРЕГРАДАМИ* 20 INPUT*ВВЕДИТЕ ПОРЯДОК МАТРИЦЫ N=*NsDIM A(H*(N+l)/2) 25 INPUT*ВВЕДИТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЯ Е==*Е 30 LETH=0sFOR 1=1 ТО Ns FOR J=1 ТО I 40 LETH=H+1:PRINT!3.0!'ВВЕДИТЕ А'I','JsINPUT АСН) 50 NEXT JsNEXT IsLETH«08FOR P«2 TO N 60 FOR Q=1 TO P-lsLETH=Ht2*A<P*<P-l)/2+Q)~2 70 NEXT QSNEXT P:LETR»SQR<H)sLETA=E*R/N 80 LETR=R/N 90 LETB=0sFOR Q=2 TO NsFOR P=1 TO Q-l 100 IF ABS<A<Q*<Q-l)/2+P))<R THEN 275 110 LETK=P* < P-1)/2+Р s LETL=Q* < Q-1 >/2+Р 120 LETM=Q*< Q-1>/2+Q s LETB=1s LETU=A < К > sLETW=A < L) 130 LETF=A(M)8LETV=(U-F)/2sLETZ=VsIF V=0 THEN LETX=-lsGOTO 150 140 LETX=-SGN(Z > *U/SQR < ЫжЫ+V*V> 150 LE TS=X/SQR ( 2* (1+SQR (1 -X*X ) ) ) s LETC=SQR < 1 -S’*S > 160 FOR 1 = 1 TO Ns IF I<=P THEN LETY=P*<P-1)/2+IsGOTO 180 170 T.ETV=I*( 1-1 >/2+P 180 IF I<=Q THEN LETX=Q*<Q-l)/2+IsGOTO 200 190 LETX=I*<I-l)/2+Q 200 IF I=Q THEN 220 210 LETD=A(Y>*C-A<X>*S 220 LETA(X>=ACY>*S+A<X>»CsIF I=Q THEN 240 230 LETACY)=D 240 NEXT I 250 LETACK)=U*C*C+F»S*S-2*W*C*S 260 LETACM>=U*S*S+F»C*C+2*W*C*S 270 LETA C L >=C U-F)*S*C+W* C C*C-S»S > 275 NEXT PsNEXT Q 280 IF B=1 THEN 90 290 IF R>A THEN LETR=R/N:GOTO 80 300 FOR 1=1 TO N8LETH=A(I*(I-l)/2+I) 310 PRINT!2.0!'СОБСТВЕННОЕ ЗНАЧЕНИЕ L*I*=*!F1,9!H 320 NEXT IsEND
L...- -- —— ‘ ? • • - ГЛАВА 5 СПЕКТРАЛЬНЫЙ, СТАТИСТИЧЕСКИЙ, КОРРЕЛЯЦИОННЫЙ И РЕГРЕССИОННЫЙ АНАЛИЗ § 5.1. Спектральный анализ на основе дискретного преобразования Фурье Спектром временной зависимости (функ- ции) у (/) называется совокупность ее гар- монических составляющих (гармоник), обра- зующих ряд Фурье (см. § 4.11). Спектральный анализ периодических функ- ций заключается в нахождении коэффици- ентов д*, bk ряда Фурье оо ' O.Q у-"' У (/) = -у- + ) (a* COS 2nkfit -|- bk sin 2n/zfit), (5.1) где /’i -- частота повторения (или частота первой гармоники), k—номер гармони- ки. Кроме ряда (5.1) широко использует- ся ряд оо У (/)==“7г+^ М* cos (гл/г/^ + фл), (5.2) л = I где Mk = ^dl + b2k (5.3) — амплитуда и <р* = —arctg (bk/ak) (5.4) — фаза гармоник (косинусоид). Применяют- ся также ряды с синусоидами под знаком суммы. Коэффициенты Фурье определяются вы- ражениями т 2 г ak = Y~\У (^ cos (55) т 2 Г bk — yA у (/) sin 2nfit, (5.6) где T=\/f\ — период повторения периоди- ческой функции у (/). Спектральный анализ непериодических (финитных) функций, т. е. функций, пол- ностью определенных на отрезке [0, /о], заключается в вычислении составляющих их комплексной спектральной плотности S (» =SC (ш) + (<о) =S (ш) где (о = 2л/ — угловая частота, S (<о) = V[SC (Ш)]2+ [Ss (<о)]2 (5.7) и ф (о>) = — arctg [Ss (<o)/Sc (и)] (5.8) — модуль спектральной плотности и фаза на частоте со. При этом /о У (0 cos со/, (5.9) о /о У (0 sin со/. (5.10) о Численный спектральный анализ заклю- чается в нахождении коэффициентов До, at,... ...» д*, bit b2....bk (или Mi, М2, ..., Mk, (pi, ..., ср*) для периодической функции у (/), заданной на отрезке [0, Т] дискрет- ными отсчетами. Он сводится к вычисле- нию (5.5) и (5.6) по формулам численного интегрирования для метода прямоугольни- ков (см. § 4.8) N-\ У> cos 2nkfi i M, (5.11) / = о N —I 2 v"* ) y, sin 2nkfd M; (5.12) / = o где M — T/N — шаг, с которым расположе- ны абсциссы у (/). Для финитных функций N —I £С = Д/ 2L У1 cos (2л/ Ktl), (5.13) z = 0 л/-1 Ss = M £ у, sin (2nf Mi). (5.14) ( = 0 Найденные по (5.11) и (5.12) коэффи- циенты Фурье для m — N/2 гармоник при- ближают у (/) рядом (5.1) или (5.2) с наи- меньшей среднеквадратической погрешностью. Следовательно, численный спектральный ана- лиз, совместно со спектральным синтезом (§ 4.11), является разновидностью метода наименьших квадратов, когда у (/) прибли- жается тригонометрическим рядом. 122
Обобщенный численный спектральный ана- лиз базируется на том, что периодические функции у (/) являются частными случаями финитных функций. Действительно, полагая to^T (этим мы условно приписываем фи- нитным колебаниям период Т) и считая f = kf\ (при финитных функциях k — любые, а при периодических — целые числа), из (5.11), (5.13) и (5.12), (5.14) получаем с Л/-1 л v 2 у, cos 2nfi I -0 (5.15) 0 /v-i o bkN V О ГА, s,n ‘-° (5.16) Численный спектральный анализ повы- шенной точности основан на априорном представлении у (/) в промежутках между узлами. Если такое представление невоз- можно, используются формулы (5.15) и (5.16), дающие наименьшую среднеквадратичную погрешность (рис. 5.1, а). Если z; (/)== const в промежутках между узлами (рис. 5.1,6), а Рис. 5.1. Задание y(f) решетчатой то можно получить дли Ak, Bk точные зна- чения Aki, Bk\, вычисляя их по формулам Aki^KiAko, Bki^KiBko, (5.17) где Л/ — 1 при f — 0, /Q = (sin л/Д/)/л/Д/ при (5.18) Формулы (5.17) с учетом Kf (5.18) полу- чаются в результате аналитического интегри- рования (5.5) и (5.6). Если в промежутках между узлами функция у (t) аппроксими- руется линейной зависимостью, то уточ- ненные значения А и В будут равны Д*2=К/Д«>, = (5.19) Последовательный спектральный анализ на ЭВМ выполняется по следующему алго- ритму. 1. Вводим N — число интервалов разбие- ния у (/), N\ — номер первого ненулевого отсчета у (I) и номер последнего ненулевого отсчета М. 2. Организуем цикл ввода ненулевых от- счетов yt с управляющей переменной /, меняющейся с шагом 1 от значения АП до М. Использование только ненулевых отсчетов позволяет уменьшить время анализа, если у в начале или конце отрезка [0, Г] или [0,/о]. Однако отсчеты yt — 0 при ЛЧ С должны вводиться. 3. Задаем шаг Д/. 4. Переменным С и S присваиваем нуле- вое значение, организуем ввод частоты f и находим р = п[ Д/. 5. Находим Ло и. Во с помощью цикла, в котором вычисляются С в С 4~ z/z cos (2zp), S == S + yi sin (2ip), где z —АП, /VI4-1, • ••» №. При выходе из цикла До —С и Во==С. 6. Для заданного значения f находим нуж- ные параметры a*, bk или Mk и <р*, Sc, Ss или S и ф. Например, для вычисления S и ср применяем формулы S/д/ = ni =± -\/А о 4- В*, фрад = <2= --arccos (Ao/m) приВ0>0, (5.20) (5.21) при Во<0. фрад — — Q 5 (а) и ступенчатой (б) функциями Формулы (5.21) дают представление фрад в пределах ±л рад (или ±180°, если ф рад умножить на множитель 180/л). С помощью (5.17) — (5.19) могут вычисляться уточнен- ные значения А\, B\t Si — k[S и Л2, В2, S2 = Zz2S при ступенчатой или кусочно-линей- ной аппроксимации у (/). 7. Возвращаемся к п. 4 и повто- ряем вычисления для нового значения частоты f. Таким образом, последовательный спект- ральный анализ обеспечивает возможность вычисления амплитуды и фазы любой гармо- ники (или спектральной плотности на любой частоте). При этом необходимо запоминание всех отсчетов yi, кроме нулевых в начале и в конце интервала дискретизации у (/). Число отсчетов ограничено емкостью ОЗУ ПЭВМ и достигает 100—250 у простых ПЭВМ. Из-за резкого увеличения времени вычисле- ний (оно пропорционально /V2) спектраль- ный анализ описанным методом на ПЭВМ при большем числе отсчетов нецелесооб- разен. 123
Программа 5.1. 05 PRINT 'ПОСЛЕДОВАТЕЛЬНЫЙ СПЕКТРАЛЬНЫЙ АНАЛИЗ' 10 INPUT 'ВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ РАЗБИЕНИЯ №'N 15 INPUT 'ВВЕДИТЕ НОМЕР ПЕРВОГО НЕНУЛЕВОГО ОТСЧЕТА N1='N1 20 INPUT 'ВВЕДИТЕ НОМЕР ПОСЛЕДНЕГО НЕНУЛЕВОГО ОТСЧЕТА №'М 30 DIM V<M>:FOR I=N1 ТО М 35 PRINT!3.0!'ВВЕДИТЕ ОТСЧЕТ V<'IINPUT YCI) 40 NEXT Is INPUT'ЗАДАЙТЕ ШАГ Т»*Т 50 INPUT'ВВЕДИТЕ ЧАСТОТУ Fa'FsLETC=0:LETS=0 60 LETP=#PI*F*TsLETU=2*PsF0R I=N1 TO M 70 LETZ=W* I: LETC«C+V< I > *COS < Z ) s LETS=S+Y < I) IN< Z ): NEXT I 80 LETR=SQR< C*C+S*S)s LETF=-ACS<C/R>-#PI*T*F 90 IF S<0 THEN LETF=-F 100 LETK=SIN <P)/Р s LETR1=K*R:L.ETR2~K*R1 110 PRINT!F1.9?'ПРИ РЕШЕТЧАТОЙ Y<T) S<F)=='R*T 120 PRINT'nPH СТУПЕНЧАТОЙ YCT) S1<F)='R1*T 130 PRINT'nPH КУСОЧНО-ЛИНЕЙНОЙ Y(T) S2(F)='R2*T 140 PRINT'ФАЗОВЫЙ УГОЛ В РАДИАНАХ F='F 150 PRINT'ФАЗОВЫЙ УГОЛ В ГРАДУСАХ F='DEG<F> 160 GOTO 50sEND Пример. Найти спектральную плот- ность прямоугольного импульса, заданного отсчетами £/о— 1, у\ = 1, ..., ут— 1 при М = 32 и Д/ = 0,125-10~6 с для частоты / = 250 000 Гц. Вводим эти данные (АИ=0, М = 7) и полу- чаем^ S0 = 9,01764195-10~7; $, =9,003163162X X10 7 (это значение полностью совпадает с теоретическим, поскольку для прямоуголь- ного импульса ступенчатая аппроксимация у (/) является точной); S2 —8,98870762-10-7 и фазовый сдвиг <р=—39,375°. При интерпретации результатов вычисле- ния фазового сдвига следует помнить о ко- нечной области определения углов (в данном случае от —180° до -|-180о). Кроме того, надо учитывать, что значения аргумента у синусов и косинусов не должны выходить за пределы, допустимые для данной ПЭВМ (см. § 2.6). Из-за приближенности аппрокси- мации у (/) значения <р могут сильно отли- чаться от точных. Иногда это можно устра- нить, введя поправку для <р, равную Дср = — jif At (в радианах) или Д<р=180/Д/ (в гра- дусах). Так, в примере к программе 5.1 Д<р= 180-2,5-105-0,125-106 = 5,625°. При этом скорректированное значение угла Ф= — (39,375-|-5,625) =—45° равно точно- му значению. Параллельный спектральный анализ на ЭВМ заключается в одновременном (па- раллельном) вычислении М гармоник. При этом память ЭВМ нужна для запомина- ния коэффициентов a*, bk (или Д*, В*), однако запоминать все отсчеты у, не требуется, поскольку каждый отсчет используется для вычисления всех гармоник по мере его ввода. Параллельный спектральный анализ про- водится по следующему алгоритму. 1. Вводим нужное число гармоник М, номер начальной гармоники kS, общее число отсчетов у (/) У, номер первого ненулевого отсчета IS и номер последнего ненулевого отсчета IF, 2. Обнуляем переменные массивы A (k) и В (k) и вычисляем Я = 2л/У. 3. Организуем цикл ввода #( = У с управ- ляющей переменной /, меняющейся с шагом 1 от значения IS до IF. В этом цикле вво- дим у,, вычисляем Z = RI и организуем внутренний цикл (п. 4).- 4. Организуем цикл вычислений Ak, Bk с управляющей переменной k, меняющейся с шагом 1 от значения 0 до М— 1. В начале цикла вычисляем UZ = Z (&-|-S), где S = /S, и затем A (k) = A (As)-h Y cos W, В (fc)=B (k) 4- Y sin W. Значения Ak соответствуют переменным мас- сива А (/г), a Bk — переменным массива В (k) после выхода из циклов. Для нулевой гармоники /?-f-S = O вычисляем только До, суммируя все у,. 5. Организуем цикл вывода Дл, Bk, M/t и (pk = Qk (k = 0, ..., M — 1), учитывая сдвиг индекса на величину 5, т. е. вывода вместо индекса k значения k-]-S. В ходе вывода вычисляем М2 = £ M'f. i = k+S 6. Если ЛП=0, т. е. вычисления начаты с первой гармоники, находим коэффициент гармоники: kr = .... +М2м/М I = =д/Л12-Л1?/Л4|.' 7. Если 5=1, можно проводить тригоно- метрическую интерполяцию — экстраполяцию, т. е. по заданным t вычислять м у ===~t"^~v( Ак cos 2л^ м • с помощью усеченного ряда Фурье, ограни- ченного М гармониками. Когда по этому алгоритму надо вычислить новый ряд гармоник, приходится повторять 124
ввод всех отсчетов yt. Если память ПЭВМ достаточна, можно предусмотреть хранение у, с помощью массива У (/), содержащего действующие (т. е. #=#=0) отсчеты. Тогда, предусмотрев в п. 3 алгоритма вместо руч- ного ввода yi циклический вызов отсчетов из массива У (/), получим вариант комбини- рованного или последовательно-параллель- ного спектрального анализа. В приведенной ниже программе 5.2 реализован этот метод. Кроне того, в ней предусмотрен ввод опор- ной частоты fi = Fl. Это частота первой гармоники при анализе периодических функ- ций или частота, задающая масштаб сетки частот kf\ при анализе финитных функций (т. е. в последнем случае им придается характер периодических функций с частотой повторения fi). Коррекция Мк и фазового сдвига в этой программе не предусмотрена (но может быть легко введена). Программа 5.2. Значения М4 и S4 недостоверны ввиду их малости (точные значения М4—О и S4==0). Поэтому случайные значения Q4 из выдачи исключаются. Для /==0,5* 10~6 по програм- ме 5.2 получим у (t) = 1,07593, а для / = = 3-10“6 получим у (t) =0,00852. Спектральный анализ функций с ограни- ченным спектром выполняется также непо- средственно с помощью дискретного преоб- разования Фурье над комплексными чис- лами. Так, если задан массив и/=х=л;4-/У, 0 = 0, 1, 2, ..N— 1), то прямое дискретное преобразование Фурье дает массив комплекс- ных чисел йь = V£' i — 0 Соответственно массив чисел Vk при обрат- ном дискретном преобразовании Фурье обра- 10 PRINT'ПОСЛЕДОВАТЕЛЬНО-ПАРАЛЛЕЛЬНЫЙ СПЕКТРАЛЬНЫЙ АНАЛИЗ* 15 PRINT*И ТРИГОНОМЕТРИЧЕСКАЯ ИНТЕРПОЛЯЦИЯ-ЭКСТРАПОЛЯЦИЯ* 20 INPUT* ЗАДАЙТЕ ОБЩЕЕ ЧИСЛО ОТСЧЕТОВ ФУНКЦИИ ¥<Т> N=*N 30 INPUT*ЗАДАЙТЕ НОМЕРА НАЧАЛЬНОГО И КОНЕЧНОГО ОТСЧЕТОВ IS/IF *U,6 40 LETG=6-UsDIM У<6Ъ A<N/2>/B<N/2)sLETR=2*#PI/N 50 FOR 1=0 TO G:PRINT!3.0!'ВВЕДИТЕ V*I+U:INPUT V<I>sNEXT I 60 INPUT*ЗАДАЙТЕ ЧИСЛО СОСТАВЛЯЮЩИХ СПЕКТРА М=*М 70 INPUT*ЗАДАЙТЕ НОМЕР ПЕРВОЙ СОСТАВЛЯЮЩЕЙ СПЕКТРА KS=*S 75 INPUT*ЗАДАЙТЕ ЧАСТОТУ F1=*F 80 LETA=0?LETB«05LETC«0sFOR К=1 ТО М 90 LETA<K)«08LETB<K>=0iNEXT К 100 FOR 1=0 ТО 6sLETA=A+Y<I)iLETZ=R*<I+U> 110 FOR К«1 ТО M«LETW=Z*<K+S-1> 120 LETA<K)=A<K>+Y<I>*COS<W>:LETB<K)=B<K)+V<I>*SIN<W> 130 NEXT K8HEXT IsLETM0«A/NiLETS0=M0/F 140 PRINT!Fl.9!'ПОСТОЯННАЯ СОСТАВЛЯЮЩАЯ M0«*M8 150 PRINT'СПЕКТРАЛЬНАЯ ПЛОТНОСТЬ НА НУЛЕВОЙ ЧАСТОТЕ S0«’S0 160 FOR К»1 ТО M8LETU=SQR<A<K>*A<K)+B<K)*B<K)) 170 LETQ=~ACS<A<K)/U>:IF B<K)<0 THEN LETQ=-Q 180 LETO=K+S-lsLETB«B+U*U8IF K+S=2 THEN LETC=U 190 PRINT!3.0!'АМПЛИТУДА M*0!F1.9!*='U»2/N 200 PRINT!3.0!'СПЕКТРАЛЬНАЯ ПЛОТНОСТЬ S*0!F1.9!*=*U/N/F 210 PRINT!3.0!'ФАЗОВЫЙ СДВИГ Q*0!F1.9!*='DE6<Q> 220 NEXT KsIFSOl THEN 60 230 PRINT'КОЭФФИЦИЕНТ ГАРМОНИК КГ=*!F1.9!SQR<B-C*C)/C 240 INPUT'1-БУДЕТ ВЫЧИСЛЯТЬСЯ Y<T),0-HE БУДЕТ ?'D 250 IF DOI THEN 60 260 INPUT*ЗАДАЙТЕ ВРЕМЯ T«'T:LETY=0sLETP«2»#PI*T*F 270 FOR K«1 TO MsLETW=P*KxLETY=Y+A(K>*COS<W>+B<K>*SIN<W) 280 NEXT K8LETY=M0+Y*2/NlPRINT'ЗНАЧЕНИЕ Y<T>=*!F1.9!Y 290 60T0 260।END Пример. Для примера к программе 5.1 (W = 32, уо — у7= 1, h =250 000), задав М = 5 и MS = 1, получим (даны 5 цифр после запятой): М0=0,25 S0=l-10-6 Ml =0,45088 SI =9,0176-IO-7 М2 = 0,32036 S2 = 6,40729-10“7 M3 = 0,15224 S3 = 3,0449-IO-7 M4 = 2,23345 • 10“12 S4 = 4,466892 • 10~18 M5 = 0,09375 S5= 1,87503-10-7 Kr=0,81369 QI = -39,375 Q2=- 78,75 Q3=-118,125 Q5=-16,875 зует массив комплексных чисел N — 1 • 1 V • / (2«л//ло fc = 0 Если Ui=Y (к), причем Re Ui = Xi=Y (/,•), a Imui=y/ = 0, то прямое .преобразование Фурье дает коэффициенты Ck—Ako — jBko — = Vk/N усеченного тригонометрического ряда Фурье в комплексной форме: (/(/)=£ | С#| (2л*/, k — — ОС где IGI=^/X(+H, <р*=—arccos (X»/|Cj), если Уа>0, и ф/г=— ср*, если У*<0. Пер- 125
вые Ы/2 Значений соответствуют поло- жительным частотам f — остальные — отрицательным. Соответственно, идоея частотный спектр в виде N значений = + jYk и подверг- нув его обратному преобразованию Фурье, получим N значений у, (ti) /N. Из них первые N/2 значений соответствуют области времен />0, остальные-— /<0. Указанные дискретные преобразования вытекают из прямого преобразования Фурье оо S (<о) = y(t)e-ia‘dt — сю и из обратного преобразования Фурье оо — оо выполняемых методиками приближенного чис- ленного интегрирования для функций у (/), определенных на конечном промежутке вре- точно вычислять 2Л4 раз, поскольку они периодически повторяются. Кроме того, вы- числения можно проводить по рекуррентным формулам (см. подробно в [5]). Выделив четную и нечетную части разложений, уда- ется уменьшить время вычислений еще вдвое; в результате БПФ требует проведения (N/2) iog2 N операций вместо № (при Л/=1024 это уменьшает число операций бо- лее чем в 200 раз!). Для ПЭВМ характерны значения 64-г 256, а для профессиональ- ных ПЭВМ — в несколько раз больше. Выбор W из ряда 2м (2, 4, 8, 16 и т. д.) является определенным неудобством БПФ. Однако оно компенсируется заметным уже при М = 8 или Л/= 16 сокращением времени вычислений. Программы БПФ обычно позво- ляют проводить как прямое, так и обратное дискретное преобразование Фурье над мас- сивами Xi + jYi и ui< = + обеспе- чивая преобразование Xt -> Хь, Yi-* Yk, и на- оборот. Программа 5.3. 10 PRINT'ПРЯМОЕ И ОБРАТНОЕ БЫСТРОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ' 20 INPUT'ДЛЯ N=2~M ВВЕДИТЕ M='MsLETN=INT(2~M+.DsDIM X<N-1)/Y<N-1) 30 INPUT'ЗАДАЙТЕ -1 ПРИ ПРЯМОМ БПФ И 1 ПРИ ОБРАТНОМ 'D 35 INPUT'ВВЕДИТЕ НОМЕРА НАЧАЛЬНОГО И КОНЕЧНОГО ОТСЧЕТОВ IS/IF '18/11 48 FOR lx© ТО I1-I0SPRINT13.0!'ДЛЯ I='I+I8 58 INPUT'ВВЕДИТЕ XI/VI 'X(I)/Y(I)sNEXT I 60 FOR L=1 TO M:LETE«INT(2^<M+1-L)+.1)sLETF=E/2:LETU=1sLETU=0 70 LETZ=#PI/FsLETC=COS<Z>sLETS=D*SIN<Z)’.FOR J=1 TO F 80 FOR I=J TO N STEP EsLETO=I+F-18LETP=X<I-l)+X<O)sLETQ=V<I-l)+V(O) 98 LETR=X <I-1)-X < 0)s LETT=V<I-1)-V < 0)sLETX < 0 ) =R*U-T*U 180 LETV<O)«T*U+R*UsLETX<I-l)=PsLETV<I“l)xQsNEXT I 110 LETW=U3KC-U*S8LETU=U*C+U«SsLETU=W:NEXT JsNEXT L i28 LETJ=lsFOR 1=1 TO N-DIF I>=J THEN 158 130 LETJ1=J-18LETI1=I-18LETP=X<J1)SLETQ=V(J1)8LETX<J1)=X(I1> 148 LETV<JI>=V<IDsLETX<11)=PsLETV<11>=Q 158 LETK=N/2 160 IF K>«J THEN 180 178 LETJ=J-KxLETK=K/2sGOTO 160 188 LETJ»J+K8NEXT I 190 IF D=-l THEN PRINT'РЕЗУЛЬТАТЫ ПРЯМОГО БПФ'160Т0 248 208 PRINT'РЕЗУЛЬТАТЫ ОБРАТНОГО БПФ'sFOR K=8 TO N-l 210 LETX<K)=X<K)/NSLETVCK)=V(K)/N 220 PRINT»3.01'K='Ki1F1.5!' X='X<K)>' V='V<K) 230 NEXT K8STOP‘ 240 FOR K=0 TO N-18LETA=SQR<X(K>*X<K)+V(K>*V(K>) 250 LETQ=08IF A=0 THEN 270 268 LETQ«ACS<X<K)/A)sIF V<K)<0 THEN LETQ=-Q 270 PRINT !3.d»'K='K;1F1.51' X='X<K);' V='V(K)j 288 PRINT' M='A*2/N;' Q='DEG<Q)8NEXT KsEHD мени, и зависимостей S (w) .с ограниченным спектром. Дискретное преобразование Фурье тре- бует числа операций порядка и ведет к большим затратам машинного времени уже при 104-20. Кроме того (при опе- рациях с комплексными числами), прихо- дится 2N раз вычислять тригонометрические функции (sin и cos) — операции по разло- жениям их в ряд выполняются на ЭВМ довольно медленно. Быстрое преобразование Фурье (БПФ) позволяет резко уменьшить время проведе- ния прямого и обратного дискретных преоб- разований Фурье. При БПФ N выбирается из условия N — 2M, где /И —1, 2, 3, .... При этом значения тригонометрических функций доста- Пример. В программе 5.3 предусмотрен ввод только ненулевых отсчетов. Например, для вычисления спектра прямоугольного им- пульса, заданного при N = 32 (М = 5) во- семью единичными отсчетами Y (/) Хо, Хь %2, •.., Х7 и остальными нулевыми (все К = 0), задаем номер начального отсчета /5 = 0 и конечного 1F — 7 и указываем тип преобразования. При прямом дискретном преобразовании Фурье получаем спектраль- ный состав (даны первые 6 значений из таблицы результатов, выводимой на экран дисплея): К = 0 Х = 8 Y = 0 К=1 Х = 5,57659 Y=-4,57659 К = 2 Х=1 Y=-5,02734 126
К-3 Х= - 1.14828 Y=-2,14828 К^4 Х = 0 Y = 0 К -5 X* 1,43543 Y=- 1,43543 М = 0,25 М=0,45088 М = 0,32036 М = 0,15224 М = 0 М = 0,09375 Q = 0 Q=-39,75 -78,75 Q= —118,125 Q-0 Q=-16,875 Если дать команды D=1 GOTO 60, то после прямого будет проведено обратное дискрет- ное преобразование Фурье. Без учета малых погрешностей округления, получим в итоге значения XD-i-X7 = 1. X8-r X3i =0 и УьЧ- Y31 — = 0 (т. е. исходный массив и,). Время преобразования при Л4 = 5 около 2,5 мин. Повышение точности БПФ достигается специальной обработкой входных или выход- ных данных. Обработка входных данных заключается в умножении отсчетов на весо- вые коэффициенты IF/, подобранные так, чтобы обеспечить заданную аппроксимацию У (/) в ходе интегрирования. Значения IF/=1 соответствуют ступенчатой аппрокси- мации Y (/) и интегрированию методом прямоугольников. Если IF, = 1/2, 1, 1, ... ..., 1, 1/2, то У (/) в ходе БПФ аппрокси- мируется кусочно-линейной функцией, т. е. интегрирование происходит методом трапе- ций. При IF, = 1/3, 4/3, 2/3, 4/3, 2/3, ... ..., 4/3, 1/3 аппроксимация У (/) будет параболической, т. е. интегрирование проис- ходит по методу Симпсона. При более сложных последовательностях IF* возможна аппроксимация У (/) полиномами более вы- соких степеней. Применим этот метод к примеру для программы 5.3. Зададим 9 отсчетов Х() = 1/2, Х,Ч-Х7=1 и Х8=1/2 (все Уоч-У8 = О). С помощью программы 5.3 получим (пер- вые 6 строк таблицы выходных данных): К = 0 Х = 8 Y = 0 К-1 Х = 5,07659 Y=-5,07659 К-2 Х=—7-10~12 Y=-5.02734 К-3 X-1,64828 Y= —1,64828 К-4 Х = 0 Y = 0 К - 5 X = 0,93543 Y = - 0,93543 М—0,25 М = 0,44871 М = 0,31421 М = 0,14569 М = 0 М = 0,09268 Q—0 Q=—45 Q=-90 Q = -135 Q = 0 Q^-45 При параболической аппроксимации У (/) задаем ее значениями Xq—1/З, Xi=4/3, Хг = 2/3, Х3 = 4/3, Х4 = 2/3, Х5 = 4/3, Хб = = 2/3, Х7 —4/3, Х8=1/3, X9-rX3i=₽0 и Уо4-Хз1—0. Тогда получим: К-0 Х = 8 Y = 0 К-1 Х = 5,0930 Y=-5,0930 К-2 Х = 6,6-10-*3 Y=-5,09364 К-3 Х= —1,69884 Y= —1,69884 К-4 Х = 0 Y = 0 К-5 Х= 1,02452 Y=-1,02452 М = 0 М = 0,45016 М = 0,31835 М = 0,15016 М = 0 М = 0,09056 Q = 0 Q--45 Q=—90 Q--135 Q = 0 Q=—45 Для данного примера точные результаты вычисляются по формулам X* = sin (л/г/2) Л//2л/г, УА= — (1 —cos (л&/2)) N/2nky Q*= — arccos (Хь/^+П) и равны: к=о Х = 8 Y-0 К—1 X —5,09296 Y—— 5,09296 К-2 Х-0 Y=- 5,09296 К-3 Х= —1,69765 Y=- 1,69765 К-4 Х = 0 Y = 0 К-5 Х= 1,01859 Y= — 1,01858 М = 0,25 М-0,45016 М = 0,31831 М = 0,15005 М = 0 М = 0,09003 Q-0 Q--45 Q——90 Q= —135 Q-0 Q=—45 Сравнение приведенных данных наглядно иллюстрирует повышение точности БПФ по мере увеличения порядка аппроксимирую- щего у (/) полинома. Казалось бы, что для прямоугольного импульса ступенчатая аппрок- симация будет наилучшей. Однако при БПФ производится приближенное численное инте- грирование не самой зависимости у (/), а ее произведения на быстроосциллирующие мно- жители. Поэтому результирующая погреш- ность интегрирования определяется не только погрешностью аппроксимации у (/), но и всей подынтегральной функции. В следую- щем разделе описан метод спектрального анализа, в котором по точным формулам интегрируется произведение у (/) на осцил- лирующие множители (при этом простейшая кусочно-линейная аппроксимация у (t) с раз- рывами позволяет получить точные резуль- таты спектрального анализа). Повышение точности БПФ путем обра- ботки выходных данных сводится к умноже- нию Хк и Yk на множитель /G — = sin (л&/N) / (л/?/N) и введению поправки на фазовый сдвиг Дф* = л£//У. В этом слу- чае для рассмотренного примера будем иметь точные значения X*, Yk, Mk и ф*. Разумеется, нельзя использовать одновре- менно оба способа повышения точности БПФ, поскольку они являются альтернатив- ными вариантами одного и того же под- хода — улучшение аппроксимации Y (t). Эффект Гиббса наблюдается при триго- нометрической интерполяции усеченным ря- дом Фурье функций с разрывами (в част- ности, прямоугольного импульса). Он заклю- чается в осцилляциях расчетной зависимо- сти ряда Фурье, амплитуда которых может 127
достигать 18 %. Увеличение числа членов ряда ведет лишь к уменьшению длитель- ности осцилляций. Осцилляции значительно снижаются (сглаживаются) при описанной выше обработке данных (как обычного спектрального анализа, так и с помощью БПФ). § 5.2. Специальные виды спектрального анализа Метод пяти ординат обеспечивает вы- числение постоянной составляющей Ус и первых четырех гармоник УМ14- УМ4 реак- ции системы с передаточной характеристи- кой у (х) на гармоническое воздействие х = хЛ1созш,/4-хо (см. рис. 5.2): Уо = ((у\ 4-*/s) +2 (t/2+^4)]/6, уМ1 == <У> —У5+У2 — У4)/3, Ум2 = (У' + S/5 — 2(/з) / 4, ^мз== [(i/i — У*) ~2 (i/2 —£/4)]/6, У М4 =7 [(*/i +</б) —4 (#2+у4)] /12, Хг = л/^М2+ Умз+^ЛмАлП- Метод широко применяется для расчета радиотехнических систем с малой нелиней- ностью зависимости у (х). Программа 5.4. Пример. Для у\ = 0,7; г/2 —2; ^З = 3,5; 1/4 —5,2 и 1/5 = 6 получим Уо = 3,516666667; yM1 = -2,833333333; УМ2 = -0,075; yM3 = = 0,1833333333; УМ4=-0,0916666667 и Кг = = —0,07703412267. В программе 5.4 ампли- туды гармоник Ум1~^л14 обозначены как М14-М4. Метод семи ординат аналогичен, по сути, методу пяти ординат, но отличается боль- шим числом ординат и позволяет найти Уо и 6 гармоник [37]: Уо=у, + (- 270аи+ 756а2 + 334а3) /2560, УМ1 = (-180р, 4- 1008₽2+668Рз)/2560, У М2 = (“ 1215а, + 486а2 + 559а3) /2560, Ъиз = (— 6300, —36002 4-45003) /2560, УМ4= (270а,-756а2 + ЗО6а3)/2560, УМ5= (8100,-648р24- 16203)/256О, УЛ16= (1215а,—486а2 4-81 аз)/2560, где он =*/5+ 1/3 —2t/4, а2 = 1/64-i/2 — 2i/4, a3 = f/7-|-t/i—2(/4, Pl=*/5 —*/3, р2 = 1/б —^2, Рз = //7 —t/1, Кг = ••• + УМб/Ум 1 • 10 PRINT >СПЕКТРАЛЬНЫЙ АНАЛИЗ МЕТОДОМ 5-ТИ ОРДИНАТ' 20 INPUT 'ВВЕДИТЕ ПЯТЬ ОРДИНАТ ФУНКЦИИ 71,72,73,74,75* 71,72,73,74,75 30! LET 70=<71+75+2*<72+74))/6 40* PRINT 'СРЕДНЕЕ ЗНАЧЕНИЕ 7О«*70 50 LET Ml=<71-75+72-74)/3 60 PRINT 'АМПЛИТУДА ПЕРВОЙ ГАРМОНИКИ М1=*М1 ?0 LET М2=<71+75-2*73>/4 80 PRINT 'АМПЛИТУДА ВТОРОЙ ГАРМОНИКИ М2='М2 90 LET M3S<71-75-2*<72-74)>/6 100 PRINT 'АМПЛИТУДА ТРЕТЬЕЙ ГАРМОНИКИ МЗ=*МЗ 110 LET М4=<<71+75)-4*<72+74)+6*73)/12 120 PRINT 'АМПЛИТУДА ЧЕТВЕРТОЙ ГАРМОНИКИ М4=*М4 130 LET K=*<SQR<<M2~2)+<M3~2)+<M4~2)))/M1 140 PRINT 'КОЭФФИЦИЕНТ ГАРМОНИК К=*К 150 60Т0 20 : END 128
Программа 5.5. 10 PRINT'СПЕКТРАЛЬНЫЙ АНАЛИЗ МЕТОДОМ 7-МИ ОРДИНАТ> 20 PRINT'ВВЕДИТЕ ОРДИНАТЫ VI/V2>.../Y7' 30 INPUT A,B>C,D,E/F/GsLETH=2560 40 LETW=2*DsLETI=E+C-WaLETJ=F+B-W 50 LETK=6+A-WsLETL=E-C8LETM=F-B 60 LETN=G-AsLETO»D+<756*J-270*I+334*K)/H 70 LETP=<1008*M-180*L+668*N)/H 80 LETQ=(486*J-1215*I+559*K>/H 98 LETR«<450*N-630*L-368*M>/H 100 LETS«(270*I-756*J+306»K>/H 110 LETT=<810*L-648*M+162*N>/H 120 LETU=<1215«I-486mJ+81*K)/H 130 LETU=SQR < Q~2+R~2+S~2+T~2HT2 > /Р 140 PRINT'КОЭФФИЦИЕНТ ГАРМОНИК КГ='Ц 150 PRINT*A0='Os PRINT'A1»'P*PRINT'A2='Q 168 PRINT'A3='Rs PRINT'A4='SsPRINT'A5='T 170 PRINT'A6='Us END Пример. Для (/|=(/2 = £/з = 0; y4=l; #5 = 2; i/6 = 3 и £/7 = 4 получаем Уо = 1,55625; УМ1= 2,064375; УМ2 = 0,6265625; YM.= = -0,2109375; УМ4=-0,05625; УМ5 = = 0,1265625; yM6 =-0,1265625 и Кг = =0,3297021676. В программе 5.5 Yq-~YMq обозначены А0--А6. Метод степенного полинома основан на аппроксимации передаточной характеристики полиномом у (х) = ao4-aix4-a2x24- ... +апхп и вычислении спектра у (/) при воздействии в виде х (/) cos о)|/. При этом [37] £/о (0 =an; yi (/) =an_14~* (0 ап\ ...; л-1 £/л (/) =a„_fe4-x (/) £ Ajfe_,)cos£(Oi/ = Л “ Е A^COSlW- i = 0 Коэффициенты А? последней формулы вы- числяются по рекуррентным соотношениям в следующей последовательности: А^}=ап-k 4- хм А\*-1)/2; А^=хм (АЬ‘-,)4-Лк-1)/2); 4^=хм(А^-,)4-А^-,))/2; ...; Л<‘>=хм' (Л<‘_П '>+А%\ ”) /2; ...; Л^1=хмЛ1‘_-2,)/2; А? Ввиду четности функции х (/) незави- симо от вида нелинейности у (х) функция у (/) также является четной и ее спектр содержит только косинусоидальные составляю- щие с фазой <р(=0 (и постоянную состав- ляющую Ао/2). Число гармонических состав- ляющих равно п, а коэффициент гармоник Кг—д/^2 4"Аз4“ • • • -НА2 /А i. Программа 5.6. 10 PRINT 'АНАЛИЗ РЕАКЦИИ НА ГАРМОНИЧЕСКОЕ ВОЗДЕЙСТВИЕ' 28 PRINT' НЕЛИНЕЙНОЙ СИСТЕМЫ С ПОЛИНОМИАЛЬНОЙ' 30 PRINT' ПЕРЕДАТОЧНОЙ ХАРАКТЕРИСТИКОЙ' 40 INPUT 'ВВЕДИТЕ СТЕПЕНЬ ПОЛИНОМА N='N 50 DIM D(N+bN+1ЪA<N> 60 PRINT 'ВВЕДИТЕ КОЭФФИЦИЕНТЫ ПОЛИНОМА' 70 FOR 1=0 ТО № PRINT‘2.8!'А'П INPUT A<I)s NEXT I 80 PRINT'ВВЕДИТЕ ПОСТОЯННУЮ СОСТАВЛЯЮЩУЮ ВХОДНОГО' 98 INPUT 'ВОЗДЕЙСТВИЯ Х0='В0 100 INPUT 'ВВЕДИТЕ АМПЛИТУДУ ВХОДНОГО ВОЗДЕЙСТВИЯ ХМ='В 110 FOR 1=0 ТО N+1: FOR J=0 ТО N+1 120 LET D<bJ)=0: NEXT Js NEXT I 130 LET D<0,0)=A<N)8 FOR 1=1 TO N 140 LET D<b0>=A<N-I)+B0*D<I-b0>+B*D(I-bl)/2 150 LET D<b l)=B0*D<I-b 1 >+B*<D< I-Ь 0)+D< I-Ь 2>/2) 160 FOR J=2 TO N 170 LET D<b J)=B0»D<I-b J>+B*<D<I-b J-l)+D<I-b J+i))/2 180 NEXT Js NEXT I 190 LET K«0s FOR J=2 TO N 200 LETK»K+D<N/J>*D<N/J>s NEXT J 210 LET K=SOR<K/<D<NM)*D<NM>)> 220 PRINT 'СПЕКТР ВЫХОДНОГО СИГНАЛА' 230 PRINT'ПОСТОЯННАЯ СОСТАВЛЯЮЩАЯ Y0='‘Fl.9‘D(N,8) 240 PRINT 'АМПЛИТУДЫ ГАРМОНИК' 250FOR J=1 TO Ns PRINT•2.0!'VM'J'='!F1.9‘D<N,J)sNEXT J 260 PRINT‘Fl.9!'КОЭФФИЦИЕНТ ГАРМОНИК КГ='К 270 GOTO 80s END 5 В. П. Дьяконов “ 129
Пример. Для у (х) = 1 1000х + 200х2+ + 100х3 + 20х4 + 10х5; х0—0 и хм=4 полу- чим Ао —3521; Л|« 15200; А2=4160; А3 = =4800; А4=640, Аб=640 и Аг=0,42210395. Амплитуды Ао-гАм в программе обозначены ГО, YM1 + YMN. Метод двенадцати ординат является про- стейшей разновидностью БПФ и служит для вычисления коэффициентов Фурье бо-гбв и а। ~-аб функции у (х), заданной 12 равно- отстоящими ординатами ух-т-у^. Алгоритм расчета по этому методу следующий [1]. 1. Вычисляем суммы и разности ординат по схеме — суммы, di — разности): 4. Находим коэффициенты 6о4-6е и d|4 4-аб (Об=0): е,/2+0з+02->/3/2 а,==---------------, _ (’ll+ лг) л/3/2 . 01—Оз а2=-------------, а3=—__ т/з, ; “4=-у-(п1—пз); as 0|/2+0з-0г V3/2 6 о0 оI “Ь о2 Ч” 12 У12 l/l У11 У2 У10 Уз Уз У< Уз Уз У1 Уз ‘ So Si St S3 S4. $6 $6 di d* ds ds 62/2 + 60^6,73/2 t 2. Вычисляем суммы а* и разности «0 Se Si Sfi Sa s4 S3 Сто Cl <J2 сгз до 61 62 ^2=з — СГ2/2 + а|/2 — О3 , 60 — 62 *3 = __ Сто—o2/2 — Oj/2 + оз 3. Вычисляем суммы 0/ и разности тр: dx ds di d< ds Oi 02 Оз 4i 42 , 62/2 + 60 “61 73/2 ——6-----------' go + q2 — (Oj+Оз) Программа 5.7. 18 PRINT 'ГАРМОНИЧЕСКИЙ АНАЛИЗ МЕТОДОМ 12-ТИ ОРДИНАТ' 20 DIM Y(12)8F0RI=4 ТО 12 40 PRINT 12.0 Г ВВЕДИТЕ YCI')'8lHPUT V<I)8NEXT I 50 LET S0=Y(12) s LET S1«Y<1)+Y< 11 > 8 LET S2=*Y<2>+¥< 10) 60 LET S3sY(3)+V(9>8LET S4==Y<4>+Y<8>8LET S5»Y<5)+Y<7)sLET S6«Y<6) 90 LET D1SY(1>-Y<11) 8 LET D2«Y<2>-Y<10> 8 LET D3«Y<3)-V<9) 100 LET D4eV<4>-Y<8> 8 LET D5*Y<5>-Y<7> 130 LET 60-80+868LET 61«S1+S58LET G2=S2+S4sLET G3«S3 140 LET T0«S0-S6 8 LET T1«S1-S5 8 LET T2=S2-S4 170 LET Q1«D1+D5 8 LET Q2=D2+D4 8 LET Q3«D3 180 LET H1=D1-D5 8 LET H2«D2-D4 210 LET L»SQR<3>/2 8 LET Al=<<Ql/2>+Q3+Q2*L>/6 220 LET A2=<Hl+H2>*L/6 8 LET A3=(Ql-Q3>/6 238 LET A4=(Hl-H2)*L/6 s LET A5«<<Ql/2>+Q3-Q2*L>/6 240 LET B0=C60+62+61+G3)/12 8 LET Bl«<<T2/2>+T0+Tl*L>/6 250 LET B2«<60-<62/2)+(Gl/2)-63>/6 8 LET B3==<T0-T2>/6 260 LET B4»(G0-(G2/2)-<61/2>+63)/6 270 LET B5«<CT2z2>+T0-Tl*L>/6 280 LET B6«<60+G2-61-G3)/12 290 PR1NT!F1.9!'ЗНАЧЕНИЯ КОЭФФИЦИЕНТОВ* 300 PRINT 'A1»'A1 s PRINT 'A2»'A2 8 PRINT 'A3«'A3 310 PRINT 'A4«'A4 s PRINT 'A5='A5 s PRINT 'B0»'B0 320 PRINT 'B1«'B1 s PRINT 'B2®'B2 8 PRINT 'B3=»'B3 330 PRINT 'B4«'B4 8 PRINT 'B5«'B5 s PRINT 'B6«'B6 340 60T0 20 8 END 130
Пример. Для jFi = l; //2=4; //з = 5; //4 = 4; i/5 = 3; //6 = 3,5; //7=3,5; //в = 3; //9 = 1; //i0 = 0,5; //ц = 0,2 и //i2 = 0 получим ai = 1,34118572; а2 = 0,5484827557; а3=—0,6166666667; а4=—0,1732050808; а6 = 0,04214761383; 60 = 2,391666667; Ь\ = - 1,556655773; 62 = —0,733333333; 63=-0,1666666667; 64=-0,01666666667; д5 = -0,02667755999; 66 = 0,1083333333. Отметим, что в отличие от введенных в § 5.1 обозначений здесь использованы обратные (а^ обозначено как bi, a bi как а(), что свя- зано с применением ряда Фурье, у которого члены ряда — синусы, а не косинусы. Последовательный спектральный анализ кусочно-линейных функций с разрывами обеспечивает точное вычисление спектров функций, которые могут быть синтезированы из треугольников, прямоугольников и трапе- ций. При этом каждый отсчет //< задается моментом времени ti и двумя значениями: //, (h—0) слева и //< (64-0) справа, где 0 понимается как бесконечно малое прираще- ние h. Если у{ (ti — O)=yi (ti + 0), то в точке ti зависимость у (ti) не имеет разрыва. Если имеется разрыв, он задается соответствую- щими значениями функции до и после раз- рыва. Например, прямоугольный импульс единичной амплитуды задается значениями t\, у\ (t\—0) =0, у\ (ti 4-0) = 1, /2» У2 (t2 — — 0) = 1 и у? (/240) =0. Нумерация отсче- тов i далее идет с 1, число отсчетов у (t) равно N. Отсчеты могут идти с произвольным расположением точек 6 на оси времени. На произвольном участке [6-ь6] функ- ция у (0 аппроксимируется прямой, уравне- ние которой У (0 — </«-» _ yi—yt-l ti — ti-l Следовательно, взяв отсчеты с соответ- ствующей стороны, получим для у (t) в ин- тервале (6_i40. 6—0) следующее выра- жение: !/(0 = -U-l+0)-»|,'-°r*(,-l+M+ L 6—6-1 J . //(6-0)-//(6-.4-0) t 6-6-1 Подставляя это выражение в (5.11) и (5.12), получим (х = nfk А/): С°=-^=-2У Е (6-.+0)-Н/ (6-0)}, 4=»1 ЛГ sin - i = 1 —у (6-140) sin (2х (/—!))}— N sin х V z 4* ее 1 -у (6-!+0)) sin (х (24—1))}, 1 N ly cos (2х (»-«))- 1=1 N —у (ti—Q) cos (2*0Е Кг/(6—0)— 4 = 1 -у (6-i+O)) cos (* (24—1))}. Алгоритм последовательного спектраль- ного анализа для данного случая подобен описанному в § 5.1. Программа 5.8. 10 PRIНТ'ПОСЛЕДОВАТЕЛЬНЫЙ СПЕКТРАЛЬНЫЙ АНАЛИЗ КУСОЧНО-ЛИНЕЙНОЙ' 20 PRIHT' ФУНКЦИИ»ЗАДАННОЙ Н ОТСЧЕТАМИ/НАЧИНАЯ С 1=0' 30 PRIHT' С ПРОИЗВОЛЬНЫМ РАСПОЛОЖЕНИЕМ ОТСЧЕТОВ' 40 IHPUT'ВВЕДИТЕ ОБЖУЮ ДЛИТЕЛЬНОСТЬ ВРЕМЕННОГО ИНТЕРВАЛА Т='Т 50 1НР11Т'ЗАДАЙТЕ ЧИСЛО ОТСЧЕТОВ H='HsDIM ЩНЪУСЬН) 60 FOR 1=1 ТО HsPRIHT!3.0!'ВВЕДИТЕ T'1-lslHPUT U<I> 70 1НРЦТ'ВВЕДИТЕ ЗНАЧЕНИЯ У(Т-0>/У<Т+0) 'V<0,IXVCl,IXHEXT I 90 IHPUT'ВВЕДИТЕ ЧАСТОТУ F='Fs IF F>0 60T0 150 100 LET A=0s FOR 1=2 TO H 110 LET A»A+<U<I)-U<I-l>>*<?<!.I-1)+V<0/I))/<2*T>iHEXT I 120 PRIHTIF1.9!'ПОСТОЯННАЯ СОСТАВЛЯЮЩАЯ M<8>='A:LETS=T*ABS<A> 130 PRIHT'СПЕКТРАЛЬНАЯ ПЛОТНОСТЬ S<0)='Ss 60T0 90 150 LET A=0SLET B«0sLET R=0«LET X0=#PI*F»TtFOR 1=2 TO H 160 LET X1=2m#PI*F*U<I-1)s LET X2=2*#PI*F*U<I) 170 LET X3»<V<0.I>-V<b1-1>>/<Х2-Х1> 175 LET D=F*U<I-l)sIF D-IHT<DXl.E-5 THEM LETX1=0 180 LET D=F*U<I)s IF D-IHT<DXl.E-5 THEM LETX2=0 185 LETSl»SIH<XlXLETS2=SIH(X2XLETCl=C0S<Xi>sLETC2«C0S<X2> 190 LET A»A+<X3*<C2-Cl>+V<0»IXtS2-V<bI-l>*Sl)/X0 280 LET B»B+<X3*<S2-Sl>-V<0»I)*C2+V<bI-l)*Cl>/X0 210 HEXT is LET 6=SQR<A*A+BmBX IF 6=0 60T0 230 215 LET Z=Az6i IF ABS<ZXi.E-U THEH LET Z=0 220 LET R=-ACS<Z): IF B<8 THEH LET R=-R 230 PRIHTIF1.9!' АМПЛИТУДА M<F>='6 248 PRIHT' СПЕКТРАЛЬНАЯ ПЛОТНОСТЬ S<F)='6*Tz2 250 PRIHT' ФАЗА В ГРАДУСАХ Q<F>='DE6<RX60T0 90s EHD 5* 131
Пример. Для примера к программе 5.1 (вычисление спектра прямоугольного им- пульса) вводим 7 = 4-10-6 с, М = 32, /|=0, F(/ —0)=0, F(/ + 0) = l, /2=Ы0-6 с, F(/ —0) = 1, F(/ + 0)=0, / = 250000. Полу- чим G(0)=0,25, S(0) = l-10~6, G(f) = = 0,4501581581, S (/) =9,003163162-10“ и Ф (/)==— 45° (эти значения совпадают с точ- ными). В этой программе нумерация от- счетов i идет с 1, у (/) shF (Г), М ({)=== G (F), S(f)^S(F) Иф(/)^Ф(Г). Параллельный спектральный анализ ку- сочно-линейной функции с разрывами осно- ван на применении описанной выше мето- дики при одновременном вычислении рядов a*, bk. Программа 5.9. л U) =л/А2с (/) +4 (/) , а ФЧХ ф (f) = = —arctg (f)/Ac (/)]. Здесь a' (i) — производная ПХ а (/), а (0) значение а (/) при / = 0. Численный метод расчета АЧХ и ФЧХ по ПХ базируется на кусочно-линейной аппроксимации а (/) в интервале между ее отсчетами уь Тогда /А (0 ~ а‘~ «-I ° (t)~ А/ ~ Д/ ’ При этом а' (/) представляется ступенчатой линией, смещенной на 4-А//2, что создает значительные погрешности в вычислении ФЧХ. Сместив эту линию на — А//2, можно зна- чительно уменьшить эти погрешности. Далее, 10 PRINT'ПАРАЛЛЕЛЬНЫЙ СПЕКТРАЛЬНЫЙ АНАЛИЗ И ТРИГОНОМЕТРИЧЕСКАЯ' 2© PRINT'ИНТЕРПОЛЯЦИЯ КУСОЧНО-ЛИНЕЙНОЙ ФУНКЦИИ С РАЗРЫВАМИ ПРИ' 30 PRINT' ПРОИЗВОЛЬНОМ РАСПОЛОЖЕНИИ ОТСЧЕТОВ' 40 PRINT" 50 60 INPUT'ЗАДАЙТЕ КРАТНОСТЬ ЧАСТОТ M='MsDIM А(М)/В(М) INPUT'ЗАДАЙТЕ ЧАСТОТУ F='F 70 FOR К=0 ТО M8LETA(K)=0sLETB<K)=0:NEXT К 80 LETX«2»#PI*F8INPUT'ЗАДАЙТЕ ДЛИТЕЛЬНОСТЬ ВСЕГО ИНТЕРВАЛА 90 LETZ=X*T/2sINPUT'ЗАДАЙТЕ ЧИСЛО ОТСЧЕТОВ №='N 100 INPUT'ВВЕДИТЕ МОМЕНТ ВРЕМЕНИ Т 0='Т0 110 INPUT'ВВЕДИТЕ ЗНАЧЕНИЕ ФУНКЦИИ F(T 0+0)='Y0 120 FOR 1=1 ТО N-lsPRINT'ВВЕДИТЕ МОМЕНТ ВРЕМЕНИ Т'‘3.011 130 INPUT Т18 INPUT'ВВЕДИТЕ ЗНАЧЕНИЯ F(T-0)/F(T+0) 'YbY2 140 LETY=Yl-Y0sFOR К=1 ТО MsLETX0sX*K*T08LETXl=X*K*Tl 150 LETX2«Yz(X1-Х0)s LETD=Z*K s LETS0=SIN < X0) 160 LETS1=SIN <XI):LETC0=COS< X0)s LETC1«COS(Xi) 170 LETA(K)»A<K>+<Y1*S1-Y0«S0+X2*<C1-C0))/D T='T 180 LETB(K)=B<K^+<V0*C0-Y1*C1+X2«S1-S0))/D8NEXT К 190 LETA(0>=A<0)+<Tl-T0)*<Y0+Yl)/2/T8LETY0=Y2 200 LETT0=T1sNEXT lsLETE=0 210 PRINT' К МОДУЛЬ M(K) СПЕКТР.ПЛОТН.З(К) ФАЗА 0<ГРАД)' 220 PRINT 13.010;' '!F1.5‘A<0>" 'A(0)*T 230 LETE=08FOR К=1 ТО MsLETG=SQR(A<K)*A(K)+B(K)*B(K)> 235 IF К=1 THEN LETG1=G 240 LETE=E+6*68LET6«08IF G=0 THEN 260 250 LETQ=-ACS(A<K)/G)8IF BCKX0 THEN LETQ=-Q 260 PRIHT13.0‘K;' '!F1.5‘G>' 'G*T/2>' 'DEG(Q)8NEXT К 265 PRINT'КОЭФФИЦИЕНТ ГАРМОНИК Kr='SQR(E-Gl*Gl)/Gl 270 PRINTS INPUT'ВВЕДИТЕ ВРЕМЯ TX='U8LETY=A(0)sLETP=X*U 280 FOR K=1 TO M8LETF«U*K8LETY«Y+A<K)*COS<W)+B<K)*SIN<W)8NEXT К 290 PRINT'ЗНАЧЕНИЕ Y(TX)='YsGOTO 270SEND Эту программу можно проверить по при- меру, приведенному к программам 5.1 и 5.2. Программа 5.9 обеспечивает одновременно и тригонометрическую интерполяцию, т. е. вычисление у (/) для любого заданного t с помощью гармонического синтеза. Расчет амплитудно-частотной (АЧХ) и фазо-частотной (ФЧХ) характеристик линей- ной системы по ее переходной характери- стике (ПХ) а (/) является одним из важных практических приложений спектрального ана- лиза. Он основан на следующей связи этих характеристик: 4 (/(d) —а (0) Н~4С (ю) ~ЬМ$ ((d), /о где Ас ((d) =j a' (t) cos <о/ dt, 4$ ((d) = /о О =] а' (/> sin (о/ dt, причем АЧХ (/ = ю/2л) о применяя для вычисления Ас ((d) и As ((d) метод численного интегрирования с попра- вочными коэффициентами (см. § 5.1), полу- чим [9, 10]: Ac(f) = N sin (л/ А/) V / = 1 -д/ /. (Ф-Ф-|) cos (л/ Д/ (2< —1)), <=| (/) = sin (л/ А/) V г ч Р д =------ > (az-az-Osm (л/ А/ (2Z— 1)). л/ А/ По вводимым отсчетам ПХ af = a (6) нахо- дим Ас (со), 4s ((d) для. заданных f и А/, после чего находим точки АЧХ 4 (/) и ФЧХ 132
Программа 5.10. 05 PRIНТ'ВЫЧИСЛЕНИЕ АЧХ И ФЧХ ПО ПХ' 10 INPUT 'ЧИСЛО ОТСЧЕТОВ ПХ М='М 20 INPUT 'A='Xs LETM=M-1: DIM ACM) 30 FOR 1=1 TO Ms INPUT 'A='Y 40 LETACI)=Y-Xs LETX=Y 50 NEXT I: INPUT 'ШАГ T='T 60 LETC=0s LETS=0 70 INPUT 'ЧАСТОТА F='F 75 LETP=(#PI)*F*T 80 FOR 1=1 TO M 90 LETC=A(I)*C0SCP*(2*I-l))+C 100 LETS=ACI)*SIN<P*C2*I-1))+S:NEXT I 110 LETC1=C*SIN(P)/P! LETS1=S*SIN<P)/P 120 РР1НТ'К0ЭФ. ПЕРЕДАЧИ ФАЗОВЫЙ УГОЛ' 130 PRINT !2.3! SQR(C1~2+S1~2),DEG<-ATN<S/C>) 140 GOTO 60s END Пример. Для ai==0,05; a2 = 0,4; аз = = 0,75; a4=l; a5=l,16; a6=l,2; a7—1,16; de =1,08; «9=1,02; aio = 1,0 и Д/ —0,1 получим A (2) = 0,2367203833, ф(2) = = -160,4352421°. Метод Берга служит для расчета спектра усеченных косинусоид, получаемых при воз- действии х (/) =хм cos (со/) 4-Хо, действую- щем на входе системы с передаточной ха- рактеристикой у=f (х), аппроксимированной двумя отрезками прямых: у (х) =0 при Х^Хо, y(x)—Sx при х> Хо, где S — крутизна передаточной характери- стики. При этом косинусоидальный импульс характеризуется амплитудой ум и углом от- сечки 0 = arccos [ (хо —Хо)/хм]. Метод Берга сводится к расчетам по формулам ^ — У^/Ум — (sin 0 — 0 cos 0)/л (1 — cos 0), Ъ\—Ум\/Ум — (6— sin 0 cos 0)/л (1 — cos 0), У Nik 2 sin kQ cos 0 — k cos sin 0 a*=-----=---------------------------. Ум л k (k2 — 1) (1—cos0) Программа 5.11. Пример. Для заданной амплитуды хЛ1=4 = 10, сдвига Х0 = Л=0 и порога х0 = = Х0 = 0 получим угол 0 = Q = 9O°, ao = = 40 = 0,3183098862, a, = 41=0,5 и a2 = = 42 = 0,2122065908: § 5.3. Статистический анализ и подготовка гистрограмм Одномерный массив из N некоторых циф- ровых данных х, характеризуется совокуп- ностью статистических характеристик (одно- мерная статистика), перечисленных ниже. Начальные моменты k-vo порядка Обычно k~\, 2, 3 и 4 (точность вычисле- ния ink при /г> 4 низкая). Центральные моменты /г-го порядка N Мк =4г У к—«I (•*)]*• /V L—J i= 1 Момент Mi (х)=0. I© PRINT'РАСЧЕТ КОЭФФИЦИЕНТОВ БЕРГА' 20 PRINT'ВВЕДИТЕ КОД N' 30 PRINT' 0/ ЕСЛИ УГОЛ ОТСЕЧКИ НЕ ЗАДАЕТСЯ' 40 INPUT' Ь ЕСЛИ УГОЛ ОТСЕЧКИ ЗАДАЕТСЯ N='N 50 IF Н=0 GOTO 80 68 IF N»1 GOTO 125 70 PRINT'КОД НАБРАН НЕВЕРНО'sGOTO 15 80 INPUT'ЗАДАЙТЕ АМПЛИТУДУ A«'A 90 INPUT'ЗАДАЙТЕ ПОСТОЯННЫЙ СДВИГ F='F 100 INPUT'ЗАДАЙТЕ ПОРОГ X0='X 110 LETQ=ACS<CX-F)/A) 120 PRINT 1Fl.9!'УГОЛ ОТСЕЧКИ В ГРАДУСАХ Q«'DEG<Q)sGOTO 130 125 INPUT'BBEAHTE УГОЛ ОТСЕЧКИ В ГРАДУСАХ Q='QsLETQ=RAD<Q) 130 LETV0=(SIN<Q)-Q*COS<Q>)/(#PI*<1-COS<Q)>) 140 PRINT'КОЭФФИЦИЕНТ A0='V0 150 LETV1=<Q~SIN<Q)*COS<Q>>/<#PI*<l-COS(Q)> > 160 PRINT'КОЭФФИЦИЕНТ A1='Y1 170 INPUT'ЗАДАЙТЕ НОМЕР ВЫСШЕЙ ГАРМОНИКИ К>2 К='К 180 LET¥=2*<SIN<K*Q)*C0S<Q)-K*C0S<K*Q>*SIN<Q)) 190 LETY=Y/<#PI*K*< <К~2)-1>ж(1-C0SCQ))) 200 PRINT’2.01'КОЭФФИЦИЕНТ А'К'='•1.9‘YsGOTO 170SEND 133
Связь центральных моментов с началь- ными устанавливается соотношениями (аргу- мент х в скобках опускаем) М2 —m2 —т?, Л4з = т3—3mim24-2mi, М 4 = m4—4m 1 шз 6m ? m2 — 3m t, которые позволяют вычислять Мь по мере ввода xi (без запоминания массива Xi). Среднее значение есть наиболее вероятное значение числа в массиве. Дисперсия смещенная N D~ X |»1 является наиболее вероятной степенью откло- нения xi от среднего значения х. Стандартное отклонение смещенное определяет среднеквадратичную погрешность xi, если за точное значение принять х. Дисперсия несмещенная N i =s 1 применяется при статистической обработке чисел Xi с нормальным распределением. Стандартное отклонение несмещенное о о = вытянут правый, а при А <0 — левый участок спада кривой Р (х). Коэффициент эксцесса N e~~ncfL\ (х‘~х)=°Ж-3 характеризует степень остроты пика кривой Р (х) в сравнении с Р (х) для нормального распределения. Если Е> 0, Р (х) имеет более острый пик, чем при нормальном распреде- лении, если Е<0— пик менее острый. Вспомогательные коэффициенты .. / 6(Л’— 1) = -у(дг+1)(ЛГ+3) . g4_g4--J-2l(*-2} <^-з> V (Я+5) служат для приближенной проверки гипо- тезы о нормальном распределении хь Если Д<а:1/(2~3) и Е<а4/(2~3), то распределение Р (х) для массива х/ можно считать нормальным. При программировании вычислений одно- мерной статистики желательно предусмотреть следующие возможности: 1) накопление сумм х*; 2) возможность исключения ошибочно введенного числа xf; 3) подсчет W в ходе ввода xt\ 4) выдачу статистических характе- ристик в любой момент (до окончания ввода всех х<). Все это обеспечивает приведенная ниже программа. Программа 5.12. 1© PRINT'СТАТИСТИЧЕСКАЯ ОБРАБОТКА МАССИВА ЧИСЕЛ XI' 20 PRINT'ИНСТРУКЦИЯ» ДЛЯ ИСКЛЮЧЕНИЯ ОШИБОЧНО ВВЕДЕННОГО' 30 PRINT'ЧИСЛА НАЖМИТЕ КЛАВИШУ СБР И ДАЙТЕ КОМАНДУ GOTO ВО' 40 PRINT'ДЛЯ ВЫВОДА РЕЗУЛЬТАТОВ НАЖМИТЕ КЛАВИШУ СБР И' 50 PRINT'ДАЙТЕ КОМАНДУ GOTO 1О0' 55 LETA=0s LETB=0s LETC=0s LETD=0sLET1=0 60 PRINT‘4.01'ВВЕДИТЕ X'I+ls INPUT XsLETI=I+l 70 LET A=A+Xs LETB=B+X*X s LETU=X*X*X s LETC=C+Ws LETD=D+W*XsGOTO 60 80 LET1=1-18LETA=A-Xs LETB=B-X*Xs LETW=X*X*Xs LETC=C-W 90 LETD=D-W*XS6OTO 60 100 LETM1=Az1s LETM2=Bz1s LETM3=CzIs LETM4=Dz1 110 LETD1=M2-M1«M18LETD2=IH*Iz<1-1) 120 LETK=M3-3*Ml*M2+2*Mr*Ml*Ml 130 LETU=M1*M1 s LETL«M4-4*M1*M3+6*W*M2-3:*W*W 140 LETA1=KzD1л1.5s LETE«LzD1zD1-3 150 LETU3=SQRC6*<1-1)z<1 + 1)z<I+3>> 160 LETU4«SQR(24*I*(I-2>*<I-3>z(I+3>z<I+5>/<1-1>~2) 170 PRINT‘Fl.9‘'СРЕДНЕЕ Ml=*Ml SPRINT'ДИСПЕРСИЯ D«'D1 180 PRINT'ДИСПЕРСИЯ D0«'D2sPRINT'АСИММЕТРИЯ A='A1 190 PRINT'ЭКСЦЕСС E='EsPRINT'ЦЕНТРАЛЬНЫЙ МОМЕНТ M3='K 200 PRINT'ЦЕНТРАЛЬНЫЙ МОМЕНТ M4='LsPRINT'ВВЕДЕНО ЧИСЕЛ N='!4.0‘I 210 PRINT‘.Fl .9*' КОЭФФИЦИЕНТ U3«'U3 220 PRINT'КОЭФФИЦИЕНТ U4='U4sG0T0 60SEND Коэффициент асимметрии N a==~nd^'L i=l характеризует скошенность графической функ- ции плотности распределения -вероятностей Р (х). При Л = 0 она симметрична, при Л> 0 134 Пример. Допустим, надо найти стати- стические параметры массива из 10 чисел х/: 9, 8, 10, 9, 11, 12, 10, 10, 9 и 11. Пустив про- грамму командой RUN, вводим числа xt. При этом индицируется номер I. Если какое-то число введено ошибочно, достаточно нажать клавишу СБР и дать команду GOTO 80 (фиксируется нажатием клавиши ПС). По
окончании ввода всех чисел (или их части) нажимается клавиша СБР и дается коман- да GOTO 100. Для указанных выше чисел получаем: среднее т\ =9,9; дисперсия D = = 1,29; дисперсия Do = 1,433333333; А = = 1,965657837 • 10"1; £ = - 7,539210384 • 10"1; Мз = 0,288; М4 = 3,7377; W=10 (число вве- денных чисел); D3 = 0,6145098678 и D4 = = 0,9224435941. Сразу после получения ре- зультатов можно продолжить ввод после- дующих Xi. Среднее геометрическое для N чисел xt определяется как Gm=(*i-*2- ... -xN)i/N. Гармоническое среднее Hm~N/(x~* 4-яГ1 -Ь ... +^^')- Программа 5.13. шинстве случаев отрезки [dudz], [d2, d3] и т. д. имеют одинаковую ширину С = Дх=(хЛ1-х0)/^ (5.22) где хм — максимальное значение xt, хо — минимальное значение х„ N — число интер- валов. Тогда алгоритм ускоренной подго- товки данных для построения гистограмм будет следующий. 1. Вводим хм, хо и W. 2. Определяем массив счетчиков A (N), вычисляем С по формуле (5.22) и полагаем /=1. 3. Организуем ввод х/, вычисление 7 /4- 4-1 (формирование текущего номера i каждого хд и вычисление вспомогатель- ной переменной У=int (СХ (х —хо)). 10 PRINT'ВЫЧИСЛЕНИЕ ГЕОМЕТРИЧЕСКОГО СРЕДНЕГО GM' 20 PRINT' И ГАРМОНИЧЕСКОГО СРЕДНЕГО НМ' 30 PRINT'ИНСТРУКЦИЯ! ДЛЯ ВЫВОДА РЕЗУЛЬТАТОВ ЗАДАЙТЕ' 40 PRINT' ПОСЛЕ ВВОДА ПОСЛЕДНЕГО XI НУЛЬ' 50 LETI=0“.LETS«0! LETR=1 60 PRINT'BBEAHTE X'!4.0! HD INPUT Xs IF X=0 GOTO S3 70 LETR=R*XsLETS=S+l/XsLETI=I+l:GOTO 60 30 LETG=R”( 1/D:PRINT!Fl.9!'СРЕДНЕЕ ГЕОМЕТРИЧЕСКОЕ 6M='G 90 LETH=I/3SPRINT'СРЕДНЕЕ ГАРМОНИЧЕСКОЕ HM='H:END Пример. Для вычисления GM и Нм по этой программе после ввода последнего числа xN нужно ввести 0. Например, для пяти чисел 2; 3,5; 6,1; 1,2 и 3,9 получим GM — 2,88492645 и Нм = 2,45171074. Гистограмма распределения характери- зует количество чисел X/, попадающих в ин- тервалы изменения х с границами do, di, da,... ..., dN. Гистограмма распределения графи- чески строится в виде столбцов, высота кото- рых соответствует количеству xit попавших в интервал изменения х, на который опи- рается столбик (на горизонтальной оси х). Гистограмма интегрального распределения характеризует количество чисел, попадающих в интервалы ( —oo.di), (—00, da), ... ..., (-oo.dyv). Значение У указывает на номер того отрезка, в который попадает заданное зна- чение Xi. 4. Вычисляем А (У) А (У) 4- 1 (т. е. вносим 1 в содержимое счетчика Л (У)) и возвращаемся к п. 3. 5. Вывод данных для построения гисто- грамм организуем с помощью цикла с управ- ляющей переменной 7, меняющейся от зна- чения 1 до W с шагом 1. Числа попадания х, в 7-й отрезок получаем выводом значений А (7). Для получения данных для построе- ния гистограммы интегрального распределе- ния вычисляем 5^-5 + Л(7) при началь- ном S — 0. Программа 5.14. 10 15 20 30 40 50 70 80 90 МАССИВА ЧИСЕЛ X REM'ПОСТРОЕНИЕ ГИСТОГРАММ ---------- PRINT'ДЛЯ ВЫВОДА РЕЗУЛЬТАТОВ ПОСЛЕ ВВОДА XI НАЖАТЬ PRINT'КЛАВИШУ СБР И ДАТЬ КОМАНДУ GOTO 100' INPUT'BBEAHTE X0«'X0sINPUT'BBEAHTE XK«'X1 INPUT'BBEAHTE ЧИСЛО ИНТЕРВАЛОВ ГИСТОГРАММЫ N»'N DIM A<N)SLETI«1SLETC=<X1-X0)/N PRINT 14.0!'ВВЕДИТЕ X<'I')='8 INPUT X LETI»I+18 LETV=INT<C*(X-X0)) LETA<Y>»A<Y)+1sGOTO 70 100 LETS«08FOR Js0 TO N-lsLETS=S+A<J) 110 PRINT!4.0»'ДЛЯ J»'J' NJ«'A<d)' SJ«'S 120 NEXT JsPRINT'ВВЕДЕНО'1-1'ЧИСЕЛ'sGOTO 708END Алгоритмы подготовки гистограмм. Про- стейший алгоритм подготовки гистограмм заключается в сравнении xt с сеткой границ di, d-2, ..., d/у с помощью операций услов- ных переходов и подсчете числа попада- ний Xi в каждый интервал. Однако про- грамма при большом числе интервалов полу- чается громоздкой, а главное, большим полу- чается время обработки каждого х». В боль- Пример. После ввода всех х„ для вывода данных к построению гистограмм следует нажать клавишу СБР пульта дис- плея и дать команду GOTO 100. Для х0 = 5, хЛ1=10, W = 5 и х, = 6,2; 7,1; 9,6; 8,3; 7,4; 8,1; 6,7; 5,5; 7,2; 7,6; 7,9; 9,7; 8,5; 6,8 и 8,4 получим следующие результаты, которые могут в дальнейшем использоваться для гра- фического представления гистограмм: 135
J=0 NJ = 1 SJ = 1 J = 1 NJ=3 SJ=4 J=2 NJ = 5 SJ=9 J=3 NJ =4 SJ = 13 J=4 NJ = 2 SJ=15 Статистические расчеты на специализи- рованных ПЭВМ обычно выполняются мик- ропрограммно. Так, вычисление статистиче- ских параметров для %/ —55, 54, 51, 55, 53, 54 и 52 на ПЭВМ FX==702P проводится в следующем порядке. 1. Нажав клавиши F\ и SAC (стати- стика, общее стирание), обнуляем накапли- вающие регистры. 2. Вводим Xi набором каждого числа и нажатием клавиши STAT (статистика). Если набранное (но не обработанное) число оши- бочно, его исключают нажатием клавиш АС (полный сброс числа) или С (сброс послед- ней цифры). Если ошибочно введенное число обработано (была нажата клавиша STAT), оно исключается нажатием клавиш Fi и DEL/STAT. 3. Результаты вычислений получаем на- бором операторов, выполнение которых фик- сируется нажатием клавиши ЕХЕ: Далее, вводя соответствующие операторы (см. выше), получим MX EXE 137.7142857 (среднее х) Fi SDX ЕХЕ 18,42898069 (о) Fi SDXNEXE 18,2968716 (а0) Описанные операторы могут использо- ваться и в программах, что упрощает их построение при более сложных статистиче- ских расчетах, например, если надо вычис- лять. также коэффициенты асимметрии и эксцесса. Микропрограммная реализация зна- чительной части статистических расчетов су- щественно повышает скорость статистических вычислений и уменьшает вероятность оши- бок. § 5.4. Реализация метода Монте - Карло Метод Монте-Карло заключается в ис- пользовании случайных чисел для моделиро- вания различных объектов, ситуаций и физи- ческих явлений, реализации игр (подобных игре в карты) и др. Оператор Результат Наименование результата CNT 8 Количество чисел W SX 427 Сумма чисел х< SX2 22805 Сумма xi MX 53.375 Среднее х SDX 1.407885953 Стандартное отклонение ао SDXN 1.316956719 Стандартное отклонение а Возможна обработка групп чисел, напри- мер: Номер группы 1 2 3 4 5 Число ПО 130 150 170 190 Количество чисел в 10 31 24 2 3 группе В этом случае вводятся число, затем знак ГП и количество чисел в группе. Например, для ввода и обработки первой группы вводим команды, ПО □ 10 | STAT | С помощью команды F\ ASTAT/STAT можно (после ввода всех групп) обеспечить выдачу в автоматическом режиме следующих дан- ных .(пример для приведенной совокупности чисел): CNT = 70 SX =9640 SY =0 SX2= 1351000 SY2 = 0 SXY =0 (общее количество чисел) (сумма Xi) (сумма у, — 0) (сумма х?) (сумма д/? = 0) (сумма Xii/< = 0) В этом режиме выдаются также пара- метры массива у^ элементы которого не вводились (поэтому значения SY, SY2 и SXY нулевые). Равномерно-распределенные случайные числа обычно генерируются ЭВМ в отрез- ке значений [0; 1], причем любое значение К< в этом интервале равновероятно. Обычно для этого используется отделение дробной части от сложного арифметического выра- жения, содержащего предшествующее число Vi. Например, может использоваться соотно- шение вида + 1 = FRAC (kVi), где fe=8/±3 и t — нечетное целое число (при / = 5 k = 37 или k = 43). Обычно перед использованием датчика случайных чисел за- дается начальное значение Ко на отрезке [0; 4-1]. Задание разных Ко позволяет фор- мировать различные последовательности слу- чайных чисел. В действительности полу- чаются «квазислучайные» числа, т. е. спустя некоторое количество циклов последователь- ности чисел повторяются. Количество не- повторяющихся чисел находится в пределах от нескольких тысяч до сотен тысяч. Перевод равномерно-распределенных слу- чайных чисел на отрезке [а, 6] произво- дится с помощью формулы Х,+ 1=а+(*-а) Vi+i. Случайные числа с различными законами распределения получают с помощью формул преобразования (см. [10, 38]). 136
Случайные числа с нормальным распре- делением могут быть получены с помощью /?»•—\/2 1п (1/К-) cos (2лVi-1), /?<' =^2 In (1/V,) sin (2nV,_i). При этом получается сопряженная пара чи- сел, имеющих среднее значение ^ = 0 и сред- неквадратичное отклонение о==1. При других значениях R и о производится пересчет по формуле ft 4-1 = R 4“ Ri + 1 ® • Обобщенный алгоритм реализации мето- да Монте-Карло (рис. 5.3) обеспечивает мо- делирование работы объекта и вычисление основных статистических характеристик его функциональных параметров. Наглядным примером применения метода Монте-Карло является программа 5.13 для обучения школьников младших классов таб- лице умножения. Программа генерирует два случайных числа, переводит их в отрезок [ 1; 9] и предлагает учащемуся перемножить эти числа. Результат сравнивается с пра- вильным. Оценка выставляется по резуль- татам анализа десяти операций перемно- жения. Читателю предлагается самостоя- тельно разобрать эту программу. Программа 5.15. Рис. 5.3. Обобщенный алгоритм применения ме- тода Монте-Карло Корреляционный момент двух последова- тельностей N — (х, —mu). i = 1 05 PRINT'ОБУЧЕНИЕ ТАБЛИЦЕ УМНОЖЕНИЯ' 10 LETX=.7654321sLETN=8 20 FOR 1=1 TO 10 30 LET A=RND(X)sLET B=RND(X) 40 LET A=INT<A*9+1)sLET B=INT<B*9+1) 50 PRINT 12.01'СКОЛЬКО БУДЕТ' A' В' =?' s INPUT" С 60 LET D=A*Bs IF C=D THEN 80 70 PRINT'НЕВЕРНО'А'ж'B'='Ds LET N=N+ls&OTO 85 80 PRINT'ПРАВИЛЬНО' 85 NEXT I 90 IF N=8 THEN 140 100 IF N<»1 THEN 150 110 IF N<=3 THEN 160 120 PRINT'ВЫ HE ЗНАЕТЕ ТАБЛИЦУ УМНОЖЕНИЯ' 130 PRINT'ПОУПРАЖНЯЙТЕСЬ ЕШЕ':бОТО 18 140 PRINT'ОТЛИЧНО.ВСЕ РЕШЕНО ВЕРНО'S60T0 10 150 PRINT'ХОРОШО.ОДНА ОШИБКА'sGOTO 10 160 PRINT'ПОСРЕДСТВЕННО.ДОПУШЕНЫ' N ' ОШИБКИ'гБОТО 10 170 END Отметим основные области применения метода Монте-Карло: решение нелинейных уравнений, вычисление экстремумов (в том числе глобальных у многоэкстремальных функций многих переменных), вычисление определенных интегралов большой кратно- сти и др. § 5.5. Корреляционный анализ Корреляция является признаком, указы- вающим на взаимосвязь ряда численных последовательностей. Парная корреляция ха- рактеризует взаимосвязь двух последователь- ностей Xi и Уь Коэффициент парной корреляции R = (5.23) характеризует степень отклонения связи между xt и у, от линейной. Если |/?( близок к 1, то эта связь линейна, т. е. y^axj-j-b, 137
причем знак R определяет знак коэффициен- та а. Если /?> О, то а> 0, и напротив, при /?<0 а<0. Программа 5.16. описывающей связь между некоторым чис- лом N пар значений xi и <//, обеспечивая при этом наименьшую среднеквадратичную погрешность. Графически эту задачу можно 05 PRINT'ВЫЧИСЛЕНИЕ КОЭФФИЦИЕНТА ПАРНОЙ КОРРЕЛЯЦИИ' 10 INPUT'ВВЕДИТЕ Ы»'Н 20 LETA=0!LETB«08LETC=0sLETD=0sLETE=0 30 PRINT'ВВЕДИТЕ ПОПАРНО XCI>,Y<I>' 40 FOR I«1 TO N:PRINT!3.0!'I»'I 45 INPUT'X<I)='XsINPUT'Y<I)e'Y 5© LETA^A+XsLETB«B+Ys LETC«C+X~2 60 LETD»D+Y^2:LETE=E+X*YsNEXT I 70 LETR=<E“A*B/N)/SQR< <C-<A~2)/N>*(D-<B~2>/N)> 80 PRINT IF1.9!'КОЭФ.КОРРЕЛЯЦИИ R='R Пример. Для W=5 и yi (xt), равных 2(0,95); 4,05(2,1); 5,8(3); 8,1 (4,1) и 9,2 (4,9), получим jR = 0,9987280191. Порядковая корреляция по Спирмену оценивается коэффициентом порядковой кор- реляции [18] N I где Ak и Bk — место (ранг), которое зани- мают Xk и yk при убывании Xk. Программа 5.17. представить следующим образом — в облаке точек x.yi плоскости ху (рис. 5.4) требуется провести прямую так, чтобы величина всех отклонений отвечала условию N У (x/)l2=min, / = I где у (xi) — зависимость (5.24). Для этого 10 PRINT'ВЫЧИСЛЕНИЕ КОЭФФИЦИЕНТА РАНГОВОЙ КОРРЕЛЯЦИИ' 20 INPUT'ВВЕДИТЕ N«'NsLETS*8 30 FOR I«1 ТО № PRINT 14.0!'ДЛЯ 1='I 40 INPUT'ВВЕДИТЕ Ал В 'АлВ 50 LETS=$+<A-B)~2sNEXT I 68 LETR«1-6*S/N/<N~2-1) 70 PRINT!F1.9!'КОЭФФИЦИЕНТ R KOP»'RsEND Пример. Для A=7 и А (В), равных 5(6), 4(7), 3(3), 7(5), 2(1), 1(2), 6(4), по- лучим Rn=0,6428571429. Вычисление коэффициента корреляции на специализированных ПЭВМ выполняется микропрограммно. Так, на ПЭВМ FX-702P для этого выполняются следующие опера- ции. 1. Нажатием клавиш F\ и SAC обну- ляются ячейки памяти статистических рас- четов. 2. По схеме DEL %, □»/< | STAT | вводятся пары чисел х, и у,. Ошибочно вве- денная и обработанная пара исключается нажатием клавиш Fi и DEL/STAT. 3. Вводом команды COR вычисляется R, § 5.6. Регрессионный анализ (приближение функций по методу наименьших квадратов) Линейный парный регрессионный анализ заключается в определении параметров эм- пирической линейной зависимости у (х)=61х4-^о, (5.24) нужно приравнять нулю частные производ- ные N 1== 1 dU -5^-= Д [у/— (6о + *|Х/) АС,], I = I что дает для определения неизвестных коэф- фициентов Ьо и Ь\ систему линейных Рис. 5.4. К линейной регрессии 138
уравнений лг boN+bi х>= Z У'< 1=1 1=1 N NN bo Z x<+*i Z *?= Z *№ / == 1 / «= 1 1 = 1 Решение этой системы: NN N Z xi I y>—N Z x>y> . _< = 1 <i (.| N N Программа 5.18. 05 PRINT*ЛИНЕЙНАЯ РЕГРЕССИЯ* 10 INPUT 'ВВЕДИТЕ N=*N 20 LETA=0:LETB=0!LETC=08LETB=0 30 PRINT!3.0!*ВВЕДИТЕ X(I),Y<I>* 40 FOR 1=1 TO № PRINT *1=*I 50 INPUT *X<I)=*X5INPUT *V<I)=*Y 60 LETA=A+Xs LETB=B+YsLETC=C+X~2 70 LETP=D+X*YsNEXT I 80 ЕЕТВ1=(йжВ-НжИ>/<Ал2~НжС) 90 LETB0=<B-B1*A)/N 100 PRIHT»F1.9!*Y=*B0*+*B1*«X* 110 IHPUT*ВВЕДИТЕ X=*X 120 PRIHT*YCX)=*B0+Bl*XsGOTO 110--END Пример. Пусть имеется совокупность из А'=5 пар #,(х,): 5,5(2); 6,3(4); 7,2(6); 8(8); 8,6(10). Введя эти данные, получим до = 4,75 и di =0,395. Следовательно, зави- симость у (х) имеет вид у (%) ==4,754- 0,395х. Программа предусматривает вычисление у по заданному значению х. При необходимости программа может быть легко дополнена вычислением коэффи- циента парной корреляции R (5.23) или среднеквадратичной погрешности что позволит количественно оценивать сте- пень приближения точек х(#( к прямой (5.24). Линейная регрессия с помощью специа- лизированных ПЭВМ выполняется микро- программно. Так, у ПЭВМ FX-702P пре- дусмотрены операторы LRA и LRB для вы- числения параметров А = 6о и B = di линей- ной регрессии у(х)=А + Вх, а также операторы EOY для вычисления у по задан- ному х и ЕОХ для вычисления х по задан- ному у. Одновременно при этом вычисляется коэффициент корреляции R и другие стати- стические параметры массивов х, и опи- санные ранее (всего 17 параметров). Последовательность вычислений рассмот- рим на примере к программе 5.18 (см. ниже). Как показывает данный пример, ПЭВМ FX-702P, специализированные на научно- технические и статистические расчеты, обеспе- чивают микропрограммное (т. е. без ввода внешних программ) вычисление важнейших характеристик двумерных массивов xf#/, а так- же проведение корреляционного и линейного регрессионного анализа. Указанные выше операторы могут использоваться и в составе внешних программ, что резко упрощает по- следние. Нелинейная парная регрессия сводится к получению заданной нелинейной зависимости у (х) (нелинейной по независимой перемен- ной х, но линейной по параметрам этой зависимости!), приближающей совокупность Обнуление регистров памяти Fi SAC Ввод 1 пары X/, у. 2, 5.5 STAT Ввод 2 пары X/, у< 4, 6.3 STAT Ввод 3 пары х/, yi 6, 7.2 STAT Ввод 4 пары х/, у. 8, 8 STAT Ввод 5 пары х/, у/ 10, 8.6 STAT Вычисление А Fi LRA EXE 4.75 Вычисление В Fi LRB EXE 0.395 Вычисление ох Fi SDX EXE 3.16227766 Вычисление аох Fi SDXN EXE 2.828427125 Вычисление <зу Fi SDY EXE 1.251798706 Вычисление <тоу Fi SDYN EXE 1.1196428 Вычисление R F, COR EXE 0.9978438785 Вычисление W Fi ASTATCNT = 5 Вычисление суммы х/ SX = 30 Вычисление суммы yi SY=35.6 Вычисление суммы xf SX2 = 220 Вычисление суммы у? SY2 = 259.74 Вычисление суммы xiyi SXY = 229.4 Вычисление х MX EXE 6 Вычисление у MY EXE 7.12 Вычисление у при х = 5 EOY 5 EXE 6.725 Вычисление х при #=6,725 EOX 6.725 EXE 5 139
чисел х, и у, с наименьшей среднеквадратич- ной погрешностью. Сведение нелинейной регрессии к линейной выполняется с помощью линеаризирующих преобразований в ходе ввода Xi, у, и при выводе Ьо и bi (см. табл. 5.1). Такое све- дение целесообразно, если ПЭВМ имеет микропрограммное вычисление параметров Ьо и Ь\ линейной регрессии или в распоря- жении пользователя имеется только такая программа. Пример. Зависимость yi (xi), заданная числами 21,4(6,9); 15,7(12,9); 12,1(19,8); 8,5(26,7) и 5,2(35,1) близка к экспонен- циальной у—АеЬх. Для нахождения А и В ввод Xi и yi проводим по схеме (для ПЭВМ FX-702P) Xi LN yi STAT т. e. вместо yi вводим In yi. Тогда константу A =0,2388010829 получим, введя команды EXP LRA EXE, а константу £ = 2,771866148 получим, введя команды LRB EXE. В общем случае для нелинейной регрес- сии более удобно использовать специальные программы, не требующие специальных пре- образований при вводе х(, у{, а также при выводе результатов вычислений. Гиперболическая регрессия заключается в нахождении параметров функции У (х)=5о + ^|/х из решения системы уравнений JV N baN+tb £ 1/х(=£ У‘< 1=1 < = 1 N N N Е '/*+*! Е •/*?= Е у*/*- i — I i — 1 z ~ 1 Программа 5.19. ©5 PRINT‘ГИПЕРБОЛИЧЕСКАЯ РЕГРЕССИЯ' 10 INPUT’BBEAHTE H='N 20 LETA=0sLETB=0sLETC=05LETD=0 30 PRINT‘ВВЕДИТЕ ПОПАРНО Х(1Ъ¥<I>' 40 FOR 1=1 ТО № PRINT!3.0!'1='I 50 INPUT'X(I)='Xs INPUT'?<! >='V 60 LETA=A+1/Xs LETB=B+1/<X~2) 70 LETC=C+Vs LETD=D+Y/X:NEXT I 80 LETE=N«B-A~2: LETF=C»B-D*A 90 LETK=N*D-A*Cs LETF=F/E: LETK=K/E 100 PRINT!F1.9!'Y(X)='F'+'K'/X' 110 IHPUT'BBEAHTE X='X 120 PRINT'Y<X)='F+K/‘Xs GOTO 110SEND Пример. Для W=8 и у,(xi), за- данных значениями 12,2(1); 6,8(2); 5,2(3); 4,6(4); 3,9(5); 3,7(6); 3,5(7) и 3,2(8), по- лучим Ьо =1,935761896 и bi = 10,16017523. При х=2 получим у = 7,015849511. Степенная регрессия обеспечивает нахож- дение параметров функции у=Ьохь' по формулам Н N N X In Xi £ In — W £ In xi In yi _________ /N \2 N (|n x<) —N Z (lnx-)2 Таблица 5.1 Преобразования, сводящие нелинейную регрессию й линейной (ее параметры помечены штрихами) № Функция у (х) x' y' bo bi 1 bo -f- b 1 х X У bo b\ 2 l/(bo + bix) X Чу b'o b\ 3 bo -р bi/x \/x У b'o b'l 4 x/(b0^bix) X */У b'o b'o 5 bob* X 1g!/ \Ob'o 10Ы 6 60exp (b\/x) X in X exp b'o b'i 7 bo 106,x X igy IO*0 b'i 8 1/(bo+ b\e~x) e~* Чу, bo bi 9 box'x Ig* Igy IO6" bi 10 bn + bi Ig x 1g* У b'o bi И In x In X У b'o bi 12 bo/(bi+x) X Чу \/b\ b'o/bi 13 box/ (bi +x) \/x Чу \/b\ bo/bi 14 bo exp (bi/x) l/x In X. . exp b'o bi 15 bo 10fe,/x 4* Igx 106b bi 16 bo -|- b \xn xn У b'o bi 140
Программа 5.20. 05 10 20 30 40 50 60 78 80 90 PRINT'СТЕПЕННАЯ РЕГРЕССИЯ' INPUT'ВВЕДИТЕ N='N LETA=08LETB=0s LETC=0sLETD=0 PRINT'BBEAHTE ПОПАРНО X<I)>Y<I)' FOR 1=1 TO № PRINT’3.0!'1='I INPUT'X<I)='XsINPUT'Y(I)='Y LETA=A+LOG<X)s LETB=B+LOG<Y) LETC=C+LOG < X > «LOG < Y)sLETD=D+LOG < X)"28NEXT I LETE=<A«B-N*C)/<A~2-N«D> LETF=EXP<<B-E*A)/N) 100 PRINT1F1.9!'Y(X)='F'*X~'E 110 INPUT'ВВЕДИТЕ X='X 120 PRINT'Y<X)='F’*X~E5 GOTO 110SEND Пример. Для W = 6 и у, (x.j, заданных числами 3(1), 12(2), 27(3), 48(4), 75(5) и 108(6), получим ^0 = 2,999999987 и Ь\ = = 2,000000004. Для х = 2 получим у = = 11,99999998. Показательная регрессия обеспечивает получение параметров а и b показательной функции У (х) =abx из решения системы уравнений N Nlga + igb £ £ ]%У1- 4=1 4=1 NN lg« I x, + lg* £ x?=£ (xjgi//). 4=1 4=1 4=| Экспоненциальная регрессия обеспечивает получение параметров функции у — bo ехр (Ь\х) по формулам N N N Г х, £ Inj/i — Л/ £ X, Ini/, й,=——1=2------1=2----- / N \2 N (Ё ~N х' Программа 5.21. 05 PRINT'ПОКАЗАТЕЛЬНАЯ РЕГРЕССИЯ' 10 INPUT'ВВЕДИТЕ N='N 20 LETA=0sLETB=05LETC=0!LETD=0 30 PRINT'ВВЕДИТЕ ПОПАРНО X<I)/Y<I)' 40 FOR 1=1 ТО №PRINT!3.0!' 1=' I 50 INPUT 'X<I)='Xs INPUT'Y<l)='Y 60 LETA=A+Xs LETB=B+X~2:LETC?C+LGT(Y) 70 LETD=D+X«LGTCY)s HEXT I 80 LETE=H*B-A~2! LETF=C«B-D*A 90 LETK=H«D-A«Cs LETF=EXT<F/E) s LETK=EXT(K/E> 100 PRINT‘F1.9!'Y<X)='F'«'K'~X' 110 INPUT'ВВЕДИТЕ X='X 120 PRINT'Y(X>='F*K~XsGOTO 110’.END Пример. Для W = 5 и ytДх<), равных К программе 5.22. 6(1), 7(2), 8,7(3), 1Q,4(4) и 12,4(5), полу- Пример. Для /V = 9 и у>(х(), заданных чим а = 4,941990005 и b = 1,202950112. Для значениями 3,5(2), 5(3), 6,2(4), 9(5), 13(6), х = 2, у = 7,151499236. 16(7), 23(8), 30(9) и 40(10), получим 60 = Программа 5.22. 05 PRINT'ЭКСПОНЕНЦИАЛЬНАЯ РЕГРЕССИЯ' 10 INPUT'ВВЕДИТЕ N='N 20 LETA=0sLETB=0sLETC=08LETD=0 30 PRINT'ВВЕДИТЕ ПОПАРНО X<I),Y<I)' 40 FOR 1=1 ТО № PRINT*3.0!'1='I 50 INPUT 'X(I)='Xs INPUT'Y<1)='Y 60 LETA=A+XsLETB=B+LOG<Y):LETC=C+X~2 70 LETD=D+X«LOG<Y>s NEXT I 80 LETB1=<A*B44*D)/<A~2-N*C) 90 LETB0=EXP<(B-B1«A)/N> 100 PRINT * Fl.9!'Y<X)='B0'«ЕХРС'Bl'*X>' 110 INPUT'ВВЕДИТЕ X='X 120 PRINT'Y<X>='B0*EXP<B1«X>8GOTO 1108END 141
= 1,939481364 и Z>i =0,305283305. При х = 5 получим г/= 8,924828629. Логарифмическая регрессия дает пара- метры а и b функции у=а + Ь 1g х из решения системы уравнений ЛГ N aN+b X lg*/= Z /«I NN N a Z Z (|gx<)2=Z (yilgxi)- 1=1 i KB 1 i SBC 1 из решения системы из трех уравнений N N N boN+b, Z ъ + Ьг Z *? = Z У<\ 1=1 /=1 ( = 1 N N N N bn £ X/ + &I £ rf + b? £ Х?= £ куй 1=1 I! ж I I = I 1 = 1 N N N N ь« Z *2+*i Z *'3+*2 Z *-=Z ^<У‘- i=1 i=l i = 1 i=| Программа 5.23. 05 PRINT'ЛОГАРИФМИЧЕСКАЯ РЕГРЕССИЯ' 10 INPUT'ВВЕДИТЕ N='N 20 LETA=0sLETB=0:LETC=08LETD=0 30 PRINT'BBEAMTE ПОПАРНО X<I),Y<I>' 40 FOR 1=1 TO NS PRINT!3.0!'1='I 50 INPUT 'X<I)='X8 INPUT'V<I)='V 60 LETA=A+LGT < X)8LETB=B+LGT< X )~28 LETC=C+V 70 LETD=D+Y*LGT(X>s NEXT I 80 LETE=N*B-A~2: LETF=C«B-D«A 90 LETK=N*D-A*C8 LETF=F/Es LETK=K/E 100 PRINTiFl.9!’Y<X>='F’+<'K'>*LGT<X>' 110 INPUT'BBEAMTE X='X 120 PRINT'V<X>='F+K*LGT<X>8GOTO 110SEHD Пример. Для N=6 и у, (x,), равных 1(1); 1,451(2); 1,716(3); 1,903(4); 2,048(5) и 2,167(6) получим а = 0,999931767; Ь = = 1,499793742 и для х=4 получим у= = 1,902897575. Параболическая регрессия обеспечивает получение трех параметров йо, Ь\ и Ьг при- ближения параболической функцией У (0 =6о + 5|х4-6гх2 Пример (к программе 5.24). Для W=7 и yi(xt), заданных значениями 3,76(2); 4,44(4); 5,04(6); 5,56(8); 6(10); 6,36(12) и 6,64(14), получим 6о=3, Ь\ =0,4 и Ьг = = —0,01. Для х=7 получим 1/=5,31. Полиномиальная регрессия (аппроксима- ция) обеспечивает нахождение коэффициен- тов полинома у (х) =аоЧ-0|х4-02Х2+ ... 4-атх'я (5.25) Программа 5.24. 05 PRINT'ПАРАБОЛИЧЕСКАЯ РЕГРЕССИЯ' 10 INPUT 'ВВЕДИТЕ N='Hs LETA=N 20 DATA 0> 0,0/0, 0,0,0 30 READ В, С, F, М, Р, R, S 40 PRINT 'ВВЕДИТЕ ПОПАРНО X<I),Y(I)' 50 FOR 1=1 ТО Hs PRINT !3.0! ' 1='I 60 IHPUT 'X<I>='Xs INPUT ’V<I>=’V 70 LETB=B+Xs LETC=C+X''28 LETF=F+X"3 80 LETM=M+X~4: LETP=P+Y: LETR=R+X*Y 90 LETS=S+V*X~28 HEXT I 100 LETD=B8LETE=C8LETK=CsLETL=F 110 'LETQ=D/A:LET E=E-Q*B8LETF=F-Q*C 120 LETR=R-QBPsLETQ=K/AsLETL=L-Q*B 130 LETM=M-Q*CsLETS=S-Q*P: LETQ=L/E 140 LETB2=<S-R*Q)/<M-F*Q)s LETBi=<R-F»B2)zE 150 LETB0=<P-B*Bl-C*B2>zA8 PRINTiFl.9!'B0='B0 160 PRINT 'B1='B18PRINT 'B2=’B2 170 INPUT 'ВВЕДИТЕ X='X 180 PRINT'Y<X)=’B0+Bl*X+B2*X''2sEND 142
из решения системы уравнений Соао4~С1Л|••• + Cm&m==rfo, С|ао4-С201 4“СэЛ2 4” ••• -b'Cm+lCIm — di, £flt<2o4-£m4-lGl ••• 4" — где N с,= £х/, /=0, 1, 2, ..., 2m, (5.26) I»! d»= £ x?y„ 6=0, 1, 2............ m. (5.27) (=1 Полином (5.25) степени m<.N. где N — число nap Xi и yi, обеспечивает аппроксима- цию (и интерполяцию) таблично заданной функции у, (х^ с минимальной среднеква- дратичной погрешностью £=-д/ Ё е/7(^+1)- (5-28) |а= 1 Если m~N, то имеет место обычная интер- поляция, т. е. значения у (х) (5.25) при х~х, точно совпадают с заданными yi. При т<М такого совпадения в общем случае нет. Таким образом, аппроксимация I/, (х,) по методу наименьших квадратов имеет более универсальный характер, чем обычная интер- поляция «4.2). Если достаточно ограничиться вычисле- нием лишь коэффициентов ао, fli, ..., ат полинома (5.25) без вычисления значения Е, то нет необходимости в хранении массивов Xi и yt. При этом достаточно вычислить С/ (массив из 2т чисел) и d* (массив из т чи- сел) с помощью (5.26) и (5.27) и решить полученную систему линейных уравнений методом Гаусса (см. § 4.Г). Таким образом, составлена программа 5.25. Помимо вычис- ления коэффициентов ао, fli, ..., ат она обеспечивает нахождение у (х) по задан- ному х с помощью полученного полинома (5.25). Программа 5.25. Пример. Используем пример к програм- ме 5.24 (задаем т —Л4«2 и n = ^=7). Получим следующий результат: ао=Л(О)== = 3, а1==Д(1)=0,4 и 6г=Д (2) == —0,01. Задав далее х=7, получаем у (х)~У (X) = ==5,31. Время счета контрольного примера (без учета времени ввода х( и yi) около 7 с. Полиномиальная регрессия (аппроксима- ция) с автоматическим выбором степени полинома выполняется по следующему алго- ритму. Вначале задается степень т=1 (ли- нейная регрессия). Отсчеты х(-, у, вводятся и запоминаются. После нахождения всех а2 (вначале Оо и Ci) с помощью (5.28) вычис- ляется среднеквадратичная погрешность Е и сравнивается с заданной £1. Если £>£1, степень полинома т увеличивается на 1, и т. д. Счет прекращается, как только дости- гается £<£i. В программе 5.26 наряду с этим алгоритмом возможна реализация алго- ритма вычисления коэффициентов ао, аь ... ..., ат полинома заданной степенью т с вычислением получаемой при этом погреш- ности £. Обеспечивается также вычисление у (х) по заданному х. Для повышения точ- ности система уравнений для вычисления ао, И|, ..., ат решается методом Гаусса с выбором главного элемента. . Программа 5.25. 05 PRINT'АППРОКСИМАЦИЯ ПОЛИНОМОМ ПО МЕТОДУ НАИМЕНЬШИХ КВАДРАТОВ' 10 INPUT'ВВЕДИТЕ СТЕПЕНЬ ПОЛИНОМА M='HsLETN=H+l 20 DIM АСЮН>,ВСЮ,СС2*Ю,ХСЮ 30 INPUT'BBEAHTE ЧИСЛО ПАР X, Y Н='Н 40 FOR 1=1 ТО № PRINT?3.0*'ДЛЯ 1 = 'IsINPUT'ВВЕДИТЕ X,Y 'X,Y 45 LETF=lsFOR J=1 TO 2*N-lsIF J>H THEN 55 50 LETBC J)=BCJ)+YsLETY=Y**X 55 LETCCJ)=CCJ)+FsLETF=F*X:NEXT JsNEXT I 60 FOR 1=1 TO №LETK=lsFOR J=1 TO H 65 LETACI,J)=CCK>sLETK=K+lsHEXT JsNEXT I 70 FOP 1=1 TO N-is FOR J=I + 1 TO N 75 LETACJ,I)=~ACJ,I)/ACI,I)sFOR K«I + 1 TO N 80 LETACJ,K)=ACJ,K)+ACJ,I)*ACI,K)s NEXT К 98 LETBCJ>=BCJ)+ACJ, I>жВСI)s NEXT Js HEXT I 100 LETXCH)=BCN)/ACN,N> 110 FOR I=N-1 TO 1 STEP -is LETH=BCI) 120 FOR J=I+1 TO Ns LETH=H-XCJ>*ACI,J>sNEXT J 130 LETXCI>=HZACI,DsNEXT I 140 PRINT'КОЭФФИЦИЕНТЫ ПОЛИНОМА' 150 FOR 1=0 TO N-tsPRIHT»3.0»'AC'I')«'1F1.91XCI+1>:HEXT I 160 IHPUT'BBEAHTE X='ZsLETS»0sFOR I=N TO 2 STEP -1 170 LETS=CS+XCI))*ZsNEXT I 180 PRINT'ЗНАЧЕНИЕ YCX>='«Fl.91S+XC1>s0OTO 1608END 143
Программа 5.26. IQ PRINT'АППРОКСИМАЦИЯ ПОЛИНОМОМ ПО МЕТОДУ НАИМЕНЬШИХ КВАДРАТОВ* 15 PRINT'С ВОЗМОЖНОСТЬЮ АВТОМАТИЧЕСКОГО ВЫБОРА СТЕПЕНИ ПОЛИНОМА' 23 INPUT'ЗАДАЙТЕ ЧИСЛО УЗЛОВ ИНТЕРПОЛЯЦИИ Ы«'Н 25 DIM Х<Н>/У<Н)/2(Н>/В<Н>/б<Н)лА<Н>Н)яС<Н>Н)я 30 FOR 1*1 ТО Hs PRINT?2.0!'ВВЕДИТЕ X'I'/Y'I 35 INPUT X<I).»Y<I): NEXT I: LET N*1 40 PRINT'УКАЖИТЕ 0-ЕСЛИ ЗАДАНА ПОГРЕШНОСТЬ ИНТЕРПОЛЯЦИИ' 50 INPUT' 1-СТЕПЕНЬ ПОЛИНОМА 'Us IF U*8 GOTO 80 60 INPUT'ВВЕДИТЕ СТЕПЕНЬ ПОЛИНОМА M<N M='Ns GOTO 85 80 INPUT'ЗАДАЙТЕ СРЕДНЕКВАДРАТИЧНУЮ ПОГРЕШНОСТЬ E1='E1 85 LET N«N+ls FOR J=8 TO 2*N-ls IF J>N GOTO 95 90 LET B<J>«8 95 LET D(J)»05 NEXT Js FOR 1*1 TO Hs LET R«Y<I)sLET F=1 105 FOR J«1 TO 2*N-ls IF J>N GOTO 115 118 LET B<J>«B<J)+Rs LET R*R*X<I) 115 LET D<J>=D(J>+FS LET F=F*X(I)s NEXT Js NEXT I 120 FOR 1=1 TO Ns LET K=I: FOR J*1 TO N 130 LET A<bJ)«D<K)s LET K=K+1: NEXT Js NEXT I 140 LET Nl=N-ls FOR K=1 TO Hl 150 IF АВ8<А<КлК)>>0 GOTO 230 160 LETK1=K+1sFOR M=K1 TO Ns IF ABS<A<M/K))*0 GOTO 218 190 FOR L=1 TO Ns LET U«A<K/L)s LET A<K,L>*A<M,L> 200 LET A<M/L)=Us NEXT L 210 NEXT M 220 LET U®B<K>s LET 6(K)«6CM)s LET B<M)«U 230 LET G<K)«B<K)/A<K/K>s LET K1*K+1 248 FOR I=K1 TO Ns LET B(I>»B<I>-A<I>K)*G<K> 250 FOR J1*K TO Ns LET J*N-Jl+Ks LET C<K,J>=A(K/J>/A<K,K) 260 LET A<I,J>*A<bJ)-A<1/K)*C(K,J)sNEXT JlsNEXT I: NEXT К 280 LET M=N: LET Z<M>=B<M)/A<M,M) 290 LET M*M-1S LET 8*0: FOR L=M TO Hl 300 LET S»S+C<M/L+1>*2<L+1): HEXT L 310 LET Z<M)*G<M)-Ss IF M>1 GOTO 290 320 LET E«0s FOR 1*1 TO № LET S*Y(I)s LET R=1 330 FOR J*1 TO Hs LET S=S-R*Z(J): LET R=R»X<l>s NEXT J 348 LET E«E+S*8sNEXT I:LET E*SQR(E/H)s IF U«1 GOTO 378 350 IF E=<E1 GOTO 370 360 IF N<H GOTO 85 370 PRINT'СТЕПЕНЬ ПОЛИНОМА M*'N-1 380 PRINT!F1.9!'ПОГРЕШНОСТЬ ИНТЕРПОЛЯЦИИ E*'EsIF U«1 GOTO 398 385 PRINT'ЕСЛИ E БОЛЬШЕ ЗАДАННОЙ/УВЕЛИЧЬТЕ N И ПОВТОРИТЕ ВВОД' 390 PRINT 'КОЭФФИЦИЕНТЫ ПОЛИНОМА' 400 FOR 1=1 ТО NxPRINT!2.0!'А('1-1'>*'!F1.9Z<I>sNEXT I 410 INPUT'BBEAHTE Х='X:LETQ*0sFOR I*N TO 2 STEP -1 428 LETQ«(Q+Z<I)>*X:HEXT IsLETQ«Q+Z<1> 430 PRINT'ЗНАЧЕНИЕ Y(X>«'QsGOTO 410sEND Пример. Используем пример, приведен- ный к программе 5.24. Так, если задать £— 1 • 10~6, программа (после примерно 1 мин счета) выдаст: А4 = 2, £ = 0, Л (0) = 3, Л (1)—0,4, Л (2) ——0,01 и У (X) =5,31 при % = 7. Время счета существенно больше, чем по программе 5.25, в связи с вычисле- нием Е и автоматическим выбором степени полинома /п. § 5.7. Сглаживание данные экс- перимента Сглаживание данных эксперимента яв- ляется специальной операцией усреднения с помощью интерполяционных полиномов, обеспечивающей получение уточненного зна- чения у, по заданному значению yt и ряду близлежащих значений ь у,, ytr\,...), известных со случайной погрешностью. 144 Л инейное сглаживание по трем точкам реализуется с помощью следующих формул: уо-- (5//o-|-2yi —£/г) /6, ^, = (yt~ j yi+i)/3, 1 yN~ (byN-\-2yN— I — yN—2)/&, где N — номер последней точки (ордина- ты уд. Программа 5.27. Пример сглаживания дан в табл. 5.2. Линейное сглаживание по 5 точкам про- водится с использованием формул Уп — (Зуп -F2//1 Н-Г/2 — £/4 ) /5, У\ — (4t/o-f-3i/i 4"2//2-}-//з)/10, У‘ ~ (у> - 2 4~у, -1 4~ у, -J-yt +1 -j- yt + 2) /5, 2</XA/~2, Уы-1 — (Ум-ъ + ^Ук—ъ + Зун_ i 4-4t//v)/10, Ум — (Зум~\-2ум — I ~\~Ум~ 2 — Уы — 4) /5.
Программа 5.27. I© PRINT!F1.9!'ЛИНЕЙНОЕ СГЛАЖИВАНИЕ ПО 3 ТОЧКАМ' 20 INPUT'ВВЕДИТЕ НОМЕР ПОСЛЕДНЕЙ ТОЧКИ N='N 30 PRINT'ВВЕДИТЕ ? 0's INPUT А 48 PRINT'ВВЕДИТЕ V 1':INPUT В 58 PRINT'ВВЕДИТЕ ? 2'sINPUT C 68 PRINT'S? 0='<5*A+2*B-C)/6 78 PRINT'S? l='<A+B+C>/3 SO FOR 1=2 TO N-lsLETA=BsLETB=C 98 PRINT‘3.0!'ВВЕДИТЕ ?'1+1'='SINPUT C 100 PRINT'S?'I' = '! 1.9! (A+B+O/3:NEXT I 118 PRINT!3.8!'S?'N'=' !F1.9!(-A+2*B+5*C)/6 120 END Результаты линейного сглаживания по 3 и 5 точкам (JV = 9) Таблица 5.2 i y> yi для сглажи- вания по 3 точкам yi для сглажи- вания по 5 точкам точное значение у — 10х i yi yi для сглажи- вания по 3 точкам yi для сглажи- вания по 5 точкам точное значение {/ = Юх 0 0,9 0,97 0,992 1 5 6,1 5,973333333 6,044 6 1 2,12 1,98 1,995 2 6 6,92 7,056666666 7,024 7 2 2,92 3,063333333 2,998 3 7 8,15 8,04 8,004 8 3 4,15 3,99 4,038 4 8 9,05 9 8,957 9 4 4,9 5,05 4,998 5 9 9,8 9,825 9,91 10 Программа 5.28. 10 PRINT'ЛИНЕЙНОЕ СГЛАЖИВАНИЕ ПО 5 ТОЧКАМ' 20 INPUT'ВВЕДИТЕ НОМЕР ПОСЛЕДНЕЙ ТОЧКИ N='N 30 PRINT!Fl.9‘'ВВЕДИТЕ ? 0='sINPUT A 48 PR I NT'ВВЕДИТЕ S' 1='sINPUT В 58 PRINT'ВВЕДИТЕ ? 2='sINPUT C 60 PRINT'ВВЕДИТЕ ? 3='sINPUT D 70 PRINT'ВВЕДИТЕ ? 4='sINPUT E 80 PRINT'S? 0='<3*A+2*B+C-E)/5 90 PRINT'S? 1='<4*A+3*B+2*C+D)zl0 100 PRINT'S? 2='(A+B+C+D+E)/5 110 FOR 1=3 TO N-2 120 LETA=BSLETB=CSLETC=I’SLETD=E 130 PRINT!3.8«'ВВЕДИТЕ ?'1+2'='sINPUT E 140 PRINT'S?'1'='!F1.9!<A+B+C+D+E)/5 150 NEXT I 160 PRINT13.0!'S?'N-1'='!F1.9!<B+2*C+3*D+4*E)/10 170 PRINT!3.0!'S?'H'='!F1.9!<3*E+2*D+C-A)/5 180 END Контрольный пример см. в табл. 5.2. Нелинейное сглаживание по семи точкам обеспечивает усреднение на основе примене- I ния полинома третьей степени и реализуется применением формул г/о = (39уо4-&/|—4 (уъ + уъ — у*) +{/5—2//6)/42, у\ — (8i/o-|- 19z/i 4-16z/2 4-61/3 — 4^/4 — 7z/5~h + 4f/7)/42, уч = (— 4t/o 4- 16z/i 4- 19f/2 4- 12i/3 4- 2i/4 — 4t/s 4~ + Уб)/42, f//= (7^4-6 (^-bi4-^.-i) 4-3 G//+24-4A-2) — — 2 (£// + з4-^-з))/21, yN-2— (УЫ-& — ^УЫ-5~^^У1>/-4 + 10 * 12^-з + 4- 19^-2+ 16уц_1 — 4yN)/42, Уы- 1 = (4z//v_6 — 7ум-ь — 4yN_i 4-6r/AZ_34- 4- 1 Sijn _ 2 4- 191/y - i 4- 8i//v) /42, Уы~ ( — 2z/y_6 4-4t//v„5 4-^-4"“4£/yv__3-~ ~ tyu - 2 4- 8i//v -1 4- 39i//v) /42. 145
Программа 5.29. 10 PRINT'НЕЛИНЕЙНОЕ ОПЛАЧИВАНИЕ ПО 7 ТОЧКАМ' 20 INPUT*ЗАДАЙТЕ НОМЕР ПОСЛЕДНЕГО ОТСЧЕТА N='N 30 INPUT'ВВЕДИТЕ ОТСЧЕТУ ?0>V1... ,?6'A,B>C>D,E,F>6 40 PRINT'S? 0=' (38жА+8жВ-"4жС-4«11+Е+4жЕ~2ж6)/42 50 PRINT'S? 1='<8жА+19*В+16*С+6*С-4жЕ-7*Р+4*6)/42 60 PRINT'S? 2=' <-4жА+1бжВ+19жС+12жЦ+2*Е~4жЕ+6>/42 70 PRINT'S? 3='<--2жА+ЗжВ+6жС+7жР+бжЕ+ЗжЕ-2ж&>/21 80 FOR 1=4 TO N”35LETA=BsLETB=C5LETC=DsLETD=E 98 LETE=FsLETF=G:PRINT’S.©I'ВВЕДИТЕ ?'1+3'=':INPUT 6 100 LETS=~2*A+3*B+6*C+7*Ii+6*E 110 PRINT»3.0»'S?'I'='»1.9!(S+3*F~2»6)/21!NEXT I 128 LETS=A~4*B+2*C+12жЦ+19*E+16*F-4*G 130 PRINT!3.0!'S?'H“2'='1F1.9! S/42 148 LETS=4*A-7*B-4*C+6*D+16*E+19*F+8*G 150 PRINT’S.©’'S?'N-1'='!F1.9! S/42 160 LETS=-2*A+4«B+C-4*D-4»E+8*F+39*G 170 PRINT’3.0!'S?'N'='!F1.9! S/42sEND Контрольный пример см. в табл. 5.3, грубо заданной нелинейной функции где представлены данные сглаживания z//=ln (f+2). Результаты нелинейного сглаживания по семи точкам (А^=1) Таблица 5.3 i У1 yi Точное значение In- 0*4-2) / yi yi Точное значение jh=ln (i+2) 0 0,7 0,70114285714 0,6931471806 5 1,99 1,950952381 1,945910149 1 1,08 1,08714286 1,098612289 6 2,04 2,073333333 2,079441542 2 1,39 1,385 1,386294361 7 2,22 2,191428571 2,197224577 3 1,64 1,624285714 1,609437912 8 2,28 2,302857143 2,302585093 4 1,76 1,79952381 1,791759469 9 2,42 2,412619048 2,397895273
ГЛАВА 6 ВЫЧИСЛЕНИЕ СПЕЦИАЛЬНЫХ ФУНКЦИЙ $ 6.1. Методы вычисления специальных функций Специальными функциями обычно назы- ваются функции, которые в общем случае нельзя выразить через элементарные функ- ции. Большинство из них являются реше- ниями дифференциальных уравнений специ- ального вида и могут быть представлены в виде интегралов. Однако эти интегралы нередко являются несобственными и имеют особенности подынтегральной функции на пределах или в промежутке между ними. В этой главе перечислены основные методы вычисления специальных функций. Решение порождающих дифференциаль- ных уравнений позволяет иайти ряд значе- ний специальных функций при заданных начальных условиях. Для этого могут исполь- зоваться программы, описанные в § 4.10. При описании специальных функций далее при- водятся порождающие их дифференциальные уравнения. Однако этот метод (особенно при вычислениях с заданной точностью) сопряжен с применением сложных ^программ. Если требуется вычисление значений спе- циальных функций при произвольных или часто сменяемых значениях аргумента, этот метод может привести к недопустимо боль- шим затратам машинного времени. Вычисление специальных функций числен- ным интегрированием является универсаль- ным и достаточно эффективным методом. Для его реализации могут использоваться программы численного интегрирования, опи- санные в § 4.9^ 4.10. Следует учитывать, что в них аргумент подынтегральной функции обозначен через X, тогда как у специальных функций возможно иное обозначение, на- пример t. Следовательно, в этом случае /=Х. Подынтегральные выражения должны вычисляться по соответствующим подпрограм- мам (ввиду простоты тексты подпрограмм не приводятся). В целом программы вычис- лений специальных функций численным инте- грированием достаточно громоздки и вычис- ления требуют значительных затрат машин- ного времени (в сравнении с изложенными ниже методами). Вычисление специальных функций по рекуррентным соотношениям является сред- ством сравнительно быстрого получения численных значений нужных специальных функций. Примером может служить вычисле- ние значений ортогональных многочленов в § 3.4. Однако этот метод применим при следующих условиях: имеются исходные значения функций или простые формулы для их вычисления, рекуррентный процесс яв- ляется устойчивым (т. е. не ведет к накоп- лению ошибок), число циклов вычислений ограничено разумными пределами. Вычисление специальных функций по их разложениям в ряд является в большинстве случаев наиболее удобным при машинных расчетах. Многие специальные функции имеют представления в виде сходящихся ря- дов. Вычисления должны вестись с контро- лем суммы членов ряда либо значений последнего члена (если есть гарантия, что они по модулю мойотонно убывают) до тех пор, пока результат не будет получен с за- данной погрешностью. Вычисление специальных функций по их аппроксимациям является, как правило, мето- дом, обеспечивающим получение результата за минимальное время. В большинстве слу- чаев аппроксимация получается путем раз- ложения функции в ряд (например, Тейло- ра) с удержанием конечного числа членов, достаточного для вычисления значений функ- ции с заданной точностью. Сокращение времени вычислений обусловлено предвари- тельным вычислением входящих в члены ряда выражений, например факториалов, значений тригонометрических функций и т. д. Однако достаточно простые аппроксимации получаются, как правило, при погрешности вычислений, заметно превосходящей предель- ную для ПЭВМ. Кроме того, вид аппрокси- мации обычно не имеет ничего общего с видом функции и для описания аппрокси- мации приходится использовать большое число численных констант с большим числом цифр. Поэтому вычисления по аппроксима- циям следует рассматривать как дополнение к другим методам вычислений. § 6.2. Интегральные показательные функции Интегральная показательная функция Еп (х) = EN (X) = ? dt 147
вычисляется с помощью рекуррентного соот- ношения Еп+1 (х) = -- [е~х — хЕп (х) ], л = 1, 2, 3,..., при £о (х) — ехр (— х)/х и с помощью функ- ции Е\ (х), вычисляемой разложением в ряд: Е\ (х) = — у —In х— £ ( — \)lxl/i-i\, i==i где у = 0,57721156647 — постоянная Эйлера. Программа 6.1. 05 PRINT'ВЫЧИСЛЕНИЕ ФУНКЦИИ ЕН<Х)' 10 INPUT 'ВВЕДИТЕ Н='Н 20 INPUT 'ВВЕДИТЕ N=='N 30 INPUT 'ВВЕДИТЕ Х='Х 40 LETK=EXP<-X):LETE=K/X 50 IF N>0 THEN 70 60 PRINT 'E8<X)='E:G0T0 30 70 LETP=1:LETR=1:LETS=0SLETI=0 80 LETI=I+1sLETP=<-X)*P:LETR=I*R 85 LETC=P/<I*R)s LETS=S+C 90 IF ABS<C>>H THEN 80 100 LETE=-S-.5772156647-L0G<X) 110 FOR 1=1 TO N-lsLETY=<K-E*X)/I 120 LETE=Ys NEXT I 130 PRINT 'EN<X)='EsGOTO 30SEND Пример. Для x = 0,5 имеем £0 (0,5) = = 1,213061319, E\ (0,5) =0,5597736065, E2 (0,5) =0,3266438565, £10 (0,5) = = 0,0634583004. Интегральная показательная функция оо Ei (х) =EI (X) = - up ( dt, x> 0, вычисляется разложением в ряд сю Ei (х)=у + 1пх+^ -i—-. < —I Программа 6.2. 85 PRINT'ВЫЧИСЛЕНИЕ ФУНКЦИИ ЕКХ)' 10 INPUT 'ВВЕДИТЕ Н='Н 20 INPUT 'ВВЕДИТЕ Х='Х 30 LETP=1•LETR=1:LETS=0sLETN=8 40 LETN=N+1:LETP=P*XsLETR=R*N 50 LETC=Pz < N*R)sLETS=S+C 60 IF OH THEN 40 70 LETY=S+.5772156649+L0G<X) 80 PRINT 'EI<X)«'Y 90 GOTO 20s END Пример. Для x = 0,5 получим Ei (0,5) = = 0,4542199049. Функция оо an (x) = AN (X) = $ tne"xi dt, n =0, 1, 2,..., 1 вычисляется по рекуррентной формуле art (x) = [e~x + nan~i (x) j /x при ao (x) =e“x/x. 148 Программа 6.3. 05 10 28 30 40 45 58 PRINT'ВЫЧИСЛЕНИЕ ФУНКЦИИ AN<X) INPUT'ВВЕДИТЕ N='N INPUT'ВВЕДИТЕ X='X LETK»EXP < -X > sLET A=K/X IF N>0 THEN 50 PRINT'AN<X) = 'As GOTO 20 FOR 1=1 TO NsLETA«<K+I*A>/X 60 HEXT I SPRINT 'AH<X)»'A 70 GOTO 20sEND Пример.' Для x = 2 получим a0 (2) = = 0,0676676416 и a6 (2) =5,99497344. Функция 1 P„ (x)=BN (X) = j t"e-x,dt, «=0,1,2,..., -I вычисляется по рекуррентной формуле ₽n « = [(-1)йех-ехЧ-пр«-! (x) J/х при Po (x) = (ex —e~x)/x. Программа 6.4. 05 PRIНТ'ВЫЧИСЛЕНИЕ ФУНКЦИИ BN<X)' 10 INPUT 'ВВЕДИТЕ N='N 20 INPUT 'ВВЕДИТЕ X='X 30 LET K=EXP<X)sLFTB«<K-l/K>/X 40 IF N>0 THEN 50 45 PRINT 'BN<X)»'B8GOTO 28 50 LETR=18FOR 1=1 TO NsLETR=-R 60 LETB=<R*K-<1/K>+B*I)/X 70 NEXT is PRINT'BN<X)='B 80 GOTO 20s END Пример. Для x = 4 получим p0 (4) = = 13,6449586, pi (4) = - 10,24287677, p3 (4) = = -7,261476257. § 6.3. Интегральные синус и косинус Интегральный синус Si (x)=SI вычисляется разложением в ряд о° «= X (-1)"^”+7(2«+1) (2« +1)1 п = 0 Ряд прерывается, если абсолютная величина последнего члена становится меньше е = = 1-10~9. Программа 6.5. 05 PRINT'ВЫЧИСЛЕНИЕ ФУНКЦИИ 81<Х)' 10 INPUT 'ВВЕДИТЕ Х='Х 20 LETB=XsLETC=X 30 LETD=-CX'%2)/2sLETI=0 40 LETI=I+1sLETE=<2*I+1)~2 50 LETB=<<2*1-1)*D*B)z<I*E> 60 LETC=C+Bs IF ABSCBX IE-9 THEN 80 70 GOTO 40 80 PRINT 'SI<N)«'CsGOTO 10sEND Пример. Для х=0,1 получим Si (0,1) = = 0,0999444611, а для x = 10 получим Si (10)= = 1,658347594.
Интегральный косинус Spnc /- 1 —-------dt . затем формулы Стирлинга (6Л) вычисляется разложением в ряд ОО - Е( ] ) ” х2л 2п-(2л)! ' л = 0 Программа 6.6. 65 PR I NT ' ВЫЧИСЛЕНИЕ ФУНКЦИИ СИХ)' 10 INPUT ‘ВВЕДИТЕ Х='Х 20 LETS=X~2:LETI=0:LETA=0 30 LETB=1:LETC=1 48 LETI-I+1:LETD=2*I 50 LETC=(D-1 )*D*<-C) : LETB=B*S 60 LETE=B/(C*D)sLETA=A+E 70 IF ABSCEH1E-9 THEN 90 80 SOTO 40 90 PRINT 'CI(X)='A+.5772156649+L0G<X) 100 GOTO 10: END Пример. Для x—\ получим C7(l) = = 0,337403923. Вычисление Si (x) и Ci (x) численным интегрированием целесообразно лишь при малых значениях х. При больших х> 8 су- щественное уменьшение времени вычисле- ний достигается при использовании асимпто- тических выражений [36]. § 6.4. Гамма-функции (включая не- полные) Гамма-функция оо Г (х)=Г (X) =5 e-'f-' dt о является одной из наиболее распространен- ных специальных функций. Поэтому целе- сообразно рассмотреть различные алгоритмы ее вычислений. Для — 18<х<49 с погрешностью поряд- ка 1-10"5 Г (х) может быть вычислено с помощью 20-кратного преобразования по формуле Г (x-f-1) =хГ (х) и с применением Такое преобразование необходимо для умень- шения погрешности (6.1). Алгоритм вычис- ления Г (х) при этом следующий. 1. Вводим х и полагаем Z = x, X — Z и А = 1. 2. Вычисляем (X-{-/), где / = = 1, 2, ..., 20. 3. Полагаем B = X-f-21 и вычисляем vG = exp(B(ln В-1) + 1/(12В)) V2n7B~/Z2o. Программа 6.7. Пример. Для различных х получаем Г ( — 1,5) =2,363272685 (2,363271801), Г (- 0,5) = - 3,544908843 (- 3,544907702), Г (1,5) =0,8862271413 (0,886226926). Г (40) = = 2,039788231 • 1046 (2,039788208-104*). В скоб- ках указаны точные значения Г (х). Более высокую точность при — 10<х^70 имеет метод, в основе которого лежит сле- дующий алгоритм. 1. Вводим х = ^ и задаем А=А —1. 2. Полагаем Z — A— 64. 3. Если Z<0, идем к п. 4, иначе задаем D— 1 и идем к п. 6. 4. Вычисляем B=|int (Z—1)| и полагаем С=А, A=A-f-B и £>=1. 5. Находим С/ = С/_1 + 1, Di — Dj_x/C, где / = В, В—1, В —2, .... 2, 1. 6. Вычисляем G = Г (х) по формуле Стир- линга в следующей ее модификации: / А GA~) *(1/(12А))Ял/2^Г При этом алгоритме формула Стирлинга используется при аргументе, значения кото- рого превышают 64, что дает меньшие погрешности. Однако при х< —10 корректи- рующий множитель D<1-10“99 и ему, как и значению Г (х), приписывается нулевое значение. Программа 6.8. Пример. Г ( — 1,5) =2,363271825, Г (- 0,5) = - 3,544907737, Г (1,5) = = 0,8862269342 и Г (40) =2,039788229-1046. Программа 6.7. 10 PRINT'ВЫЧИСЛЕНИЕ ГАММА-ФУНКЦИИ Г<Х)' 20 INPUT'ВВЕДИТЕ X='Z:LETX=Z:LETA=1 30 FOR 1=1 ТО 20 40 LETZ=Z*<X+I):NEXT I 50 LETB=X+21 60 LETG»EXP<B*<LOG<B)-1)+l/12/B)*SQR<2*#PI/B)/Z 70 PRINT'ЗНАЧЕНИЕ Г<Х)='6?60Т0 20:END Программа 6.8. 10 PRINT'ВЫЧИСЛЕНИЕ ГАММА-ФУНКЦИИ Г(Х)' 20 INPUT'BBEAHTE X='X:L.ETA=X-l:LETZ=A-64: IF Z<0 THEN 40 30 LETD=l:GOTCi 60 40 LETB=ABS<INT<2-l>>5LETC=AsLETA=A+BsLETD=l:FOR I=B TO 1 STEP -1 50 LETC=C+1:LETD=D/C:NEXT’I 60 LETG= < < A/EXP <1))"A)*EXP<1/12/A)*SQR< 2*#PI*A)*D 70 PRINTT(X)='G:GOTO 20:END 149
Наименьшее время вычислений обеспе- чивает алгоритм, основанный на аппрокси- мации Г (х) на отрезке [0, 1] степенным полиномом. 1. Из аргумента |х| последовательно вычитаем 1 для того, чтобы В попал в отре- зок [0, 1]. Одновременно подсчитываем произведение D-=B (В— 1) (В —2) ... (В — — /О, где К — число вычитаний 1 из В. 2. Если г> 0, вычисляем Г (х) по форму- лам Y—B — K. Г=Г(74-1) = = (((((((0,0358683437 - 0,193527818) Y 4- 4- (0,482199394) Y - 0,756704078) Y 4- -4- 0,918206857) Y - 0,897056937) Y 4- + 0,988205891) К - 0,577191652) 7 4-1, Г (X)=DF/X. 3. Если х<0, вычисляем 7 и F по п. 2 для |х|, после чего находим Г (х) =___5_________!___л . 1 sin лх Г (х— 1) sin лх DF * Программа 6.9. Пример. ф (1,5) =0,03648992674, ф (50) =3,901989672. Неполные гамма-функции задаются соот- ношениями X у (а, х) (а, х) Г (а) =$ е~‘Г-' dt. Г (а, х) = Г (а) —у (а, х) =$ 1 dt, о у* (а, х) =х"Р (а, х) =х"°у (а, х)/Г (а). В качестве основной можно выбрать функ- цию у (°, х), легко вычисляемую разложе- 10 PRINT'ВЫЧИСЛЕНИЕ ГАММА-ФУНКЦИИ Г<Х> ПО АППРОКСИМАЦИИ' 20 INPUT'BBEAHTE X='XsLETB«ABS(X)sLETH==l 30 IF В<=1 GOTO 50 40 LETD=Ii*B:LETB=B-l:60T0 30 50 LETF=< (.03586S343*B~. 193527818)жВ+. 482199394>*B 60 LETF=<(<F-.75670407S)*B+.91820685?)*B-.897056937)жВ 70 LETF=(< F+.988205891)жВ-.577191652)*B+1 80 LETG=F*.Ii/X: IF X<0 GOTO 100 90 PRINT'Г<Х)='G«GOTO 20 100 LETG=#PI/SIN<#PI*X)/D/F:GOTO 90SEND Пример. Г (- 3,2) = 0,6890562856, Г (- 2,5) = — 0,9453086453, Г (2) = 1, Г (0,5) = 1,772453992 и Г (50) =6,082818641 X X 10 . Погрешность вычислений в этом ме- тоде не превышает 3-10~7. Логарифмическая производная гамма- функции (диагамма-функция) ♦ w 1|пГ«1 с погрешностью менее 2-10~5 для х> 20 может вычисляться по асимптотическому разложению ф (х) = In х — 1 / (2х) — — 1/(12х2) 4- • • • С помощью рекуррентной формулы ф (х4-1) — Ф (х) 4-1 Iх значения ф (х) при х<20 можно найти, вычисляя ф (х+20) и последовательно применяя эту формулу в направлении уменьшения х. Программа 6.10. нием в ряд (х>0, а>0) V (а, х) = (а+1) (а + 2)...(а4-0 где N=int (2х + 8) и 0уу+ f — корректирую- щий член. Зная у (а, х) и Г (а), можно вычислить любую другую из приведенных неполных гамма-функций. Вычисление у (а, х) реализуется программой 6.11. Программа 6.11. Пример. У (2; 8) =0,9969825948, у (0,5; 1) = 1,493648313. Неполная гамма-функция у (а, х) может вычисляться также* численным интегрирова- 10 PRINT'ВЫЧИСЛЕНИЕ ЛОГАРИФМИЧЕСКОЙ ПРОИЗВОДНОЙ' 15 PRINT'ГАММА-ФУНКЦИИ D<LOG Г(Х>)/ЛХ' 20 INPUT'BBEAHTE X^'XHF Х>20 THEN 40 30 LETC=20+<X-INT<X))sGOTO 56 40 LETX=X+1sLETC=X 50 LETA=1/2/С s LETA=-АжA/3-A+LOG< C) 60 LETC=C-1"LETA=A-1/С 70 IF X<C THEN 60 80 PR I NT'ЗНАЧЕНИЕ DCLOG Г(ХП/РХ='А 98 GOTO 20sEND Программа 6.11. 10 PRINT'ВЫЧИСЛЕНИЕ НЕПОЛНОЙ ГАММА-ФУНКЦИИ G(A,X>' 20 INPUT'BBEAHTE АлХ 'А/XsЦЕТВ=1НТ(2жХ+9)sLET7=8 30 FOR I«B TO 1 STEP -1:ЕЕТУ«УжХ/(1+А)+1:НЕХТ I 40 LETG=Y*EXP(-X)*X-*A/AsPRINT'G<A/X) = '6sGOTO 20sEND 150
нием— см, формулу (6.2). Так, используя программу 4.42 численного интегрирования методом Гаусса и задав а = 2, В = х = 8, А = 0 и М = 8, получим у (а, х) = 0,9969832028 при /с «20 с. § 6.5. Функции Бесселя (включая модифицированные) Функции Бесселя являются решениями линейного дифференциального уравнения вто- рого порядка d2u I dx2 + х Здесь v — порядок функции. Функции Бес- селя могут быть первого J±v (х), второго y±v (х) и третьего H±v (х) родов. Они свя- заны следующими соотношениями: yv (х) =s= (Jv (х) COS (vjt) — J-v (х) ) /sin (vn), (6.3) Hl'2 (x) =/v (x) ±/Tv (x). Соотношение (6.3) справедливо при дробном порядке v. При целых v оно заменяется пре- дельным переходом. Решениями дифференциального уравнения d2a 1 dm /, v2\ Л ——Н------j----1 Н—т-) (о = 0 dx2 х dx \ х2 / являются модифицированные функции Бес- селя /v (х) и Kv (х): . (6.4) 2 sin (vji) Функции Бесселя первого рода Л (х) и 1п (х) при целом порядке v = n (п = 0, 1,2,...) могут вычисляться разложениями в ряды оо (—хг/4)' »!(« + »)! ’ 1 = 0 (xW i\ (/ + «)! Пример. /о (0,5) =0,9384698072, /зо (20) = 1,240153633-10~4, /о (2) = = 2,279585302 и /, (2) = 1,590636855. Функции Бесселя Д (х) и Д (х) при дробном порядке v вычисляются по следую- щим разложениям в ряд: Л (х) . (~х74)К К!Г (v + K+l) (х2/4)* К!Г (v+K+1) Для вычисления функции Г (v-f~#+!)== = Г (v) -v (v-|- 1) (v-j-2) ... (vH- К) должна использоваться часть программы для вычис- ления гамма-функции, например, по аппрок- симации. Вычислив функции 1±у (х) и- /±v (х) по формулам (6.3) и (6.4), находим функции Бесселя второго рода (х) и Kv (х). Программа 6.13. Пример. Для v=V=l/3 и х=1,5, задав код 0, получим Г (v) =2,678938244, Д (х) =0,6371327061, Г (—v) = —4,062354258, J_v (х) =0,2348995028 и Д (х) =0,09661015701. Задав код 1, получим /v (х) = 1,501429163, /_v (х) = 1,62280812 и /Д (х) =0,2201570763. Вычисление функций Бесселя Kv (х) и Kv (х) при целых v = n невозможно. На прак- тике приближенные значения этих функций можно найти, задав v = n±6, где 6 — малая величина (6« 1 • 10“3-j-1 • 10“4). Результат можно уточнить, взяв среднее при v = = п -|- 6 и v==n — 6. Следует отметить, что при v^0 значения х^9 для функций А. (х), при этом погрешность вычислений не превышает 2-10~б (с ростом v диапазон значений х расширяется и при v = 100 х<50). Погрешность вычисления Y„ (х) и Kv (х) выше; например, в приведенном примере Kv (х) верны 4 цифры после запятой. Частными решениями дифференциального уравнения Ряды для Jn (х) и In (х) различаются лишь знаком у члена (х2/4). Это позволяет вычис- лять данные функции по одной программе. Программа 6.12. d2(i) 2 da) ~dt I x J м == 0, ± 1, zb 2 ..., 05 PRINT 'ВЫЧИСЛЕНИЕ ФУНКЦИЙ JNCX) И IN<X)' 10 INPUT 'ВВЕДИТЕ -1 ДЛЯ JN<X> ИЛИ 1 ДЛЯ IN<X)'Z 20 INPUT 'ВВЕДИТЕ N='N 30 INPUT 'ВВЕДИТЕ X='X 40 LETS=0s LETA=1 50 IF N<=1 THEN 70 60 FOR 1=1 TO Ns LETA=A*Is NEXT I 70 LETV= <X/2 > л2:LETI«0:LETB=1:LETC=1s LETR=1 80 LETI=I+HLETB=I*BS LETC=<N+I>*C 98 LETR=Z*R* LETE=<V'‘I>*R/B/C: LETS=S+E 100 IF ABS<E>>iE-9 THEN 80 110 LETJ=<1+S>*<<X/2>~N)/A 120 IF Z>0 THEN 140 130 PRINT 'JN<X)='Js GOTO 38 140 PRINT ,'IN<X>='Js 60T0 38SEND 151
Программа 6.13. 10 PR I NT' ВЫЧИСЛЕНИЕ ФУНКЦИЙ БЕССЕЛЯ * 15 PRINT* JU<X),YU<X)HU(X),KU<X>* 20 INPUT‘0 ДЛЯ JU(X),YU(X) И 1 ДЛЯ IU(X)fKUCX) ?*K 30 INPUT*ВВЕДИТЕ ПОРЯДОК ФУНКЦИИ U«*U 40 INPUT*ВВЕДИТЕ АРГУМЕНТ ФУНКЦИИ Х=*Х 50 LETU=X*X/4:IF К=0 THEN LETU=-W 60 GOSUB 200!LETJ=F 70 PRINT*ЗНАЧЕНИЕ ГАММА-ФУНКЦИИ G<U)«*G 80 IF K=1 THEN 100 90 PRINT*JU(X)=* J--GOTO 110 100 PRINT*IU(X)=*J 110 LETU=-U:GOSUB 200 128 PRINT*ЗНАЧЕНИЕ ГАММА-ФУНКЦИИ Г(-Х>=*6 130 LETA=-U*#PI:IF K=1 THEN 178 140 PRINT*J-U(X)=*F 150 LETY=.J*COS<A)/SIN<A)-F/SIN(A) 160 PRINT*YU<X)=*Y:GOTO 40 170 PRINT*I-U<X)=*F 180 LETK=#Pr«F-J)/2xSIN<A> 190 PRINT*KU<X)=*KsGOTO 48 200 LETB=ABS<U):LETD=1 210 IF B<1 THEN 230 220 LETD=D*B:LETB=B-l:60T0 210 238 LETF=<<.035868343*8-.193527818)*B+.482199394)*B 240 LETF=< < < F-.756704078)*B+.918206857)*B-.897056937 > *B 25© LE TF= < < F +.988205891)*B-.577191652)*B+1 260 LETG=F*H/U:IF U>=0 THEN 280 270 LET&=#PIzSIN<#PI*U)/D/F 280 LETF=l/&/UsLETR=F:LET1=0 298 LET I=I+1 : LETR=RW/1 / < U+1) s LETU=F 300 LETF=F+RsIF ABS<F-U)<>0 THEN 290 310 LETF=F*<X/2>"U: RETURN:END являются сферические функции Бесселя первого рода /п (х) =^/й/(2х) /п+1<2 (х), второго рода Уп (х) =-\/2л/(2х) У«+1/2 (х) и третьего рода hn (х) =^/2л/(2х) Н,г4-1/2 (х). Эти функции можно найти по программам, вычисляющим функции Jv (х) и Yv (х) при v = n-}-l/2. Вычисления облегчаются тем, что при этом достаточно дасполагать известным значением Г (1/2) Пример (в скобках указаны точные значения). /0 (2) =0,4546487134 (0,45464871), /8 (10) =0,1255780237 (0,12558), /ю (1) = = 7,11655264-10"11 (верны все цифры), i/o (1) = - 0,5403023059, у2 (2) = = —0,7339914247, е/ю(5) = -26,6561144. Вре- мя счета от 3 до 12 с. Функции Бесселя могут вычисляться также по их аппроксимациям степенными полино- мами (см. [36]). Однако программы вычис- ления при этом получаются громоздкими из-за необходимости применения одновре- менно нескольких полиномов при изменении аргумента х от 0 до оо. Программа 6.14. 10 PRINT*ВЫЧИСЛЕНИЕ СФЕРИЧЕСКИХ ФУНКЦИЙ* 28 PRINT* БЕССЕЛЯ J(N,X) И YCN/X)* 30 INPUT*ВВЕДИТЕ X=*X:LETA=1 46 INPUT*ВВЕДИТЕ N=*W 50 FOR Н=0 ТО bJsLETA=A/<2*N+l):NEXT N 60 LETS=1:LETC=0:LETD=-X*X/2:LETF=1 70 LETC=C+1:LETB=B*C:LETE=2*C+1 80 LETF=F*.D/C/<2*W+E): LETUPS 90 LETS=S+F:IF ABS<S-U)O0 THEN 70 100 LETJ=A*S*X~WsPRINT‘Fl.9!*J(Nr X) = *J 110 LETA=1:FOR N=8 TO W 120 LETA=A*<2*N~1)sNEXT N 130 LETS=1:LETC=05LETF=1 140 LETC=C+1:LETE=2*C-1:LETF=F*D/C/<E-2*W) 150 LETU=S:LETS=S+F:IF ABS<U-S><>0 THEH 140 160 LETY=АЖ8/(X-<Ы+1)):PRINT * Y< N/X) = * Y 170 GOTO 20SENH 152
i 6.6. Функции Эйри Решению дифференциального уравнения удовлетворяет пара независимых решений А} (х) и В, (х), являющихся функциями Эйри. Функции Эйри могут вычисляться разло- жением в степенные ряды Л, (х) = cj (х) —c2g (х), В, (х)=д/3 [cj (x)+c2g (x)J, f (x) = 1+_5f х,+Аи~х6+-~5Г~-х9+ 2 4 2-5 7 . 2 • 5 • 8 । () g (x)=x+^j-x + — * +—ГоГ-* + где с, =0,355028054, c2 = 0,258$ 19404. По- скольку для x<lO члены рядов оказываются знакочередующимися, при х<—7 сходи- мость их резко ухудшается. Программа 6.15. Для вычисления С (х) можно применить программу 4.42, вписав в нее подпрограмму вычисления подынтегральной функции cos (л/2/2) при t — X. Задав 4=0, В—х — = 2 и М = 8, получим С (2) =0,4882522862 при точном, значении 0,4882534. Для вычисления S (х) также можно ис- пользовать программу 4.42. Задав 4=0, В = х = 2 и Л4 = 8, получим S (2) =0,3434145829 при точном значении 0,3434157. При х<3 для вычисления С (х) и S (х) могут использоваться следующие разложения в ряд: оо • С(х)=у L (2л)! (4л + 1) л —0 оо S(x) = y ' ' L (2л + 1)!(4л + 3) н--0 При х> 3 эти ряды плохо сходятся и для вычисления С (х) и S (х) целесообразно 10 PRINT’ВЫЧИСЛЕНИЕ ФУНКЦИЙ ЭЙРИ АКК) И &К/?? 28 INPUT-‘ВВЕДИТЕ ПОГРЕШНОСТЬ Е=‘Е 36 INPUT-‘ВВЕДИТЕ Х= -‘ X s LET I-й 4й LEIP-1sLETK-1:LETL=X‘”3!LETJ=1sLETR«1 5U LET I -1 +3: LETK=k *L*J: LETN-F s LET P -R* I * I - D ж •: I - 3 :• BO LETF=F+K/p!LET.J=.J+3s IF hB5< F-pD >E THEN 50 7Й LET 1 = 1:LET6=1:LETK=1:LETR=1 86 LET I = I +3 s LETK=K* ( I -2 )*L 5 LETM=6: LETP=R* I * < I -1 > * :. I -2 80 LET6=6*MRs IF АВ8<6-Ю>Е THEM 80 100 LET6=6*X•LETC=.355028654: LETU=.25881с4й4 110 LE T4=C *F -D*6: LETB= (C*R +0*6)*SOR •' 3 ’ 120 PR 1 НТ? AI OO = -‘ A 5 PR I NT •* BI (X) = -‘ 8: COT 0 70: EHD Пример. При погрешности E=l-10 6 получим 4, (1) =0,1352924154, В, (1) = = 1,207423594 (tc« 3 с), А, (- 5) = = 0,3507610391 и В, (-5) = -0,1383692054 (/с«18 с). использовать асимптотические приближения С / ч __ 1 । sin (л*72) лх cos (лх2/2) А 5 \ л2х3 \ (лх2)2 / § 6.7. Интегралы Френеля Интегралами Френеля называются инте- гральные функции С (х) =^ cos (у*2) 5 (*) = sin о о Они могут вычисляться непосредственно численным интегрированием. S(x) = y cos (лх2/2) / ] _ 3 \ ЛХ \ (лх2)2 / cos (лх2/2) / _ 5 \ л2х! \ (лх2)2 / Погрешность вычислений не превышает 5/(л4х7), что при х^4 дает не менее 5 вер- ных знаков после запятой. Программа 6.16. 05 PRINT‘ВЫЧИСЛЕНИЕ ИНТЕГРАЛОВ- ФРЕНЕЛЯ COD И W-‘ 10 INPUT -‘ВВЕДИТЕ Х=-‘ X: LETA=#PI:*>T2 2й IF Х>3 THEN 150 30 LETS=0s LETC=05LETN=0sLETZ=-1s LETR=1 40 60T0 80 56 IF N>1 THEN 70 60 LETR=2! OCTO 80 70 LETR=R*2*:N* 2*N-1 > 153
80 LETZ=-Z: LbTV=4.*H 90 LETB=Z* < < #P I /2 > - < 2*N > > * < X"V ) •'R 100 LETD=B/<4*H+1)s LETOC+D 110 LEtE=B/<4*N+3)z<2*N+l)s |_ETS=S+E 120 LETN=N+1!IF ABS<ID>1E-10 THEN 50 130 LETOC*X: LETS=S*4PI*<X'3)-'Z 140 PRIHT'C<X>x'CsPRINT'S<X>='Si60T0 10 150 LETE=CSIH<A/2>>/#PI/Xs LETF=<C0S<A/2))/#PI/X 160 LETK=l-3/<A"2)’ LETL=l-5/(A-2) 170 LETC=.5+E*K-F*L/A 180 LET'5=.5-F*K-E*L-’As60TO 140JEND П p и м e p. C (0,2) =0,1999210576, S (0,2) = —0,004187609162 (/C«6c), C(2) = =0,4882534059, S (2) =0,3434156788 (время счета »20 с), C (4) =0,4984199894, S (4) = = 0,4205170154 (время счета менее 2 с). $ 6.8. Эллиптические интегралы Полные эллиптические интегралы первого К (пг) и второго Е (т) рода- определяются как л/2 К (т) == у (1 — ли sin2 0)“i/2 d0, о л/2 Е(т)=} (1 — т sin2 0)1/2 d0 о и могут вычисляться непосредственно с по- мощью численного интегрирования. Для вычисления К (т) можно использо- вать программу 4.42. Задав т = 1/2, Л = 0, 5 = л/2иМ=4, получим К (1/2) —1,854074665 при точном значении 1,8540746733 и /с~15 с. Вычисление Е (т) также выполняется чис- ленным интегрированием. Задав т = 1/2, А=0, В — л/2 и М = 4, получим Е(1/2) = = 1,350643882 при точном значении 1,350643881. Эллиптические интегралы К (т) и Е (т) могут вычисляться также по их разложениям в ряд: к (т) =-1 [ 1 + (I)2 m+(2±)2 m* +...] / 1 -3-5 \2 ап3 \2-4-6/ 5 Программа 6.17. Пример. К (0,1) = 1,612441349 (/С«6с), К (0,5) = 1,854074676 (/с«20 с), Е (0,2) = = 1,489035058 \tc«9 с). С погрешностью менее 2-10”8 полные эллиптические интегралы К (т) вычисляются с помощью полиномиальной аппроксимации [36]: К ('w) = ((('(a4mi-ha3) ahi+M mi+ai) аиН- + М 4- ((((Ь4аП1 Ч~6з) ahi-|-M mi-|-6i) АП|4- 4-М in (1/m,), где ai = 0,44325141463, а2=0,0626060122, а3 = = 0,09666344259; а2 = 0,03590092383; а3 = = 0,03742563713; а4 = 0,01451196212; Ьо = = 0,5; Ь» =0,12498593597; b2 = 0,06880248576; Ь3 =» 0,03328355346; Ь4 = 0,00441787012. Аналогично £ (ли) = ((((a4mi4-a3) mi4-a2) ahi4- 4-М гп\4-1) 4” (((Ь4т\4-М /П|4~М т\4- 4-М т\ In ( 1/zhi), где ai х^О,44325141463, а2 = 0,0626060122, а3 = = 0,04757383546, а4 = 0,01736506451, b, = = 0,24998368310, Ь2 = 0,09200180037, Ь3 = = 0,04060697526 и Ь4 = 0,00526449639. Программа 6.18. Пример (в скобках даны точные значе- ния). К (0,1) = 1,6124441352 (1,612441349), Е (0,1) = 1,530757641 (1,530757637), К (0,9) = = 2,578092105 (2,578092113), Е (0,9) = = 1,104774722 (1,104774733). Неполные эллиптические интегралы Е(ф1ап)=) (1 — т sin2 0)_,/2 d0, о ф E(qp|m)=j (1 — т sin2 0)1/2 dQ о также могут вычисляться по программам численного интегрирования. В этом случае полагают В = ф. 01 PRINT'ВЫЧИСЛЕНИЕ ПОЛНЫХ ЭЛЛИПТИЧЕСКИХ ИНТЕГРАЛОВ КСЮ И ЕСЮЛ 05 INPUT-1 ИНТЕГРАЛ ЭЛЛИПТ. КАКОГО РОДА 1 ИЛИ 2 ?ЛС IS INPUT'ВВЕДИТЕ М=’М! LET1=0 20 LETA=1: LETB=1: LETS=ls LETR=1 30 LET1=1+1: LETA=A*C2*I-1>!LETB=B*I*2 35 IF C=1 THEN 45 40 LET£=-1/<2*I-1> 45 LETR=r*1*Rs LETD=C*R*( A/В) ~2 50 LETS=S+H: IF ABSCD)>lE-9 THEN 30 60 LETK=#PI*S/2sIF C=1 THEN BO 70 PRINT'ECM)=‘Ks GOTO IO BO PRINT'К(Ю = 'К: СОТО 10! END 154
Программа 6.18. 10 PRINT'ВЫЧИСЛЕНИЕ ПОЛНЫХ ЭЛЛИПТИЧЕСКИХ ИНТЕГРАЛОВ КСЮ И Е(Ю' 15 PRINT' С ПРИМЕНЕНИЕМ АППРОКСИМАЦИИ' 29 INPUT'ВВЕДИТЕ М< = 1 М=' Ms LETM-1-M 30 LETK=< <.01451196212*М+.03742563?13 >*М+.03590992383)жМ 35 LETKXK+. 09666344259 )*М+1.38629436112 40 LETW=<.09441787012*М+.03328355346)*М 45 LETU=< <Ы+. 06880248576)*М+. 12498593597)*И+.5 50 LETK»K+W*LOfc<1/М ) s PR1NT'К < М) ='К 60 LETE* <.01736506451*М+.84757383546)*М 65 LETE®< < Е+.0626068122 > *М+.44325141463)*4+1 70 LET№=( . 80526449639*1*1+. 84869697526 >*М 75 LETW-C <Ы+.89288188837)*М+.2499836831 80 LETE»E+U*L06<1/ЮsPRINT'ЕСМ)='EsВСТО 28sEND §6.9. Функции Струве, Ангера и Вебера Функции Струве Н? (х) входят в общее решение (х) +bYv (х) +HV (х) диф- ференциального уравнения второго порядка вида 2 d?(i) I . / 9 2\ х -d?+x-d7+(x -v)w 4 (x/2)v+‘ VSr(v+l/2)‘ Функции Hv (x) вычисляются разложе- нием в ряд [42]: Hv (х) - (x/2)v+{ Г (*4-3/2) ____Z______L 3-(2v + 3) знаком. В программу для вычисления этих функций нужно включать фрагмент, вычис- ляющий Г (v 4-1,5), например, по аппрок- симации гамма-функции полиномом. Программа 6.19. Пример. Погрешность £ = 1 • 10~г, Я, (5) =0,8078118816, Яо (0,5) =0,30955589, Я„8 (4) = —8,249323233, L\ (0,5) = =0,05394217833 и £„6 (6) =3,327822061. Функции Струве могут вычисляться также с ромощью численного интегрирования с применением интегральных представлений (Rev> — 1/2): //v (х) = + 3-5-(2v+3) • (2v+5) ___2 (x/2)v Г (v4~ 1/2) (1 —/2)v-*/2 sin (X/) dt, Lv (x) = Модифицированные функции Струве Lv (x) =• = — je~jva/iHv (jx) можно разложить в ряд вида L (х}- 2 Ь । » v() r(v + 3/2)[1+3.(2v + 3) + J----------2__________ 3-5-(2v-b3) • (2v+5) —^Д-i^Z2}----- ( sh (jr cos 0) sin2* 0 40. ул Г (v 4-1/2) Однако и в этом случае необходимо вычис- ление гамма-функции Г (v4-l/2). Функции Ангера Jv (х) имеют интеграль- ное представление вида Таким образом, разложения в ряд (х) и (х) различаются лишь тем, что члены в квадратных скобках у ряда Hv (х) знако- чередующиеся, а у ряда Lv (х) — с одним Jv (х) ==~Ц cos (vO —х sin 0) 40. При целом v = m Д(х)=/„(х). В общем Программа 6.19. 10 PRINT'ВЫЧИСЛЕНИЕ ФУНКЦИЙ СТРУВЕ HUCX) И LUCX)’ 15 INPUT'ВВЕДИТЕ 8 ДЛЯ HUCX) И 1 ДЛЯ LUCX) 'К 20 INPUT'ВВЕДИТЕ LUX ='U>YsLETA=Y*Y:IF K=8 THEN LETA=-A 38 LETX=U+ 1.5s LETH= 1 s LET I = 1 s LET .> 1 48 LETB=ABS<X)sLETD=l 58 IF B<1 THEN 78 68 LETD=D*BsLETB=B-ls60T0 58 70 LETF=<<.©35868343*6-. 193527818)*B+.482199394):*B 80 LETF=< < <F-.756704078)*B+.91828685?)*8-.897856937)*B 98 LETF=< <F+.98828589 D *B-.577191652 >*B+1 180 LET6=F*D/XSIF X<0 THEH LET6=#PI/$IN<#PI*X>/I«/F 110 LETI = 1+2sLETH=H*A/1/<2*U+1)s LETW«J 120 LET«J=J+Hs IF ABS(J-W)>S1E-18 THEH 118 138 LET<<Y/2)-<U+1))*2*J/6/SQR<#PI) 148 IF K=1 THEN 168 158 PRINT'HU<X)='Ws60T0 20 160 PRINT'LU<X)='W?GOT0 20SEHD 155
случае функции Ангера удобно вычислять с помощью численного интегрирования. Так, для V—1, А=0, В = л,. х = 0,5, М — 4 полу- чим Ji (0,5)—0,5844468394 при /С~Ю с. Аналогичным образом несложно органи- зовать вычисления функций Вебера л Ev (х) ==-L( sin (v0 —х sin 0) d&. л J § 6.10. Гипергеометрические функции Гипергеометрические функции F (a, 6, с, х) являются частным решением дифференциаль- ного уравнения .. . б/2ю . г . ... ,. . da х О ~~х) ——Ь Iе ~~ (a"b6-h О Х1 — — аЬы — О. Они могут вычисляться с применением сле- дующего ряда: F (а, Ь,с, х) — 1 + + у | п . е + 2.L11 (1+/) (c+j) xJ+e«+b i —0 / —0 где А —22, 0д/_|_] — поправка. Значения |х| < 1, с=/=0, — 1, — 2, ... При 0< (а, Ь) и — 0,1 <х< 0,8 погрешность 6<5-10”2, но обычно существенно ниже. Программа 6.20. решение г, / . ч я ( F (а, 6, х) (а, ’ ~~ sin | Г (!-|-а4-Ь) • Г (Ь) _xi-ь F (1+а —6,2 —6, х) 1 Г (а).Г (2-6) ’ Вырожденная гипергеометрическая функ- ция F (а, 6, х) вычисляется разложением в ряд , (а + /) (1+/)(6 + /) 4-fyv+i, дающем при N = 22 погрешность 6<l*10“4 для 0<а<6 и — 5<х<10. Программа 6.21. Пример. F (1; 1; 0,5) = 1,648721721 при точном значении 1,648721271. С помощью гипергеометрических функций можно найти большинство элементарных и специальных функций [36, 42]. Например, функция F (а, а, х) при Ь = а дает значение ех. Так, в приведенном примере при.6 = а5^1 и х = 0,5 получаем F (1; 1; 0,5) — е0 5=. = 1,648721271. Аналогичный результат дает вычисление F (3; 3; 0,5) при а — Ь — 3. §6.11. Дилогарифм Дилогарифм — интегральная функция » / \ f In i / (*) — —। dt, может вычисляться с 1 10 PRINT'ВЫЧИСЛЕНИЕ ГИПЕРГЕОМЕТРИЧЕСКОЙ ФУНКЦИИ F<A>B.>C/X)' 20 INPUT'BBEAHTE А/В/С'А/В/С 30 INPUT'BBEAHTE Х='XsLETF=L6T<23) 40 FOR 1=23 ТО 1 STEP -lsLETD=I-l 50 LETF=F*<D+A)*<D+B)/<H*C>/I.*X+1 60 NEXT IsPRINT'F<AfB/C>X)='F:GOTO 30SEND Пример. F (1; 1; 2; 0,5) = 1,386294358 при точном значении F (1; 1; 2; x) = =—x_| In (1—x) —1,386294361 и /с«8 с. Первым независимым решением уравне- ния Куммера t/2co , .. . dm ~ х---т- + (6 — х) —----П(1) — 0 dx2 dx является вырожденная гипергеометрическая функция F (а, Ь, х) (а, Ь, х). Через нее и гамма-функцию может быть найдено второе помощью численного интегрирования мето- дом Гаусса (программа 4.42). Задав А=1, В—х и М = 8 для х = 0,4, получим f (х) = = 0,7275863075 при точном значении 0,727586308 и /с«10 с. Дилогарифм *может вычисляться и по раз- ложению в ряд: Программа 6.21. 10 PRINT'ВЫЧИСЛЕНИЕ ВЫРОЖДЕННОЙ ГИПЕРГЕОМЕТРИЧЕСКОЙ' 15 PRINT' ФУНКЦИИ F<A/B/X>' 28 INPUT'BBEAHTE A/B'ArB 30 INPUT'BBEAHTE Х='XsLETF=LBT<23> 40 FOR 1=23 TO 1 STEP -1:LETD«I-1 50 LETF=F*<D+A>*X/<D+B>/I+1 60 NEXT ISPRINT'ЗНАЧЕНИЕ F<A/B/X)='F < 70 GOTO 308END 156
Программа 6.22. й5 PRINT-‘ВЫЧИСЛЕНИЕ ДИ ЛОГАРИФМА-’ 10 INPUT-’ВВЕДИТЕ Х='Х5 LETV==X~1 20 LET 1=0! LETS=0! LETP=1: L£TP=1 30 LET 1=1+1: LETR=-R: LETP=P*’r’ 40 LETD=R*P/r-2! LETS=S+D 50 IF ABS<D>>lE-9 THEN 30 60 PRINT*ДИЛОГАРИФМ F(X)=-‘S 70 GOTO 10: END Пример. Для x —0,i получим f (x) = = 1,299715. Пример. При заданной погрешности £ = 1. Ю~6 получим Ьегг (1,55) =0,059944 и beia (1,55) =—0,259803 (все цифры верные). § 6.13. Функции Дебая и Зиверта Интегральная функция Дебая Dn (х) = f tndt \ —dt легко находится численным f 6.12. Функции Кельвина Функции Кельвина относятся к классу функций Бесселя и являются решениями дифференциального уравнения 2 d2(l) , rf(O . . о । л х -Т-2- + Х'Х (/*+'’) “ = °- dx dx записываемыми в виде (D = berv (x)-hjbeiv (х). Функции Кельвина вычисляются разложе- нием их в следующие ряды [36]: г berv (х) — / x\v у4 cos [(3v/4-4-Ze/2) л] / x2 \fc ~ \t) L *!Г (v + ^4-1) Vu ’ k^Q beiv (x) = _/x\v V sin [ (3v/4-f-fc/2) л] (x2\k \2J L *!Г (* + *+!) \4 )' R = 0 Для практики интерес представляют в основ- ном функции Кельвина целого порядка v = n (п = 0, 1, 2, ...), в частности функции Ьегх и bei х (л = 0). При целом v — n имеем Г 1) = (п + k)!, что упрощает вычис- ления, поскольку отпадает необходимость определять гамма-функцию Г (v 4- & ~Н) для каждого члена ряда. Программа 6.23. интегрированием с помощью программы 4.42. Так, для А =0, В=х = 1 ип=М=1 приМ = 4 получим D\ (х) =0,7775046341 при точном значении 0,777505, аналогично £>4(1) = = 0,6137185176 (время счета менее 10 с). в Интеграл Зиверта Ziv (z) =^ e~z/cosx дх о также легко находится численным интегри- рованием. Для z=l, /4=0, В —0 = л/2 и Л1 =8 получим Ziv (1) =0,3282894817 при точ- ном значении 0,328286 и 16 с. §6.14. Интеграл вероятности и родственные ему функции U (* 2 Интеграл вероятности erf х=-— i e~l dt уп п желательно вычислять с высокой точностью. Это возможно с применением разложения erf х в ряд [36]: erfx=— V /п L п! (2«+1) * и —0 Дополнительный интеграл вероятности ею 2 С _ •> erfc х=-—- I е dt~- 1 —ert х. у я J 10 20 30 40 45 50 55 60 PRINT’ВЫЧИСЛЕНИЕ ФУНКЦИЙ КЕЛЬВИНА BER(X), ВЕИХ)’ INPUT’ВВЕДИТЕ 0 ДЛЯ ВЫЧИСЛЕНИЕ ВЕЕ<Х) И 1 ДЛЯ ВЕКХ) ?’Г INPUT’ЗАДАЙТЕ ПОГРЕШНОСТЬ Е=’Е INPUT ’ ЗАДАЙТЕ U, X ’ U.» Xs LETA= < X/2 ) "U s LETB=X»X/4s LET I =0 s L ETP=1 LET 1=1 + 1:LETP=P*I: IF I<U THEN 45 LETR=1/P:LET6=<3«U/4)*#PI:IF C=0 THEN FA LETZ=SIN<Q):60T0 70 LETZ=C0S<0) 70 LETS=R*ZsLETK=0 80 LETK=K+1s LETR=R*B/Kz(K+U >!LETQ= < 3*U/4+K/2> *#PI 82 IF Q<2*#PI THEN 90 85 LETQ=Q-2«#PIsGOTO 82 90 IF C=0 THEN 110 100 LETZ=SIN(Q)86OTO 120 110 LETZ=COS(Q) 120 LETW=S!LETS=S+R*Z 125 IF ABSCZXE THEN 80 130 IF ABS<S-W)>=E THEN 80 140 LETS=S»A!IF C=1 THEN 160 150 PRINT’BERU<X)=’Ss0OTO 40 160 PRINT’BEIUCX)=’S’BOTO 40SENTJ 157
Программа 6.24. 10 PRINT'ВЫЧИСЛЕНИЕ ФУНКЦИЙ ERFCX) И ERFC(X)' 20 INPUT'BBEAHTE Х='ХгLETR=1:LETS=X:LETN=0 30 LETN=N+1: LETK=2-*N+1sLETR=-R/N 40 LETUPS s LETS=S+< X’“K >*R/K 50 IF ABS(W-S>>=1E-10 THEN 30 60 LETE=2*S/SGR(#PI):PRINT'ERF(X> -' E 70 LETF=1-EsPRINT'ERFC<X)'F8GOTO 202END В программе 6.24 вычисления заканчи- После этого находятся связанные с ней ваются, когда очередной член ряда по абсо- функции Q (х) и А (х). лютной величине становится меньше е = 05 PRINT'ВЫЧИСЛЕНИЕ ФУНКЦИЙ 2<Х)лР<ХЪQCX) И Й<Х)' 10 PRINT' С ПОМОЩЬЮ РАЗЛОЖЕНИЯ Р<Х> В РЯД' 20 INPUT'BBEAHTE Х='Х:LETZ=EXP<-X*-X/2>/SG!R<2*#PI) 30 PRINT'Z < X > ='Z:LETRS12 LETS=O:LETN=O 40 LETK=2*H+lsLETR»R*K:LETUPS 50 LETS=SKX~K)/R2LETN=N+1 60 IF 8-Ы>= IE-IS THEM 40 70 LETP=.5+S*Z2PRINT'P<X)='P 80 LETQ=1-P2PRINT'Q<X)='Q 90 LETA=2*P-12PRINT'A<X)='A:СОТО 20гEND П p и м e p. erf (1) =0,842700793; erfc (1) = = 0,1572992071 (/c«5 c), erf (2) =0,995322265 и erfc (2) =0,04677734976 (/c«12 c). Интеграл вероятности erf x находится также численным интегрированием. Так, используя программу 4.42 и вводя Л=0, В = х=0,5иМ=4, получим erf х=0,5204998779 при /с«6 с (неверен лишь последний знак).* Гауссовское (нормальное) распределение вероятности характеризуется следующими основными функциями [36]: Z(x)=—L_е-'2/2, Р (х) =-Z=- ( е~,2/2 dt, . л/2Н J Q(x) = l—Р(х) = е~‘2/2 dt. X А (х)=2Р (х)-1=—L- f e~‘2/2dt. Функцию Р (х) удобно вычислять раз ложением в следующий ряд: р (x)=y+Z (X) £ 1.3.5..... (2П-4-1) • п — 0 Пример. Z (1) =0,2419707275, Р(1) = = 0,8413447461, Q (1) =0,158655239, А (1) = =0,6826894921 (/с«4 с), Z (5) = 1,486719515X X Ю“6, Р (5)-= 0,9999997133, Q (5) =2,8668&Х ХЮ"7 и Л (5) =0,9999994266 (/с«20 с). Для уменьшения времени счета функции erf х и Р (х) могут вычисляться с помощью полиномиальной аппроксимации. Для функ- ции erf х с погрешностью не- выше 1,5* 10“7 справедлива аппроксимация erf х= 1 — (аи/Ч-аа/2-}- ... 4*йб/6) е~*2, где /==1/(14-рХ), р=0,3275911, at = = 0,254829592, а2 = — 0,284496736, аз == = 1,421413741, а4= —1,453152027 и аб = = 1,061405429. С погрешностью менее 7,5*10 8 Р (х) вычисляется по формуле P(x) = l-Z(x) (6,/ + W2+ ... +Ы5), где /= 1/(1 -£рх), р=0,2316419, д| = = 0,31938153, 62 = - 0,356563782, Ь3 = = 1,781477937, ^=-1,821255978 и />3 = = 1,330274429. С помощью программы 6.26 с примене- нием этих аппроксимаций вычисляются сле- дующие функции: Р (X)ssZ (х), Ф (X) = «erf х, П(Х)зшР(х), Q(X)»Q(x) и А (Х)^А (х). Программа 6.26. 05 PRINT 'ВЫЧИСЛЕНИЕ ФУНКЦИЙ Р(ХЪ Ф(Х)л П<ХЪ QCX> И А(Х)' 10 INPUT 'ВВЕДИТЕ X='Xs LETY®l/<1 + -327591 Г*Х) 20 LETZ= < <1.0614054*V-1.453152)*Y+1.4214137 > *V 30 LETZ= <(< Z—.28449673)*Y+.2548295)* Y)/ЕХР(X^2) 40 LETF^l-Zfi LETY»1/<1+.2316419*X) 50 LETP=EXP<-X^2/2)/SQR<2*#PI) 60 LETZ=(<1.3302744*Y-1»821256>*Y+1«7814779>*Y 7© LETZ=< < < Z-.35656378> *Y+.31938153 >*Y)*P 80 PRINT!1.7!'Р(Х)='РгPRINT'Ф<Х)='F:LETZ=1-Z 90 PRINT'H(X>='Z2 PRINT'Q<X)='1-Z 100 PRINT'A(X)='2*Z-ls60T0 1©:END 158
Пример. Р (1) ==0,2419707245, Ф (1) = =0,8413447497, П (1) =0,8413447497, Q (1) = =0,1586552503 и Я (1) =0,6826894994. §6.15. Некоторые статистические функции К основным статистическим функциям относятся плотности вероятности и функции распределения для различных законов рас* пределения. В большинстве своем эти функ- Таким образом, для реализации этих вы- числений необходимо вычисление гамма- функции Г (v/2). Поскольку указанные выше функции обычно вычисляются при целых v=l, 2, Г (Л) = Г (v/2) можно вычис- лить по следующему алгоритму. 1. Если v = 1, А = 1/2 и Г (Л) =^. 2. Если v—четное число, то Г(Л) = = (Л —1)! 3. Если v — нечетное число, то Г(Л) = = (Л-1) (А—2) ... (1/2) ^л. Программа 6.27. 85 PRINT*ВЫЧИСЛЕНИЕ ФУНКЦИЙ Х~2 РАСПРЕДЕЛЕНИЯ* 18 INPUT* ВВЕДИТЕ X~2,U 'ХлV:LETA=Uz2sLETB=X/2sLETC=A 28 LET6=lsIF INT<A>=8 THEN 48 38 FOR 1=1 TO A-1:LET6=6*IsNEXT Is GOTO 55 48 LET6=SQR(#PI)sIF C<1 THEN 55 58 LETD=D*C8LETC=C-ls6OTO 48sLETG=G*H/X 55 LETF«(X~<A-l)>/6/EXP<A>/<2~A> 68 PRINT'ЗНАЧЕНИЕ F<X~2/U)='F 78 LETS«88 LETK=8s LETW=8S LETZ«8: LETG=1 88 LETK=K+1s LETW=W+2s LETZ=Ss LETG=G*<U+W) 90 LETS=S+(XZ’K)/Gs IF SOZ THEN 88 180 LETP«2*X*F*<1+8)/UsLETQ=l~P 118 PRINT*ЗНАЧЕНИЕ Р<Хл2лU>=*P 128 PRINT'ЗНАЧЕНИЕ Q<X~2,U>='QsGOTO 18SENH ции выражаются через элементарные и спе- циальные функции включая последние для нормального распределения (§ 6.14). В пер- вом случае вычисление основных статисти- ческих функций не представляет труда, а во втором требует применения некоторых спе- циальных приемов. Распределение х2 характеризуется плот- ностью вероятности / (х) «F (X) =xv/2“7(2v/2r (v/2) ev/2) и функциями распределения (х=х2) Р <Х- V) 2./2Г (v/2) Пример. F (1,1) =0,2419707245, Р (1,1) =0,6826894921, Q (1,1) =0,05121793333 (/с«4 с) и F (30,30) =0,05121793333, Р (30,30) =0,534346291, Q (30,30) =0,465653709 (/с«20 с). /-распределение характеризуется функцией Для v четных функция / (х, v) вычисляется разложением в ряд: [1 |. я 14--у cos2 04-—cos4 04- ... Q (х, v) =1 — Р (x/v) = 1-3-5 + 2-4.6 (V-3) (v-2) cosv 2 0 _________!_____I f/2 -1 e - dt ~ 2,/2Г (v, 2) Г e Вычисление P (x/v) выполняется разложе- нием в ряд: P(xA)=~f (X)[l + а для v нечетных (кроме v=l, когда / (х, v) =20/л) 20 2 Г Г 2 / (х, v) =——}----cos 0 < sin 0 I 1 cos2 04--. л л ( I о , 2>4... (v-3) 1-3... (v-2) kL{ (v + 2) (v+4) .. где 0 = arctg (x/^Jv). Программа 6.28. 18 PRINT*ВЫЧИСЛЕНИЕ ФУНКЦИЙ I(X>U) Т-РАСПРЕДЕЛЕНИЯ* 28 INPUT*ВВЕДИТЕ X»U *Xz№LET6=1:LETF-1гLETA=1:LETE=8 30 LE I X=ATN < XzSQR c U ) ) J LETCCOS < X > “’2 40 IF U/2-INKU/2)«0 THEN 90 50 LETB=2*X/#PI:IF U«G THEN 148 68 LETG=U-1sLETD=3 78 LETE=E+3sIF E=G THEN 150 159
80 LETF»F*E/D*C>LETA*A+FtLET0»D*2iG0T0 70 98 LET6«UiLETD«l 100 LETE®E*2tIF EM* THEN 130 110 LETF«F*D/E»C 120 LETA«A+FlLET0«D+2»60T0 180 130 LETZ«SIN<X>«A:GOTO 160 140 LETZ«BiGOTO 160 1S0 LETZ«2z#Pl*C0S<X>»SIN<X)»A+B 160 PRINT*ЗНАЧЕНИЕ I(X,U>*'Z160T0 208END Пример. Для x = 2,13 и v= 10 получим I (x, v) = 0,940978732. Функция распределения Q (x) для F-pac- пределения Q W- г pl±2L^(v,/2-,) (vi/v2)(v«/2) ' dy пртгцелых vi вычисляется разложением в ряд Q (х)=Г2/ф+-^(1-04~Ц£^х V2 (v2~|~2) ... (v2-f-V| —4) 2.4..,(vi—2) X x (i—o(v,"2)/2 а при целых v2 Q (x) = l-=-(l—0,|/i![l+-^-<+ V' 2.'4+2)X I I v.» (v»...(vi 4~V2 —4) /(V2_2)/2 2-4...(v2 —2) где / = v2/(v24-vix). Если целыми являются vi и v2, берется ряд для меньшего из них. Программа 6.29. Пример. Для х = 2,71, vj=6 и v2 = 7 получим Q (х) =0,1090775999, а для х=4.12, vi = 4 и v2=10 получим Q (х) = 0,03158204352. В ряде случаев необходимо найти зна- чение аргумента по заданному значению функ- ции вероятности. Общим методом решения этой задачи является решение нелинейного уравнения F (х) — F0 = 0, где F (х) — функ- ция и Fn — ее заданное значение. Однако значительное сокращение времени вычисле- ний достигается, если использовать аппрокси- мацию для зависимости х от Fo. Например, значение х=хр для заданной функции Q (х) с погрешностью менее 4,5«10~4 вычис- ляется с помощью следующей аппроксима- ции [36], справедливой для нормального распределения: х о»-1-а।/4~а2Г 1+Ы+Ы2 + Ы3 ’ где /=л/ЧтГ P=Q(xP), а0 = 2,515517, а\ =0,802853, а2 = 0,010328, 6, = 1,432788, 62 = = 0,189269 и />з = 0,001308. Если задана функ- ция Р(хр)=ро, то вычисляется Q (хр) = = 1—До, после чего находится хр. 1© PRINT*ВЫЧИСЛЕНИЕ ФУНКЦИИ Q<X> ^-РАСПРЕДЕЛЕНИЯ* 2© INPUT'ВВЕДИТЕ X,UbU2 *Х>В,С 30 LET GO< С+ХЖВ >:LETА®1s LETJ=1s LETK=1sLETK=1s LETI«0 40 LETFO25IF B/2-INT<B/2)=0 THEN 70 50 IF F-INT<F>=0 THEN 130 60 LETZ=0sGOTO 220 70 IF F-INT(F)=0 THEN 90 80 GOTO 100 90 IF B-C>»0 THEN 130 100 LETX=0!LETF=0SLETE=CSLETH^1-G 110 IF<B-2>/2=K THEN 190 120 LETK=(B-2)/2:GOTO 168 130 LETX=l!LETF=0sLETE=RsLETH=6 140 IFCC-2)/2=K THEN 19© 150 LETK«<C-2)/2 160 LETI«I+1SIF I=K THEN 190 170 LETF=F+2sLETJ=J*EzF*H!LETA==A+d 180 LETE«E*2sG0T0 160 190 LETA=A+J*E/<F+2>*HsIF X=8 THEN 210 200 LETH=l-GsLETZ=l-A*H^<Bx2)sG0T0 220 210 LETZ»A*G^<C/2) 220 PRINT'Q<X/UbU2)=*ZsGOTO 20SEND 160
Программа в.30. 10 PRI нт•• ВЫЧИСЛЕНИЕ ХР ПО ЗАДАННОМУ ЗНАЧЕНИИ» Р^Р»: ХР • ' 20 INPUT-‘ВВЕДИТЕ Р>=1/2 Р=-‘ Р: LETO=1-Ps LElT=8QR(LUb( 1/0'0 ) ? 30 LET А= (.010328*Т+.802353)*Т+2.51551? 40 LETB= ((.001388#Т+. 189269 > =* Г+1.432788 .:» *Т 50 LETX=T-А/(1+8)SPRINT!1.4! ’ХР=‘Х:0ОТО 20:END Пример. Для Р (х) =0,84134 получим хр = 0,999 (точное значение 1), а для Р (х) — = 0,53983 получим хр = 0,0998 (точное зна- чение 0,1). Через описанные выше специальные функ- ции могут быть выражены и многие другие ста- тистические функции для различных законов распределения вероятностей. На основе при- веденных выше программ могут быть состав- лень! подпрограммы для вычисления спе- циальных функций. Для современных ПЭВМ с большим объемом ОЗУ (32 Кбайт и выше) можно составить единую библиотеку подпро- грамм специальных функций, что значи- тельно расширяет функциональные возмож- ности ПЭВМ в выполнении сложных мате- матических и статистических расчетов. Для ПЭВМ с графическими возможностями с по- мощью описанных программ можно организо- вать вычисление координат точек, необходи- мых для построения графиков функций. Следует отметить, что приведенные выше расчеты не исчерпывают всего разнообразия вычислительных задач, связанных с вычис- лением специальных функций, применяемых в различных сферах науки и техники. 6 В. П. Дьяконов
ГЛАВА 7 ПРИКЛАДНЫЕ ПРОГРАММЫ ТЕХНИЧЕСКИХ И ЭКОНОМИЧЕСКИХ РАСЧЕТОВ {7.1. Типовые электротехнические расчеты Расчет ослабления А (в децибелах) Т- и Tl-образных аттенюаторов при произ- вольных сопротивлениях Zo генератора и Z\ Преобразование звезды в треугольник (рис. 7.1) и наоборот выполняется по фор- мулам R^ = R/R6, R3 = R/R4, R = R4R5 Ч- A~*Y R4 = R\R2/R, R3==R2R3/Rf Rb^RtRl/R', /? = /?i+/?2-F/?3. Программа 7.1. Пример. Для /?i = 12 Ом, /?2 = 47 Ом и /?3 = 82 Ом (треугольник) получим /?4 = = 4 Ом, = 27,333 Ом и R6 = 6,979 Ом (звезда). Для /?4= 100 Ом, /?5=150 Ом и /?6 = 220Ом (звезда) получим Ri =466,667 Ом, Я2== 318,182 Ом и /?з = 700 Ом (треугольник). Расчет сопротивлений аттенюаторов (рис. 7.2) при радных активных сопротивлениях генератора Zo = Z и нагрузки Z»=Z по задан- ному ослаблению А (в неперах): 5 Рис. 7.1. Звезда (а) и треугольник (б), составлен- ные из резисторов Тип аттенюатора 1 /? = Zsh А 21F = Z/th (Л/2) 2 fl/2 = Zth (Л/2) U7 = Z/sh Л 3 J? = Zth(4/2) 1F=Z/th(4/2) 4 K=eA — \ Программа 7.2. Пример. Для Z = 100 Ом и 4 = 1 неп получим нагрузки выполняется по формулам 4T=201g (((1 +AR1/R2) BR3+ARt)/C), 4„=2oig (((i+4«2/Zo) ад>+лг,)/с). где A = 1 A-Zq/Ri, B~ 1 + Zi//?3, C = Zo4-Zi. Тип аттенюатора 1 2 3 4 Я= 117,520 Ом 21F=216,395 Ом Я/2 = 46,212 Ом W = 85,092 Ом Я = 46,212 Ом № = 216,395 Ом 1,718 ZX=171,818 Ом Z/K = 58.198 Ом 162
Программа 7.1. 10 PR I НТ'ПРЕОБРАЗОВАНИЕ ТРЕУГОЛЬНИКА В ЗВЕЗДУ-КОД ’*> 20 PRINT'ПРЕОБРАЗОВАНИЕ ЗВЕЗДЫ В ТРЕУГОЛЬНИК-КОД 1' 30 INPUT'ВВЕДИТЕ КОД ПРЕОБРАЗОВАНИЯ ? 'Ks IF K==l THEN ВО 40 INPUT'ВВЕДИТЕ R1/R2/R3 'R1/R2/R3 50 LETR=Rl+R2+R3sLETR4=Rl#R2zR 60 LETR5«R2*R3zR: LETR6=R3*R1/R 70 PRINT'R4='R4' R5«'R5' R6='R6:60T0 30 B0 INPUT'ВВЕДИТЕ R4/R5/R6 'R4/R5/R6 90 LETR=R4*R5+R5*R6+R6*R4 100 LETR1«R/R5s LETR2=R/R6sLETR3=RzR4 110 PRINT'R1='R1' R2«'R2' R3='R3:60T0 38SEND R^Rfe R^R/2 Рис. 7.2. Резистивные аттенюаторы четырех типов Программа 7.2. IO PRINT'РАСЧЕТ СОПРОТИВЛЕНИЙ АТТЕНЮАТОРОВ' 15 PRINTI5.3!' ПО ЗАДАННОМУ ОСЛАБЛЕНИЮ А' 20 INPUT'ВВЕДИТЕ ВХОДНОЕ И ВЫХОДНОЕ СОПРОТИВЛЕНИЯ Z='Z 25 INPUT'BBEAHTE ОСЛАБЛЕНИЕ В НЕПЕРАХ А='AsLETB=Az2 30 INPUT'ВВЕДИТЕ ТИП АТТЕНЮАТОРА Ь2/3 ИЛИ 4 ?'С 40 IF С=1 THEN 80 50 IF С=2 THEN 90 60 IF С=3 THEN 100 78 PRINT'AIТЕНЮATOP 4 ТИПА' 75 PRINT'R='Z*HTN<B>' ON W«'Z/HTN<B>' OM'sGOTO 20 80 PRINT'АТТЕНЮАТОР 1 ТИПА' 85 PRINT'R='Z*HSN<A)' ON 2*W='ZzHTN(B)' 0M's60T0 20 90 PRINT'АТТЕНЮАТОР 2 ТИПА' 95 PRINT'R/2='Z*HTN(B)' ОМ Ы='Z/HSN<A)' OM'SSOTO 20 100 PRINT'АТТЕНЮАТОР 3 ТИПА':LETK=EXP<A)-1 110 PRINT'K«'K' Z*K»'Z*K' OM Z/K='Z/K' OM'sfcOTO 208END Программа 7.3. IO PRINT'РАСЧЕТ ОСЛАБЛЕНИЯ T- И П-ОБРАЗНЫХ АТТЕНЮАТОРОВ' 2© INPUT'ЗАДАЙТЕ В ОМАХ 20/Z1 'K/L 30 INPUT'ЗАДАЙТЕ В ОМАХ R1/R2/R3 'H/bJ 40 LETА=1+КУ№LETB=1+Lz.J:LETC=K+L 50 LETF=20i*L0T < 1+AmH/I )*B+A*H)/C) 60 LET6=20#L6T <(K*(1+A*I/К > *B+A#L> zC > 70 PRIHT'ОСЛАБЛЕНИЕ AT='F' ДБ' 80 PRINT'ОСЛАБЛЕНИЕ АП='Б' ДБ'вВОТО 20SEHD Пример. Для Zo —2i=50 Ом, #i = = 75 Ом, R2 = 38 Ом и #з=19 Ом получим Дт= 11,469 дб, Дп= 14,560 дб. Расчет сопротивлений согласующего де- лителя (рис. 7.3) и вносимого им ослабления выполняется по формулам Ri—Zo^/T—Zi/Zo, #2 = Z]/’\/l Zi/Zo, Lmhh = 20 log (V-Zo/Zi — 1). 6* Рис. 7.3. Согласующий резистивный делитель 163
Программа 7.4. 10 PRINT*РАСЧЕТ СОПРОТИВЛЕНИЙ И ОСЛАБЛЕНИЯ РЕЗИСТОРНОГО ДЕЛИТЕЛЯ* 20 INPUT*ВВЕДИТЕ В ОМАХ СОПРОТИВЛЕНИЯ ZO/ZI *20/31:LETK=Z1/ZO 30 LETR1=Z0*SQR<1-К):LETR2=Z1#SQR< 1 -К) 40 LETL=20*L6T < SQR <1/К>+SQR<1/К-1)> s PRINT’5.31 * R1 = * R1 * OM* 50 PRINT*R2=*R2* OM*sPRINT*ОСЛАБЛЕНИЕ L MIN=*L* ДБ*:БОТО 20sEND Пример. Для Zo = 5OO Ом и Z\ =200 Ом получаем #i =387,298 Ом, #2 = 258,199 Ом и Амин = 8,961 дб. Расчет сопротивлений Т- и П-образного аттенюаторов по заданным входному Zo и выходному Z\ сопротивлениям и коэффи- циенту ослабления мощности N выполняется с помощью следующих выражений: Т-образный аттенюатор Sl=z,(^±L)_fc. где #з= V^ZoZi, П-образный аттенюатор 1 __ 1 ( Af-hl \ 1 Я, “ Zo \ Af-l J Яз ’ 1 1 / Af-H \ 1 /?2 Zi\N-\) #з ’ = 50 Ом и М=100 для П-образного атте- нюатора /?1 = 136,147 Ом, #2 = 56,990 Ом и #з = 350,018 Ом. Сопротивление последовательной (рис. 7.4, а) и параллельной (рис. 7.4, б) RCL цепей рассчитывается по формулам (ш = 2л/, где f — частота). Цепь последовательная Z=^R±]uL = X + jYy |Z|=-Vtf2+(<oL-l/<oC)2, n . / oiL— 1 /о)С \ 0==arCtg(-----R^-----) ' Цепь параллельная Ъ—j (u>C—l/<aL) Z = *----------------=X +/Y. ‘ + (<oC—1/<oL)2 R |2|=717₽2+(<оС-1/ш£)2 , 1 2 П\Г #3“ К-1 V ZoZi Программа 7.5. 0 = arctg Mi-# 10 PRINT*РАСЧЕТ T- И П-ОБРАЗНЫХ АТТЕНЮАТОРОВ* 20 PRINT*ПО ЗАДАННОМУ ОСЛАБЛЕНИЮ МОЩНОСТИ N* 30 INPUT*ВВЕДИТЕ В ОМАХ СОПРОТИВЛЕНИЯ 20/ZI *Z0/Z1 40 INPUT*ВО СКОЛЬКО РАЗ (Ю ОСЛАБЛЯЕТСЯ МОЩНОСТЬ Н=? *Н 50 LETK=<N+l)z<N-i) 60 INPUT*ЗАДАЙТЕ КОД 0-Т И 1-П ? *С ?0 IF С=1 THEN 100 SO LETR3=2:*SQR<N*Z0*Z1>/(N-1) 90 LETR1=Z0*K-R3:LETR2=Z1*K.-R3S6OTO 130 100 LETO=2*S6R<N/Z0/Zi:)/<N-l)’.LETR3=l/&3 110 LET61=K/Z0-h3:LET&2=KzZl-&3 120 LETRl=lzGl;LETR2=b-B2 130 PRINT•5«3!*Rl=*R1* P2=*R2* R3=*R3:60T0 4©SEND' Пример. При Zo = 2OO Ом, Zi = 100 Ом и W = 50 для Т-образного аттенюатора на- ходим R\ —167,347 Ом, /?2== 63,265 Ом и Яз = 40,816 Ом, а при Zo=lOO Ом, Zi = где |Z| —модуль полного (комплексного) сопротивления, 0 — угол сдвига фаз, X — действительная и Y — мнимая составляю- щие Z. 11 а R2 Рис. 7.4. Последовательная (а) и параллельная (б) LCR цепи и колебательный контур (в) 164
Программа 7.6. 10 PRINT'СОПРОТИВЛЕНИЕ LCR ЦЕПЕЙ' 20 PRIНТ'ЗАДАЙТЕ КОД О-ЕСЛИ ЦЕПЬ ПОСЛЕДОВАТЕЛЬНАЯ' 30 INPUT'И КОД 1-ЕСЛИ ЦЕПЬ ПАРАЛЛЕЛЬНАЯ ? 'К 40 INPUT'ВВЕДИТЕ В ОМАХ СОПРОТИВЛЕНИЕ R='R 5© INPUT'ВВЕДИТЕ В МИКРОФАРАДАХ ЕМКОСТЬ С='С:LETC=C/1E6 60 INPUT'ВВЕДИТЕ В МИЛЛИГЕНРИ ИНДУКТИВНОСТЬ L='LsLETL=L/1E3 65 INPUT'ЗАДАЙТЕ В ГЕРЦАХ ЧАСТОТУ F«'F 70 LETW=2*#PI*F:IF К»1 THEN 10О 80 LETX=R:LETV= < W*L-1/М/С)s LETG=ATN <V/X> 90 LETZ=SQR<X*X+Y*V):GOTO 130 100 LETA«W*C-1/W/L s LETB=1/R/R+АжA 110 LETXM/R/B8LETY=-A/BsLETZ==l/SQR(B) 120 LET6=ATN<A*R> 130 PRINT'КОМПЛЕКСНОЕ СОПРОТИВЛЕНИЕ Z«'X' + 140 PRINT'МОДУЛЬ /Z/='Z' OM' 150 РВ1МТ'ФА30ВЫй УГОЛ &='6*180/#PI' ГРАДУСОВ' 160 60T0 65’. END Пример. Для последовательной RCL цепи при R = 10 Ом, 6 = 5 мкФ, 6 = 20 мГн и f = 60 Гц получим Х=10 Ом, Y — = —522.977 Ом, \Z\ =523,072 Ом и 6=6 = = —88,905°. Для параллельной RCL цепи при /? = 47 Ом, 6=1 мкФ, 6 = 30 мГн и f = 50 Гц получаем X = 1,827 Ом, Y = 9,085 Ом, IZI =9,267 Ом и 0=6 = 78,628°. Сопротивление резонансного контура (рис. 7.4, в) Z и его резонансная частота fo вы- числяются по формулам (ш = 2л/) fo=l/2n \jLC, Z = X + jY = __R1R2 (/?i “Ь R2) И- R1 (<oL — 1 /<oC)2 . (/?i+/?2)2+(<»Z.-1/wC)2 + /?? ((oZ.-1/toC) + ‘ (/?,+/?2)2+(o>£-1/<oC)2 ’ IZI =л/х2+У2, 6 = arctg (Y/X). Программа 7.7. Пример 1. Определить токи /ь /2 и /3 в мостовой схеме (рис. 7.5), содержащей три контура. Применяя метод контурных токов, задаем произвольные направления токов и составляем уравнения для контуров. Каждое уравнение базируется на том, что сумма э. д. с. и падений напряжения на резисторах каждого контура равна 0. в 1 10 PRINT'ВЫЧИСЛЕНИЕ СОПРОТИВЛЕНИЯ РЕЗОНАНСНОГО КОНТУРА' 15 INPUT'ВВЕДИТЕ В ОМАХ СОПРОТИВЛЕНИЯ RbR2 'R,S 20 INPUT'ВВЕДИТЕ В МИЛЛИГЕНРИ ИНДУКТИВНОСТЬ L='L5 LEHM Z1E3 30 INPUT'ВВЕДИТЕ В МИКРОФАРАДАХ ЕМКОСТЬ C='CS LETC=C''1E6 40 INPUT'ЗАДАЙТЕ В ГЕРЦАХ ЧАСТОТУ F='F 50 LETbJ=2*#PI*F 60 LETU==W*L-1/W/С8 LETT=(R+S>~2+W~2 70 LETX=<R*S*<R+S)+R*U*W)/T 80 LETY=R*R*W/TsLETZ»SQR<X'*X+Y*Y>sLETS=ATN<V/X) 90 PRINT'РЕЗОНАНСНАЯ ЧАСТОТА FO='l/2/#PI/SQR(L*C> 100 PRINT'КОМПЛЕКСНОЕ СОПРОТИВЛЕНИЕ Z='X' «• J*('V'>' 110 PRINT'МОДУЛЬ zZ/='Z' OM' 120 PRINT'ФАЗОВЫЙ УГОЛ Q='180*S/#PIs60T0 408END Пример. Для Ri=20 Ом, R2 — 15 Ом, 6 = 0,5 мкФ, 6 = 20 мГн, f = 60 Гц находим /0 = 60 =1591,549 Гц, Х = 20,000 Ом, Г = = —0,076 Ом, \Z\ =20,000 Ом и 0 = = -0,216°. Расчеты сложных цепей выполняются на постоянном токе методами контурных токов и узловых потенциалов. В конечном счете они сводятся к решению линейных или нели- нейных систем уравнений. Койтур Уравнение контура 1 4/1 — 4/2 -I- 15/i - 15/з — 40 = 0 2 4/г — 4/14-8/2+Ю/2 — 10/з — 0 3 10/з — IO/2 + 1 /з + 15/з 15/1=0 В этих уравнениях коэффициенты перед /1, /2, /з — сопротивления соответствующих резисторов схемы (рис. 4.5). 165
После простых преобразований из этих уравнений получаем систему линейных урав- нений: 19/j — 4/2—15/3=40, — 4/, 4-22/г— Ю7з = 0, -15/14-10/2 4-26/3 = 0. Решая ее, например, с помощью программы 44, получаем: /| = 7,860 А, /2 = 4,230 А и /з=6,192 А. Пример 2. Определить ток /к в инте- гральной схеме токоотвода (стабилизатора тока) (см. рис. 7,6). В общем случае это достаточно сложная задача, требующая при- менения громоздкой эквивалентной схемы транзистора. Однако нормальная работа токо- отвода обеспечивается при работе транзистора в линейном режиме, когда /к = В/2 и /э = = (В-|-/) /2 и напряжение база-эмиттер ,/ . (B4-1J/2 ибз = Шфт in ——-— --, 'эо где т&2— константа, учитывающая реком- формулы //д = £/и<рт1п 4-1 \ <0 где /о — обратный ток диодов. Итак, применяя метод узловых потенциа- лов, получаем для токов Л и /2 следующую систему нелинейных уравнений: — /Лфт In---J-------Яэ (В4-1) /2п I *30 1.^----------------------------------------, где (Лм । = femq>T In ( — у Эта си- стема непосредственно пригодна для реше- ния ее методом простых итераций (см. § 4.4). Учитывая самостоятельное значение рассчи- тываемого узла, составим для решения -этой системы отдельную программу. Программа 7.8. 10 PRINT'РАСЧЕТ ТОКОВ В Сг.ЬИЕ ТОКООТВОДА' 20 INPUT'ВВЕДИТЕ K/FT/E/R1/R2/R3'K/F/E/R/Z/ Ы 30 INPUT'ВВЕДИТЕ М/10/1Э0/В'М/I/J/B 35 INPUT'ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Н='Н 40 INPUT'ЗАДАЙТЕ НАЧАЛЬНЫЕ ТОКИ 110/128'Х/YsLETB=B+l 50 LETA=N*F!LETH=A*K 60 LETC=D*L06<<X-Y)zl+1> 70 LETX=<E-C)zRsLETT=Y 80 LET Y= < C-A*LOG < B*Yz J ) -WB*Y > zZ 80 IF ABS<Y-T)>H THEN 60 10© PRINT'TOK 11='Xs PRINT'TOK 12='Y 110 PRINT'НАПРЯЖЕНИЕ НА ДИОДАХ UH='C 120 PRINT'ТОК КОЛЛЕКТОРА IK='Y*<B-1) 130 END бинацию носителей в эмиттерном переходе, ^r — kT/q — тепловой потенциал (k — посто- янная Больцмана, Т — температура, q — заряд электрона), В — коэффициент передачи тока базы и /эо — обратный ток эмиттерного перехода. Рис. 7.6. Интегральная схема токоотвода Падение напряжения на k диодах цепи базового смещения можно найти с помощью 166 Пример. Для k — 2, <рт = 0,025 В, Е = 5 В, Я| = 2 кОм, Я2 = 20 кОм, Яэ==0,1 кОм, /п = 2, /о=Ь1О 6 мА, /Эо-М0"7 мА, В = 50, погрешности //=1-10’6, начального значе- ния /2о = 0,01 мА, /ю=1 мА получаем: /1 = 1,781 мА, /2 = 0,02472 мА, (/д= 1,4379 В и /к = 1,2358 мА. § 7.2. Расчет индуктивных элементов Расчет индуктивных элементов сводится к расчету индуктивности L элемента задан- ной конструкции или какого-либо парамет- ра последней при заданной индуктивности. Для большего числа индуктивных элементов существуют достаточно простые формулы для практических расчетов индуктивности L. Приводим для справок основные из них с контрольными примерами (L в наногенри, размеры в сантиметрах) [22]. 1. Индуктивность отрезка круглого про- вода длиной / и диаметром d L=.2/(arshl- + 4-^/(?j"+l)- Для /=1 см и i/=0,1 см L = 4,186 нГн.
2. Индуктивность отрезка провода прямо- угольного сечения (ширина Ь, толщина /) длиной / L = 2/(ln-^-+0,4471±£-+-1). Для 6 = 0,1 см, / = 0,001 см и /=1 см L — = 7,017 нГн. 3. Индуктивность одиночного круглого витка диаметром D и диаметром провода ч! £ = 2ло(1п-^—1,75). Для £> = 2 см и d = 0,l см L = 41,785 нГн. 4. Индуктивность тонкопленочного круг- лого витка диаметром D и шириной полоски 6»/ (/ — толщина полоски) £ = 2л£>Х Х^1п ^-—^-^ — 2,450. Для 6 = 0,01 см и D—\ см L = 25,083 нГн. 5. Индуктивность тонкопленочного квад- ратного витка со стороной квадрата I и шириной полоски 6>/ £ = 8/ ^1п —2,583^ . Для /=1 см и 6 = 0,01 см £ = 30,653 нГн. 6. Индуктивность однослойной катушки круглого сечения со средним радиусом R и длиной катушки / £=4лш2 R I |п ( 1 —5- )_[_ 2,3+ 1,6///?4-0,44 (//Я)2]’ Фо₽мула обес' печивает погрешность менее 0,1 %. Для R=\ см, / = 2 см и о) = 10 имеем £ = = 1359,627 нГн. 7. Индуктивность однослойной катушки квадратного сечения со средней длиной стороны квадрата 2Q и длиной всей намотки / £=16» (о2а Г1 n f 1 -|- + L \ (Ь/а) ) + 3,64 + 2 (//а)+0,51 (//а)2 ] 'Для а = 1 см’ / = 2 см и (о = 4О имеем £ = 26816 нГн. 8. Индуктивность тороидальной однослой- ной катушки с тором круглого сечения со средним диаметром тора D и диаметром сечения Dr. £ = 2лй)2 (D-VD2-D?). (7.1) Для £> = 3 см, £>i = l см и to = 300 имеем £ = 83486 нГн. 9. Индуктивность тороидальной однослой- ной катушки квадратного сечения с внутрен- ним диаметром тора £>i, наружным D2 и высотой h L = 2<^h In (£)2/£>i). (7.2) Для £>2 = 3 см, D| = 1 см, h~\ см и to =100 имеем £ = 21972 нГн. 10. Индуктивность многослойной торо- идальной катушки со средним диаметром тора Р (включая обмотку) и диаметром сечения тора D\ £ = 2n£>(o2Qn-^--l,75 (7.3) Формула справедлива при плотной намотке и при условии, что толщиной изоляции про- вода можно пренебречь. Для £> = 4 см, £>i=0,8 см и о)= 100 имеем £ = 487293 нГн. 11. Индуктивность многослойной короткой цилиндрической катушки со средним диа- метром £>, длиной 1<.D и толщиной обмот- , 25лю2 (D2) КИ С L 3D+91+Юс ' Для £> = 2,5 см, /=1 см, с=1 см и о) = 100 имеем £=185235 нГн. 12. Индуктивность катушки на тороидаль- ном ферромагнитном сердечнике прямоуголь- ного сечения с плотной намоткой , 4р£ (dH — da) со2 , . , . _ . _ .. L= (d.+d.) при 1,5^2, (7.4) £ = 2(o2|a£ In (dH/dB) при dH/dB> 1,54-2, (7.5) где p, — магнитная проницаемость сердеч- ника, h — его высота, d„ и dB — наружный и внутренний диаметры кольца. Для dH = = 4 см, dB — 2 см, 6=1 см, р=1000, to =120 имеем £=19962638 нГн, а при dB = 3 см и (о = 200 (остальные данные прежние) £ = = 22857142 нГн. 13. Индуктивность катушек на П- и 111- образных замкнутых ферромагнитных сердеч- , 4nu,Fc(ir никах £= -.., где Fc — пло- Im ( 1 + Щк/alm) щадь поперечного сечения сердечника, di — толщина зазора, 1т — длина магнитной линии сердечника, а— 1 — 2 — поправочный коэффи- циент на рассеивание в зазоре. Для А=1 см2, (£ = 0,05 см, £п=10 см, а =1,5, р= 1000 и (о = 400 имеем £ = = 46398906 нГн. Рис. 7.7. Броневой цилиндрический сердечник 14. Индуктивность катушки в броневом цилиндрическом сердечнике (рис. 7.7) j _ 19,74И(о2 Л4-В ’ (7.6) где А = (Л, +/12) ( ' + . (7.7) \(/4 —аз d2 — d\J В= 1 г In ( { h2 — hi \ d\-\-d2 / (7.8) 167
Для di = 1 см, dz — 2 см, d$ —4 см, 4/4 = 5 см, hi =3 см, Аг=4 см, ц=10 и (0 = 100 имеем Л = 468914 нГн. 15. Индуктивность тонкопленочных кату- шек L=ki (4н+Лв11) о>5/31п (k2 -41+ \ , \ Аи— Двн / где А| = 2,33 и А2=4 для спиральной (круг- лой) катушки, ^1 = 12,05 и А2=8 —для квадратной, Ан и Ави — наружный и внут- ренний размеры. Для спиральной катушки с (о = 5, Лн = 1 см и Двн = 0,5 см получим L = 126,972 нГн. 16. Взаимная индуктивность двух тонких проводов длиной /, расположенных парал- лельно на расстоянии /г, At = 2/ ^arsh +т~~\Кт) +1) • Для Л=1 см и /=10 см £=41,865 нГн. 17. Взаимная индуктивность двух тонких проводов длиной а и 6, расположенных на одной прямой с расстоянием между стыкуе- мыми концами A, А4= (а + 64-Л) In (аЧ- + &Ч-А) + A In A—(a-f-A) 1п“(а4-А) — (А + -j-A) In (A-hA). Для а=10 см, 6 = 5 см и А=1 см At = 7,234 нГн. 18. Взаимная индуктивность двух прово- дов длиной /, сходящихся в одной точке с расстоянием между сходящимися концами и углом между ними <р, At = 2/ cos <р In (1 + + 2Z/C). Для /=20 см, с = 5 см и ф=30° полу- чим At = 76,l 14 нГн. 19. Взаимная индуктивность двух тонких круглых катушек с диаметром D и средним расстоянием между ними Я At = 0,6(О1(й2П4/Я3, няющей весь сердечник), / — длина средней окружности тора. Однократные расчеты по приведенным j формулам целесообразно выполнять в каль- 1 куляторном режиме. | Пример 3. Определить взаимную ин- | дуктивность катушек (см. 20), если <di =200, j (о2 = 50, Fcep= 1 см2 и /=8 см. Обозначив - (oi = Wl, <o2 = W2, Fcep = F и /=Я, выполняем ; следующие операции: Wl=200 ПС W2 = 50 ПС F=1 ПС Н = 8 ПС (ввод (01) (ВВОД (О2) (ввод Fccp) (ввод /) PRINT 4*#PL*W1*W2*F/H ПС Получаем значение £=15707,96327 нГн. При многократно повторяющихся вычис- лениях и при громоздких формулах расчеты L, «о или других параметров катушек целе- сообразно выполнять по программам. По- скольку составление программ формульного счета достаточно просто, ограничимся при- ведением нескольких характерных примеров. Пример 4. Составить программу для расчета числа витков, необходимых для полу- чения заданной индуктивности L для трех типов тороидальных катушек: 1 — однослой- ной круглого сечения, 2 — однослойной прямо- угольного сечения и 3 — многослойной круг- лого сечения. Необходимо использовать фор- мулы (7.1) — (7.3), разрешив их относи- тельно (о, и предусмотреть выбор типа катущки и расчет по соответствующей для нее формуле. Это можно сделать вводом кода, указывающего на тип катушки, и ис- пользованием в программе условных пере- ходов для выбора нужной формулы. Программа 7.9. 10 PRINT 'ЧИСЛО ВИТКОВ ТОРОИДАЛЬНОЙ КАТУШКИ' 20 PRINT ‘ОДНОСЛОЙНОЙ/ КРУГЛОГО СЕЧЕНИЯ КОД 1' 30 PRINT 'ОДНОСЛОЙНОЙ/ ПРЯМОУГОЛЬНОГО СЕЧЕНИЯ КОД 2' 40 PRINT лМНОГОСЛОЙНОЙ/ КРУГЛОГО СЕЧЕНИЯ КОД 3' 45 INPUT ‘ВВЕДИТЕ КОД' N. IF N=1 THEN 70 50 IF N=3 THEN 70 60 INPUT 'ВВЕДИТЕ ВЫСОТУ СЕЧЕНИЯ Н='Н 70 INPUT ‘ВВЕДИТЕ ДИАМЕТР D='D 80 INPUT ‘ВВЕДИТЕ ДИАМЕТР Х=‘Х 90 INPUT 'ВВЕДИТЕ ИНДУКТИВНОСТЬ L='L 100 IF №1 THEN 140 110 IF N=2 THEN 160 120 IF N=3 THEN 180 130 PRINT 'КОД НАБРАН НЕВЕРНО' : GOTO 45 140 LET W=SQR<Lz<2*#PI«(D-SQR<D'’'2*-X’'2>) ) > 150 GOTO 190 160 LET W=SQR(L/C2*H»L0G<D/X>)) 170 GOTO 190 180 LET W=SQR(L/<2*#PI*D*(L0G<8*D/X>F1.75)>) 190 PRINT ‘ЧИСЛО ВИТКОВ H=‘W 200 GO10 90 s END где «л и (o2 — число витков катушек. Для (01==Ф2 = 5О, D — 2 см и Я=0,5 см А4 = = 192000 нГн. 20. Взаимная индуктивность двух коакси- альных катушек, намотанных на общий тороидальный сердечник (материал не ферро- магнитный), М = 4«(ol(o2Fccp//. где Fccp — пло- щадь среднего поперечного сечения (с учетом толщины обмотки первой катушки, запол- Пример. Код 1 D = 3 см D1 =Х=1 см L== 1 -105 нГн со = W = 304,569 Код 2 А = Н = 1 см D = 3 см D1=X=1 см L=l-106 нГн a) = W = 213,335 168
Код 3 D = 4 см Dl=X = 0,8 cm L=l-107 нГн w = W = 453,007 В ряде случаев зависимость L от со или от другого параметра х неразрешима отно- сительно искомого параметра х при задан- ном Lq. В этом случае значение х может быть получено из решения нелинейного урав- нения Пример 5. Составить программу для расчета числа витков катушки на тороидаль- ном сердечнике, используя при dH/dB<l,75 формулу (7.4), а при dH/dB^l,75— фор- мулу (7.5). Программа 7.10. Lq — Е (х) =0 (7.12) подходящим численным методом. Удобным является метод поразрядного приближения, при котором не требуется анализа, сходи- мости и приближение L (х) к значению /о 10 PRINT'РАСЧЕТ L ИЛИ Ы КАТУШКИ НА ТОРОИДАЛЬНОМ' 20 PRINT' ФЕРРОМАГНИТНОМ СЕРДЕЧНИКЕ' 30 PRINT'НЕИЗВЕСТНОМУ L ИЛИ Ы ЗАДАЙТЕ НУЛЕВОЕ ЗНАЧЕНИЕ' 35 INPUT'ВВЕДИТЕ ВНЕШНИЙ И ВНУТРЕННИЙ ДИАМЕТРЫ ТОРА D/D1 'ПИ 40 INPUT'ВВЕДИТЕ ВЫСОТУ ТОРА Н='Н 50 INPUT'ВВЕДИТЕ ОТНОСИТЕЛЬНУЮ МАГНИТНУЮ ПРОНИЦАЕМОСТЬ М=='М 60 INPUT'ЗАДАЙТЕ ИНДУКТИВНОСТЬ КАТУШКИ L='L 70 INPUT'ЗАДАЙТЕ ЧИСЛО ВИТКОВ КАТУШКИ Ы«'Ы 80 LETK=D/ISLETA=0SIF К<1.75 THEN LETA==1 90 IF А=0 THEN 110 100 LETF«<D+IV4/M/H/<D-I)sGOTO 120 110 LETF=l/2/M/H/L0G<D/I) 120 IF Ы«0 THEN 140 130 PRINT'ИНДУКТИВНОСТЬ L='W*W/FsGOTO 60 140 PRINT'ЧИСЛО ВИТКОВ Ы='SQR(L*F)sGOTO 60s END Для dH = D~4 cm, dB = D\ = 2 cm, h = H = = 1 см, p =/4 = 1000, L = 2-107 нГн полу- чим 0 = 1^=120,112, а для Z) = 4 см, Dl = = 3 см, H=\ cm, /4=1000 и L = 2• 107 нГн получим W— 187,083. Пример 6. Составить программу для расчета L по заданному со или со по задан- ному L для катушки на броневом сердеч- нике. Для этого формулу (7.6) представим в виде L — w2/F, (7.9) w = (7.10) Г=(4+В)/(19,74И), (7.11) где А и В определяются выражениями (7.7) и (7.8). Для вычисления Е (по заданному со) или со (по заданному L) удобно неизвест- ному параметру задавать при вводе нулевое значение и с помощью оператора условного перехода задавать вычисления по нужной формуле— (7.9) или (7.10). Программа 7.11. происходит при увеличении х с 0. Последнее исключает необходимость в задании началь- ного интервала изменения L (х), который за- ведомо неизвестен. Пример 7. По технологическим сообра- жениям внутренний размер ЛВН = Л и шаг витков Z тонкопленочных катушек должны быть заданными величинами. Найти число витков тонкопленочной катушки для этого случая при заданной индуктивности /о. Зависимость L (со) в этом случае имеет вид £(<») = ^.+1„ [.(.+□], Приведенная ниже программа решает урав- нение (7.12) при х —со методом поразряд- ного приближения и выдает результат с заданной погрешностью решения e = Q (это, однако, не означает, что погрешность расче- 10 PRINT'РАСЧЕТ L ИЛИ Ы КАТУШКИ НА БРОНЕВОМ' 20 PRINT' ФЕРРОМАГНИТНОМ СЕРДЕЧНИКЕ' 30 INPUT'ВВЕДИТЕ ДИАМЕТРЫ DbD2/D3,D4 'O/P/Q/R 40 INPUT'BBEAMTE РАЗМЕРЫ НЬН2 'НИ 50 INPUT'ВВЕДИТЕ ОТНОСИТЕЛЬНУЮ МАГНИТНУЮ ПРОНИЦАЕМОСТЬ М='М 60 LETА= < Н+1)ж <1/< РжР-0ж0 у+1х <РжР-ОжО)) 70 LETB=LOG<(R+Q >/< Р+О)> х(I-Н):LETF== < А+В)/19.74/М 80 PRINT'НЕИЗВЕСТНОМУ L ИЛИ Ы ЗАДАЙТЕ НУЛЕВОЕ ЗНАЧЕНИЕ' 90 INPUT'ВВЕДИТЕ L/Ы 'L/WiIF Ы=0 THEN 110 100 PRINT'ИНДУКТИВНОСТЬ L=' WW/Fs GOTO 80 110 PRINT'HMCflO ВИТКОВ W='SQR(L*F):GOTO 80SEND Для Z)1 = 1 cm, D2 = 2 cm, D3 = 4 cm, Z)4=5 cm, //1=3 cm, /72 = 4 см, p=10, / = 5«10-5 нГн, задав U7 = 0, получим W — = 103,261, а задав Ц7=100 и / = 0, получим / = 468914 нГн. та со также равна е,— последняя прежде всего зависит от погрешности исходной фор- мулы для L, которая может быть сущест- венно выше е). 169
Программа 7.12. 10 PRINT 'ЧИСЛО ВИТКОВ ТОНКОПЛЕНОЧНОЙ КАТУШКИ С ЗАДАННЫМ ШАГОМ' 20 INPUT'КРУГЛОй-КОД ЬКВАДРАТНОй-КОД 2. ВВЕДИТЕ КОД 'N 50 IF N=1 THEN 70 60 GOTO 80 78 LET К1=2.33 : LET K2=4 s GOTO 110 80 IF NO2 THEN 100 90 LET Kl=12.05 s LET K2=8 : GOTO 110 100 PRINT'KOA НАБРАН НЕВЕРНО':GOTO 20 110 INPUT 'ВВЕДИТЕ ВНУТРЕННИЙ РАЗМЕР A='A 120 INPUT 'ВВЕДИТЕ ШАГ Z='Z 130 INPUT 'ЗАДАЙТЕ ТОЧНОСТЬ РЕЗУЛЬТАТА Q='Q 140 INPUT'BBEAHTE ИНДУКТИВНОСТЬ L='LsLETW=0:LETH=1 160 IF ABS(H)<6 THEN 200 170 LETW=W+HsGOSUB 210s IF F/H>=0 THEN 170 190 LET H=-H/10 s GOTO 160 200 PRINT 'ЧИСЛО ВИТКОВ Ш='Ы : GOTO 140 210 LETV=<2*A/(W*Z))+1!LETF=L-K1*Y*Z*<W’<8/3))*LOG(K2*?> 220 RETURN : END Для квадратной катушки (код 2) с А — = 0,2 см, Z — 0,005 см, Л = 100нГни8=1-10~3 получим 1Г = 6,935. Программная реализация расчетов индук- тивных элементов целесообразна также, если расчеты проводятся по многим сопряженным формулам. Ниже даны два таких примера. Пример 8. Расчет дросселя фильтра на стальном О-, П- или Ш-образном сердеч- никах. Задается индуктивность дросселя L и рабочий ток обмотки I. 1. Определяется ширина стержня а — = 2,6^/ZT^, на котором находится обмотка, и сечение его Q=l,5a2. 2. Выбирается стандартный сердечник со значениями а и Q, равными полученным или несколько большими их. Для выбран- ного сердечника известны ширина окна /?, высота окна h и длина магнитной линии 1т. 3. Вычисляем толщину набора c — Q/a. 10 PRINT'РАСЧЕТ ДРОССЕЛЯ ФИЛЬТРА' 20 INPUT 'ВВЕДИТЕ ИНДУКТИВНОСТЬ L='L 30 INPUT 'ВВЕДИТЕ ТОК 1='I 40 LETA=2.6*<<L*(1Л2))Л<1/4)> 45 PRINT 'ШИРИНА СТЕРИНЯ А='А 58 LET Q=(A~2)*1.5 4. Вычисляем коэффициент k — LI2/aclni. 5. Используя аппроксимацию зависимости оптимальной толщины воздушного зазора /z% (в % от 1т) от находим по фор- муле lz%~ (3304’ —15-10V). Аналогично эффективную магнитную про- ницаемость материала сердечника определяем так: М—ц7— (114 ехр ( -4014) 4-50). 6. Находим половину длины оптималь- ного зазора 1//2 — 1г%‘м/20- 7. Задав допустимую плотность тока в про- воде обмотки, находим диаметр провода rf=1.13 V/o/ft 8. Определяем число витков обмотки о) = 10 ifLim/ 1,26|xzac. 9. Вычисляем коэффициент заполнения окна сердечника 4М — 0,008о)(У2/6/г. 10. Находим омическое сопротивление об- мотки дросселя г = 0,000225(о «2 (а 4-с) 4 4-л6/<А Программа 7.13. 55 PRINT 'СЕЧЕНИЕ СЕРДЕЧНИКА Q='Q 60 PRINT 'ВЫБИРИТЕ СТАНДАРТНЫЙ СЕРДЕЧНИК ПО ЗНАЧЕНИЯМ А И Q' 70 INPUT 'ВВЕДИТЕ ШИРИНУ СТЕРШНЯ А И ОКНА В' Ал В 80 INPUT 'ВВЕДИТЕ ВЫСОТУ ОКНА Н='Н 90 INPUT 'ВВЕДИТЕ ДЛИНУ МАГНИТНОЙ ЛИНИИ L1='L1 95 INPUT 'ВВЕДИТЕ СЕЧЕНИЕ СЕРДЕЧНИКА Q='Q 100 LET C=Q/A 105 PRINT 'ТОЛЩИНА НАБОРА С='С 110 LET K=(L*< Г 2) )/<A«C*Ll > 115 PRINT 'ВСПОМОГАТЕЛЬНЫЙ КОЭФФИЦИЕНТ К='К 120 LET Х=330*К-15000*(К~2) 125 PRINT'ОПТИМАЛЬНАЯ ДЛИНА ВОЗДУШНОГО ЗАЗОРА Х='Х 130 LET М=114жЕХР(-401*К)+50 135 PRINT 'ЭФФЕКТИВНАЯ МАГНИТНАЯ ПРОНИЦАЕМОСТЬ М='М 140 LET Y=X*Ll/20 150 INPUT 'ВВЕДИТЕ ДОПУСТИМУЮ ПЛОТНОСТЬ ТОКА В ПРОВОДЕ Р='Р 160 LET D=SQR(I/P)*1.13 165 PRINT 'ДИАМЕТР ПРОВОДА D='D 170 LET U=10000‘*SQR<L*Ll/< 1.26*M*A*C) ) 180 PRINT 'ЧИСЛО ВИТКОВ ДРОССЕЛЯ Ы='Ы 198 LETK1=0.008*W*<D~2)/< В*Н) 200 PRINT 'КОЭФФИЦИЕНТ ЗАПОЛНЕНИЯ ОКНА СЕРДЕЧНИКА ДРОССЕЛЯ К1='К1 210 LET R=0.000225W*(2*(A+C>+#PI*B)/(H'-2) 220 PRINT 'ОМИЧЕСКОЕ СОПРОТИВЛЕНИЕ ОБМОТКИ ДРОССЕЛЯ R='R 230 GOTO 10 s END 170
Для L —3-10 "4 Гн и /=15 А получаем а~А —1,325 см и Q — 2,634 см2. Выбираем из стандартного ряда сердечник, имеющий а=1,6 см, Q = 2,65 см, 6 = 1,6 см, 6 = 4 см, /т=13,7 см. Введя эти данные, получаем С= 1,656 см, pz= 104,089 и /z/2 = 0,385 см. Далее, введя 6 = 3 А/мм2, получаем d — = 2,527 мм, <0 = 34,388, kM — 0,274 и г = = 0,014 Ом. Пример 9. Расчет силового трансфор- матора, работающего от промышленной сети переменного тока (частота 50 или 60 Гц). 10. Определяем число витков первичной обмотки Д[/1)//. Если трансформатор имеет несколько вторичных обмоток, то их отдаваемые в на- грузку мощности суммируются, так что 1 N Ргаб~/1^7|=----- / где А — общее чис- Т'ТР ( = 2 ло обмоток. При этом расчет ш,- и d, (i>2) повторяется для каждой обмотки. Программа 7.14. 10 PRINT'РАСЧЕТ СИЛОВОГО ТРАНСФОРМАТОРА' 20 INPUT'ВВЕДИТЕ ГАБАРИТНУЮ МОЩНОСТЬ Р='Р 30 INPUT'ВВЕДИТЕ МАКСИМАЛЬНУЮ ИНДУКЦИЮ В СЕРДЕЧНИКЕ !='! 40 INPUT'ВВЕДИТЕ ЧИСЛО СТЕРЖНЕЙ СЕРДЕЧНИКА С ОБМОТКАМИ S='S 50 INPUT'ВВЕДИТЕ ДОПУСТИМУЮ ПЛОТНОСТЬ ТОКА ПРОВОДОВ Р='Х 60 INPUT'ВВЕДИТЕ КОЭФФ. ЗАПОЛНЕНИЯ ОКНА СЕРДЕЧНИКА МЕДЬЮ КМ»'К1 70 INPUT'ВВЕДИТЕ КОЭФФ. ЗАПОЛНЕНИЯ СЕРДЕЧНИКА СТАЛЬЮ КС='К2 80 INPUT’ЗАДАЙТЕ К.П.Д. ТРАНСФОРМАТОРА N=’N 90 INPUT'ЗАДАЙТЕ ЧАСТОТУ СЕТИ F='F 100 INPUT'ВВЕДИТЕ ДЛЯ ПЕРВИЧНОЙ ОБМОТКИ UbU 'U1/I1 110 INPUT'ВВЕДИТЕ ДЛЯ ВТОРИЧНОЙ ОБМОТКИ U2,12 'U2,12 120 LETV=PzF/S/I/X/NzKl/K2z.0222sPRINT 16.3!'QCT*Q0»'V 130 PRINT'ПОДБЕРИТЕ ПОДХОДЯЩИЙ ТИП СЕРДЕЧНИКА И ДЛЯ НЕГО' 148 INPUT'ВВЕДИТЕ ПАРАМЕТРЫ А,В,С 'А,В,С 158 LETE=F*A*C*I*K2*444E-6SPRINT'Э.Д.С ОДНОГО ВИТКА Е='Е 160 LETW2=U2/EsLETWl=Ul/EsLETD2=l.13*SQR<I2zX> 170 LETC1=1.13*SQR<IlzX>sLETLl=Wl*<2*<A+C>+#PI»B)/100 180 LETU=2.25E-2*I1*L1/<D1''2)SLETM=<U1-U>/E 190 PRINT'ДИАМЕТР ПРОВОДА ПЕРВИЧНОЙ ОБМОТКИ B1='D1 200 PRINT'ДИАМЕТР ПРОВОДА ВТОРИЧНОЙ ОБМОТКИ D2='D2 210 PRINT'ЧИСЛО ВИТКОВ ПЕРВИЧНОЙ ОБМОТКИ Ы1='М 220 PRINT'ЧИСЛО ВИТКОВ ВТОРИЧНОЙ ОБМОТКИ U2='W2:ENB При таких частотах несущественны индук- тивности рассеивания и расчет может прово- дится по следующей методике. 1. Задаем габаритную мощность транс- форматора РГаб, максимальную индукцию в сердечнике Вт, частоту сети Д число стерж- ней сердечника с обмотками s, допустимую плотность тока 6, к. п. д. трансформатора цТр, коэффициент заполнения окна медью /гм, коэффициент заполнения сердечника сталью kc, напряжение U\ и (У2, первичную и вторичную обмотки, токи Л и /2 этих обмоток. 2. Находим произведение сечений стали Q„ и окна Qo: QCTQo = Pra6/(O,O222fBm6T)Tps/ec6M). 3. По значению QCTQo выбираем подходя- щий тип магнитопровода, уточняем значения Qct и Qo и определяем для выбранного сер- дечника ширину стержня а, ширину окна b и толщину набора с. 4. Находим э. д. с., наводимую в одном витке e = 4,44fBmQCTfcc-10“4. 5. Вычисляем чИсло витков вторичной обмотки (1)2=(/2/е. 6. Находим первое приближение для числа витков первичной обмотки — 7. Находим диаметр проводов первичной и вторичной обмоток (/, = 1,13 d? = = 1,13у/7^6. 8. Вычисляем длину провода первичной обмотки /1 = (О| [2 (а-|-с) Ч-лб] -10“ 2. 9. Вычисляем падение напряжения на оми- ческом сопротивлении первичной обмотки АС/, =2,25- Для Ргаб = 215 Вт, Вт — 1,2 Тл, S = 2, Г = = 50 Гц, 6 = 2 А/мм2, £с = 0,95, /гм=0,32, т)тр = 0,96, (Л = 127 В, Z72 = 450 В, /, = 1,7 А и /2 = 0,475 А находим QCTQ0 = 138,270 см2. Подходящим является ленточный магнито- провод (сердечник) ПЛ25Х50 —60 с сече- нием стержня 25X50 мм и размерами окна 40X65 мм (а = 2,5 см, 6 = 2 см и с = 5 см). У этого сердечника QCTQ0=162 см4. Введя эти данные, получим d2 = 0,551 мм2, di = = 1,042 мм, <о2= 1422,475 и со 1 =391,396. § 7.3. Расчет емкостных элемен- _ тов и конденсаторов Для емкостных элементов известны выра- жения, определяющие емкость (далее в пико- фарадах) как функцию их геометрических размеров (в сантиметрах) и относительной диэлектрической проницаемости диэлектри- ка Ед. Ниже приведены формулы для емкости наиболее распространенных элементов (кон- денсаторов) [22]. 1. Плоский конденсатор в виде пластины диэлектрика с нанесенными с двух сторон металлическими обкладками: С = 0,0886ед5/6, где S — площадь обкладок, h — толщина диэлектрика. Для S=1 см2, 6 = 0,1 см, ед=1 (воздух) имеем С = 0,886 пФ. Формула не учитывает краевые эффекты. 2. Дисковый конденсатор с электродами одинакового размера, занимающими всю 171
поверхность диэлектрика: С = 0,0695едП/Л. (7.13) Для. £>=1 см, Л = 0,1 см и ед = 4,7 получим С = 3,266 пФ. 3. Коаксиальный (трубчатый) конденса- тор с электродами и диэлектриком одинако- вой длины /: С = 0,241 ед//1 g (£>н./£>в), где £>н — наружный и DB — внутренний диаметры трубки. Для 1 — 2 см, DH = 0,5 см, £>в = 0,4 см и ед = 4,7 С = 23,376 пФ. Формула не учиты- вает краевые эффекты. 4. Коаксиальный (трубчатый) конденса- тор с электродами одинаковой длины I и ди- электриком, длина трубки которого больше /: 0,2418д/ + 0,08Г>н п / о п С = , * /А ' " Для Z = 2 СМ’ = = 0,5 см, Z)B = 0,4 см и ед = 4,7 получим С = 23,789 пФ. 5. Коаксиальный (трубчатый) конденсатор с электродами разной длины (меньшая —/): д„ (Dh/Dq) = 2 см, Рн = 0,5 см и £>в = 0,4 см получим С = 24,370 пФ. 6. Шаровой конденсатор: С = = 0,555ед£>н/(/)н/1>в-- 1), где £>н и /Л — внеш- ний и внутренний диаметры шара. Для D» — = 10 см, Дв = 9 см и 8д = 4,7 получим С = = 234,765 пФ. 8. Шар в свободном пространстве, запол ненном диэлектриком: С = 0,555едЛ, где D- диаметр шара. Для £) = 10 см и ед = получим С — 5,55 пФ. 9. Емкость между двумя одинаковым шарами диаметром D и расстоянием межд центрами tz> D: С — 0,278eaD Г, D (4q2-P2) 1 L 2а (4а2 —2aD —Р2) J ' (7.1 Для Р—10 см, а=15 см и ед=1 получи С = 4,263 пФ. 10. Круглый диск в свободном простра! стве: С=0,353едр(ц-^^-У где Р- диаметр и Л — толщина диска. Для D = 10 ci А=1 см, 8Д=1 получим С = 3,755 пФ. 11. Емкости проводников в свободно пространстве: C = ^iefl//lg (k?x/d), где зн< чения коэффициентов kг и kz и расшифров! параметра к даны в табл. 7.1, / — длиг проводника и d — его диаметр. Пример 10. Составить программу д; вычисления емкости проводников, указаннь в табл. 7.1. Выбор варианта расчета мож1 обеспечить вводом кода и применением к манд условных переходов. Программа 7.15. 10 PRINT >ЕМКОСТЬ ПРОВОДНИКОВ В СВОБОДНОМ ПРОСТРАНСТВЕ* 20 PRINT >ЕМКОСТЬ МЕЖДУ ДВУМЯ ПРОВОДАМИ ВДАЛИ ОТ ЗЕМЛИ/ КОД 1' 30 PRINT 'МЕЖДУ ГОРИЗОНТАЛЬНЫМ ПРОВОДОМ И ЗЕМЛЕЙ/ КОД 2' 40 PRINT 'МЕЖДУ ВЕРТИКАЛЬНЫМ ПРОВОДОМ И ЗЕМЛЕЙ ПРИ H>L/4/ КОД 3' 50 PRINT 'МЕЖДУ ВЕРТИКАЛЬНЫМ ПРОВОДОМ И ЗЕМЛЕЙ ПРИ H<L/4/ KOD 4' 68 PRINT 'МЕЖДУ ПРОВОДОМ И КОРПУСОМ/ КОД 5' 70 INPUT 'ВВЕДИТЕ ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е='Е 80 INPUT 'ВВЕДИТЕ ДИАМЕТР ПРОВОДА H='D 90 INPUT 'ВВЕДИТЕ КОД' N 100 IF N=1 THEN 150 110 IF N*2 THEN 160 120 IF N=3 THEN 170 130 IF N=4 THEN 180 140 IF N=5 THEN 190 150 LET K1=0.12 s LET K2=2 s GOTO 210 160 LET Kl=0.24 s LET K2=4 s GOTO 215 170 LET Kl=0.24 s LET K2=l : GOTO 230 180 LET Kl=0.24 s LET K2=1.15 s GOTO 238 190 LET Kl=0.24 : LET K2=2 s GOTO 205 200 INPUT 'КОД НАБРАН НЕВЕРНО' s GOTO 90 205 INPUT 'ВВЕДИТЕ ДИАМЕТР ОТВЕРСТИЯ X='X 5 GOTO 220 210 INPUT 'ВВЕДИТЕ РАССТОЯНИЕ МЕЖДУ ПРОВОДАМИ Х='Х 5 GOTO 228 215 INPUT 'ВВЕДИТЕ ВЫСОТУ ПОДВЕСКИ Х«'Х 220 INPUT 'ВВЕДИТЕ ДЛИНУ ПРОВОДА L='L •: GOTO 240 230 INPUT 'ВВЕДИТЕ ДЛИНУ ПРОВОДА Х='Х s GOTO 250 240 LET C=<K1*E*L>/LGT(K2*(X/D)) : GOTO 268 258 LET C=<K1»E*X)/LGT(K2»X/D) 260 PRINT 'ЕМКОСТЬ ПРОВОДНИКА В СВОБОДНОМ ПРОСТРАНСТВЕ С='С 270 GOTO 90 s END 7. Горшковый конденсатор в виде ци- линдра длиной /, заканчивающийся внизу полушаром с наружным диаметром £)н и _ г Г 0,241/ , внутренним £)в: С = ед , п + +. . Для /=10 см, £>„ = 5 см, £)в = 4 см и 8д = 4,7 получим С — 143,014 пФ. Для /=103 см, d = 0,2 см, х = 200 см 8Д=1 получим С = 66,629 пФ (код 2). Более полные данные о расчете емкое можно получить из специальной литерату [13]. Часто необходимо не значение емкое конденсатора, а определение по заданн емкости его электрофизических или геомет( ческих характеристик. Приведем приме таких расчетов. 172
Таблица 7.1 Значения k\, kz и наименование х для расчета емкости проводников в свободном пространстве Код Емкость С ki kz Наименование х 1 Между двумя проводами от земли 0,12 2 Расстояние между прово- дами 2 Между горизонтальным проводом и зем- лей 0,24 4 Высота подвески 3 Между вертикальным проводом и зем- лей при расстоянии от земли до нижнего конца 1/4 0,24 1 Длина провода 4 Между вертикальным проводом и зем- лей при расстоянии от земли до нижнего конца й<//4 0,24 1,15 Длина провода 5 Между проводом и корпусом при вводе провода через отверстие 0,24 2 Диаметр отверстия Пример 11. Определить диэлектриче- скую проницаемость диэлектрика ед. Для этого удобно использовать дисковый конден- сатор специальной конструкции — (см. рис. 7.8). Такой конденсатор имеет охранное кольцо, которое должно иметь потенциал, равный потенциалу верхней обкладки кон- денсатора. Это резко ослабляет проявление краевых эффектов и позволяет пользоваться формулой (7.13) для нахождения ед по заданному значению С: ед = СЛ/0^)695£). Пусть конденсатор с емкостью С = 32 пФ имеет £) = 10 см и h = 0,1 см. Тогда диэлек- трическая проницаемость диэлектрика ед = = 4,604. Пример 12. Составить программу для расчета тонкопленочных конденсаторов за- данной емкости С. Методика расчета сле- дующая [9]. 1. Задаем число обкладок т, толщину диэлектрика d и его диэлектрическую прони- цаемость ед. 2. Вычисляем удельную емкость (приходя- щуюся на 1 см2) тонкопленочного конден- сатора Со = О,О885ед — необходимую площадь обкладок S — C/Cq. 3. Задаем отношение сторон Q=A/B прямоугольника обкладок и находим стороны A=4QS и b=^s/q. Программа 7.16. Основной электрод Общая обкладка Рис. 7.8. Дисковый конденсатор с охранным коль- цом для уменьшения краевых эффектов Для т = 3, б/ = 0,01 см, ед = 4,7 и С — = 100 пФ получаем С0 = 83,19 пФ/см2, 5 = 1,202 см2 и при Q = 2 получаем >4 = 1,550 см и В = 0,775 см. Пример 13. Найти расстояние а между центрами двух шаров, имеющих диаметр £)=10 см, при котором емкость между ними составляет Со = 5 пФ. Непосредственное при- менение формулы (7.14) в данном случае невозможно, поскольку ее разрешимость от- носительно параметра а не является очевид- ной. В связи с этим целесообразно найти а из решения нелинейного уравнения С (а) — — Со = О, учитывая, что при а D шары соприкасаются и емкость С -> оо. Поэтому, применяя метод поразрядного приближения, нужно увеличить а с начального значения 18 PRINT "РАСЧЕТ ПЛЕНОЧНЫХ КОНДЕНСАТОРОВ" 20 INPUT "ВВЕДИТЕ ЕМКОСТЬ С="С 30 INPUT "ВВЕДИТЕ ЧИСЛО ОБКЛАДОК М="М 40 INPUT "ВВЕДИТЕ ТОЛЩИНУ ДИЭЛЕКТРИКА D='D 50 INPUT "ВВЕДИТЕ ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е="Е 60 LET C0=0.0885*E*(M-1>/D 70 PRINT "УДЕЛЬНАЯ ЕМКОСТЬ С0="С8 80 LET 8=С/С0 80 PRINT "ПЛОЩАДЬ ОБКЛАДОК 8= "8 100 INPUT "ВВЕДИТЕ ОТНОШЕНИЕ СТОРОН Q=A/B" О 110 LET A=SQR<Q*S) s LET B=SQR(S/Q) 120 PRINT "СТОРОНА ОБКЛАДКИ A="A 130 PRINT "СТОРОНА ОБКЛАДКИ B="B 140 GOTO 20 s END 173
a~ D. Приведенная ниже программа (в ней ния 2Л. Ниже рассматривается комплекс а^Х) реализует такой подход. программ для таких расчетов. Программа 7.17. 10 20 30 40 50 60 70 PRINT INPUT INPUT INPUT INPUT fРАССТОЯНИЕ МЕЖДУ ЦЕНТРАМИ ДВУХ ШАРОВ ПО ЗАДАННОЙ ЕМКОСТИ’ 'ВВЕДИТЕ ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е='Е 'ВВЕДИТЕ ДИАМЕТР ШАРОВ D='D 'ВВЕДИТЕ ТОЧНОСТЬ РЕЗУЛЬТАТА Q='Q 'ВВЕДИТЕ ЕМКОСТЬ С='С LET Х=П : LET №10 80 IF ABS<HXQ THEN 110 90 LET X=X+H : GOSUB 120 IF FzH>=0 THEN 80 100 LET H=“H/10 s GOTO 78 110 PRINT 'РАССТОЯНИЕ X='X s GOTO 50 120 LETF=. 278*E'*D*<1 + < D*( 4*X*X-D*D ) / < 2*X* < 4*X*X-Ii*D-2i*X*D)) ) > -Г: 130 RETURN ’ END Для C = 5 пФ, D=10 см, ед=1 и погреш- ности вычислений Q=l«10"3 получим а — = Х= 12,26 см. ПЭВМ можно использовать и для сущест- венно более сложных вычислений емкости, описанных в [13] и требующих применения специальных методов расчета. Ограничимся одним примером такого рода. Пример 14. Вычислить емкость на еди- ницу длины Ci между двумя компланарными (т. е. находящимися на одной плоскости параллельно друг другу) пластинами беско- нечной длины шириной а = 9 см и с расстоя- нием между ними d — 2 см. В соответствии с [13] ата емкость определяется точной формулой С//ед=/г (m')/k (т), где tn — k2 = = 1/(1 +2a/d)\ k (т) —полный эллиптиче- ский интеграл первого рода, k. (rri') — пол- ный эллиптический интеграл от параметра т'—\ — т. При заданных а и d имеем /тг = О,О1 и т' = 0,99. Воспользовавшись про- граммой 6.18, вычисляем k (т) (0,01) = ==1,5745568 и k (т') = £>(0,99) =3,695637369. Следовательно, Ci = Eak (m')/k (т)=едХ X 2,346815539 пФ/см. Это совпадает с при- веденным в [13] значением С/, но исклю- чает необходимость применения таблиц зна- чений эллиптических интегралов и их интер- поляции и экстраполяции при произвольных значениях т и т'. § 7.4. Расчет линий передачи и задержки Линии передачи могут быть проводными, коаксиальными (кабельными), ленточными и полосковыми. Важнейшим параметром та- ких линий является волновое сопротивление гл = -7£1/С|, где L\ и С1 — индуктивность и емкость линий на единицу длины, фазовая скорость движения волны в линии Ц = = сгде с — скорость света и ед — от- носительная диэлектрическая проницаемость диэлектрика линии. В справочной литературе [22] обычно приводятся формулы для инженерного рас- чета Zn линий. Однако в большинстве слу- чаев значение Zn бывает задано и требуется определить конструктивные параметры линии, обеспечивающие получение нужного значе- 174 Для ряда проводных линий обобщенный конструктивный параметр D ехр (Лл V®?/60) *~~~d~ k ’ где d — диаметр круглого проводника, a D и k определяются следующим образом. 1. Для линии в виде круглого провод- ника, расположенного в середине между плоскопараллельными проводящими плоско- стями с расстоянием между ними D, k = 1,27. 2. Для линии в виде проводника, разме- щенного в центре экрана с квадратным сечением и стороной £>, £=1,08. 3. Для коаксиальной линии в виде экрана с круглым сечением (диаметр D) и провод- ником, расположенным в центре, £=1. 4. Для линии в виде проводника, распо- ложенного на биссектрисе прямого угла, образованного двумя полубесконечными про- водящими плоскостями, на расстоянии D/2 от каждой плоскости, £=1,4. В приведенной ниже программе вычис- ляется параметр любой из этих четырех линий. Тип линии задается кодом. Программа 7.18. Для Лл = 300 Ом и ед = £=1 получим X = 116,861 при коде 1, X = 137,420 при коде 2, X —148,413 при коде 3 и Х= 106,009 при коде 4. Выбрав заданным один из парамет- ров (D или d), по значению X легко найти другой параметр. Если выражение Zn (х) неразрешимо от- носительно требуемого расчетного парамет- ра х, то для нахождения , х по заданному 41 = 2ло решается нелинейное уравнение 2ло--гл (х)=0. (7.15) Например, для линии в виде двух провод- ников одинакового диаметра D, расположен- ных на расстоянии А друг от друга и на расстоянии L от проводящей плоскости, ^=-^-[archA_ln д/,+(1гУ[ а для линии в виде двух проводников раз- личного диаметра (D и X), расположенных
Программа 7.18. 10 PRINT'РАСЧЕТ ПАРАМЕТРА X ПРОВОДНЫХ ЛИНИЙ' 40 PRINT'ЛИНИЯ - КРУГЛЫЙ ПРОВОДНИК/ РАСПОЛОЖЕННЫЙ' 50 PRINT'В СЕРЕДИНЕ МЕЖДУ ПРОВОДЯЩИМИ ПЛОСКОСТЯМИ/КОД 1' 60 PRINT'В ЭКРАНЕ С КВАДРАТНЫМ СЕЧЕНИЕМ/ КОД 2' 70 PRINT'В ЭКРАНЕ С КРУГЛЫМ СЕЧЕНИЕМ/КОД 3' 80 PRINT'НА БИССЕКТРИСЕ ПРЯМОГО УГЛА/ КОД 4' 90 INPUT'BBEAHTE КОД" N 180 IF N=1 THEN 150 110 IF N=2 THEN 160 120 IF N=3 THEN 178 130 IF N=4 THEN 180 140 PRINT'КОД НАБРАН НЕВЕРНО': GOTO 90 150 LET K=1.27s GOTO 198 160 LET K®1.88: GOTO 198 178 LET K=l: GOTO 198 188 LET K=1.4 198 INPUT'BBEAHTE ВОЛНОВОЕ СОПРОТИВЛЕЙИЕ ЛИНИИ Z='Z 195 INPUT'BBEAHTE ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ E='E 280 LET X=<EXP<<Z»SQRCE>)/68))/K 218 PRINT'X='X: GOTO 98: END на расстоянии А в свободном пространстве, 60 u 4/42-£>2-Г 2DX Если необходимо определить расстояние А по заданному Z,10, то это можно сделать с помощью приведенной ниже программы, обеспечивающей решение (7.15) методом подекадного приближения. Программа 7.19. а для £> = 0,1 см, Х = 0,05 см, Z = 300 Ом (код 2) получим А— 0,434 см. Линия из двух проводников одинакового диаметра £>, расположенных на расстоянии А друг от друга в свободном, пространстве, имеет волновое сопротивление (Z)— 120 = ——arch X, где X = A/D. Аналогично для Vе линии в виде проводника с диаметром D, расположенного над проводящей плоскостью 10 PRINT 'РАССТОЯНИЕ МЕЖДУ ПРОВОДАМИ ДВУХПРОВОДНОЙ ЛИНИИ’ 20 PRINT 'МЕЖДУ ДВУМЯ ПРОВОДАМ^ С ОДИНАКОВЫМ ДИАМЕТРОМ, КОД 1' 30 PRINT 'МЕЖДУ ДВУМЯ ПРОВОДАМИ С РАЗНЫМИ ДИАМЕТРАМИ, КОД 2' 40 INPUT 'ВВЕДИТЕ ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е='Е 50 INPUT 'ВВЕДИТЕ ВОЛНОВОЕ СОПРОТИВЛЕНИЕ Z='Z 60 INPUT 'ВВЕДИТЕ ТОЧНОСТЬ РЕЗУЛЬТАТА Q='Q 70 INPUT 'ВВЕДИТЕ КОД' N 80 IF N=1 THEN 110 90 IF N=2 THEN 210 100 PRINT 'КОД НАБРАН НЕВЕРНО' s 60T0 70 110 INPUT 'ВВЕДИТЕ ДИАМЕТР D='D 120 INPUT 'ВВЕДИТЕ РАССТОЯНИЕ L='L 130 LET A=0 : LET H=1 140 IF ABS<HXQ THEN 180 150 LET A=A+H s GOSUB 190 160 IF FzH>=0 THEN 150 170 LET H=-H/10 • GOTO 140 180 PRINT 'РАССТОЯНИЕ A='A ! GOTO 70 190 LET F=Z-<120/SQR<E)>*<AHC<A/D>-LOG<SQR<1 + (A/<2*L))''2))> 200 RETURN 210 INPUT 'ВВЕДИТЕ ДИАМЕТР D='D 220 INPUT 'ВВЕДИТЕ ДИАМЕТР X='X 230 LET A=0 • LET H=1 240 IF ABSCHXQ THEN 280 250 LET A=A+H s GOSUB 290 260 IF FzH>=0 THEN 250 270 LET H=-H/10 s GOTO 240 280 PRINT 'РАССТОЯНИЕ А»'A l GOTO 70 290 LET F=Z-(60zSQR(E) )*<AHC< <4*(A''2)-<D~2>-<X''2> )z(2*D*X>) > 300 RETURN s END Для e=£=l, Z.1o = Z = 200 Ом погреш- на расстоянии А от нее, ность вычислений Q=1 • IO'4, D = 0,l см, £=1,5 см (код 1) получим Л =0,2753 см, Zj (Л) =60 arch Х/-уе. 175
Программа 7.20. 10 PRINT 'РАСЧЕТ ПАРАМЕТРА X' 28 PRINT 'ДВУХПРОВОДНАЯ ЛИНИЯ/ КОД 1' 30 PRINT 'ЛИНИЯ В ВИДЕ КРУГЛОГО ПРОВОДНИКА НАД ПЛОСКОСТЬЮ/ КОД 2' 40 INPUT 'ВВЕДИТЕ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е='Е 50 INPUT'ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Q=*'Q 60 INPUT 'ВВЕДИТЕ ВОЛНОВОЕ СОПРОТИВЛЕНИЕ Z='Z 70 INPUT'ЗАДАЙТЕ КОД ЛИНИИ '№LETK=120s IF N=2 THEN LETK=68 В© IF N=1 THEN 110 90 IF N=2 THEN 110 100 PRINT 'КОД НАБРАН НЕВЕРНО' : GOTO 70 110 LET X=8 : LET H=18 120 IF ABSCHXQ THEN 160 130 LET X«X+H s GOSUB 170 140 IF F/H>=0 THEN 130 150 LET №-H/10 I GOTO 128 160 PRINT'ЗНАЧЕНИЕ X='X:GOTO 70 170 LETF=Z-< K/SQR < E >)*AHC(X)sRETURN s END Для 7ло = ЗОО Ом, e = /:=l и погрешно- сти e = Q= 1 • 10 ~4 получим X =-6,1322 (код I) и Х = 74,2099 (код 2). Большие £л имеют коаксиальные линии, у которых внутренний проводник выполнен в виде спирали. Волновое сопротивление та- При заданных Fw — Fwo, N и D пара- метр X находится из решения нелинейного уравнения Fw0-Fw (Х)=0. Программа 7.21. 10 PRINT'РАСЧЕТ ПАРАМЕТРА X СПИРАЛЬНОЙ КОАКСИАЛЬНОЙ ЛИНИИ' 20 INPUT'ВВЕДИТЕ N/D/E 'N/D/EsLETM»N*N 30 INPUT'BBEAHTE FU='AsLETX=0:LETH=«1 40 IF ABSCHXE THEN 70 50 LETX=X+HsGOSUB 80s IF F/H>=8 THEN 58 68 LET№-Hzl05 6OTO 48 78 PRINT'X»'Xs GOTO 38 88 LETF=A-SQR<1+M* < #PI«X >~2* < 1 - < X./D ) ~2 >/2/LOG < D/X)) 98 RETURN:END ких линий Zn — ZJlKFWy rue ZJ1K — волно- вое сопротивление обычной коаксиальной линии со сплошным внутренним проводни- ком, имеющим диаметр, равный внешнему диаметру спирали, а -- поправочный множитель где D — внутренний диаметр внешнего труб- чатого проводника, X — внешний диаметр спирали, М — число витков спирали на еди- ницу длины линии. Для F-^ — Ъ, W = 4, D—\ см и погреш- ности вычислений Е=1-10~3 получим X — = 0,349 см. Волновое сопротивление коаксиальной ли- нии с внутренним проводником (диаметр X), смещенным от центра на расстояние L, 7 .... 60 , £>2 + %2-4Z? И ----2ХР-----’ где D~ внутренний диаметр внешнего проводника. В этом случае параметр X при заданных Хл = Хло, D, L и е находится из решения нелинейного уравнения Хл0 — Zn (Х)=0. Программа 7.22. 18 PRINT'РАСЧЕТ ПАРАМЕТРА X КОАКСИАЛЬНОЙ ЛИНИИ' 28 PRINT'СО СМЕЩЕННЫМ ВНУТРЕННИМ ПРОВОДНИКОМ' 30 INPUT'ВВЕДИТЕ ВНУТРЕННИЙ ДИАМЕТР ВНЕШНЕГО ПРОВОДНИКА D='D 48 INPUT'ВВЕДИТЕ РАДИАЛЬНОЕ СМЕШЕНИЕ ВНУТРЕННЕГО ПРОВОДНИКА L='L 58 INPUT'ЗАДАЙТЕ ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е='Е 68 INPUT'ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Gh='Q 78 INPUT'ВВЕДИТЕ ВОЛНОВОЕ СОПРОТИВЛЕНИЕ ЛИНИИ Z='Z 88 LETX=8:LETH=«1 98 IF ABSCHXQ THEN 128 108 LETX*X+H:GOSUB 130:IF F/H>=8 THEN 188 118 LETH=-H/'10:GOTO 90 128 PRINT'ДИАМЕТР ВНУТРЕННЕГО ПРОВОДНИКА X»'Xs GOTO 78 125 PRINT F/Z-F 138 LETF=60*-AHC< <D*D+X*X-4*L*L)/2/X/D>/SQR<E) 140 LETF=F-Z:RETURN:END 176
Для 2л0—100 Ом, D—1 см, А —0,25 см, е=1 и погрешности Q=l-10-5 получим X — =0,14038 см. Весьма широкое распространение находят полосковые несимметричные (рис. 7.9, а) и симметричные (рис. 7.9, б) линии. Микро- полосковые линии (МПЛ) изготавливаются при W 1 h 2л ’ Рис. 7.9. Полосковая несимметричная (а) и симметричная (б) линии передачи (в разрезе) в виде тонкопленочного печатного или на- пыленного проводника, нанесенного на ди- электрическую подложку с металлизирован- ной нижней плоскостью (структура таких линий соответствует показанной на рис. 7.9, а). Расчет Zn для таких линий довольно сложен, и в специальной литературе описан ряд формул, обеспечивающих расчет с различной погрешностью. Расчет 7.л несимметричных микрополос- ковых линий с конечной толщиной t полоски может проводиться по формулам [2] 8эф при 8д+1 , 8д-1 / |2 у'/’ 2 2 \ "Г IF/ft) Еэф — Ед+1 2 + 60 7л= — уСэф У?. 8 №эф\ ——4-0,25— и^эф/Л h / при W/h<l И с_. «д —1 t/h 4,6 ‘ Программа 7.23. 10 PRINT'РАСЧЕТ ВОЛНОВОГО СОПРОТИВЛЕНИЯ НЕСИММЕТРИЧНОЙ' 20 PRINT' ПОЛОСКОВОЙ ЛИНИИ' 30 INPUT'BBEAHTE ШИРИНУ ПОЛОСКИ Ы~'Ы 40 INPUT'BBEAHTE ТОЛЩИНУ ПОЛОСКИ Т='Т 50 INPUT'BBEAHTE ТОЛЩИНУ ДИЭЛЕКТРИКА Н='Н 55 INPUT'BBEAHTE ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ EPS='E 60 LETK=W/HSLETP=HsIF K<=l/#PI/2 THEN LETP=2*#PI*W 70 LETM=K+<1.25*T/#PI/H>*<l+L0G<2*PzT)) 80 LET№0i IF K>=1 THEN LETN=.04«<1-K>''2 90 LETF=(E+1>/2+<E-l>*< <1+12/K)"<-.5>+N>/2 100 LETF=F-< E-1> ЖТ/Н/4.6/SQR < К) 110 IF K>=1 THEN 120 115 LET2=60*LO6<8/M+M/4>zSQR<F)s6OTO 140 120 LETZ=120ж#РI/< M+1.393+.667*L0G< M+1.444>) 130 LETZ=Z/SQR<F) 140 PRINT'ВОЛНОВОЕ СОПРОТИВЛЕНИЕ Z0='ZsEND z._l^r^t+l,393+ Л/еэф L П 4- 0,667 In +1 >444^1 При №//i>l,. U?9 U7 . 1,25/ Д , , 4л№\ где -—^-=—-4--— ( 14-In—-—) h h nh \ t ) Контрольные примеры. UZ, см /, см А, см Zo, Ом 1 0,01 1 М7 44,653 1 0,05 1 4,3 69,223 0,1 0,01 1 1 250,426 2 0,05 1 1 87,086 W 1 h """ 2л Ширину W и отношение фазовой ско- рости к скорости света с для отмеченных выше линий при заданных Z^ t, h и ед при 177
с точностью, достаточной для инженерных расчетов, можно вычислить с помощью формул [9] IF = 1 25 Г_______________________/1 ’ L ехр [гл(ед+ 1,41)1/2/87 ]’ У/с= 1/[(0,475ед + 0,67),/2] для несимметричной линии и 1T=0,59f------^-7=------2,1/1, Lexp (2Л Тёд/бО) J — для симметричной. В этих формулах h и t задаются в миллиметрах. Программа 7.24. систему телеграфных уравнений ox dt дх dt Если на входе линии действует синусо- идальный сигнал, то решение телеграфных уравнений имеет вид U=Ае~ух+ Веух, где А и 6 — постоянные интегрирования, а V=л/(Я+7^) (G +7“ С) (7,16) — постоянная распространения. Ток в любой • А В точке линии /=— еух, где 2,л R -|- /<о£ G /<оС (7.17) 10 PRINT'PAC4ET U И U/C ПОЛОСКОВЫХ ЛИНИЙ' 20 PRIHT 'ЛИНИЯ ПОЛОСКОВАЯ НЕСИММЕТРИЧНАЯ/ КОД 1' 30 PRINT 'ЛИНИЯ ПОЛОСКОВАЯ СИММЕТРИЧНАЯ/ КОД 2' 40 INPUT 'ВВЕДИТЕ КОД' N 50 INPUT 60 -INPUT 70 INPUT 80 IF N=1 'ВВЕДИТЕ ТОЛЩИНУ ПОЛОСКИ Т«'Т 'ВВЕДИТЕ ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е=' 'ВВЕДИТЕ ВОЛНОВОЕ СОПРОТИВЛЕНИЕ ЛИНИИ Z«'Z THEN 120 Е 90 IF N»2 THEN 160 180 PRINT 'КОД НАБРАН НЕВЕРНО' s GOTO 40 120 INPUT 'ВВЕДИТЕ ШИРИНУ ПОЛОСКИ H»'H 130 LET Ы=1.25ж<((5.98жН>/(ЕХР(2ж<(Е+1.41>~(1/2))/87)>>-Т) 140 LET Y«l/SQR<0.4?5«E+0.67) 158 GOTO 198 160 INPUT 'ВВЕДИТЕ ШИРИНУ ПОЛОСКИ B='B MI A=EXP<Z«SQR<E)/60) s LET Ы=0.59ж<<<4жВ)/А>-2.1*T> 180 LET Y«1/SQR<E> 190 PRINT 'ШИРИНА ПОЛОСКИ W«'W 280 PRINT'ОТНОШЕНИЕ ФАЗОВОЙ СКОРОСТИ К СКОРОСТИ СВЕТА U/C='Y 210 GOTO 40 : END Для Z.a —75 Ом, /=0,05 мм, h — \ мм и ед=4,7 получим IF=0,825 мм и и/с=0,587 для несимметричной линии, а при 2л = 50 Ом, /=0,5 мм, А=2,5 мм и вд=4,7 получим IF=0,349 мм и w/c=0,461 для симметричной линии. Для реальных длинных линий с распре- деленными параметрами существенны по- тери, связанные с конечным погонным последовательным сопротивлением R (на еди- ницу длины) и конечной погонной шунти- рующей проводимостью G. При этом элемен- тарный участок линии длиной dx представля- ется эквивалентной схемой (рис. 7.10), где Lu С — погонные индуктивность и емкость линии. Для определения напряжения и и тока / в любой точке линии, лежащей на расстоя- нии х от ее начала, необходимо решить — это характеристическое сопротивление линии. Из (7.16) следует, что у = а4-/р, где а — постоянная затухания и р — фазовая посто- янная. Постоянная а показывает, на сколько непер затухает сигнал на единицу длины (в километрах) линии, а постоянная р пока- зывает, на сколько радиан (или градусов) изменяется фаза на единицу длины линии. Если обозначить <pi = arctg ((oL/R) и q>2 = = arctg (юС/G), то <*= (^Л2 + coS(^l+£2) , P = ( V/?2 + w2L2 Vg^+Pc2) '/2 sin( Характеристическое сопротивление линии (7.17) можно выразить в виде 2Л = |2Л|А Рис. 7.10. Схема замещения элементарного уча- стка длинной линии где |Z| = (V/?2 + <»2i.7VG2 + <o2C2),/2, <р= = (<Р1—ф2)/2. Программа 7.25. Для линии с У? = 167 Ом/км, L — = 0,49 мГн/км, С = 0,05 мкФ/км И 6 = = 1,66 мкСм/км на частоте / = 1000 Гц получим |7Л| =729,150 Ом, <р= —44,321 град/км, а = 0,161 нп/км, р = 0,163 рад/км. При использовании линий в качестве элементов задержки или накопления электри- 178
Программа 7.25. 10 PRINT'РАСЧЕТ ПОСТОЯННЫХ РАСПРОСТРАНЕНИЯ ВОЛНЫ В ДЛИННОЙ ЛИНИИ' 26 INPUT'ВВЕДИТЕ ПОГОННОЕ СОПРОТИВЛЕНИЕ (ОМ/КМ) R='R 30 INPUT'ВВЕДИТЕ ПОГОННУЮ ИНДУКТИВНОСТЬ (МГН/КМ) L='L 40 INPUT'ВВЕДИТЕ ПОГОННУЮ ЕМКОСТЬ (МКФ/КМ) С='С 50 INPUT'ВВЕДИТЕ ПОГОННУЮ ПРОВОДИМОСТЬ(МКОМ/КМ) 6='6 60 LETL=L/1ЕЗ5 LET6=6/1Е6sLETC=C/1E6 70 INPUT'ЗАДАЙТЕ ЧАСТОТУ (ГЦ) F='F: LETW=2*#PI*F 80 LETU=SQR< R*R+ < U*L) ~2 ): LETX=SQR(6*6+ < Ы*С)~2> 90 LETA=ATN(W*L/R)5IF 6=0 THEN LETB=#pi/2 100 IF 600 THEN LETB=ATN(U*C/6) 120 PRINT'МОДУЛЬ СОПРОТИВЛЕНИЯ /2/='SQROVX)' OM' 130 PRINT'ФАЗОВЫЙ СДВИГ ='DE6<(A-B)/2)' ГРАД' 140 LETY=SQR< U*X)s LETZ= < A+B)/2 150 PRINT'ПОСТОЯННАЯ ОСЛАЕЛЕНИЯ АЛЬФА='Y*COS(Z) 160 PRINT'ФАЗОВАЯ ПОСТОЯННАЯ ВЕТА='Y*SIN(Z) • 170 60Т0 70!END ческой энергии часто применяются линии с сосредоточенными постоянными, т. е. элементами L и С (рис. 7.11), в виде дискрет- ных катушек индуктивности и конденсаторов. моиндукции). Линии типа М имеют наилуч- шие характеристики при М — 1,27. . Расчет искусственных линий проводится по заданному волновому сопротивлению Рис. 7.11. Искусственные линии К-типа (а) и М-типа (б) При заданном времени задержки tj — n^LC, где п — число звеньев линии, такие искус- ственные линии имеют существенно меньшие габариты и массу, чем линии с распреде- ленными постоянными. Если между смежными индуктивностями звеньев нет магнитной связи, линии относятся к типу К, в противном случае — к типу М (М — коэффициент взаи- /л=пД/С, времени нарастания импульсов на выходе линии /ф при ее возбуждении прямоугольными импульсами и времени за- держки /3. При этом для /?, С и L мож- но использовать следующие выраже- ния [9]: n==Xi (/3//ф)3/2, С = /з//<2п7.п и /,= Программа 7.26. 10 PRINT 'РАСЧЕТ ПАРАМЕТРОВ ИСКУССТВЕННЫХ ЛИНИЙ ЗАДЕРЖКИ' 20 PRINT 'ЛИНИЯ НА ФИЛЬТРАХ К-ТИПА/ КОД 1' 30 PRINT 'ЛИНИЯ НА ФИЛЬТРАХ М-ТИПА/ КОД 2' 40 INPUT 'ВВЕДИТЕ КОД' N 50 IF N=1 THEN 60 55 60Т0 70 60 LET Kl=l.l s LET K2=1.07 s 60T0 100 70 IF NO2 THEN 90 80 LET Kl=0.94 • LET K2=1.2 s 60T0 100 90 PRINT 'КОД НАБРАН НЕВЕРНО' s 60T0 40 100 INPUT 'ВВЕДИТЕ ВРЕМЯ ЗАДЕРЖКИ TZ='T1 110 INPUT 'ВВЕДИТЕ ДЛИТЕЛЬНОСТЬ ФРОНТА TF='T2 120 INPUT 'ВВЕДИТЕ ВОЛНОВОЕ СОПРОТИВЛЕНИЕ Z='Z 130 LET Н=К1*((Т1/Т2)Л1.5) 135 PRINT 'ЧИСЛО ЗВЕНЬЕВ N='N 140 INPUT 'ВВЕДИТЕ УТОЧНЕННОЕ ЗНАЧЕНИЕ N='N 150 LET L=(T1*Z)/(N*K2> 160 LET C=T1/(K2*N*Z) 170 PRINT 'ИНДУКТИВНОСТЬ ЗВЕНЬЕВ L='L 180 PRINT 'ЕМКОСТЬ ЗВЕНЬЕВ C='C 190 60T0 40 s END 179
Пример. Для 2л=600 Ом, /3— 1 • 10-6 с и /ф = 5*10~® с получим « = 84,076. Округлив п до 85, находим (код 2) £ = 5,882-10~6 Гн и С = 1,634- 10“11 Ф. Если при тех же исходных данных указать код 1 (линия типа К), то получим л=98,384. Округлив п до 100, находим £=5,607-10~6 Гн и С— Г,558-10~11 Ф. § 7.5. Расчет усилителей При расчете усилителей на биполярных транзисторах бывает необходимо вычислять физические параметры транзистора по А-па- раметрам (табл. 7.2) и наоборот (табл. 7.3) 134]. = Я = 23,333 Ом, гб = /?В =83,333 Ом, гк = = ЯК = 3,3325-105 Ом и а = 4=0,97999. Для схемы с общим эмиттером (код 2) при Ап = 2800 Ом, А12 = 2-10~3 См, A2i=60 и А22 = 5-10~5 См получим гэ = Я = 40 Ом, гб==ЯВ = 360 Ом, гт = ЯЛ4 = 1,22-106 Ом и р = 4=0,9836. Программа 7.28. Пример. Для схемы с общим эмиттером (код 1) при r3 = R\ =25 Ом, гб==Я2 = 400 Ом, Гк —ЯЗ=1-106 Ом и а—А =0,985 получим Ан =2,064-103 Ом, А|2= 1,664-10“3, А2! = = 65,556 и А22 —6,656-10-5 См. Для схемы с общей базой (код 2) и указанных выше исходных данных получим Ли =30,998 Ом, Т а б л и ц а 7.2 Формулы для расчета физических параметров биполярного транзистора по h-параметрам соответствующей схемы включения Физический параметр Схема с общей базой Схема с общим эмиттером Сопр’отивление эмиттера гэ (1 4“Л2|) А|2 Л"= Л12/Л22 Сопротивление базы г6 hwlh-n hi2 (1 4-h2t) hti— . . h22 Сопротивление коллектора гк 1 — Al2 1 4~h2i h22 /^22 Сопротивление г„ — агк hi 2 4~ A2i hi2 -|- h2i A22 h22 Коэффициент передачи тока hi24~h2i Ai24~A2i эмиттера а " 1-Л.2 1 4"h2i Таблица 7.3 Формулы для расчета h-параметров биполярного транзистора по физическим параметрам h-параметр Схема включения с общим эмиттером с общей базой с общим коллектором r j , (1 —а) гбгк Гэ+ Гб4-^к Гэ4-Гк-ОГк гх_| An * о _ । г»4-г« — агк hi2 Г» Гб гк — агк г, + Г|-агк Гк±Г6 Гэ4-Гк — агк а г к — гэ _ Гб + <*ГК Гк r»4-G — агк Гб + Гк г» +гк~ а гк A22 1 1 1 Г,4-Гк — агк Гк 4“ гб Гэ4-'’к — агк Программа 7.27. Пример. Для схемы с общей базой (код 1) при Аи =25 Ом, А12=0,25-10“3 См, A2i = —0,98 и А22=3-10“б См получим лэ = 180 Ai2 = 3,998-10-4, Л21 = —0,985 и Л22 = = 9,996-10“7 См. Наконец, для схемы с общим коллектором (код 3) получим Ац = = 2,064-103 Ом, Ai2 = 0,9983, Л21=-66,556 и Л22 = 6,656-10~5 См.
Программа 7.27. 10 PRINT 'РАСЧЕТ ФИЗИЧЕСКИХ ПАРАМЕТРОВ ТРАНЗИСТОРА ПО Н-ПАРАНЕТРАМ' 20 PRINT 'СХЕМА С ОБШЕЙ БАЗОЙ, КОД 1' 30 PRINT 'СХЕМА С ОБШИМ ЭМИТТЕРОМ, КОД 2' 40 INPUT 'ВВЕДИТЕ ВХОДНОЕ СОПРОТИВЛЕНИЕ Н11='Н1 50 INPUT 'ВВЕДИТЕ КОЭФФИЦИЕНТ ОБРАТНОЙ СВЯЗИ ПО НАПРЯЖЕНИЮ Н12«'Н2 60 INPUT 'ВВЕДИТЕ КОЭФФИЦИЕНТ ПЕРЕДАЧИ ПО ТОКУ Н21='НЗ 70 INPUT 'ВВЕДИТЕ ВЫХОДНУЮ ПРОВОДИМОСТЬ Н22»’Н4 80 INPUT 'ВВЕДИТЕ КОД' N 90 IF №1 THEN 120 100 IF Н=2 THEN 180 110 PRINT 'КОД НАБРАН НЕВЕРНО' : 60Т0 80 120 LETR1=Н1-<1+НЗ > ЖН2/Н41LETR2-H2/H4:LETR2=H2/H41LETR3-<1-H2)/Н4 150 LETR4«=-<H2+H3)/H4:LETA=-CH2+H3)/<l-H2>:60T0 230 180 LETR1=H2/H4:LETR2==H1-H2*<1+H3)/H4:LETR3«=<1+H3)/H4 200 LETR4=<H2+H3)/H4:LETA*<H2+H3>z<l+H3> 230 PRINT 'СОПРОТИВЛЕНИЕ ЭМИТТЕРА R='R1 240 PRINT 'СОПРОТИВЛЕНИЕ БАЗЫ RB»'R2 250 PRINT 'СОПРОТИЕЛЕНИЕ КОЛЛЕКТОРА RK=’R3 268 PRINT 'СОПРОТИВЛЕНИЕ R№'R4 270 PRINT 'КОЭФФИЦИЕНТ ПЕРЕДАЧИ ТОКА ЭМИТТЕРА А*'А 280 60Т0 40:END Программа 7.28. 10 PRINT 'РАСЧЕТ Н-ПАРАМЕТРОВ ПО ФИЗИЧЕСКИМ ПАРАМЕТРАМ ТРАНЗИСТОРА' 20 PRINT 'СХЕМА С ОБШИМ ЭМИТТЕРОМ, КОД 1’ 30 PRINT 'СХЕМА С ОБШЕЙ БАЗОЙ, КОД 2' 40 PRINT 'СХЕМА С ОБЩИМ КОЛЛЕКТОРОМ, КОД 3' 50 INPUT 'ВВЕДИТЕ СОПРОТИВЛЕНИЕ ЭМИТТЕРА R='R1 60 INPUT 'ВВЕДИТЕ СОПРОТИВЛЕНИЕ БАЗЫ RB»'R2 70 INPUT 'ВВЕДИТЕ СОПРОТИВЛЕНИЕ КОЛЛЕКТОРА RK='R3 80 INPUT 'ВВЕДИТЕ КОЭФФИЦИЕНТ ПЕРЕДАЧИ ТОКА ЭМИТТЕРА А-'А 90 INPUT 'ВВЕДИТЕ КОД’ N 100 IF N=1 THEN 140 110 IF N=2 THEN 190 120 IF N=3 THEN 240 130 PRINT 'КОД НАБРАН НЕВЕРНО' s 60T0 90 140 LET ¥=R1+R3-A*R3 : LET H1»R2+R1«R3/V 150 LETH2=R1/Y:LETH3=<A*R3-R1>/¥:LETH4®1/V:GOTO 280 190 LET M=R2+R3 : LET Hl«Rl+<<1-A>*R2*R3)/M 208 LETH2=R2/M:LETH3=-<R2+A*R3)/M:LETH4=l/M:60T0 280 240 LET V=R1+R3-A*R3 : LET H1=R2+R1*R3/V 250 LETH2=R3*<1-A)/V:LETH3=-R3/V:LETH4»1/V 280 PRIHT 'ВХОДНОЕ СОПРОТИВЛЕНИЕ НЦ='Н1 290 PRIHT 'КОЭФФИЦИЕНТ ОБРАТНОЙ СВЯЗИ ПО НАПРЯЖЕНИИ Н12='Н2 300 PRINT 'КОЭФФИЦИЕНТ ПЕРЕДАЧИ ПО ТОКУ Н21='НЗ 310 PRINT 'ВЫХОДНАЯ ПРОВОДИМОСТЬ Н22=’Н4 320 60Т0 90:END Параметрами элементарных усилительных каскадов (см. рис. 7.12 и эквивалентные схемы рис. 7.13) на средних частотах явля- ются: входное сопротивление R„ = Ua./l3K, коэффициент усиления по току коэффициент усиления по напряжению = сквозной коэффициент усиления по напряжению • К£= С/Вых/£вх .и выходное сопротивление /?вых = ДС,вых/Д/вых, где Д/,Ых — изменение выходного тока, вызванное изме- 6 Рис. 7.12. Элементарные каскады на биполярных транзисторах с общей базой (а)\ общим эмитте- ром (б) и общим коллектором (в) 181
Рис. 7.13. Эквивалентные схемы каскадов с общей базой (а), общим эмиттером (6) и общим коллек- тором (в) нением нагрузки. Резистивные цепи питания каскадов на рис. 7.12 и 7.13 не показаны, их учет на параметры каскада тривиален. Приведем формулы для расчета указанных параметров для каскада с общей базой: Rax — G “F'/'б — a} rK + RH Г к 4” ''б 4“ Я и К _______________гк Rh____________ и~гк (Гэ4-Ян)-4-Мгк(1-а)4-ГэЯн] ’ К __________ гкЯн Е Гк(г, 4~ Ян)4“(го 4~ Ян) [Гк(1 —Л)-[-Гэ4-/?и]’ Гк 4“'*б4'*Яи _____________(агк-Иб) Ян______________ Гэ(Гк4-Гб4“^н)4“/’б[(1 —й)гк-}“/?н] ___________________(дгк4~гб) R*_________________ Е (Rh 4“ г К 4" Гб + Rh) “I- гб[( 1 — Д) Г к 4“ Ян] Явых — Г|( 4“ ^б агк4-Гб \ r»4- ns 4- Яи / для каскада с общим эмиттером: Явх = Гб4" Гэ(Гк4-/?н) гк(1 —о)4-б4-^н „ ~(агк~г3} 1 (1 —л)Гк4-гэ4"^н „ —(ОГк — Гэ) Rh и Гэ(гк 4-#и)4-''б[(1 —a)r* 4" Гэ 4“ Ян] —(агк —гэ) R, Гэ(гк4-Яи)4-(Ян 4-гб)[(1 —д)гк 4~ гэ 4-Ян) /?вих = Гк(1 -а)+г,( 1 ч---а-Гк^,% ) , для каскада с общим коллектором: Явх= Гб 4- Гк(Гэ4~Ян) Гк (1 — а) 4~ г, 4- Ян г к Гк(1—а)4-г,4-/?н ' Программа 7.29. Пример. Для схемы с общей базой (код 1) при Гб = 400 Ом, гэ = 25 Ом, гк — = 1-106 Ом, /?н =34,946 Ом, а = 2,534-105 Ом получим /0 = 0,9751, Ки= 139,519 и /<£ = = 36,130. Для схемы с общим эмиттером (код 2) при гб = 400 Ом, г, = 25 Ом, гк = = 1-10* Ом, /?и=1000 Ом, а=0,98 и /?н = = 5000 Ом расчет дает Явх= 1403,996 Ом, /?вых = 3,722-104 Ом, /<,= -39,16, Ки = = — 139,459 и /<£=—81,447 (знак — ука- зывает на инвертирование фазы выходного сигнала по отношению к фазе входного сигнала). Для схемы с общим коллектором (код 3) при Гб = 400 Ом, г, = 25 Ом, гк = = 1-106 Ом, Яи = 1-104 Ом. а = 0,98 и /?н = = 500 Ом получаем RBX = 2,598-104 Ом, Явых = 2,309-102 Ом, /<, = 48,721, /<,, = 0,9377 и /<^ = 0,6771. Расчет по приведенной методике дает параметры каскадов в области средних частот. Искажения в области низких и высоких частот при активной нагрузке легко учиты- ваются (см. [34]). Если нагрузка комплекс- ная, расчет несколько усложняется. В ка- честве примера рассмотрим инженерный ра- счет параметров каскадов с общим истоком и стоком на полевых транзисторах [40]. Каскад с общим истоком (рис. 7.14, а) рассчитывается по следующему алгоритму. 1. Задаем исходные данные: сопротивление затвора • /?3, сопротивление стока Rc, выход- ное сопротивление транзистора RCi1, сопротив- ление генератора /?г, сопротивление нагрузки 182
Программа 7.29. 10 PRINT 'РАСЧЕТ МАЛОСИГНАЛЬНЫХ УСИЛИТЕЛЬНЫХ КАСКАДОВ' 20 PRINT 'КАСКАД С. ОБЩЕЙ БАЗОЙ, КОД 1' 30 PRINT 'КАСКАД С ОБЩИМ ЭМИТТЕРОМ, КОД 2' 40 PRINT 'КАСКАД С ОБЩИМ КОЛЛЕКТОРОМ, КОД 3' 50 INPUT 'ВВЕДИТЕ СОПРОТИВЛЕНИЕ БАЗЫ R1='R1 60 INPUT 'ВВЕДИТЕ СОПРОТИВЛЕНИЕ ЭМИТТЕРА R2='R2 70 INPUT 'ВВЕДИТЕ СОПРОТИВЛЕНИЕ КОЛЛЕКТОРА R3='R3 75 INPUT 'ВВЕДИТЕ СОПРОТИВЛЕНИЕ ИСТОЧНИКА R='R 80 INPUT 'ВВЕДИТЕ КОЭФФИЦИЕНТ ПЕРЕДАЧИ ТОКА ЭМИТТЕРА А='А 85 INPUT 'ВВЕДИТЕ СОПРОТИВЛЕНИЕ НАГРУЗКИ RH='R0 90 INPUT 'ВВЕДИТЕ КОД' N 100 IF Н=1 THEN 140 110 IF N=2 THEN 200 120 IF N=3 THEN 260 130 PRINT 'КОД НАБРАН НЕВЕРНО' s GOTO 90 140 LET Y=R3+R1+R0 "• LET R4=R2+R1*< < l-A>*R3+R0>zY 150 LET X=A*R3+R1 ! LET Kl=XzY 160 LET K2=<X*R0)z<R2*Y+Rl*R3*<l-A>+R0*Rl) 170 LET K3=X*R0z<<R+R2)*Y+R1*R3*<1-A)+R0*R1> 180 LET R5=R.3+Rl*<l-Xz(R2+Rl+R)) 190 60T0 310 200 LET M=R3*<1-A)+R2+R0 :LET R4=Rl+R2*<R3+R0)zM 210 LET N=A*R3-R2 s LET Kl=-NzM 220 LET K2=-N*R0z<R2*<R3+R0>+Rl*M) 230 LET K3=-N*R0z<<R2*<R3+R0)+<R1+R>*M>) 240 LET R5=R3*<1-A)+R2*<l+<A*R3+R2)z(R2+Rl+R)) 250 GOTO 310 260 LET X=R2+R0 : LET Y=R3*<1-АЭ+Х ! LET R4=Rl+R3*Xz? 270 LET Kl=R3zy 280 LET K2=R3*R0z<R3i*X+Rl*Y> 290 LET K3=R3*R0z<R3*X+<Rl+R)*Y) 300 LET R5=R2+<R1+R)*<R3*(1-A>z<R3+R1+R>) 310 PRINT 'ВХОДНОЕ СОПРОТИВЛЕНИЕ R='R4 320 PRINT 'ВЫХОДНОЕ СОПРОТИВЛЕНИЕ R='R5 330 PRINT 'КОЭФФИЦИЕНТ УСИЛЕНИЯ ПО ТОКУ KI='K1 340 PRINT 'КОЭФФИЦИЕНТ УСИЛЕНИЯ ПО НАПРЯЖЕНИИ KU='K2 350 PRINT 'СКВОЗНОЙ КОЭФФИЦИЕНТ УСИЛЕНИЯ ПО НАПРЯЖЕНИИ KZ='K3 360 GOTO 90 : END Рис. 7.14. Каскады с общим истоком (а) и общим стоком (б) на полевых тран- зисторах RH, сопротивление в цепи истока RH, входную емкость Сэи, проходную емкость Сзс, выход- ную емкость Сен, емкости разделительных конденсаторов С\ и Сг, емкость шунти- рующего Rh конденсатора Си и крутизну транзистора S в рабочей точке. 2. Вычисляем входное RBX — R3 и выходное /?вых = RchII Rc = ReH Rc/(Rch 4- Re) сопротивления каскада. 3. Вычисляем коэффициенты усиления „ ____ Ун____ с Ren Rc Rh Rc.R<- + Rc«R« + ReR« ' _UK_ R. 4. Находим характеристические постоян- ные времени для области малых времен: твх = |Сзи-4~Сзс(1 + R„0)| Rr R3/(R, 1- RaL Тцых — (Re II Rh II Ron) (Сзс-рСси), Твх о ~ Rr[C3H + C3C Сси/(Счс 4" СГц)|, Тэкв — Твх -j- Твых. 5. Вычисляем коэффициент ш = = твх.о Твйх/Тэкв, характеризующий режим р.а- боты каскада. Для данного каскада при больших Си (Си выбирается исходя из подавления отрицательной связи на низких частотах) значения т<с0,25 и режим каскада аперио- дический. 183
6. Вычисляем времена нарастания кас- када /h = 2,2t9kBV^ ““2m и добротность D — =5/2,2 (Сзи + Сси). 7. Переходная характеристика каскада в области малых времен в операторной форме имеет вид Л(р)=(1 Ч-ртэкв+рМкв/п)"1- 8. Находим постоянные времени каскада в области больших времен ti = (ЯгЧ~Яз) Ci, Т2= (ЯсЧ“Ян) ^2, Тн=(Яи||1/5) Сн. 9. По заданной длительности импульсов /н оцениваем спады вершины импульсов Д| = = /и/Т|, Л2 —/и/Т2, Дз = /и/Тн и общий спад Д — Ai Д2-|-Лз. Если задано Яи = 0, то следует полагать Дз = 0. Программа 7.30. 3. Находим характеристические постоян- ные времени в области малых времен твх = = Яг[Сзи (1 - К и J + Сас), Твых - (Ян II Ян II1 /5) Ся, Твх0 = Яг (Сэи “Ь Сзс) И Тэкв = ТЯХ 4“ Твых- 4. Определяем коэффициент режима m = Твх0Твых/Тэкв- 5. Если т^0,25, режим работы является апериодическим (при т=0,25— критиче- ским), причем время нарастания каскада /н = 2,2тЭКвл/1 2m. 6. Если т> 0,25, режим работы является колебательным и операторное выражение для переходной характеристики имеет вид h(p)= =(14-ртЭкв4-рМквт)~1, где значения тЭКв и т соответствуют полученным выше. 10 PRINT'УСИЛИТЕЛЬ С ОБШИМ ИСТОКОМ' 20 INPUT'ВВЕДИТЕ R3/RC/RCH'RbR2/R3 30 INPUT'BBEMMTE Rr,RH/RH'R4/R5,R8 40 INPUT'ВВЕДИТЕ СЗИ/СЗС,ССИ'СЬС2/СЗ 45 INPUT'ВВЕДИТЕ С1/С2/СИ'С4,С5/С6 50 INPUT'ВВЕДИТЕ S='S 60 LET R6=R1!LET R7==R3*R2/<R3+R2) 70 PRINT'R BX0AA='R6sPRINT'R ВЫХОДA='R7 80 LET A=R2*R3*R5/<R2*R3+R2*R5+R3*R5> 90 LET K=<R1/<R1+R4))3*S*A5PRINT'KU='K 100 LET K1=S*A5LET T1 = <C1+C2*<1+K1))5*R4^R1z(R4+RD 110 LET T2=<C2+C3>*A:LET T3=R4*<C1+C2:*C3/<C2+C3>) 115 PRINT'ТВХ='ТЬ'ТВЫХ='Т2 120 LET T4=Tl+T2sLET №T3*T2/T4~2 130 PRINT'H < P >=1/<1+РжТ4+Рл2*Т4л2*М Ъ ГДE' 140 PRINT'T4='T4:PRINT'M='M 150 LET T5=2.2*T4*SQR<l-2*M)sLET D=S/2.2/CC1+C3) 160 PRINT'T HAPACTАНИЯ='Т5:PRIНТ'ДОБРОТНОСТЬ ПТ='В 170 PRINT'ДЛЯ ОБЛАСТИ БОЛЬШИХ ВРЕМЕН' 180 LET T6e<R4+Rl)**C4sLET T7=<R2+R5)*C5 190 LETT8«C6*R8z < R8*S+1) 200 PRINT'TBX='T6/'TBNX='T7/'T ИСТ.ЦЕПИ='Т8 210 INPUT'BBEAHTE T ИМПУЛЬСА='Т0 228 LETZ1=T0/T6:LETZ2=T0/T7:LETZ3==05 IF T8>8 THEH LETZ3=T0/T8 230 LET Z=Z1+Z2+Z3 240 PRINT'СПАД ПЛОСКОЙ ВЕРШИНЫ ИМПУЛЬСА Z='Z 258 GOTO 2105 END Пример. Для Яз=1*Ю6 Ом, Яс= =2-103 Ом, Яси=Ы05 Ом, Яг=Ь103 Ом, Ян = 1 • 104 Ом, Ян = 1 • Ю3 Ом, Сзи = 10-10~12 Ф, Сзс=1.10-12 Ф, Ссн = 5.10-12 Ф, Ci = = 0,1.10“6 Ф, С2 = 1.10-6 Ф, Сй = 100-10~6 Ф, S = 5.10“3 A/В получим Явх = Ы06 Ом, Явых = 1,96Ы О3 Ом, /^=8,189, твх = = 1,918.10“8 с, твых=9,836-10“9 с, тЭЯв = = 74 = 2,901 • 10“8, т = М= 1,266-10“’, /и = = 5,516.10-® с, D= 1,515-108 1/с, л = = 1,001.10-’ с, Т2=1,2.10-2 с, ти = = 1,667-10"2 с, для /и=Ю0.10“6 с, А = = Z = 1,533-10~2. Каскад с общим стоком (истоковый повторитель), работающий на емкостную нагрузку (рис. 7.14,6), рассчитывается по следующему алгоритму. 1. Задаем исходные данные: сопротив- ления затвора Яз, истока Ян, генератора Яг, нагрузки Ян, емкости СЭи, Сзс и С« (емкость Сн включает и емкость Сси) и крутизну 5. 2. Находим коэффициенты передачи по напряжению К и = 5ЯЯн/(1 Ч-ЗЯнн), где Яни = «ЯиЯи/(Ян“ЬЯи), и Кц = ЯзКу0/(Яз И” Яг), вход- ное Явх = Я3 и выходное Явых = Яя||(1/5)= = Ян/(14“5Ян) сопротивления. При необходимости могут вычисляться постоянные времени в области больших времен Т1 = С1(Яг4-Яз), Т2 = С2(Явых + Ян) И относи- тельный спад вершины импульса Д = /и/т|Ч- -Ни/т2 заданной длительности /и- Программа 7.31. Пример. Для Яз=Ы06 Ом, Яя = =2-103 Ом, Яг=Ы03 Ом, Яи=1.Ю4 Ом, C3h=10.10-12 Ф, Сзс=ЬЮ-‘2 Ф, Сн = = 100.10-12 Ф и 5 = 5. КГ3 A/В получим Явх=Ы06 Ом, Явых= 1,818-102 Ом, Яу= = 0,892, твх = 2,071 -10“9 с, твых = 1,790• 10“8 с, тЭкв= 1,993-10 8 с, режим работы колеба- тельный при т = 0,495 (программа выдает формулу ДЛЯ Л(р) ПрИ Т9кв = 74). Для усиления импульсных сигналов с ма- лыми временами нарастания и спада (поряд- ка 1 нс) применяются усилители с распре- деленным усилением. Расчет такого усили- теля на мощных СВЧ МДП-транзисторах с микрополосковыми линиями задержки (рис. 7.15) производится по алгоритму. 1. Задаем исходные данные: входное и выходное сопротивления линий ZBX и ZBbIX, число транзисторов в каскаде /V, их кру- 184
Программа 7.31. 10 PRINT‘РАСЧЕТ ИСТ0К080Г0 ПОВТОРИТЕЛЯ' 20 INPUT'ВВЕДИТЕ R3,РИ>RF/RH'RbR2>R3/R4 30 INPUT'BBEAHTE СЗИ/СЗС/СН'СЬС2/СЗ 40 INPUT'ВВЕДИТЕ S='S 50 LETR5=R1:LETR6=R2/<R2*S+1) 60 PRINT'R BX0AA='R5sPRINT'R ВЫХОДА*'R6 70 LET A=S«R2*R4/(R2+R4+S*R2*R4> 80 LET K=R13kA/(R1+R3)sPRINT'KU='K 90 LET K1=A:LET T1=R3*<C1*(1-K1)+C2) 100 LETT2*C3*R6*R4z <R6+R4 ) 5 LETT3=R3* < C1+C2 ) 110 LET T4=T1+T2’.LET M=T3*T2/T4~2 115 PR INT' TBX*' T15 PR I NT' ТВЫХ*' T2 5 PR I NT' ТЭКВ*' -T4 120 IF M>«25 THEN 18© 130 IF M<.25 THEN 150 140 PRINT'PEHHM РАБОТЫ КРИТИЧЕСКИЙ'sGOTO 160 150 PRINT'РЕНИИ РАБОТЫ АПЕРИОДИЧЕСКИЙ' 160 LET T5«2.2*T4*SQR<1-2*M> 170 PRINT'T НАРАСТАНИЯ*'T5sGOTO 190 180 PRINT'РЕНИИ РАБОТЫ КОЛЕБАТЕЛЬНЫЙ' 190 PRINT'H < P)=1/<1+P*T4+P~2*T4~2»M)л ГДЕ' 200 PRINT'T4='T4sPRINT'M='Ms END Рис. 7.15. Усилитель с распре- деленным усилением на мощ- ных МДП-транзисторах с микро- полосковыми линиями задержки тизну S, емкость нагрузки Си, выходную СВых = Сси и проходную Спроход = Сзс емкости транзисторов, диэлектрическую проницаемость е — Е и толщину И диэлектрика печатной платы, толщину металлических полосок микро- полосковых линий D. 2. Вычисляем коэффициенты усиления кУс=^гВЫх2и/(г вых + Z„), Кус макс — 2VSZBbIx. 3. Находим время установления в режиме согласования (ZH = ZBUX), где Со = С3и4-Сзс /у= 1,1ZBWx(C3h4-C3c) -у/ТГ при сн = о, ~ 2,2ZBbix *\/Л^Со -|- Си при Сн^> 0. 10 4. Находим ширину полоски линий = 1,25 Г------$’9^—.. 1-0, где Z=Z,X L exp (Z V е 4-1,41/87 J для входной и Z=Z,UX для выходной линий. 5. Находим относительную скорость рас- пространения сигнала в линиях v/c=* = 1/-\/0,475е-|-0,67, где с — скорость света. Расстояние I между транзисторами должно быть таким, чтобы время прохождения сигна- ла между ними было равно или превышало значение- ty при Си=0. Программа 7.32. 10 PRIHT'PPP НА МОЩНЫХ МДП-ТРАНЗИСТОРАХ И МЛЗ' 20 INPUT'ВВЕДИТЕ ВОЛНОВЫЕ СОПРОТИВЛЕНИЯ ZBX/ZBMX'ZbZ2 30 INPUT'ВВЕДИТЕ ЧИСЛО ТРАНЗИСТОРОВ В КАСКАДЕ Н'Н 40 INPUT'ВВЕДИТЕ КРУТИЗНУ ТРАНЗИСТОРА 8'8 50 INPUT'ВВЕДИТЕ ПАРАМЕТРЫ СХЕМЫ RH, CH'R1/C1 60 INPUT'ВВЕДИТЕ СВЫХ/СПРОХОД ТРАНЗИСТОРА'С2,СЗ 70 INPUT'ВВЕДИТЕ ДИЭЛ.ПРОНИЦАЕМОСТЬ Е'Е 80 INPUT'ВВЕДИТЕ ТОЛЩИНУ ДИЭЛЕКТРИКА Н'Н 90 INPUT'ВВЕДИТЕ ТОЛЩИНУ МЕТАЛ.ПОЛОСКИ D'DsPRINT 100 LET K=H*S*Z2*Rl/<Z2+Rl)sLET K1=N*S*Z2 110 PRINT'KyC='Ks PRINT'КУС MAKC='K1 120 LET C=C2+C3s IF C1=0 THEN 140 130 LET Tl=2.2*Z2*SQR<H»C''2+Cl''2)sG0T0 150 140 LET Tl»l.1*Z2*C»SQR<H) 150 PRINT'ТУСТ='TlsLET A1=EXP<Z1*SC!R<E+1.41)z87) 160 LET A2=EXP<Z2*SQR(E+1.41>/87) 170 LET Ul=1.25*(5.98*HzAl-D)sLET bJ2=1.25*<5.98*H/A2-D) 180 PRINT'UIHPHHA BX.ЛИНИИ»'Wli'ШИРИНА ВЫХ. ЛИНИИ»'Ы2 190 LET U=1/SQR<.475ЖЕ+.67) 200 PRINT'ОТНОСИТ.СКОРОСТЬ РАСПРОСТРАНЕНИЯ»'UsEND 185
Пример. Для ZBX==50 Ом, ZBblx —75 Ом, Л/ = 5, S== 0,025 A/В (транзисторы КП905), /?я = 75 Ом, Сн = 0, Свых = 1,6-10~12 Ф, С«Роход==0,4-10~12 Ф, е = 4,7, //-—1 мм и —0,1 мм получим: Кус = 4,6875, Кус макс — =9,375, <уст=3,690 • 10~10 с, и7вх=1,68 мм, И7Вых=0,76 мм и у/с = 0,587 § 7.6. Расчет активных фильтров Активные фильтры (АФ) широко приме- няются в технике связи и в измерительной технике. Они строятся на основе RC цепей и на активных (усилительных) элементах в виде интегральных операционных усили- телей. Отсутствие в АФ громоздких индук- тивностей обеспечивает их малые габариты и массу, высокую надежность и техноло- гичность. Сложные фильтры проектируются в виде последовательного (каскадного) соединения элементарных фильтров второго порядка. В зависимости от характеристик элементар- ных фильтров могут быть получены фильтры с различными АЧХ и ФЧХ, аппроксими-. руемыми по Баттерворту, Бесселю, Чебышеву и т. д. [23, 35]. Каскадированию элементарных фильтров и выбору их параметров посвящена обширная справочная литература, причем большинство данных для этого табулировано. В связи с отмеченным, для разработчи- ков фильтров представляет интерес расчет на ЭВМ функционально полного комплекта элементарных фильтров второго порядка. Такой расчет для каждого фильтра прихо- дится, как правило, выполнять неоднократно при различных сочетаниях исходных данных с тем, чтобы получить приемлемые значения расчетных параметров. Таким образом, обеспе- чивается многовариантный расчет и выбор оптимального варианта фильтра. Методика и алгоритмы подобного расчета подробно описаны в [23]. Ниже приводится существенно усовершен- ствованная, в сравнении с описанной в [23], система автоматического проектирования электрических схем элементарных АФ. Си- стема состоит из 24 взаимосвязанных про- грамм, обеспечивающих расчет всех 23 эле- ментарных схем АФ. В отличие от [23] система обеспечивает: 1. Информацию пользователю о класси- фикации фильтров и их «меню» (програм- ма 7.33), а также о виде АЧХ и ФЧХ. 2. Автоматический поиск выбранного ва- рианта фильтра (все программы 7.34—7.56 записаны на одной кассете и пронумерованы кодами от 1 до 23). Расположение программ на магнитной ленте, т. е. в ПЗУ, а не в ОЗУ ЭВМ, обеспечивает разгрузку ОЗУ, позволяет увеличить объем информации, предоставляе- мой пользователю, уменьшает время ввода программы и увеличивает надежность про- граммного поиска. 3. Выдачу стилизованной принципиаль- ной схемы выбранного варианта фильтра с обозначениями ее элементов и выдачу уравнения для операторной функции пере- дачи T(s) (как и в [23] оператор /со обозначен буквой s). Программа 7.33. 001© PRINT'КОМПЛЕКС ПРОГРАММ ДЛЯ АВТОМАТИЧЕСКОГО' 0020 PRINT'ПРОЕКТИРОВАНИЯ АКТИВНЫХ ФИЛЬТРОВ.' 0030 PRINT'РАССЧИТЫВАЮТСЯ СЛЕДУЮЩИЕ ВИДЫ ФИЛЬТРОВ.' 0040 PRINT'НИЗКОЧАСТОТНЫЕ' 0050 PRINT' Ал ДБ (А-КОЭФФИЦИЕНТ УСИЛЕНИЯ) <QP=2) .» Л 0060 PRINT' ! 0070 PRINT' ‘ жж 0080 PRINT' К |жжжжжжжж! ж 0090 PRINT' » I ж 0100 PRINT' ’ ! ж 0110 PRINT' ! ! » ж L6T у > > } 0120 PRINT' ЫМ ЫР 0130 PRINT' F(W) (F-ФАЗА) 0140 PRINT' ! 0150 PRINT' О ‘жжжжжжжж 0160 PRINT' ‘ Ж 0170 PRINT' -90 I ж 0180 PRINT' ! ! жжжжжжжж f Л Л Л Л Л 0190 PRINT'-180 ! ! LGT Ы Л 0200 PRINT' ЫР 0210 PRINT" 022© INPUT X 0230 PRINT' 0240 PRINT'ВЫСОКОЧАСТОТНЫЕ' 0250 PRINT' А/ДБ (А-КОЭФФИЦИЕНТ УСИЛЕНИЯ) Л Л Л 0260 PRINT' ! <QP=2) Л 0270 PRINT' ! жж 0280 PRINT' ! ж! ж 0290 PRINT' К • ж-1—жжжжжжж 0300 PRINT' ! ж i 0310 PRINT' I ж 1 0320 PRINT' ‘ж ! 0330 PRINT' ж 1 LGT Ы Л л • Л Л Л Л
©340 PRINT* WP л 0350 PRINT* F(W) (F-ФАЗА) > 0360 PRINT* i > 0370 PRINT* 180 ! жжжж > 0380 PRINT* ! ж > 0390 PRINT* 90 i ж л 0400 PRINT* ! ! ж л 0410 PRINT* 0 1 i ^жжжжжжжж — L6T W л 0420 PRINT* WP л 0430 PRINT* л 0440 INPUT X 0450 PRINT* л 0460 PRINT* л 0470 PRINT* ПОЛОСНО-ПРОПУСКАЮШИЕ* 0480 PRINT* A/ДБ <а-коэффициент i УСИЛЕНИЯ) л 0490 PRINT* i (ОР=10) л 0500 PRINT* К ! ж л 0510 PRINT* ! ж|ж л 0520 PRINT* ! ж|ж л 0530 PRINT* ! ж!!!ж л 0540 PRINT* ! ж ! ! ! ж л 0550 PRINT* ! ж । ! ! ж л 0560 PRINT* 1* И ! ж л ©570 PRINT* ж 1 1 1 ж< LOT W л 0580 PRINT* W1 UP W2 л 0590 PRINT* F(W) (F-ФАЗА) л 0600 PRINT* I л 0610 PRINT* 90 !жжжжж л 0620 PRINT* ! ж л * 0630 PRINT* 0 1 ж л 0640 PRINT* ! ж л 0650 PRINT* -90 ! ! -жжжжжжжжжж- L6T W л 0660 PRINT* WP л 0670 INPUT X 0680 PRINT* л 0690 PRINT* л 0700 PRINT* П0Л0СН0-ЗАГРАЖДАЮШИЕ * 0710 PRINT* ' А/ДБ (А-КОЭФФИЦИЕНТ УСИЛЕНИЯ) 1 * 0720 PRINT* л 0730 PRINT* К !жжжжжжжж жжжжжжжж 0740 PRINT* ! ж ж л 0750 PRINT* ! ж л 0760 PRINT* КжОР/QZ’ ж л 0770 PRINT* । I л 0780 PRINT* i i L6T W л 0790 PRINT* lip л 0800 PRINT* F(W) (F-ФАЗА) л 0810 PRINT* 90 ! л 0820 PRINT* i л 0830 PRINT* i ж л 0840 PRINT* ! ж ж л 0850 PRINT* 0 !жжжжжж ж жжжжжж л 0860 PRINT* ! жж! л 0870 PRINT* ! ж ! л 0880 PRINT* ! I л 0890 PRINT* -90 ! ! LGT W 0900 PRINT* WP * sINPUT 0910 PRINT* л 0920 PRINT* л 187
1 р. 40 к.