В. П. Дьяконов
СПРАВОЧНИК по алгоритмам и программам на языке бейсик для персональных ЭВМ Scan Pirat
ОГЛАВЛЕНИЕ Предисловие.......................... 5 Как пользоваться справочником................... 7 Глава 1. Основные характеристики и возможности персональных ЭВМ ... 9 § 1.1. Современные типы персональных ЭВМ и их возможности...... 9 § 1.2. Карманные персональные ЭВМ (Pocket Computers)........ 11 § 1.3. Персональные ЭВМ среднего класса (Home Computers)...... 13 § 1.4. Профессиональные ЭВМ и вычислительные микросистемы индивидуального пользования................... 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 Глава 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, РС-1500 и др.). Осваивается производство дешевых и массовых домашних компьютеров (Home Computers) типа Агат, Элек-троника-БК-0010 и др. Однако пока даже существующий парк таких ЭВМ используется недостаточно эффективно. Главная причина этого в том, что пользователями ПЭВМ являются в основном непрофессионалы в области вычислительной техники и вычислительной математики. Они слабо знакомы с эксплуатацией ЭВМ, языками и основами их программирования, разнообразными численными методами. Литературы, где все эти вопросы, с учетом специфики персонального использования ПЭВМ, рассматривались бы одновременно, пока практически нет. Многие ПЭВМ поставляются пользователям с весьма краткими (и рассчитанными на профессионалов) описаниями, часто без библиотек прикладных программ. В результате ПЭВМ нередко превращается в «черный ящик» на столе пользователя, таинственные возможности которого остаются нераскрытыми. Справочник ориентирован на отмеченную выше обширную категорию пользователей ПЭВМ. При его подготовке учтена специфика нынешнего этапа применения ПЭВМ в СССР, т. е. использование ПЭВМ главным образом для автоматизации решения рутинных научно-технических, статистических и экономических задач. Поэтому, а также с учетом ограниченного объема справочника в нем мало внимания уделено игровым задачам, применению ПЭВМ в быту, решению сложных информационных задач (обработка графиков, редактирование текстов и т. д.). Описание таких применений должно быть предметом специальной литературы. По построению справочник похож на ранее изданную книгу автора [10], посвященную расчетам на программируемых микрокалькуляторах (ПМК). Более того, сохранена значительная часть контрольных примеров [10].
Это, по мнению автора, облегчит массовой категории пользователей ПМК освоение новой, гораздо более мощной вычислительной техники — ПЭВМ. В справочнике кратко описаны основные типы отечественных и зарубежных ПЭВМ, их периферийное оборудование и основной язык программирования — бейсик (BASIC). Рассмотрен ряд типовых версий бейсика, от простых до расширенных, содержащих команды обработки символьных переменных, косвенной адресации и построения графиков. Даны основы программирования на бейсике и перевода программ с одной версии бейсика на другую. Основное внимание в справочнике уделено описанию общего прикладного математического, алгоритмического и программного обеспечения ПЭВМ, рассчитанного прежде всего на научно-технические и статистические расчеты. По сравнению с [10] существенно расширено описание алгоритмов и увеличена сложность решаемых задач. Так, в справочнике описаны универсальные программы для решения систем линейных и дифференциальных уравнений (в том числе с автоматическим выбором шага интегрирования), численного интегрирования с заданной точностью, вычисления всех корней полиномов с действительными и комплексными коэффициентами и т. д. Существенно расширен круг вычисляемых специальных функций. В последней главе дан ряд прикладных программ для решения задач в некоторых конкретных областях науки и техники. Разумеется, эти программы не исчерпывают решения всего многообразия таких задач. При использовании всех возможностей персональных ЭВМ на них можно решать сложные научно-технические задачи, вплоть до проектирования космических аппаратов [29]. Справочник ориентирован на научно-технических работников, инженеров, техников и студентов вузов и техникумов. Поскольку подобное справочное руководство подготовлено впервые, автор отдает себе отчет в том, что книга не лишена недостатков, и с благодарностью примет советы и замечания по ее содержанию. Автор выражает глубокую благодарность рецензенту доктору технических наук, профессору С. В. Черемных, кандидату технических наук, доценту Т. А. Самойловой, Т. А. Калаевой и всем коллегам, оказавшим помощь автору в подготовке программ и рукописи. Пожелания по книге следует направлять по адресу: 117071 Москва В-71, Ленинский просп., 15. Главная редакция физико-математической литературы издательства «Наука». В. П. Дьяконов
КАК ПОЛЬЗОВАТЬСЯ СПРАВОЧНИКОМ 1. Приведенные в справочнике программы даны на версии языка бейсик умеренной сложности, применяемой в массовых отечественных системах подготовки программ на базе настольной микроЭВМ Электроника-ДЗ-28. Они легко переводятся на версии бейсика, применяемые в диалоговых вычислительных комплексах ДВК.-1, ДВК-2 и ДВК.-3, микроЭВМ Электроника-60, Искра-226 и др. Для перевода программ рекомендуется изучить материал гл. 2 и описание версии языка бейсик, применяемой в ПЭВМ, которой располагает пользователь. 2. Программы содержат детальный диалог с пользователем, который легко воспринимается при чтении листинга (текста) программы. В первой строке листинга дается подробное наименование программы. Порядок использования программы указывается комментариями, выводимыми на экран дисплея. Поэтому в поясняющем тексте подробное описание правил использования каждой программы не приводится. 3. Все программы рассчитаны на вывод результатов вычислений на экран терминала (дисплея) в экспоненциальной форме, как правило, с одним знаком до десятичной точки и девятью — после нее. Для вывода результатов на печать принтером и изменения формата в программу следует включить команды вида PRINT# 1 ... (на место многоточия записываются символы, задающие формат печати). 4. Программы даны в виде распечатки листингов, что исключает возникновение типографских ошибок. Однако после ввода программ в ЭВМ нужно тщательно проверить их как по контрольным примерам, так и тестам пользователя, учитывающим специфику решаемых задач и области применения выбранных численных методов. 5. Между буквенными обозначениями в тексте описания и в программе могут быть легко интерпретируемые различия. Например, буква е в программе может обозначаться как Е, строчная буква т — как прописная М и т. д. Эти различия обусловлены тем, что в бейсике используются только прописные латинские (а в комментариях и русские) буквы. В отдельных случаях (но не всегда) эти различия оговорены. Как правило, смысл обозначений поясняется комментариями в программах. 6. Следует помнить, особенно при использовании программ, реализующих итерационные методы, что заданная погрешность вычислений е относится к погрешности метода, но не к применяемым исходным формулам! Например, приближенные формулы для инженерного расчета индуктивности или емкости могут иметь погрешность, существенно превосходящую 8. Оценка погрешности приближенных и эмпирических формул в ряде случаев не дается, поскольку она входит в сферу профессиональных познаний пользователя. 7. При проведении важных вычислений рекомендуется внимательно разобраться с алгоритмом вычислений и применяемой программой. Следует помнить, что скрытые и неожиданно выявляющиеся ошибки могут быть даже в тщательно отлаженных программах, выдержавших испытания контрольными тестами. Лучший путь исключения таких ошибок заключается в применении программ, полностью понятных пользователю. Естественность и простота записи математических выражений и логических условий на бейсике существенно облегчает разбор программ и способствует осмысленному их применению. 8. В справочнике описаны полностью законченные программы. Однако, удалив строки программ, содержащие операторы ввода исходных данных и вывода результатов, большинство программ можно использовать в качестве подпрограмм в сложных расчетах. Разумеется, при этом может потребоваться изменение номеров строк и адресов. 9. Материал справочника ориентирован на решение расчетных (математических, инженерных и др.) задач общего характера. Поэтому основное внимание уделено алгоритмической ясности программ. В программах по возможности использованы операторы, встречающиеся во всех версиях языка программирования бейсик. Применение некоторых операторов, например DEF FN, FN, ON и др., сознательно ограничено, так как в ряде версий языка бейсик они отсутствуют и могут быть заменены другими операторами. Эти меры направлены на придание программам большей универсальности и на облегчение перевода программ на другие версии бейсика. 10. Наиболее совершенные версии языка бейсик обладают обширными дополнительными возможностями: обработка
текстов, графика, средства создания машинных фильмов, звуковые эффекты и т. д. Однако в реализациях этих возможностей у различных версий языка бейсик имеется много принципиальных отличий. Их описание, как отмечалось в предисловии, выводит за рамки данной книги. Однако пользователи ПЭВМ могут легко дополнить описанные в справочнике программы выводом графиков, заданием звуковых эффектов и другими возможностями. 11. Математические выражения и формулы в справочнике даны в окончательном виде без выводов. Читатель, желающий подробно разобраться с математическим обоснованием описанных в справочнике алгоритмов и программ может воспользоваться специальной литературой, включая приведенную в списке литературы справочника.
ГЛАВА 1 ОСНОВНЫЕ ХАРАКТЕРИСТИКИ И ВОЗМОЖНОСТИ ПЕРСОНАЛЬНЫХ ЭВМ § 1.1. Современные типы персональных ЭВМ и их возможности Персональные ЭВМ (ПЭВМ) являются новым перспективным классом вычислительных средств, ориентированных на использование их одним пользователем. Применение персональных ЭВМ обеспечивает децентрализацию вычислительных процессов, резкое сокращение стоимости машинного времени, повышение удобства эксплуатации и привлечение к работе на ЭВМ обширного круга пользователей, неспециалистов в области вычислительной техники и программирования. Это достигается простотой работы с ПЭВМ, имеющей характер диалога с пользователем. Карманные персональные ЭВМ (класса Pocket Computers) представляют собой сверхминиатюрные ЭВМ на микросхемах большой степени интеграции (БИС), ориентированные на решение достаточно сложных расчетных и относительно простых информационных задач. Домашние персональные ЭВМ (класса Home Computers) предназначены для решения расчетных и информационных задач средней сложности, прежде всего относящихся к быту: ведение семейного бюджета, сложные и «интеллектуальные» игры (шахматы, посадка космических кораблей на планеты и т. д.), обучение различным дисциплинам, демонстрация компьютерных слайдов, учебные расчеты и т. д. Профессиональные персональные ЭВМ ориентированы на решение сложных расчетных и информационных задач различными профессиональными работниками (математиками, физиками, программистами, экономистами и т. д.) в различных, в том числе комфортных, условиях как на работе, так и дома. Основные свойства персональных ЭВМ (ПЭВМ). ПЭВМ должны обладать следующей совокупностью свойств: — ориентацией на эксплуатацию одним пользователем, как правило, неспециалистом в области вычислительной техники; — низкой стоимостью (за рубежом от 50 до 5 000 дол.), обеспечивающей возможность приобретения за счет личных средств пользователя либо средств небольших организаций и учреждений; — простотой конструкции и высокой надежностью, малыми габаритами и массой, обеспечивающими размещение ПЭВМ на части письменного или рабочего стола; — работой с обширным периферийным оборудованием (см. § 1.5), включающим устройства внешней памяти, алфавитно-цифровые и графические печатающие устройства (принтеры) и др.; — программированием хотя бы на одном языке высокого уровня, например бейсике; — обеспечением общения с пользователем в режиме диалога, в ходе которого ПЭВМ и пользователь обмениваются вопросами и ответами на обычном языке (в письменной, а у наиболее совершенных ЭВМ и в устной форме); — ориентацией на решение широкого круга как сугубо вычислительных и расчетных задач, так и информационных. Вычислительные микросистемы индивидуального пользования строятся на основе ПЭВМ или настольных микроЭВМ, оснащенных периферийным оборудованием (как минимум дисплеем, накопителем информации на магнитных дисках или ленте и принтером). Структура вычислительной микросистемы индивидуального пользования дана на рис. 1.1. Отметим назначение ее узлов. Шина данных и адресов представляет собой обычный или плоский многожильный кабель, связывающий узлы системы. Через эту шину ЭВМ обменивается с другими узлами цифровыми данными и адресами, по которым эти данные должны поступать. Центральный процессор (ЦП) — устройство, выполняющее основные логические и арифметические операции. Обычно ЦП ПЭВМ строится на одном или нескольких микропроцессорах (МП) с разрядностью (т. е. числом двоичных разрядов) данных от 4 до 32. В состав ЦП входят также арифметико-логическое устройство управления (УУ) и специальные устройства связи ЦП с периферийным оборудованием через общую шину. Клавишный пульт — устройство для ввода данных и программ в ПЭВМ, по внешнему виду напоминающие пульт пишущей машинки. Интерфейс клавиатуры — аппаратурные и программные средства сопряжения ЦП с клавишным пультом. Таймер — устройство для формирования временных последовательностей, задающих порядок работы ПЭВМ.
Рис. 1.1. Структура вычислительной микросистемы на основе персональной ЭВМ
Оперативное запоминающее устройство (ОЗУ) — набор БИС (больших интегральных схем), обеспечивающих хранение и временное запоминание цифровой информации. ОЗУ ПЭВМ обычно содержит отделение для хранения информации (одна или несколько страниц), отображаемой дисплеем (ОЗУ дисплея). Постоянное запоминающее устройство (ПЗУ) служит для постоянного хранения микропрограмм выполнения основных операций ПЭВМ на машинно-ориентированном языке. Обычно ПЗУ содержит и программу-интерпретатор (или транслятор) для программирования ПЭВМ на языке высокого уровня, например бейсике. Накопитель на магнитном диске (НМД) — устройство для магнитной записи цифровой информации на носитель в виде диска с ферромагнитным покрытием и считывания ее с диска. НМД дополняет ПЗУ ПЭВМ, причем на нем может храниться информация, вводимая пользователем (массивы данных и программы) . Контроллер дискового накопителя (КНМД) — устройство сопряжения ЦП с НМД и контроля работы НМД. Накопитель на магнитной ленте (НМЛ) — обычный бытовой или специализированный кассетный магнитофон для записи цифровой информации на магнитную ленту. Функции НМЛ аналогичны функциям НМД. Контроллер накопителя на магнитной ленте (КНМЛ) — устройство сопряжения ЦП с НМЛ и контроля его работы. Дисплей — устройство отображения алфавитно-цифровой и графической информации. Дисплей обеспечивает контроль вводимой информации, выдачу промежуточных и итоговых результатов работы ПЭВМ, а также контроль информации хода вычислений. Он является основным элементом ПЭВМ, обеспечивающим эффективный диалог с пользователем. Принтер — устройство печати алфавитно-цифровой (иногда и графической) информации. Параллельный интерфейс — аппаратурные и программные средства сопряжения ПЭВМ с периферийным оборудованием, воспринимающим информацию в виде параллельного кода (например, принтером). Акустический модем (AM) — устройство двухстороннего обмена информацией между телефонной сетью и ПЭВМ с преобразованием информации в высокочастотные звуковые посылки. AM используется для связи ПЭВМ с вычислительными и информационными центрами. Последовательный интерфейс — средства сопряжения ПЭВМ с периферийным оборудованием, воспринимающим информацию в виде последовательного кода (например, AM). . Графопостроитель (ГП) — устройство для построения графиков и рисунков с высокой разрешающей способностью (иногда функции ГП выполняет универсальный принтер). Планшет для ввода графической информации — устройство, обеспечивающее преобразование координат точек графика в электрические сигналы, вводимые в ПЭВМ. Иногда его функции выполняет дисплей, снабженный световым пером-датчиком. Перечисленные узлы полностью входят в состав только наиболее дорогих и сложных ПЭВМ. Более подробные данные о составе ПЭВМ и характеристиках их узлов приведены ниже. Функциональные возможности ПЭВМ. Области применения ПЭВМ весьма обширны. ПЭВМ могут вести научнотехнические, инженерные, экономические и статистические расчеты, облегчают подготовку программ для больших ЭВМ, позволяют решать различные информационные задачи (обработка текстов и графиков, демонстрация подвижных рисунков и иллюстраций к различным дисциплинам, изучаемым пользователем, связь с крупными информационными и вычислительными центрами и представление пользователю имеющихся в них информационных материалов и т. д.). ПЭВМ могут выполнять функции ЭВМ, управляющих различными приборами: от телевизора, телефона, магнитофона и стиральной машины до сложных контрольно-измерительных комплексов и научного оборудования. В будущем ПЭВМ приведут к революционным изменениям в информационном обеспечении общества и станут столь же привычным предметом обихода, как телевизор, радиоприемник или магнитофон. Основные характеристики ПЭВМ: объем памяти ОЗУ и ПЗУ, скорость счета, языки программирования, габариты и масса, состав периферийного оборудования. Объем памяти ОЗУ и ПЗУ измеряется в килобайтах (1 кбайт=1024 байт, 1 байт = = 8 бит, бит — двоичная единица). Простые ПЭВМ имеют объем памяти ПЗУ и ОЗУ 8 + + 16 кбайт. У более сложных объем памяти ОЗУ достигает 128-7-512 кбайт, а объем памяти ПЗУ за счет внешних носителей наращивается до 0,2 + 20 Мбайт (1 Мбайт ж 106 байт). Скорость счета ПЭВМ характеризует число операций в единицу времени. Поскольку видов операций очень много, этот параметр указывается редко. Специалисты судят о скорости счета по примененному в ПЭВМ микропроцессору и тактовой частоте его работы (от 0,5 до 10 МГц). Пользователей ПЭВМ в первую очередь интересуют функциональные и эксплуатационные возможности ПЭВМ: класс решаемых задач, габариты и масса, состав периферийного оборудования. Приведенные ниже данные ориентированы на пользователей ПЭВМ,
а не на их разработчиков.
§ 1.2. Карманные
персональные ЭВМ (Pocket Computers)
Как отмечалось, карманные ПЭВМ класса Pocket Computers представляют собой сверхминиатюрные ЭВМ, выполненные на одной или нескольких БИС. Обычно они снабжены жидкокристаллическим мозаичным индикато-тором (дисплеем), позволяющим отображать одну или несколько строк текстовых и цифровых данных. Типовые данные ряда ПЭВМ класса Pocket Computers даны в табл. 1.1. В таблицах будут использованы следующие сокращения: КМ — кассетный магнитофон, П — принтер, ГП — графопостроитель, AM — акустический модем, Д — дисплей, ТД — телевизор-дисплей, ГД — графический дисплей, Т — таймер, НМД — накопитель на магнитном диске, НМЛ — накопитель на магнитной ленте, ТП — термопринтер, прочерк (—) — отсутствующий в описании технический параметр. Одна из простейших ПЭВМ этого класса PC-1211 (рис. 1.2) имеет клавишный пульт, обеспечивающий побуквенный набор команд языка бейсик (см. гл. 2) [20]. По своим возможностям эта ПЭВМ сопоставима с проТаблица 1.1
Характеристики некоторых карманных ПЭВМ класса Pocket Computers Характеристика Тип ПЭВМ РС-1210 Фирма и изготовитель
страна-
РС-1211
PC-1500
НР-71В
FX-702P
Sharp (Япония)
Sharp (Япония)
Sharp (Япония)
Casio (Япония)
Hewlett Packard (США)
Емкость ПЗУ, кбайт
—
8
16
—
64 + 256
Емкость ОЗУ, кбайт
1
2
3,5+16
—
17,5+ 16
Максимальное шагов программы
число
400
400+1024
—
1680
—
Максимальное переменных
число
40
178
—
226
—
1/24
1/24
1/26
1/20
1/22
0,011
0,013
—
0,01
—
175X71X
195X86X22,5
Число строк/знаков дисплея Потребляемая мощность, мВт Габариты, мм
175X71X 15
Масса, г Периферийные устройства Язык программирования И
15
165X82X 17
163
170
П
КМ, П
375
176
КМ, П, ГП,
КМ, П
Бейсик
340
КМ,
П,
ГП,
AM Бейсик
190X98X 13
Бейсик
Бейсик
AM, ТД и др. Бейсик
ПЕВ RUN
90Q:C=N/{A*A+B*B):PRINT (Г SHARP PC-1211 POCKET COMPUTER, CA/BREAK
|DFFH~5NT— POWER
RESERVABLE KEYS Рис. 1.2. Внешний вид простейшей ПЭВМ класса 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 переменных. Совместно с дринтером и бытовым кассетным магнитофоном ПЭВМ ARC
HYP
BEG TRACE
PRT
READY P0: FX-702P 1680 ► ON
-6 RUN[T)WRT(|]TRACEON(1]TRACEOFF(4]IIEG[S]RAD(S]№A[7JPRTON|S]PRTOF
Рис. 1.3. Внешний вид ПЭВМ FX-702P (1—регулятор контраста, 2 —дисплей, 3 — префиксные клавиши, 4 — разъем интерфейса, 5 — клавиши функциональные, 6 — выключатель питания, 7 — клавиша продолжения работы, 8 — клавиша ввода, 9 — цифровые клавиши)
FX-702P образует простейшую вычислительную микросистему (рис. 1.4), ориентированную на автоматизацию научных, инженерных, статистических и экономических расчетов умеренной сложности. Скорость счета ПЭВМ FX702P в 25-^30 раз превосходит скорость счета программируемых микрокалькуляторов Электроника-БЗ-34 [10]. Кассетный магнитофон Принтер FP-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 английской фирмы Sinclair Radions Ltd. в 1983 г. составила 50 дол., что сделало ее дальнейшее производство нерентабельным). Характеристики ряда простейших зарубежных ПЭВМ класса Home Computers даны в табл. 1.2. Эти ПЭВМ рассчитаны на работу с черно-белым телевизором и обеспечивают формирование алфавитно-цифровых знаков и графиков. Лишь одна из этих ПЭВМ — НР-75 содержит встроенный дисплей на одну строку и накопитель информации на магнитных картах. Из отечественных ПЭВМ к данному классу относится бытовая персональная микроЭВМ Электроника-БК-0010 (бытовой компьютер). Эта ПЭВМ рассчитана на использование в качестве домашнего информационного центра, позволяющего проводить различные расчеты, создавать каталоги, справочники и словари, учебные программы, предоставлять пользователю игры и т. д. ПЭВМ Электроника-БК-0010 выполнена на базе однокристального 16-разрядного микропроцессора К1801ВМ1 и имеет емкость ОЗУ 32 кбайт, в том числе ОЗУ пользователя 16 или 28 кбайт. Емкость ПЗУ 32 кбайт, а емкость ОЗУ экранной памяти 16 или 4 кбайт. ПЭВМ подключается к стандартному бытовому телевизору и кассетному магнитофону. На экран телевизора выводится 25 строк (одна служебная). При матрице знаков 8X8 в строке размещается 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 Характеристики простейших персональных
ЭВМ Ноте
класса
Computers
Тип ЭВМ
Характеристика ZX-81 ---------------------------Sinclair Radion-
ZX-80 Фирма изготовитель
и
страна-
Sinclair Radions Ltd. (Великобритания)
Разрядность микропроцессора Емкость ПЗУ, кбайт Емкость ОЗУ, кбайт Число строк/знаков дисплея Габариты, мм
Ltd. (Великобри-
НР-75
РВ-700
Hewlett Packard. (США)
Casio (Япония)
тания)
8
8
8
8
32
32 2
Внешний *
Внешний *
48+16 16 + 8 1/32
25
1
24/32 299X178X51
24/32 299X178X51
-
4+16 4/20
200 X 85 X 20
Масса, кг Периферийные устройства Язык программирования
0,34 ТД, П, НМЛ
0,34 ТД, П, НМЛ
0,75 НМЛ, AM, П
_.
Бейсик
Бейсик
Бейсик
Бейсик
НМЛ, П
*J В качестве дисплея применяется телевизор. Таблица 1.3 Характеристики некоторых зарубежных ПЭВМ класса Home Computers, сопрягаемых с цветным дисплеем (телевизором) ЭВМ Тип
Характеристика
ZX-
BBC-
Spectru
ATARI Т1-400 99/4А
Micro
TRSColour
А
m Емкость ОЗУ, кбайт стандартное/максимальное Число цветов общее Емкость ОЗУ, кбайт (для дисплея) Число цветов, выводимых одно-
VIC-20
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
временно Режим мерцания Подстройка яркости Установка графического режима пользователем Полный набор кода ASC-1I Экран дисплея (строки/столбцы) Автоповтор на всех клавишах Графика повышенной разрешающей способности Язык программирования
Есть Есть Есть
Есть
Нет
Нет
Нет
Нет
Нет
Нет
Есть
Нет
Нет
Есть
Есть
Нет
Есть
Нет
Есть
Есть
Нет
Нет
Нет
Нет
24X32
25X40
23X24
24X40
24X29
16X32
Есть
Есть
Нет
Есть
Есть
Нет
Есть
Есть
Нет
Есть
Нет
Есть
Бейсик
Бейсик
Бейсик
Бейсик
Бейсик
Бейси к
, паскал ь 14
бражений, позволяют строить графики и рисунки с высокой разрешающей способностью, выводить различную текстовую и цифровую информацию в виде сложных многоцветных таблиц и т. д. Одной из наиболее распространенных моделей таких ПЭВМ является микроЭВМ ZX-Spectrum английской фирмы Sinclair Radions Ltd. [11]. Клавишный пульт ZX-Spectrum (рис. 1.5), имеющий размеры 233 XI44 X ХЗО мм, обеспечивает ввод большинства на одном гибком микродиске 100 кбайт. Среднее время доступа 3—5 с. У новой модели ПЭВМ ZX-Spectrum + число клавиш пульта увеличено до 58, что позволило реализовать ряд дополнительных текстовых и графических операторов и использовать новую расширенную версию языка бейсик. Емкость ОЗУ увеличена до 41,5 кбайт у основной модификации ПЭВМ. Накопитель на кассете с бесконечным рулоном ленты обеспечивает емкость внешнего ПЗУ до
ZX-SPECTRUM EDIT REB MAG-ENTA GREEN CYAN CAPS LOCK TRUE VIDEO IHV. VIDEO < YELLOW WHITE V Д GRAPHICS IBLACKl DELETE
_LU L_....e I I 7и | си IEF FN FN SIN COS LINE TAN OPEN INT CLOSE RNB MOVE ERASE STRS CHRg POINT CAT СОВЕ PEEK FORMAT TAB 4 D PLOT RAW REM RANI Y AND RETURH
„£ I AT
INPUT POKE ASN READ ACS ATN RESTORE DATA SQR VAL IN LEN OUT USR STOP
sNo SAVE DSTEP DIM T0
F
FOR nTHEN GOTO
H ♦
VERIFY S&N
MER6E ABC
SD5UB LOAD ENTER -C
LPRINT
>
LLIST
CIRCLE
BIN
VAL*
IN KEY*
SCREEN?
ATTR
PI
SYMBOL!
SHIFT BREAK SPACE BEEP
INK PAPER
FLASH
BRIGHT
OVER
Рис. 1.5. Внешний вид ПЭВМ ZX-Spectrum класса Home Computers команд расширенной версии бейсика нажатием одной-двух клавиш. Благодаря многократному использованию клавиш (с помощью префиксных клавиш) общее число их снижено до 40. Помимо стандартных команд бейсика пульт обеспечивает ввод до 37 графических символов и 22 кодов управления цветом. В пульт вмонтирован звуковой сигнализатор, дающий до 130 полутонов звука. Емкость ПЗУ 16кбайт. При отображении графики в 8 цветах матрица экрана содержит 256Х 176 точек (при отображении алфавитно-цифровой информации формируется 24 строки с 32 символами в каждой). Клавишный пульт обеспечивает ввод полного набора символов по стандартному коду ASC-II. Для ПЭВМ ZX-Spectrum разработаны специальные малогабаритные принтер и накопитель на диске. Принтер обеспечивает печать на рулоне бумаги шириной 10 см со скоростью 50 символов/с. По команде COPY принтер копирует сложные изображения с экрана телевизора (например, шахматную доску с фигурами). Данная ПЭВМ может подключаться к кассетному магнитофону и обеспечивает скорость записи до 1500 бит/с. При этом данные или программы, занимающие объем ОЗУ 16 кбайт, записываются (и вводятся в ПЭВМ) за время 100 с. Миниатюрный дисковый накопитель обеспечивает скорость записи и считывания до 16 кбайт/с при объеме информации 85 кбайт на одну кассету. Загрузка программ емкостью 48 кбайт обеспечивается им за 9 с. Как видно из табл. 1.3, различия у характеристик ПЭВМ класса Home Computers до^ вольно несущественные. Все ЭВМ этого класса обеспечивают повышенные (в сравнении с микроЭВМ класса Pocket Computers) возможности в решении информационных задач, позволяющие использовать их в часы досуга (игры, просмотр компьютерных слайдов и т. д.). В то же время набор операторов для проведения математических и научно-технических вычислений у них ограничен — в лучшем случае он содержит операторы вычисления тригонометрических и обратных тригонометрических функций, натурального логарифма, экспоненциальной функции, квадратного корня и возведения в степень. В этом отношении некоторые типы ПЭВМ класса Pocket Computers (например, описанная выше модель FX702P) значительно превосходят ПЭВМ класса 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 с, вероятность ошибки не более 1X Ю8. В НМЛ используются кассеты размерами 63,5Х82,5Х 12,7 см. В НР-85 встроены кварцевые часы, три программируемых таймера с временем выдержки от 1 до 9999999 с и звуковой сигнализатор. Дисплей этой ЭВМ может отображать одновременно алфавитно-цифровую и графическую информацию (в одном цвете). Предусмотрена память дисплея на 64 строки. ПЭВМ НР-87 имеет емкость ОЗУ 16 кбайт, которая может наращиваться дополнительно Таблица 1.4 Характеристики некоторых зарубежных профессиональных ПЭВМ и вычислительных микросистем
Характеристика
Тип ЭВМ НР-85
TRS80
Странаизготовитель
США
Apple-
PCjr
II США
Professio
Formula-1
США
Япония
nal США
США
Емкость мин/макс, кбайт Емкость мин/макс, кбайт
ОЗУ,
16/32
64/100 0
ПЗУ
Число клавиш пульта Размер ЭЛТ дисплея по диагонали, см
Матрица при графике
8/32
32/200
32
92
56
16
165 знаков 127 Диспл 230 ей или 305 жидкокристаллический — экрана 256X1 240X6 92 4
Число строк/столбцов Встроенные устройства
16/32
Д, п, т,
8/20 Д, ПЗУ
24/80 Т,
НМД, ПЗУ
НМЛ, ПЗУ Периферийные устройства
НМЛ,
ПЗУ
П
64/12
256
64
64
800
4/68
62
91
91
300 (цветной)
140
8
Д, П
640X 200
1024X24
—
0 24/80
24/80 24/132 Т, Д, ПЗУ, AM, ПЗУ T Д, П, НМД
НМД
24/80 Т,
Д, П, Т, НМД (2Х1Мбайт, 2X0,7 Мбайт) ПЗУ
Габариты, мм
— 158Х4 220X3 380X3 610Х375 424X255X21 19Х Х452 00X Х50 97X Х157 Х Х165 2 1,6 11 — 16 15 Масса, кг 9,06 Основные языки Бейси Бейсик Бейсик Бейси Бейсик, Бейсик, программирования к , паскаль, к, фортран фортран, паскаль фортран и паскаль, и др. др. фортран и др.
16 на 32 кбайт. Емкость ПЗУ этой ПЭВМ достигает 0,5 Мбайт (в стандартном варианте 32 кбайт). В ЭВМ встроен дисплей на ЭЛТ с большим диаметром по диагонали (260 мм), обеспечивающий получение графических изображений с повышенной разрешающей способностью. Эта ЭВМ способна решать задачи линейного программирования с 200 переменными, системы линейных уравнений с порядком до 80 и т. д. Портативная (в виде небольшого чемоданчика) ПЭВМ TRS-80 предназначена для руководителей и специалистов, часто бывающих в командировках. Дисплей у этой ПЭВМ жидкокристаллический (8 строк по 20 знаков). В ПЗУ TRS-80 зашито пять программ: интерпретатор расширенной версии бейсика (с графикой), обработка текстов, составление планов и расписаний, записная (адресная) книга и программа связи через телефонную сеть. ПЭВМ имеет ряд интерфейсов для связи с кассетным магнитофоном, принтером и др. Одной из наиболее распространенных ПЭВМ (их выпуск в США достиг 600 000 в год) является модель Apple-II (см. табл. 1.4) и ее модификация Apple-He фирмы Apple Computer 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 Вт. Некоторые модели отечественных микро-ЭВМ из-за относительно больших размеров, массы и стоимости можно условно отнести к ПЭВМ, поскольку они отвечают главному критерию таких вычислительных средств — предоставлению ресурсов в индивидуальном порядке. Подобные ЭВМ вместе с периферийным оборудованием образуют вычисли Г?
основе одноплатной микроЭВМ Электроника-НЦ-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-Ю6 микрокоманд/с и разрядностью 8/16 имеет обращение к ОЗУ ^ Таблица 1.5 Характеристики некоторых отечественных вычислительных микросистем индивидуального пользования
тельные микросистемы индивидуального пользования. В табл. 1.5 приведены краткие характеристики ряда отечественных вычислительных микросистем индивидуального пользования [27]. Массовое применение нашли вычислительные микросистемы на базе одноплатной микроЭВМ Электроника,-С60, первые образцы которой программировались на упрощенной версии бейсика. В настоящее время для них используется расширенная версия бейсика дисковой операционной системы Рафос, в состав которой входят команды для работы и операций с символьными переменными. Эта версия бейсика совместима с применяемой в миниЭВМ серии СМ (бейсик-плюс [28]). Для проведения научно-технических и других расчетов широко применяются системы подготовки программ (СПП) на базе специализированного вычислительного и управляющего устройства Электроника-ДЗ-28. Они имеют расширенную версию бейсика, причем расширение произведено в сторону увеличения числа операторов для вычисления математических функций. Все программы в справочнике даны на этой версии бейсика и могут легко переводиться на другие его версии. В последние годы освоено массовое производство диалоговых вычислительных комплексов ДВК-1 и ДВК-2, построенных на Тип системы или микроЭВМ Характеристика
Электроника 1-1 \/[ С * \
Искра-226
ТЗ-2Э
ТЗ-29М
ДЗ-28
011 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 на основе дисплея ИЭ-000!3"01 и одноплатной микроЭВМ Электроника НМС 11100.1 обозначен как ДВК. Масса ДВК з периферийных устройств 36 кг, потребляемая мощность 275 Вт.
□
Q
□
П
□
Латинский. Нижний Печать Дуплекс
j
3
1г
\*
1
&
1
7
6
9
f
;
□
П
Линия Редактирование СДВ
Передача
—Т Г А Т Б
0
,
I V
\
Е
Г1
а
f
X
f
Ш
н
*
а У к ик £ с
3
П В С К
\с С
У
$\
"г
в w 1 >
"
п Р 1 о0 R \ 0
л
ж
L
V
> З Б
1 с м И т X I Sм т
B я
а
P
b
6
aд
ю
у
H
г
P
Л
Р УС
АТ ПРД|ПРМ|ПРС|
7
8 9
4
5 В
1
2 3
С )
Г
|ПЧ|ДУП|ЛИН| [РЕДСДВ|ОЧС
>
f \
тi ± Рис. 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-М00 Мбайт (большие цифры — для жестких дисков с диаметром 203 мм). Скорость обмена данными весьма высока — до 0,125 -=-10 Мбайт/с, что является большим достоинством НМД по сравнению с накопителями на магнитной ленте. В последнее время наблюдается тенденция перехода к малогабаритным НМД с диаметрами дисков 76, 82,5, 85 мм и меньше. Помимо накопителей информации на стандартных кассетах с магнитной лентой и магнитных дисках в некоторых ПЭВМ применяются специальные типы накопителей: на микрокассетах (уменьшенный вариант обычной кассеты), кассетах типа Catridge с бесконечным рулоном ленты, свернутой в кольцо, и на магнитных картах. Однако широкого распространения такие накопители не получили. В перспективе возможно оснащение ПЭВМ накопителями информации на оптических дисках с лазерной записью и считыванием. Из другого периферийного оборудования следует отметить принтеры — устройства для печати алфавитноцифровой, а иногда и графической информации. Принтеры подключаются к ПЭВМ через интерфейс (обычно с передачей информации в параллельном коде). Скорость печати принтеров для ПЭВМ составляет от нескольких десятков до нескольких сотен знаков в секунду. Наиболее распространены мозаичные принтеры, обеспечивающие точечную печать знаков, с матрицей 5X7 элементов. Однако качество такой печати не считается достаточно высоким. Поэтому находят применение и принтеры, работающие по типу пишущей машинки. Высокое качество печати в сочетании с высокой скоростью имеют принтеры с шаровой печатающей головкой. У них знаки распределены по поверхности шара и нужный знак выбирается поворотом печатающей головки. Принтеры, разом печатающие целую строку, применяются в основном в больших ЭВМ. Для высококачественного документирования графической информации применяются графопостроители. Имеются графопостроители с числом перьев до 6—12, обеспечивающие построение многоцветных графиков с высокой разрешающей способностью (до 0,1 мм и выше) и большой точностью задания координат (погрешность до 0,2-ь1 %). Скорость построения графиков лежит в пределах от 2 до 50 см/с. Преобразование координат точки (или точек графика) в цифровой код обеспечивают специальные планшеты. С этой целью применяются и устройства типа «мышь», содержащие поворотные датчики, реагирующие на перемещение «мыши» по гладкой поверхности. Погрешность преобразования для таких устройств составляет обычно доли процента. Для связи ПЭВМ с внешними накопителями информации через телефонную сеть служат акустические модемы: специальные микрофоны и излучатели, работающие на высоких звуковых и ультразвуковых частотах. Акустические модемы могут применяться в виде отдельных блоков или встраиваться в корпус ПЭВМ. Тогда в акустическом модеме закрепляется трубка телефонного аппарата, что обеспечивает акустический контакт с ПЭВМ:
БЕЙСИК—ОСНОВНОЙ ЯЗЫК ПЕРСОНАЛЬНЫХ ЭВМ § 2.1. Алфавит и основные операторы языка бейсик Назначение языка бейсик (BASIC). Наименование BASIC является сокращением английских слов «Beginner Allpurpose Symbolic Instruction Code», что в переводе означает «многоцелевой язык символических команд для начинающих». BASIC был задуман разработчиками как язык, доступный для усвоения студентами гуманитарных вузов. Однако простота грамматики и синтаксиса, его схожесть с фортраном привели к широкому распространению бейсика- в практике математических и научно-технических расчетов. Бейсик — язык интерпретирующий. Работа на бейсике организуется с помощью специальной программыинтерпретатора, которая записана в ПЗУ или загружается в ОЗУ с внешнего накопителя — магнитной ленты или диска. Эта программа переводит каждый оператор бейсик-программы на машинно-ориентированный язык конкретной ЭВМ. Бейсик — язык высокого уровня. Многие версии бейсика имеют непринципиальные отличия в основных операторах. Поэтому возможен простой перевод программ с одной версии бейсика на другую. Однако не следует преуменьшать и различия между разными версиями. Так, простые версии бейсика имеют всего 30—40 операторов, тогда как у сложных их число достигает нескольких сотен. При переводе программ следует учитывать различия в записи отдельных операторов, в их наборе и правилах синтаксиса. Различия в версиях бейсика усугублялись использованием его для программирования наиболее массовых видов ЭВМ — ПЭВМ, число типов которых составляет многие тысячи. Бейсик — язык диалоговый. Это означает, что программными средствами на бейсике можно организовать диалоговый режим работы ПЭВМ с пользователем. При этом ПЭВМ сообщает пользователю о том, какими
возможностями она обладает, как ею пользоваться, в каком порядке должна выполняться данная конкретная программа и т. д. Диалог задается пользователем и в его программах. Алфавит бейсика содержит 26 прописных латинских букв, цифры от 0 до 9, точку, запятую, кавычки, знаки арифметических операций ( + , —, /, * (умножение) и ~\ (возведение в степень)), знаки отношения двух величин (> , <, =), скобки и другие специальные знаки. Версии бейсика для отечественных микроЭВМ имеют в алфавите и русские буквы. Переменные бейсика делятся на 4 типа. 1. Простые переменные, обозначаемые латинскими буквами, например А, В, С, . . ., X, Y, Z. 2. Простые переменные, обозначаемые латинскими буквами с одной цифрой после них, например Al, D2, . . ., Z9. 3. Индексированные переменные одномерных массивов вида А (а), В (а).....Z (а), где а — число, простая переменная или арифметическое выражение. 4. Индексированные переменные двумерных массивов вида А(а, р), В(а,Р), ... . . ., Z (а, р), где аир — числа, простые переменные или арифметические выражения. Максимальные значения аир зависят от объема ОЗУ (обычно 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
большими латинскими буквами без пробелов в словах (у некоторых ПЭВМ пробелы игнорируются) . Существуют также служебные операторы (директивы), исполняемые сразу после их ввода с п\.1ьта (некоторые из них могут выполняться и по программе). Программа на бейсике есть последовательность операторов, записанных по определенным правилам и обеспечивающих решение заданной задачи на ЭВМ. В бейсике операторы записываются построчно. В одной строке может быть один оператор или несколько, разделенных специальным знаком (двоеточием : или наклонной чертой \). Строки должны иметь последовательную нумерацию. Рекомендуется задавать номера строк с пропусками, например 5, 10, 15, 20 и т. д. или 10, 20, 30 и т. д. Это позволит при необходимости вставить между ними новые строки. Максимальный номер строки зависит от типа ПЭВМ. Таблица 2.1 Символы арифметических операций Пейсика Симв ол
Прим
Операция
ер 1
АН В
Возведен ие
*
степень Умножен
А*В
ие /
Прио ритет опера ции в Перв ый Втор ой
Деление
А/В
Втор ой
+
А+В
—
А-В
Сложени е
Трет ий
Вычитан ие
Трет ий
Символы арифметических операций бей-сика даны в табл. 2.1. Там же отмечен приоритет операций, т. е. порядок их выполнения при вычислении арифметических выражений. Приоритет может быть изменен вводом скобок. Операторы задания массивов DIM и СОМ. Одномерные и двумерные массивы занимают в ОЗУ ЭВМ определенную область памяти, обозначаемую как DIM или СОМ. Чтобы в эту область не попали другие данные, перед вводом и использованием массивов нужно зарезервировать для них место. Это делается с помощью операторов DIM и СОМ, после которых указываются переменная и скобки с указанием размеров массива. Так, полный оператор DIM A (9) резервирует в памяти место для одномерного массива А из 10 переменных от А(0) до А(9). Оператор DIM C(5, 6) резервирует место под двумерный массив С, содержащий шесть строк и семь столбцов (включая нулевые). Для обозначения размерности массивов можно использовать арифметические выражения (причем их дробная часть отбрасывается), а также числовые значения переменных. Например, оператор DIM R (I*N, К) резервирует область памяти DIM под двумерный массив R с максимальным номером строки, равным целой части произведения I*N и максимальным номером столбца, равным целой части числового значения переменной К. Операторы выполнения математических функций на бейсике приведены в табл. 2.2. Аргумент функции должен заключаться в скобки. Им могут быть числа, переменные и арифметические выражения, например: SIN(30) — синус угла в 30 градусов, SIN(Z) —синус угла, заданного аргументом в виде числового значения переменной Z, EXP(SQR(2)) —значение числа е^ = = ехр -\[2.
Аргумент и значение функций не должны выходить за пределы определения функции и за пределы разрядной сетки ЭВМ, иначе будет индицироваться ошибка. Вычисление функции имеет приоритет перед арифметическими операциями. Исполняемые по программе основные операторы версии бейсика для микроЭВМ Электроника-60, Электроника-ДЗ28 даны в табл. 2.3. Рассмотрим их более детально. Оператор LET (от слова letter — буква) служит для присвоения буквенным переменным, указанным слева от знака равенства, числового значения константы, переменной или арифметического выражения, записанных справа от знака равенства. Оператор DATA (от слова data — данные) служит для ввода в память ЭВМ определенной последовательности чисел. Они даются списком с разделительными запятыми. Т а б л и ца 2.2 Операторы вычисления математических функций версии бейсика микроЭВМ Электроника-60
Запись
Запись
Наименование
Запись
Запись
Наименование
оператор
функции
функции
оператор
функции.
функции
RND (х)
rnci х
SGN(X)
sign х
FN а(Х)
—
EXF(X)
—
а
а SIN(X)
sin x
Синус X
COS(X)
cos x
Косинус X
АТ\(Х) SQR(X)
arctg*
Арктангенс X Корень квадратный из X
ЕХР(Х) LOG(X)
ex = exp x In x
ABS(X)
abs x
INT(X)
int x
"V*
Экспонента X Натуральный логарифм X Абсолютное значение X Целая часть X
Генерация случайных чисел со значением от С до 1 Сигнум-функция (4-1 при х> 0, 0 при х~0 и — 1 при лг<0) Функция, заданная пользователем Внешняя функция
22 Таблица 2.3 Основные операторы языка бейсик Операторы Примеры записи LET
DIM COM
LET A = 2 LET X = Y LET Z = a
DATA 1, 2, 3, 4
READ
READ А, В, С, D
RESTORE
RESTORE
Переменной А присваивается значение 2 Переменной X присваивается значение переменной Y Переменной Z присваивается значение арифметического выражения a
DIM A(5) COM A(I,J) DIM Задание одномерного массива А из шести A(a,L) переменных А(0), А(1), ..., А(5) Задание двумерного массива с максимальным номером строки I и столбца J Задание двумерного массива с максимальным номером строки, равным целой части арифметического выражения а и столбца с максимальным номером, определяемым численным значением переменной L
DATA
INPUT
Пояснения
Ввод чисел 1, 2, 3, 4 Присвоение переменным А, В, С и D численных значений, заданных оператором DATA
Поворот стека данных
INPUT A INPUT A = A INPUT Ввод значения А с пульта после появления А, В, С знака ? Ввод значения А после печати пояснения А= ... Ввод значений А, В и С, разделенных запятыми
PRINT 2 PRINT А, В, С PRINT A = A PRINT F = a
Печать числа 2 Печать численных значений переменных А, В и С Печать численного значения А после комментария А = Печать численного значения арифметического выражения а после комментария F =
GOTO IF ... THEN IF...GOTO
FOR ... TO ... STEP ... NEXT
GOTO я
Безусловный переход к строке с номером п
IF a f (5 THEN n IF a r p Условный переход к строке п, если GOTO n IF a r p THEN 7 справедливо отношение г (табл. 2.4) Выполнение операций 7. если справедливо отношение г FOR a = p TO 7 NEXT a FOR a = p TO 7 NEXT a
STEP 6
Организация цикла с управляющей переменной а, меняющейся от начального значения р до конечного 7 c шагом 6 (Р, 7 и 6 — числа, значения переменных или арифметических выражений) Организация цикла с шагом 6=
GOSUB
GOSUB n
.RETURN
RETURN
23 Таблица 2.3 (продолжение) Операторы Примеры записи
Обращение к щейся со строки п
+1
подпрограмме,
начинаю-
Возврат из подпрограммы
Пояснения
REM (REMARK)
REM КОММЕНТАРИЙ
Печать комментария листинга программы
STOP
STOP
Остановка вычислений в любом месте программы
END
END
Конец программы и останов в конце программы
DEF FN<V> (параметр)
DEF FN Y(X)=SIN (X)/X
Задание функции а пользователя; в примере Y (X) = sin х/х
=а
при
выводе
Оператор READ (read — читать) служит для чтения чисел из блока данных DATA и присвоения переменным своего списка численных значений. Пример. В следующей программе численные значения переменных будут такими: Л = 1; В = 2; С = 3; £> = 4 и £2= — 5-1СГ8.
18 DATA Ь2>3,4>-5Е-8 20 READ й>В,С,Ъ 38 READ E2 Оператор RESTORE (от слова restore — возвращать) служит для поворота стека данных, который формируется в ОЗУ ЭВМ оператором DATA (стек можно уподоби-ть обойме револьвера, если числа отождествлять с патронами). Этот оператор необходим, если, например, одно из чисел в списке DATA нужно присвоить разным переменным. 18 DATA Ь2>3>4>-5Е-8 28 READ A,B,C,D,E2 30 RESTORE 49 READ F,bL B приведенной программе вначале переменным стека оператора READ в строке 20 присваиваются отмеченные выше численные значения. Затем оператор RESTORE в строке 30 обеспечивает поворот (возврат) стека. В результате переменной F присваивается значение 1, а переменной L — сначала значение 2, а затем 3. Оператор INPUT (input — ввод) служит для ввода чисел с пульта по запросу ЭВМ. Он сопровождается печатью знака вопроса (?) или комментария, заключенного в апострофы (или кавычки), после слова INPUT, а также для присвоения числовых значений списку переменных. Примеры. 1) 10 INPUT A Печатается знак вопроса, и ЭВМ ждет число, значение которого (после ввода) будет присвоено переменной А. 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 (A*B+C) Печатается F=a, где а — числовое значение арифметического выражения VAB~+CT. 6) 70 PRINT Печатается пустая строка (т. е. пробелы). Если в списке оператора PRINT в качестве разделителя используется запятая, то каждое число (см. примеры 1) и 2)) печатается в соответствующей зоне одной строки. Последняя разделяется обычно на пять зон печати. Если чисел больше пяти, то последующие печатаются с новой строки, и т. д. Для более плотной печати в качестве разделителя можно использовать знак ; (точка с запятой). Тогда очередное число будет следовать за предыдущим с минимальным пробелом. Тип печатающего устройства указывается специальными знаками после оператора PRINT: Например, для системы подготовки программ на базе микроЭВМ Электроника-ДЗ-28 оператор PRINT после включения системы обеспечивает вывод комментариев и чисел только на дисплей. Для печати принтером после оператора PRINT следует поставить знак #1, а для обратного переключения индикации на дисплей — знак #0. Пример.
Ш PRINT#0ВЫЧИСЛЕНИЕ ЭКСПОНЕНТЫ 20 INPUT X 30 PR I NT# 1 X= К, EXP < X > = EXP < X > 40 END В этом примере на экран дисплея будет выведено сообщение ВЫЧИСЛЕНИЕ ЭКСПОНЕНТЫ, а значения X и ЕХР(Х) будут напечатаны принтером. Таким образом, первоначально введенный знак =#=0 или =# 1 сохраняется до замены его другим, повторять этот знак в последующих операторах PRINT не нужно. Формат печати чисел также может указы-, ваться специальным знаком в составе оператора PRINT: Так, для упомянутой выше системы возможны следующие форматы: \?п\Пг\ — выводится знак числа, п.\ цифр до десятичной точки, десятичная точка, Пч цифр после десятичной точки, символ порядка Е, знак порядка и две значащие цифры порядка; \п.\.пг\ — выводится знак числа, п.\ цифр до десятичной точки, десятичная точка и п2 цифр после нее (если число не умещается в формате, выводится столько символов, сколько позиций отведено на печать); !Е! — число выводится в форме с плавающей запятой и содержит знак числа, точку, 12 цифр мантиссы, символ порядка Е, знак порядка и две цифры порядка. При начальном включении системы устанавливается формат !F 1.9!. При смене формата новый формат запоминается и действует до замены его другим. Внимание! Синтаксис и вид операторов INPUT и PRINT у разных моделей ПЭВМ могут иметь некоторые различия. Например, комментарии могут вводиться в кавычках или апострофах, различны символы установки формата и типа печати. Поэтому общее знакомство с этими операторами следует завершить уточнением формы их записи для каждой конкретной ПЭВМ. Оператор GOTO n (от слов go to — идти к) обеспечивает безусловный переход к строке с номером п. В программе 10 INPUTХ=Х 20 LETV=SIN<X) 25 PRINTV=V 30 GOTO 10 после ввода X и вычисления Y = sinX оператор GOTO 10 в строке 30 обеспечивает переход к строке 10, т. е. к вводу нового значения X по оператору INPUT. Таким образом, программа зацикливается. Операторы IF и THEN (if — если, then — тогда) служат для организации условных переходов. Общая форма их записи (вместо слова THEN возможно GOTO): IF a r р THEN n (или у) IF a r (3 GOTO n где а, р и у — арифметические выражения, я — номер строки, г — символ отношения а и [3 (условия перехода) (табл. 2.4). Вместо аир могут стоять переменные и числа. Если предписанное отношение выполняется, происходит Таблица 2.4 Символы отношения г для операторов IF...THEN Симв Мате Пример Значение ол мабейси тичес записи символа ка кий симв оператор ол а А=В Равно = = < < А<В Меньше <= < А< = В Меньше или равно > > А> В Больше => > А=> В Больше или равно ф Не равно АО В переход к строке с адресом п (или выполняются арифметические операции в выражении у). В противном случае выполняется последующая за операторами IF ... THEN часть программы. Пример. 10 INPUTХ=Х 20 IF X=0 THEN 50
30 LETF=SIN<X)/X 40 PRINT1F=FsGOTO 10 50 LETF=l:60T0 49 В приведенной программе вычисляется функция F = siriA;/x. При х = 0 получаем неопределенность вида 0/0, а поскольку деление на 0 машина не производит, нужно этот случай исключить. Для этого в строке 20 значение х сравнивается с нулем. Если x = Q,
происходит переход к строке 50, где ггеремен-ной F присваивается известное значение 1. Операторы организации циклов FOR ... ТО и STEP образуют цикл по схеме FOR <x = p TO v STEP fi (тело цикла) NEXT a Эта запись означает следующее: для (for) переменной а, имеющей начальное значение ft и меняющейся до (to) конечного значения у с шагом (step) 6 обеспечивается выполнение цикла, завершаемого оператором NEXT a (следующий). Если а достигает значения у, 25 происходит выполнение следующего за циклом оператора. Переменная а должна быть простой, а [3, у и 6 могут быть числами, переменными или значениями арифметических выражений. Отсутствие в цикле оператора STEP автоматически придает величине 6 значение 6= + .!. Примеры применения операторов организации циклов даны в § 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 (хранить). Примеры. SAVE 50, 150 — записываются строки от 50 до 150 безымянной программы; SAVE СТАТИСТИКА — записывается вся программа с именем СТАТИСТИКА; SAVE — записываются все строки (от 1 до 7 999) программ, имеющихся в ОЗУ; SAVE END — служебная запись, означающая конец ленты. Чтение программных файлов с магнитной ленты и их загрузка в ОЗУ производится оператором LOAD (загрузить). Примеры. LOAD a HC1, НС2 — в ОЗУ загружаются строки программы с именем а от НС1 до НС2; LOAD СТАТИСТИКА — загружается вся программа с именем СТАТИСТИКА. Следует отметить, что имя программ распознается только по шести начальным символам, включая пробелы. Если имя файла Таблица 2.5 Служебные операторы бейсика Запись оператора
Действие оператора
DELETE n
Стирание строки с номером п
DELETE т. п LIST LIST л LIST m, n OLD Или LOAD RUN SAVE СКЛ/Р СКЛ/U ЗБ
Стирание строк с номерами от m до п Вывод листинга (текста) всей программы Вывод листинга строки с номером л Вывод листинга части программы (строки от ш до л) Загрузка программы с носителя Пуск программы (вычислений) Запись программы на носитель Остановка программы с печатью знака "1 Стирание вводимой строки ; Забой (стирание) одного символа
не задано, при выполнении оператора SAVE произойдет загрузка очередного файла. Для записи на магнитную ленту блока данных применяется оператор DATA SAVE с последующим списком блока. Например, оператор DATA SAVE B(3), SIN (X + Y) * Z, С обеспечивает запись на ленте значений переменной В(3) одномерного массива В, выражения Z * SIN (X + Y), переменной С. Блоки могут объединяться в файлы данных, которые начинаются с оператора (заголовка) DATA SAVE OPEN и заканчиваются оператором DATA SAVE END. После заголовка может указываться имя файла, заключенное в апострофы. Чтение с магнитной ленты блока данных с присвоением их переменным производится оператором DATA LOAD со списком переменных, разделенных запятыми. Оператор DATA LOAD а Обеспечивает поиск на магнитной ленте файла с именем а. Для пропуска некоторого числа блоков или файлов используется оператор SKIP (перепрыгнуть), после которого указывается это число, например, оператор SKIP 2 обеспечивает пропуск двух блоков данных, а оператор SKIP 3 — пропуск трех файлов данных. Перемотка ленты в начало производится оператором REWIND (перемотать).
Операторы SAVE и LOAD могут использоваться также при работе с дисковым накопителем. При этом после них указываются: номер дисковода (ф\), номер диска (О или 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 Таблица 2.6 Дополнительные операторы расширенной версии языка бейсик для системы подготовки программ на базе микроЭВМ Электроника-ДЗ-28
Оператор
Функция
Пояснение
DEG(X) RAD(X) TAN(X) ASN(X) ACS(X) HSN(X) HCS(X) HTN(X) AHS(X) AHC(X) AHT(X) LGT(X) EXT(X) PRINT TAB a
X-e- 180Х/Л X+-itX/180
Перевод угла из радиан в градусы Перевод угла из градусов в радианы Вычисление тангенса Вычисление арксинуса Вычисление арккосинуса Вычисление гиперболического синуса Вычисление гиперболического косинуса Вычисление гиперболического тангенса Вычисление обратного гиперболического синуса Вычисление обратного гиперболического косинуса Вычисление обратного гиперболического тангенса Вычисление десятичного логарифма Вычисление функции 10х Перемещение места печати (или индикации) в строке
Xgx
arcsin x arccosx sh x ch x thx arsh x arch x arth x log* 10* —
на
CALL n
—
ON a
позицию с номером, заданным целой частью арифметического выражения, числа или переменной а (от 0 до 101) Вызов внешней подпрограммы с номером я (от 1 до 7999) Безусловный переход по адресу, задан.ному целой частью арифметического выражения, числа или переменной а
27 Таблица 2.7
Дополнительные операторы расширенной версии языка бейсик ПЭВМ FX-702P класса Pocket Computers Оператор
Пояснение X! FRAC X DEG(X, Y, Z) DMS X
RPC X, Y PRC X, Y RND(a, Y) CNTSDX
SDY SDXN SDYN MX MY SX SY
SX2 SY2 SXY LRA
LRB COR
EOX у EOY x INP <V> AS 8="<V>" C8 A$ LEN(CS) MID(m[,n] ) AS - KEY VAC SAC CLR ALL PASS"K" GSB #n GOTO #n GSB a
GSB #a GOTO « GOTO #a IF NS«"<V>" THEN n, #n DEFM n CSR n
PRT ##.## PRT #.##f SET N Вычисление факториала x\ Выделение дробной части числа х Преобразование угла, выраженного в градусах X, минутах Y и секундах Z, в угол, выраженный в десятичных долях градуса Преобразование угла, выраженного в градусах и их десятичных долях, в угол, выраженный в градусах, минутах и секундах с десятичными долями Преобразование прямоугольных координат в полярные Преобразование полярных координат в прямоугольные Округление численного значения арифметического выражения или числа a с погрешностью до 10 Подсчет числа введенных чисел при статистических вычислениях Стандартное отклонение х, (смещенное) Стандартное отклонение yt (смещенное) Стандартное отклонение х, Стандартное отклонение у. Вычисление среднего значения х. Вычисление среднего значения yi Вычисление суммы Xi Вычисление суммы у. Вычисление суммы xf Вычисление суммы у? Вычисление суммы произведения Xiyi Вычисление параметра а линейной регрессии у (х) =а-\-Ьх Вычисление коэффициента Ь линейной регрессии у (х) =а-\-Ьх Вычисление коэффициента парной корреляции г Вычисление х по заданному у при линейной регрессии Вычисление у по заданному х при линейной регрессии Присвоение символьной переменной AS значения символа (V) по оператору INP Присвоение символьной переменной S значения символа (V), содержащего до 30 знаков Присвоение символьной переменной ВБ значения символа (V), содержащего до 7 знаков Суммирование символов символьных переменный AS и ВБ Вычисление числа символов в символьной переменной CS Выделение я символов символьной переменной S, начиная с символа с номера т Присвоение клавише А свойств клавиши пользователя Стирание всех ячеек памяти (обнуление всех переменных) Стирание ячеек памяти статистических расчетов Стирание всех программ (от Р0 до Р9) Кодирование (засекречивание) программы кодом К (до 8 знаков) Обращение к подпрограмме, помещенной в программную область Ря Безусловный переход к программе, помещенной в программной области Ря Обращение к подпрограмме с косвенной адресацией (номер строки задается арифметическим выражением а) Безусловный переход с косвенной адресацией (адрес задается значением арифметического выражения а) Безусловный переход к программе Ря, номер которой я задается значением арифметического выражения а Условный переход по адресу п или к программе Ря, если символьная константа N$ равна символу (V) Высвобождение памяти под 10 (п+1) переменных массивов, где я = 0-Н 19 Перемещение начала индикации или печати на позицию я (я = 0-М9), оператор используется вместе с оператором PRT Задание формата чисел в форме с фиксированной запятой (знак ф соответствует одной цифре) Задание формата чисел в экспоненциальной форме с плавающей запятой (знак # соответствует одной цифре) Задание стандартной формы чисел с 10-ю знаками мантиссы
28 Таблица 2.7 (продолжение) Оператор
Пояснение
SET Е п
Задание экспоненциальной формы чисел с п знаками мантиссы (я<10)
SET F п
Задание формы чисел с фиксированной запятой и п знаками после десятичной точки
WAIT n STAT а, (3
Задание индикации с перерывом счета на время, равное л-0 05 с (я = = 0-Ы000) Проведение статистических расчетов с парой чисел X и Y, задаваемых значениями переменных X, Y, констант или арифметических выражений я и R
MODE 4
Задание углов в градусах
MODE 5 MODE 6 SAVE #n </>
Задание углов в радианах Задание углов в градах Запись программы Рп с наименованием файла (/) на кассетный магнитофон Ввод программы с наименованием файла (/) в область Рп с кассетного магнитофона
LOAD #n <f> SAVE ALL"<f>"
Запись всех программ и данных с названием файла (f) на кассетный магнитофон
LOAD ALL "<f>"
Ввод всех программ и данных с названием файла (/) в микроЭВМ с кассетного магнитофона
LIST #n LIST #я "К" LIST ALL LIST V
Распечатка листинга программы Рп принтером Распечатка листинга засекреченной кодом "К" программы Рп принтером Распечатка всех программ (от РО до Р9) принтером Распечатка принтером значений переменной V Запись файла данных (переменных А, В) с именем (/) на кассетный магнитофон
PUT "(I)" A, B GET"</>" 8, С
Вызов значений переменных 6, С файла с именем (f) с кассетного магнитофона
VER "<f>"
Контроль правильности считывания файла с именем (/) кассетным магнитофоном
(преобразования координат), округления чисел с погрешностью до lO17, вычисления 17 статистических характеристик двумерного массива чисел (см. § 5.3). В эту версию входит ряд операций с символьными переменными. Символьной переменной называется переменная (обозначаемая любой латинской буквой со знаком $ после нее),
которая может принимать значение символа (V). Например, оператор В$="АВС" присваивает символьной переменной В$ символ ABC, который должен помещаться в кавычки. При исполнении оператора PRINT B$ на инди-_ кацию или печать будет выведен символ — в нашем случае ABC. Суммирование символьных переменных с помощью оператора вида С$=А£+В6 означает простое суммирование символов: если А6="АВС", B$="DEF", то получим Cg="ABCDEF". Оператор LEN (СБ) обеспечивает подсчет числа знаков в символьной переменной. В нашем примере после исполнения этого оператора получим число 6. Оператор MID (m, [, n]) *) выделяет п знаков символьной переменной 3, начиная с символа с номером т. Допустим, символьная переменная 5 = "STARTFINISHEND". Для выделения слова, выделенного полужирным шрифтом, имеющего п = 6 букв и начинающегося *) В квадратных скобках ставится необязательный элемент выражения. с символа F с номером т = 6, надо дать команду MID (6.6). Так, если A$=MID (6.6), то символьной переменной А$ будет присвоен символ FINISH. Оператор АБ=КЕУ обеспечивает присвоение клавише символьной переменной функции клавиши пользователя (key — клавиша). Тогда, используя операторы вида IF AS="<V)" THEN n, можно начать выполнение программы со строки с номером п, присвоив переменной АБ значение символа (V) (например, с помощью оператора INP (сокращение от INPUT), см. § 2.5). Операторы стирания VAC, SAC и CLR ALL служат для обнуления всех переменных (VAC), стирания ячеек памяти при статистических расчетах (SAC) и общего стирания всех программ (CLR ALL). Операторы VAC и SAC могут вводиться в программу, оператор CLR ALL — служебный (выполняется в режиме записи программы MODE 1). Оператор кодирования программ PASS (код) служит для присвоения программам специального кода (до 8 знаков) в режиме ввода программ — MODE I. He зная кода, невозможно вывести листинг нпограммы или стереть программу оператором CLR (стирание возможно командой CLR ALL)., Для вывода листинга код надо указать в кавычках после оператора LIST n (п — номер строки) или LIST. Таким образом, оператор обеспечивает защиту программы пользователя. 29 Операторы GSB Фп и GOTO фп служат для обращения к программной области Рп (напомним, что этих областей 10 с п от 0 до 9). Оператор GSB Фп применяется, если программная область Рп выполняет функции подпрограммы. При этом она должна завершаться оператором RET (сокращение от RETURN). Оператор GOTO фп обеспечивает вход в программную область Рп без автоматического возврата из нее. Операторы косвенной адресации. Операторы GSB a, GSB фа, GOTO а и GOTO Фа обеспечивают обращение к подпрограмме или безусловные переходы с косвенной адресацией — адрес указывается целой частью арифметического выражения или значения переменной а. Оператор DEFM п служит для задания массива из 10 (я+1) ячеек памяти. Число п задается от 0 до 19. При этом число шагов программы сокращается с 1 680 до 80, т. е. увеличение п на 1 сокращает программу на 80 шагов. Оператор CSR в составе оператора PRT (сокращение от PRINT) служит для смещения начала индикации на позицию, п (п = = 0-М9). Он аналогичен оператору TAB в других версиях бейсика. Задание формата печати (индикации) обеспечивают операторы вида PRT # Ф.ф ф или-PRT ф ф.ф ф \. Каждый символ Ф до и после десятичной точки задает соответственно печать или индикацию одной цифры результата. Если последний не умещается в формат, то на печать или индикацию выводятся знаки ф. Символ f задает переход к индикации чисел в экспоненциальной форме (см. примеры ниже): К перспективным версиям языка бейсик принадлежит и бейсик-80 — алгоритмический диалоговый язык высокого уровня для работы с новыми разработками отечественных персональных микроЭВМ и микропроцессорных систем [26]. В программы на языке бейсик-80 могут включаться подпрограммы, записанные на других языках: фортране, ПЛ/М-80, ассемблере. Бейсик-80 обеспечивает операции с целыми числами и числами с плавающей запятой с обычной и двойной точностью. Возможно представление чисел и в шестнадцатеричной форме. Бейсик-80 имеет мощные средства для эффективного редактирования программ и работы с внешним периферийным оборудованием. Так, при работе с дисковыми накопителями бейсик-80 позволяет не только записывать и считывать информацию, но и читать и стирать оглавления файлов, создавать, переименовывать и изменять атрибуты без обращения к операционной системе. Бейсик-80 обеспечивает и работу с символьными (строчными) переменными. Алфавит бейсик-80 соответствует общепринятому (см. § 2.1). В языке бейсик-80 различают директивы, операторы и функции. Директивы (табл. 2.8) — команды, выполняемые непосредственно после их ввода с пульта. Они управляют программами или файлами. Большинство директив может использоваться в операторах программ. Однако следует помнить, что многие из них останавливают выполнение программы, обнуляют значения переменных или делают их неопределенными. Операторы, (табл. 2.9) выполняются по мере того, как они встречаются в программе. Индикация X = Индикация Y= Оператор 0,123456789 12,3456789 0 0.12 0.123 1.235Е — # 12.345 1.125Е01 PRT #; X; Y PRT #.##; X; Y PRT01 ##.###; X; Y PRT- #.### f; X; Y ###
Общее число знаков Ф после оператора PRT может быть до 10 включительно. Операторы SET N, SET En и SET Fn задают формы представления чисел: SET N —. стандартную форму с 10-ю знаками мантиссы, SET En — экспоненциальную форму с п знаками мантиссы. Оператором SET Fn задается форма чисел с фиксированной запятой и п знаками после нее. Оператор SET 5 обеспечивает округление последнего знака результата, а оператор SET 0 — сброс округления. В последнем случае происходит усечение результата. Оператор задания паузы WAIT n обеспечивает по оператору PRINT паузу в вычислениях с выдачей результата на
время п -0,05 с, причем п может задаваться от 0 до 1 000. Смысл остальных операторов расширенной версии бейсика микроЭВМ FX-702P очевиден из приведенных в табл. 2.7.
пояснений,
30
Они составляют большинство рабочих предписаний (команд) программ. Функции (табл. 2.10) служат для образования арифметических и логических выражений совместно с директивами и операторами. Функции подразделяются на арифметические и строчные (для работы с символьными переменными). В бейсике-80 21 директива, 39 операторов и 48 функций. Все они образуют инструкции данного языка. Представление данных в бейсике-80. Бейсик-80 оперирует с арифметическими данными в виде констант и переменных. Константы с обычной точностью определяются суффиксом !, который ставится после арифметического значения, или с помощью буквы Е, обозначающей представление константы в экспоненциальной форме с плавающей точкой (запятой). В последнем случае числа лежат в диапазоне от +1.2Е —38 до + 3.4Е + 38. Таблица 2.1 Директивы языка бейсик-80
Директив
Описание
Примеры
а Изменить атрибуты файла Задать автоматическую нумерацию строк с заданным приращением и номером начальной строки CLEAR Установить дополнительную память для строк (в байтах) CONT Продолжить выполнение программы DELETE Уничтожить строку (или строки) в программе DIR Прочесть оглавление файлов на диске EDIT Изменить указанный оператор программы EXIT Вернуть управление операционной системе KILL Уничтожить файл на диске LIST Вывести строку (или строки) программы LOAD Загрузить указанный файл с диска MERGE Соединить указанный программный файл с текущей программой NEW Уничтожить текущую программу и очистить переменные PRUN Выполнить программу, хранящуюся в ПЗУ RENAM Изменить имя файла ATTRIB AUTO
ATTRIB :"F1:STAT,W" AUTO 25, 500
CLEAR 2000
CONT DELETE 700—875
DIR 1 EDIT 170 EXIT
KILL ":F1:STAT" LIST 300—400 LOAD ":F1:DATE S" MERGE ":F1 : DATES"
NEW
PRUN 4 E00H
RENAME ":F1:SOUP" TO ":F1:NUTS"
E RENUM RUN
SAVE TRON TROF WIDTH
Изменить номера строк программы Начать выполнение программы Записать программу или файл на диск Включить трассировку Выключить трассировку Изменить ширину строки
RENUM RUN SAVE ":F1:INVEN" TRON TROF WIDTH 80
Таблица 2.9 Операторы языка бейсик-80
Оператор
Описание
Примеры
CLOSE
Закрыть один или более файлов
CLOSE 3
DATA
DEF -
DEFDBL
Задать значения, которые могут быть считаны оператором READ Определить написанную пользователем функцию Определить переменные, имена которых начинаются с указанной литеры как
DATA 9, 0, ON
DEF FNRT (Rl, R2) =
R1*R2/(R1 + R2) DEFDBL R — Z
пе-
DEFINT
DEFSNG
DEFSTR
DEFUSR DIM
END ERROR
ременные с плавающей точкой с двойной точностью Определить переменные, имена которых начинаются с указанной литеры как целочисленные переменные Определить переменные, имена которых начинаются с указанной литеры как переменные с плавающей точкой с обычной точностью Определить переменные, имена которых начинаются с указанной литеры как строчные переменные Ввести подпрограммы на другом языке Зарезервировать память для переменных массива (массивов) Закончить программу Имитировать ошибки с данным номером
31 Таблица 2.9 (продолжение) Оператор Описание FIELD
FOR...TO...NEXT...
Зарезервировать память буфера файла прямого допуска Создать цикл ...
DEFINT I — N
DEFSNG В — Н, X
DEFSTR К — О
DEFUSR — 4E00H DIM A(25,10,30)
END
ERROR 12
Примеры для
FIELD #3,20, ASAD
FOR STEP. 5
1 = 1
ТО
5
STEP GET GOSUB GOTO
Прочесть данные на диске файла Выполнить подпрограмму Выполнить безусловный переход по
NEXT I GET #2,4 GOSUB 500 GOTO 1000
занному номеру строки Выполнить оператор, если указанное
IF A> В THEN 250
укаIF...THEN...ELSE вы-
INPUT-
LET LINE INPUT
LSET ON ERROR
ON GOTO ON GOSUB
OPEN
OPTION BASE
ражение истинно; если ложно — ELSE PRINT "END" выполнить второй оператор 1. Ввести данные с терминала INPUT А, В, С 2. Прочесть данные из INPUT- #1, А а, в а последовательного файла Присвоить значение переменной LET X=100 Ввести целую строку из LINE INPUT А П последовательного файла Выровнять указанные строки по LSET A a =B a левому краю ON ERROR GOTO 900 Перейти к строке с заданным номером. если появилась ошибка Перейти к строке с номером, заданным ON X GOTO 10, 50, 80 значением выражения X Перейти к подпрограмме, номер ON X GOSUB 100, 200, первой 500 строки которой задается значением выражения X Создать файлы последовательного OPEN "R", #3, или прямого доступа "F1:PERSON" Присвоить начальные значения OPTION BASE 0
OUT
POKE PRINT
PRINT-USING
PUT
RANDOMIZE
READ
REM
RESTORE
RESUME
RETURN
RSET
STOP SWAP
WAIT
LEN
элементам всех массивов (0 или 1) Записать указанное целое число в устройство ввода-вывода Записать байт в указанное место памяти 1. Вывести значения переменных на терминал 2. Завести данные в последовательный файл на диске Представить текст в соответствии с данным форматом Занести данные в файл прямого доступа на диске Инициализировать генератор случайных чисел Присвоить значения переменным программы из списка оператора DATA Напечатать комментарий в тексте программы Установить заново указатель для чтения данных из оператора DATA Возобновить выполнение программы после обнаружения ошибки Возвратить управление оператору, следующему за последним GOSUB Выровнять указанные строки по правому краю Остановить выполнение программы Провести обмен значениями для двух переменных одинакового типа Остановить выполнение программы до тех пор, пока при сравнении не получится значение «Истинно» Определить число символов в указанной строке
OUT 00F0, 12
POKE 0A077, 12 PRINT А, В, С
PRINT #4, А П, В П
PRINT USING "П П ##,##; 17.45; 24.67
PUT #3; AD, в RANDOMIZE
READ A, Kl, L, Z
10 REM START
RESTORE
RESUME
RETURN
RSET L П =МКП
STOP SWAP Al П, В2П
WAIT 1, 04H, 0AH
LEN (ХП)
32 Таблица 2.9 (продолжение) Оператор LOC
LOF
LOG MIDD
МК1П
Описание Определить текущий номер записи в файле прямого доступа X или количество прочитанных или записанных секторов в последовательном файле X Вычислить число записей в файле прямого доступа или число секторов с данными в последовательном файле X Вычислить натуральный логарифм от X Указать J литер, начиная с 1-й, в строке АП Преобразовать 2-байтную строку в
п, с a
Примеры LOC (#Х)
LOF(X)
LOG(X) MIDD (АП, I, J)
МК1П (AD)
целое значение Преобразовать 4-байтную строку в значение с плавающей точкой с обычной точностью Преобразовать 8-байтную строку AQ в значение с плавающей точкой с двойной точностью Преобразовать систему восьмеричных
MKSCS
MKDCS
оста
POS
RIGHT RND
SGN SIN
SPACED SPC SQR
STRD
STRINGU TAB TAN USR
VAL VARPTR
ОСТП (X)
языка бейсик-80
Функция
Описание
Примеры
ABS
Выдать абсолютное значение X
ABS(X)
ASC ATN
CDBL
CHRD CINT COS
Выдать код КОИ8 для первой литеры указанной строки Вычислить арктангенс (в радианах) X Вывести значение X с удвоенной точностью с плавающей запятой Вывести литеру, соответствующую коду КОИ8 Округлить X до целого числа Вычислить косинус (в радианах) X
2 В. П. Дьяконов 33 Та Ф у н к i и CSNG CVD
CVI CVS DSKF EOFF-RI. KR R EX P FI X FR U
MKDQ (Ad)
цифр в эквивалент десятичного аргумента Указать отдельный байт памяти PEEK(X) по адресу X Указать позицию курсора после POS (DUMMY последARGUMENT) него PRINT Вывести I % правых литер в RIGHT (ХП, I %) строке RND Выдать случайное число обычной точности со значением между 0 и I Указать знак X SGN(X) Вычислить синус SIN(X) Вывести 1% пробелов SPACED (X) Указать строку Х% пробелов SPC(X%) Вычислить корень квадратный из SQR(X) X Преобразовать строку десятичных STRU (X) цифр в десятичный аргумент X STRINQO (Y%, AD) Вывести первую литеру строки AQ , повторенную Y% раз TAB(X) Начать вывод с позиции X дисплея или принтера TAN(X) Вычислить тангенс X AX = USR 12(A1, A2) Обратиться к подпрограмме пользователя от 0 до 24 VAL (XU) Преобразовать числовое значение ХП аргумента VARPTR(X) Указать адрес памяти X
РЕЕК
Таблица 2.10 Функции
MKsa (Ad)
ASC(AD) ATN(X) CDBL(X)
CHRD (X) CINT-(X) COS(X)
H HXU IN P j
IN STRL IN T
Ul-TD Пр и
M rjJh
ло
114 )
1, Ко
/,.;// \
к< ТО ЧНО11
1 ,10 i
D бу квой . Диапа зо ,
Описание Нывссш значение X с обычной точностью с плавающей
ЮЧКОЙ
Преобразовать 8-символьную i-гроку в число с двойной ТОЧНОС1 ЬК)
i !реобразовагь 2 спмиольнч ю строку в целое числи Преобразовать (символьную строку в число с обычной ючноетью Указать число свободных 128-байтных блоков на указанном диске Выдать указание (да - I, нет 0) о том, достигну! ли конец файла при чтении последовательного файла данных Указать номер строки, в которой произошла последняя ошибка Указать код последней ошибки Вычислить значение tjV Вычислить усеченное целое значение X Определить число байт, оставшихся в памяти, при за-.ьиши фиктивного аргумента \ плп XI} Представить целочисленный аргумент Х% (от —32768 до 32767) в 16ричном виде Вывести значение байта из устройства ввода вывода указанного выражением в скобках Указать позицию, заданную XL1, в строке YQ Вычислить наибольшее целое значение, меньшее или равное значению (X) BuBeci;i\ литер с i роки АС начиная е ее левого конца блица 2. И) (продолжение) Примеры
CSNG(X) CVD(X#) cvi(X%) <:vs(X!) DSKF(I I
L-RI. HRR EXP(X) FlX(Xj FRE(X) lll-XU (\ %) INP(X) INSTRLi (XU. Vu ) lYI(X) J l--f-"I I \O, \, isiiDta констант: - 1,414! (чнг Гу2Ш- 12 (чио;ю 5,26 it»
l? ). ; V iLltiBtlOiiuH! ТОЧКОЙ С iliiOilHOU !|KVU. 1ЯЮТСЯ
С)фф|1КСОМ
-#
ИЛИ
значений чисел при лом расширяется от 4 2.2Е--308 до +I.7E-J-308. Примеры ввода констант с двойной точностью: --1.23456789121) 15 (число —1,2345678912-105): -12,3# (число -12,3). Арчфличиччекие переменные бывают трех типов: целые, с плавающей точкой с обычной точностью и с двойной точностью. Они представляют значения чисел, которые могут изменяться в процессе выполнения программы. Арифметические переменные языка бейсик-8.0 могут изображаться одной или двумя буквами, за которыми может следовать определяющий их тип суффикс. Первый элемент обозначения церемонных обязательно должен быть буквой, второй любым алфавитно-цифровым знаком. Если имя переменной содержит более чем две литеры (кроме суффикса, определяющего тип), остальные литеры имени переменной игнорируются. До присвоения переменным численного значения оно задается равным нулю. Директивы NEW, RUN, CLEAR, LOAD и MERGE обнуляют все переменные. С помощью операторов DEEINT, DL^FSNG или DEEDBI. можно определить ряд имен для обозначения арифметических переменных указанных типов. Группы переменных, которые начинаются с определенных букв, могут быть заданы с помощью этих операторов в 34
ч.лед) юшем виде: DEEX.X.X М |N|, где N любая буква or А до /., V\ иобаи буква от N до Z. При этом все они задаются как переменные одного типа. По умолчанию все переменные имеют представление с обычной точностью. Если какие-то переменные должны быть иного типа, их следует определить в начале программы. Определи гели имеют вид знаков: % для целочисленных переменных, ! для переменных с обычной точностью и -# для переменных с двойной точностью. Строчные или символьные константы представляют собой группу знаков, заключенных в кавычки, например: "NEWTON METHOD" или "Р1=3.14Г59". Внутри этих переменных нельзя использовать кавычки. Число знаков (длина строки) может доходить до 255. Строчные переменные переменные, принимающие но ходу выполнения программы символьные значения. Имя строчной переменной задается одним или двумя знаками: первый обязательно буква, второй любой. После них следует CHMBO.IVJ, определяющий символьную переменную. Например, переменная А 1 О NEWTON .METHOD имеет имя. А1П и значение символа NEWTON METHOD. Преобразование данных из одного типа в другой в бейсике 80 обеспечивается с по-
мощью ряда специальных функций (см. табл. 2.10). Массивы (одномерные и двумерные) в бейсике-80 задаются, как и в других версиях языка бейсик, именем переменной и номерами строк и столбцов в скобках: например, А2(3,4) задает переменную массива А2 с индексами 3 и 4. Задание памяти под массив обеспечивается оператором DIM. В строчных переменных массивов необходимо резервировать и число знаков в строке. Например, оператор DIM А )с(( 10,20,25) резервирует память под строчную переменную из массива АН. Приоритет выполнения операций в бейсике-80. Функция CSNCJ(X) вычисляет выражение X с обычной точностью (до 7 десятичных позиций). При м е р. 10-А# — 1.DO/3.DO 20 PRINT CSNG(A#)/2, A#/2 RUN .1666667 .166666666666667 Функции CV1, CVS, CVD преобразуют строки в числа: CVI - 2-еимвольную строку в целое число, CVS 4символьиую строку в число с обычной точностью и CVD— 8-символьную строку в число с двойной точностью. Они используются для восстановления числовых значений из поля буфера Операция 1. Выражение и скобках 2. Возведение в степень 3. Отрицание (обозначается знаком —) 4. Умножение (*) и деление (/) 5. Целочисленное деление (знак \J с преобразованием делимого, делителя 6. Модуль числа 7. Сложение и вычитание 8. Операции отношения I! р и м ер (А-Ь В) А,-. В
и
результата
в
целые
числа
-А А*В или А/В А\В A MOD Af В или А.—В А> В и др.
Самый низкий приоритет у логических операций. Они выполняются в порядке их наименования: НЕ, И, ИЛИ, исключающее ИЛИ, логическая импликация и логическая эквивалентность. Арифметические и логические выражения в бейсике-80 строятся по правилам, типичным для других версий (они описаны выше). Специальные функции языка бейсик-80 такие функции, которые характерны для данной версии бейсика и имеют те или иные отличия от функций бейсика, описанных ранее. Арифметическая функция CDBL(X) изменяет тип выражения X на представление с двойной точностью с плавающей точкой. В этом формате результат выдается с точностью до 16 десятичных цифр. Пример. 10 А# = 1/3 20 B#=CDBL(l/3) 30 PRINT A#, B# 40 END .333333 .333333333333333 Строчная функция CHRCi (Выражение) приводит выражение к целому числу в интервале от 0 до 255. Арифметическая функция CINT(X) округляет выражение (X) до целого значения. Пример. 10 INPUT А, В, С 20 PRINT (CINT(A + B + C)/3) 30 END RUN ? 45, 24, 77 49 файла прямого доступа и являются обратными функциями. MK.1G, MK..SQ и MKDG Функция 1NP (Выражение) вводит значение байта со входного порта, номер которого указан целочисленным выражением (от 0 До 255). Функция INPUIQ (Выражение; Номер файла) читает заданное количество символов из указанного номером файла. Пример. В программе 10 OPEN "1" #2, ":С1" 20 PRINT INPUTH (10,2) 30 CLOSE #2 40 END RUN 123456789 (ВК) 123456789
строка 20 печатает первые 10 символов файла #2, а оператор CLOSE закрывает файл. Функция INSTR ищет первое вложение второй строки ВП в первой строке АП и определяет порядковый номер второй строки. Она формирует 0 при трех условиях: если [больше длины АП, если ВП не может быть найдена и если АП не содержит символа. Вид записи функции: INSTR ([1,] Строчное выражение АП, Строчное выражение ВП). Пример. 10 AG="RAM)ON NUMBER SUBROUTINE" 20 BG="R" 30 PRINT INSTR (АП, ВП) 40 PRINT INSTR (2, АП, ВП) 50 END RUN 1 13 35
Функция INT(X) отыскивает наибольшее целое значение, меньшее или равное указанному выражению или числу X. Например, если B = INT(15,021), то распечатка В дает значение 15. Строчная функция LEFTD (Строчная переменная. Выражение) находит значение строки ХП и определяет I левых символов. Пример.
10 XG="WHITE, SMITH, JONES, BLACK, GREEN" 20 YD = I.F.FTa (ХП, 11) 30 PRINT YD RUN WHITE, SMITH Строчная функция LEN(Xd) подсчитывает количество символов строки XQ, включая непечатаемые символы и пробелы. Функция LOC в файле прямого доступа определяет текущий номер последней записанной или прочитанной записи. В последовательном файле функция LOC определяет число секторов, прочитанных или записанных со времени выполнения последнего оператора OPEN. Функция записывается в виде LOC (Номер файла) Пример. 10 OPEN "R", #3,:F1:RANDON 20 GET =#=3, 44 30 PRINT LOC(3) 40 END RUN 44 Функция LOF (Номер файла) вычисляет число записей в файле прямого доступа, а в файле последовательного доступа вычисляет число секторов с данными (128 байт на сектор) в файле. Функция MIDCS (XQ, I [, J]) проверяет строку ХН и выделяет ее правые символы, начиная с позиции, заданной значением I. Здесь I и J — целые числа от 0 до 255. Если указан аргумент J, определяется J символов, начиная с позиции I. Если I больше, чем LEN(Xd), то МШП формирует пустую строку. Если J больше числа символов в ХП справа от 1-й позиции или J не указано, функция МШП формирует остаток строки. Пример. 10Xn="JOHN J. JONES" 20 PRINT MIDD (ХП, 10, 3) 30 END RUN ONE Функция МК1П, MKSH и MKDH преобразовывают данные как числовые значения в 2-, 4- или 8-байтные строки соответственно. MKI П используется для преобразования целого значения, MK.SQ — для преобразования значения с плавающей запятой с обычной точностью и MKDH — для преобразования значения с плавающей запятой с двойной точностью. Функция ОСТ П (Выражение) определяет строку восьмеричных цифр, представляющую значение целого аргумента (выражения). Функция РЕЕК (Выражение) читает один байт памяти в указанном месте, а функция РОКЕ (см. далее) записывает один байт в указанное место памяти. Например: PRINT PEEK (0FABH) 200 где 200 — прочитанный байт из места 0FABH памяти. Функция POS (Целое число или Выражение) указывает позицию курсора после последнего оператора PRINT: В записи POS(I) аргумент I является фиктивным, самая левая позиция курсора соответствует 1 = 1. Функция RANDOMIZE запрашивает ввод нового случайного числа, которое является начальным для функции генерации случайных чисел с равномерным распределением RDN. Если функция RANDOMIZE не используется, то одна и та же последовательность случайных чисел будет повторяться каждый раз. Функция RANDOMIZE записывается в виде RANDOMIZE (Выражение) причем начальное случайное число задается выражением (либо константой или переменной). Функция RIGHTD (Строка, Целое I) определяет I правых символов строки ХП. Если 1 = 0, выдается пустая строка, а если I превышает длину строки ХП, то выдается вся строка. Пример. 10 AH="JOHN J. JONES" 20 ХП= RIGHTS (АП, 8) 30. PRINT ХП 40 RUN J. JONES Функция SPACEH (Целочисленное выражение) формирует в строке пустой интервал, состоящий из пробелов, число которых задается значением целочисленного выражения. Функция SPS (Целое число) совместно с оператором PRINT также формирует пустой интервал из N пробелов (N — целое число). Функция STRINGn (Целое, Целое) определяет строку, в которой заданный символ повторяется указанное число раз. В записи STRINGD (Целое, Строчное выражение) заданное число раз повторяется первый символ строчного выражения. Функция STRH (Выражение) формирует строку десятичных знаков, которая представляет значение целочисленного выражения. Пример. 10 FOR 1=0 ТО 9 20 АП =АП +MIDH (STRH (I), 2) 30 NEXT I 40 PRINT АП RUN 0123456789 36
Функция USRN задает обращения к определенным пользователем подпрограммам, записанным на языке ассемблера, фортран-80 или ПЛ/М-80. Оператор DEF USRN определяет начальный адрес соответствующей подпрограммы USRN. Аргумент N может быть любым целым от 0 до 24; если он не указан, полагается N = 0. Символ типа обозначает тип результата. Если обозначение типа отсутствует, результат определяется как целое число в регистрах Н и L микропроцессора. Функция VAL (Строка) определяет численное значение строки. Пример. 10 INPUT AD 20 A1 = VAL (АП)*52
30 PRINT Al RUN ? 4 (т. е. АР =4) 208 (т. е. имеем 4*52) Специальные директивы и операторы.
Под специальными директивами и операторами языка бейсик-80 подразумеваются специфические именно для него директивы и операторы. Ниже они даны в алфавитном порядке. Директива ATTR1B изменяет атрибуты файлов на дисках или защищает любой файл от записи, стирания или изменения имени. Защита файла выполняется директивой в виде ATTRIB:F Номер дисковода, "Имя файла", "W1" Запись, стирание и изменение ранее защищенного файла обеспечивается директивой 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 HC1, НС2 уничтожает строки с номерами от НС1 до НС2. Директива DIR воспроизводит имена, число блоков и длины (в байтах) файлов, сохраняемых на указанном после нее диске. Оператор END останавливает выполнение программы и закрывает все файлы. Переменные при этом сохраняют свои значения. Оператор STOP действует как END, но файлы не закрываются и при его исполнении появляется сообщение BREAK IN НС (т. е. останов в строке НС). Оператор END рекомендуется ставить в конце программы, хотя это не обязательно. Оператор ERROR "Выражение" имитирует происхождение ошибки. Если ERROR выполняется с номером, который не соответствует сообщению об ошибке, будет напечатано сообщение UNPRINTABLE ERROR Оператор FIELD # «Номер файла» используется для назначения памяти в одном из шести 128-байтных буферов файлов прямого доступа. Для чтения определенной записи из дискового файла в 128-байтный буфер служит оператор GET[#] Номер файла [, Номер записи] Оператор условных переходов в бейсике-80 может иметь вид IF Выражение THEN Инструкция ELSE Инструкция Например, оператор 50 IF X = 0 THEN A = 5 ELSE A = 20 означает, что если Х = 0, то А = 5, иначе А = 20. Оператор KILL Строчное выражение служит для исключения из дисковой памяти программы. Он также уничтожает заголовок программы в оглавлении. Оператор INPUT помимо обычного применения (задания численных значений переменной или переменным списка) используется в составном операторе LINE INPUT. Последний читает целую строку данных и присваивает ее указанной строчной переменной в качестве значения. Данные могут быть прочитаны из файла на диске или введены 37
с пульта. В последнем случае оператор LINE INPUT задается в форме LINE INPUT [Строчное выражение;) Строчная переменная; При этом оператор обеспечивает печать строчного выражения в качестве напоминания и ждет указания строчной переменной. При вводе данных с файла оператор записывается в виде LINE INPUT Ф Номер файла, Строчная переменная Директива MERGE читает программу с диска и соединяет ее с текущей программой без изменения строк каждой из программ. Если программы имеют строки с одинаковыми номерами, то введенные с диска строки замещают строки текущей программы. Директива MERGE стирает все переменные. Она записывается в виде MERGE Строчное выражение Директива NEW стирает всю текущую программу и обнуляет все переменные. Оператор ON ERROR GOTO НС передает управление на строку с номером НС, если возникает ошибка. Оператор ON Выражение GOTO HC1, НС2, ... передает управление строкам НС1, НС2 и т. д. по результатам вычисления выражения (либо значения переменной). Оператор ON Выражение GOSUB HC1, НС2, ... обеспечивает обращение к подпрограммам, начинающимся со строк НС1, НС2 и т. д., по результатам вычисления
выражения. Таким образом, операторы ON GOTO и ON GOSUB осуществляют косвенную адресацию. Оператор OPEN Тип, \Ф\ Номер файла, Имя файла делает файл операционной системы доступным для программы. Тип файла указывается знаками: R - для файла с прямым доступом, 1 — для последовательного вводного файла и 0 — для последовательного выводного файла. Номер файла — целое число от О до 6, перед которым ставится знак ф. Одновременно можно открыть только 6 файлов. Директива OPTION BASE N (где N = 0 или 1) задает индексирование массивов с единицы (N=1) или с 0 (N = 0). Оператор OUT Номер порта, Выражение записывает" значение выражения в виде целого числа от 0 до 255 в указанный номер порта. Оператор РОКЕ Ячейка, Выражение помещает значение выражения (округленное до целого числа) в указанную ячейку памяти. До использования этого оператора нужно использовать директиву CLEAR, чтобы зарезервировать свободную память. Оператор PRINT выводит на печать значения выражений или текст. Литерные строки 38 текста заключаются в кавычки. Оператор PRINT USING [Ф Номер файла,) Строка формата; Выражение, ... обеспечивает вывод при специальных форматах. Строка формата определяет пробелы и дополнительные символы (*П ) при печатании числовых полей или определяет части данной строки при печатании строчных полей. Необязательный номер файла определяет последовательный дисковый файл. Для оператора PRINT USING со строчными полями существуют два формата: «!» определяет, что печатается первый символ каждой указанной строки; N пробелов определяют, что печатаются первые 2 + N символов (если используется обратная косая черта без пробелов, то печатаются 2 символа). Если поле содержит больше символов, чем принимаемая подстрока, лишние символы отбрасываются; если символов меньше — вставляются пробелы, чтобы заполнить поле. Пример. 10 ХП =«ONE» 20 YQ=«TVVO» 30 PRINT USING «!»: ХП- VQ 40 PRINT USING 5: ХП: YQ RUN ОТ ONE TWO Число цифр, выводимых на печать оператором PRINT USING, указывается символами ф, между которыми может стоять знак «,» или «.». Число знаков Ф до знака «,» или «.» задает вывод целой части, а после этих знаков — дробной части. При необходимости числа округляются, например: PRINT USING «##,##»; 41.287 41.29 PRINT USING «##.##»; 71/100 0.71 Если число, которое выводится на печать, мало, чтобы заполнить все указанны* цифры слева от десятичной точки, вставляются пробелы, заполняющие все поле. До 5 цифр можно напечатать для целого числа, до 7 — для числа с плавающей точкой с обычной точностью и до 15 — для числа с плавающей точкой с двойной точностью. Знак + может использоваться в начале или в конце ноля символов формата. Он печатается в соответствующем месте. Знак — используется справа поля символов формата, чтобы вызвать печать замыкающего знака «минус», если число отрицательное (если число положительное, печатается пробел). Если ни +, ни — не включены в формат, отрицательное число печатается со знаком —. Пример ы. 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 Символы П П добавляют один знак D слева от формируемого числа: PRINT USING «П ПфФф.ФФ»; —48.28; 364.90; — D 48.28 U 364.90 Знаки П И определяют пространство для двух дополнительных символом, но добавленный символ Q использует одну позицию. Символы f f f | задают формат числа в экспоненциальной форме. Стрелки помещаются после цифровых символов формата. Символ % выдается перед числом, если оно не входит в формат: PRINT USING «фф.фф»; 40.48; 99 997 40^48 %99997 Директива PRUN Адрес обеспечивает выполнение программы, хранящейся в ППЗУ. Адрес программы — целое число. Оператор PUT Номер файла, [Номер записи]
передает данные из определенного файла в указанную запись диска. Оператор REM используется для ввода в программу программных комментариев, которые выводятся на печать только при выводе листинга программы. Комментарии записываются непосредственно после оператора REM, например: 10 REM ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ СИМПСОНА Директива RENAME "Старое "Новое имя файла" имя файла" ТО изменяет имя указанного файла на новое с изменением ссылки в оглавлении. Директива RENUM [Новый номер] [, Старый номер] [, Приращение] переупорядочивает номера строк в программе независимо от того, появляются ли они в начале строки или являются аргументом в операторе GOTO. В директиве можно указать три необязательных аргумента: новый номер первой перенумерованной строки, старый номер перенумерованной строки и приращение строк. Если аргументы не указаны, первой строке присваивается номер 10 и приращение принимает значение 10. Пример. 20 INPUT A 40 PRINT «NEW»; A 15 RANDOMIZE 5 PRINT CHRD (12) 52 A1=A*RND 58 A2 = INT(A) RENUM LIST 10 PRINT CHRQ (12) 20 RANDOMIZE 30 INPUT A 40 PRINT «NEW»; A 50 A1=A*RND 60 A2 = INT(A1) Оператор RESUME возобновляет выполнение, программы после управляемой ошибки, которая обнаруживается. Выполнение программы начинается с указанной строки. Если номер строки не указан, выполнение программы происходит с оператора, в котором была обнаружена ошибка. Оператор RESUME [Номер строки] NEXT обеспечивает выполнение оператора, следующего за оператором с ошибкой. Директива RUN обеспечивает выполнение программы, начиная с наименьшего номера строки. Если за оператором RUN следует строчная переменная, обеспечивается поиск файла с заданным ею именем, загрузка его в память и выполнение программы, начиная с наименьшего номера строки. Ввод символа fC, в том числе вместо данных по оператору INPUT, останавливает выполнение программы и вызывает печать сообщения. BREAK IN НС (где НС — номер строки, на которой прервано выполнение программы). Директива SAVE Строчное выражение [А] заносит текущую программу на диск с указаннымстрочным выражением именем файла. Если файл с таким именем уже есть на диске, он будет заменен новым. Оператор SWAP Переменная Г," Переменная 2 обеспечивает обмен значениями двух переменных: переменной 1 и переменной 2. Директивы TRON и TROF соответственно включают и выключают трассировку программы, т. е. обеспечивает пооператорное выполнение программы. Директива WAIT Номер порта, Байт маски, Байт сравнения предписывает принять поступившие с указанного порта байты. Эти байты проверяются по байту маски, который является целым выражением (от 0 до 255). Если байт сравнения не указан, он задается равным 0. Директива WAIT выполняет операцию исключающее ИЛИ над состоянием порта и байтом сравнения, а результат и байт маски подтверждаются операцией И. Выполнение продол-/касчся до тех пор, пока не будет получена ненулевая величина. 39
Директива WIDTH Выражение задает ширину печатаемых на консоли строк к заданной выражением величине (от 15 до 255). Если выражение не указано, ширина строк задается с 72 знаками. Особенности ввода и редактирования программ на бейсике-80. Бейсик-80 имеет ряд дополнительных возможностей для ввода и редактирования программ. Так, используя директиву AUTO, можно автоматически нумеровать строки, начиная с заданного номера с заданным приращением. После ввода директивы AUTO бейсик-80 формирует номер строки и ждет ввода операторов. Если ввод их закончен символом возврата каретки ВК, интерпретатор бейсик-80 формирует номер следующей строки и т. д. Ширина поля печати равна 72 символам, но может изменяться директивой WIDHT: Бейсик-80 обеспечивает редактирование программ: стирание и замену текстов, отдельных строк и предложений, коррекцию символов и предложений, коррекцию символов в операторах, объединение строк и др. Он имеет также возможности для работы с дисковым накопителем. Бейсик-80 включает в себя два типа операций ввода-вывода файлов на диске: последовательный и с прямым доступом. Последовательный позволяет читать и писать файл от начала до конца; а с прямым доступом — указывать, где в файле выполняется чтение и запись. Операторы работы с файлами были описаны выше. Более подробные сведения о редактировании программ и работе с периферийным оборудованием можно получить из [26] и технической документации на вычислительные средства, использующие версию бейсик-80. Данные о некоторых других версиях бей-сика. В некоторых версиях бейсика, например, бейсике-плюс для серии отечественных мини-ЭВМ (включая ЭВМ СМ-4) и бейсик-ЗА-TDM для ЭВМ Электроника-ДЗ-28 имеется ряд дополнительных операторов. Прежде всего, к ним относятся операторы выполнения матричных операций. Оператор чтения элементов матриц МАТ READ А, В, С, ... обеспечивает чтение элементов матриц А, В, С, ... последовательно по строкам. Массивы элементов матриц предварительно задаются операторами DIM и DATA: 10 DIM й<3>3> 20 ВАТА Ь 2, 3> 4/5> 6> 7> 8, 9 38 MAT READ A
Оператор ввода элемента матрицы с пульта MAT INPUT А обеспечивает ввод элементов матрицы А построчно с
клавишного пульта. Оператор вывода матрицы MAT PRINT А, В, С, ... обеспечивает вывод массива элементов матриц А, В, С, ... построчно и последовательно, т. е. вначале выводятся элементы матрицы А, затем В и т. д. Оператор задания нулевой матрицы MAT A = ZER формирует матрицу А, у которой все элементы нулевые. 40
Оператор задания матрицы с единичными элементами MAT A = CON создает матрицу А, у которой все элементы имеют значения 1. Оператор задания единичных элементов akk MAT A=IDM создает матрицу А, у которой элементы а** = 1, а остальные 0. Если матрица А квадратная, то этот оператор создает единичную матрицу. Оператор транспонирования МАТ В = = TRN(A) обеспечивает транспонирование матрицы А, т. е. получение матрицы В, у которой элементы 6,7 = 0,,. Матрицы А и В не должны совпадать, а их размерности должны соответствовать возможности транспонирования. В противном случае ПЭВМ выдает указание об ошибке. Оператор обращения матриц МАТ С = = INV (А, В) или MAT B = INV(A). Форма записи зависит от версии бейсика. В первом виде исходной является квадратная матрица С и должны быть зарезервированы два служебных массива А и В. После выполнения оператора MAT C = INV(A, В) обращенная матрица помещается на место исходной, а элементу А(0) присваивается значение определителя D исходной матрицы С. Во втором виде оператора исходной является матрица А и формируется матрица В = А~. Определитель при этом получается как значение специальной переменной DET, которое может присваиваться обычной переменной (например, D=DET). Оператор умножения матриц МАТ С = = А*В формирует матрицу С, получаемую умножением матриц А и В. Матрицы А, В и С не должны совпадать. Особенности выбора размерности матриц при умножении описаны в § 3.4. Операторы арифметических действий с выражениями (а) используются в виде = А+(а) МАТВ=А+(а) МАТ В = А/(а) МАТ В = А* (а) В результате их выполнения получается матрица В, все элементы которой — преобразованные элементы матрицы А. Арифметическое выражение (а) должно обязательно заключаться в скобки, матрицы А и В должны быть одинаковой размерности, допустимо совпадение имен матриц. Например, возможна запись МАТ С = С+(а) и т. д. Матричный оператор присваивания МАТ В = А создает матрицу В, элементы которой Ьц = ац. Размерности массивов для матриц А и В должны быть одинаковыми. Операторы арифметических операций над матрицами используются в виде МАТ С = А + В (сложение матриц) МАТ С = А — В (вычитание матриц) МАТ С = А/В (деление матриц) МАТ С = А**В (элементы а,, возводятся в степень 1>и) Массивы матриц А, В и С должны иметь одинаковые размерности. Допускается совпадение имен массивов. Оператор умножения матрицы на константу (для версии бейсик-плюс) имеет вид МАТ В = А*К, где К — константа. Его выполнение создает матрицу В, все элементы которой Ьц — ац К. Особенности применения матричных операторов. Применение матричных операторов существенно упрощает решение задач, связанных с использованием матриц (например, решение систем линейных уравнений). Поскольку при этом необходимые арифметические операции проводятся на машинном языке, существенно сокращается время вычислений. Перед использованием матричных операторов должны быть заданы и определены (с помощью оператора DIM) массивы под исходную вычисляемую и служебные матрицы. Массивы могут иметь любые имена (а не только А, В, С, как в приведенных условных формах записи операторов). Условия совпадения имен оговорены выше. Операторы обращения по меткам. В некоторые версии бейсика для ускорения вычислений вводятся операторы ON ф Метка и GOSUB# Метка. Метка может быть числом (0-i-9) или любой латинской буквой (от А до Z). При выполнении этих операторов происходит безусловный переход (оператор ON) или обращение к подпрограмме (оператор GOSUB), которые следуют за строкой с меткой в виде REM# Метка. Оператор-переключатель строк имеет вид ON (a) HC1, НС2, НСЗ, ... где а — арифметическое выражение, указывающее порядок безусловных переходов к строкам с номерами НС1, НС2, НСЗ и т. д. Если а принимает значение 1, происходит переход к строке с номером НС1, если а принимает значение 2, переход идет к строке НС2, и т. д. (номера строк не совпадают со значениями а). Операторы ввода символьных последовательностей RED. Оператор присваивания REDL А = Символы присваивает переменной А символьное значение. Для такого присвоения при вводе символов с пульта используется оператор REDI А. Здесь А — любая переменная. Вывод символьной переменной, введенной операторами REDL и REDI, выполняется с помощью оператора PRINT DA, ПВ, ... Перед каждой символьной переменной из списка оператора PRINT должен стоять знакП. Вывод символьных переменных выполняется также операторами REDP . , или пробел REDP ; или / REDP Ф М [...] REDP А [(1[,К])] При пустом списке оператор REDP игнорируется, точка, запятая и пробел используются в качестве разделителей, знак ; обеспечивает пропуск одной позиции, знак / — перевод строки с возвратом каретки, #М—пропуск М позиций (где М — число), А — вывод строки, введенной операторами REDL и REDI. Широко распространенные операторы обработки символьных переменных L.EN и MID описаны в версии бейсика ПЭВМ FX-702P. Отметим, что обычно символьные переменные отождествляются с элементами одномерных и двумерных массивов, поэтому на их длину (число символов) накладываются определенные ограничения (они зависят от конкретной версии языка бейсик). В некоторых версиях бейсика имеются ограничения и на виды используемых символов (например, некоторые символы нельзя использовать в составе символьных переменных) . Все описанные выше директивы, операторы и функции присущи наиболее сложным версиям языка бейсик. В целом между отдельными версиями имеются существенные отличия, но они не затрагивают основные (характерные именно
для этого языка) tme-раторы и функции. Программы, описанные в данном справочнике, используют, по возможности, только такие операторы и функции. Пакет программ, в которых использованы операторы матричных функций, дан в § П5.12.
§ 2.3. Арифметические и алгебраические операции, работа в режиме калькулятора Арифметические и алгебраические операции микроЭВМ, программируемые на бей-сике, могут выполняться как по программе, так и в режиме калькулятора. В последнем случае они проводятся по командам, вводимым без указания номера строк в режиме вычислений. Примеры такого рода вычислений даны в табл. 2.11 (микроЭВМ FX-702P). У некоторых микроЭВМ, например Электрони-ка-ДЗ-28, эти операции выполняются после ввода оператора PRINT (печать). При этом аргумент функции должен заключаться в скобки. Из приведенных примеров видно, что вычисления упрощаются при учете приоритета операций. В сомнительных случаях следует вводить скобки. При записи произведений между сомножителями обязателен знак умножения *. В отличие от вычислений на обычных калькуляторах [10, 20], ПЭВМ обеспечивают в калькуляторном режиме выполнение не только элементарных (сложение двух чисел, вычисление одной функции и т. д.), но и сложных последовательностей действий, в частности вычисление численных значений формульных выражений. При этом в ходе ввода формулы возможна коррекция ошибочно введенных знаков, операторов и числовых констант. По существу это означает программирование разового процесса вычислений. Введенное формульное выражение в калькуляторном режиме стирается после однократного вычисления его численного значения. Отметим некоторые дополнительные виды вычислений, проводимые с использованием программ, записанных в ПЗУ ПЭВМ (т. е. микропрограмм). Микропрограммно вычисляются и все элементарные функции, включенные в набор команд ПЭВМ. 41 Таблица 2.11
Примеры вычислений в
Операция 0-^2
ft <- 3 с*~5
d+- 1.5 \ 2 + 3-5/1,5 a + b-c/d 5 sin 30° -\la tg 45° 20 lg (3/1,5) a
+b
режиме калькулятора (для ПЭВМ FX702P)
Показания дисплея при вводе
Результат (после нажатия клавиши ЕХЕ)
А=2
Переменным а, Ь, с и d присвоены значения 2, 3, 5 и 1,5
В=3
С=5 D== 1.5
2 + 3*5/1.5 A + B*C/D
12
5*SIN 30
2,5
(SQRA)*TAN45
1,414213562
20*LOG (3/1.5) ((A + B)/C)*HSN D
12
6,020599913 2,129279455
С
cos 40°3025,2"
COS DEG (40,30,25.2)
0,7603266149
ae + ft
A*EXP D + B
11,96337814
ft-c!
B*C!
360 .
2,575 2лс
2.5 f 75 2*.n*C
7.00649232Е 29 31,41592654
{с — a) arclg ;/
(C-A)*ATN D
168,9297974
-2-105-c^ 18
-2E-5*EXP —18
— 3.045995949Е—13
ft In а — с
B*LNABS(A —C)
3,295836866
(int я)/2
INT л./2
1,5
int (л/2) +,.
INT (л/2) 4-С
6
d
Преобразование полярных координат в прямоугольные (рис. 2.1, а) выполняется по формулам г = \/? + у1 и 0 = a rctg (у/х), где г — длина радиуса вектора. Для этого используются команды RPC х, у ЕХЕ X (получает г) DMS Y ЕХЕ (получаем 0) У
Оператор DMS вводится, если угол 6 нужно получить в градусах, минутах и секундах с десятичными долями. Угол обычно определяется в пределах ±180°. П ре образование прямоугольных координат в полярные (рис. 2.1,6) производится по формулам ;c = r cos 9 и (/ = rsin6 с применением, команд
PRC r ,DEG(e°, 9, 9") ЕХЕ X ЕХЕ (получаем х) Y ЕХЕ (получаем у) Если угол вводится в градусах с десятичными долями, вместо оператора DEG(9°, 9, 9") вводится значение 6. Пример. Найти хну при г = 1 и 0 = 30°. Рис. 2.1. Преобразование координат Пример. Найти г и 0 при jr= — 1 и у= — 2. Вводимые команды Результат
Y
PRC 1, 30 ЕХЕ X ЕХЕ Вводимые команды
RPC ЕХЕ DMS Y ЕХЕ
- 1,
ЕХЕ
0.8660254038 = х 0,5 = (/ Результат
-2 ЕХЕ X 2.236067977 = г Y ЕХЕ -116°3354.18" = 0 116.5650512 = 0
При представлении углов в разных единицах измерения используются следующие режимы работы: MODE4 — угол в градусах, MODE5 — угол в радианах и MODE6 — угол в градах (100 град соответствует 90°). Статистические вычисления могут выполняться в режиме калькулятора (см. подробнее § 5.3), где приведены и соответствующие формулы. 42
Отметим, что вычисления в режиме калькулятора могут проводиться в паузах между вычислениями по программе. Они используются для предварительного преобразования вводимых в ПЭВМ данных, элементарной обработки полученных данных, проверки отдельных фрагментов программ, выполнения простых и редко повторяющихся вычислений и т. д. В других случаях, когда вычисления сложны и требуют неоднократного выполнения, их целесообразно проводить по программам.
§ 2.4. Элементарное программирование на языке бейсик Некоторые правила программирования на языке бейсик были описаны при описании его операторов (§ 2.1, 2.2). Ниже они систематизируются. Поясним смысл основных понятий программирования. Алгоритм —- то или иное описание всех действий, которые должны быть выполнены для решения данной задачи. Описательный алгоритм — алгоритм, составленный на естественном, в частности математическом, языке. Графический алгоритм — компактная форма записи алгоритма в виде специальных графических знаков (см. рис. 2.2) с указанием связей между ними.
Рис. 2.2. Графические обозначения алгоритмов: начала и конца программы (а), ввода и вывода данных (б), проведения операций (в), выполнения условных переходов (г) и циклов (д)
Алгоритм в виде программы — конечный продукт разработки алгоритма в виде программы, записанной на языке программирования (в нашем случае на бейсике). Сравнение форм записи алгоритмов. Бейсик отличается от других языков программирования простотой и наглядностью записи программ. Поэтому в большинстве случаев алгоритм целесообразно записывать в виде программы. Графический алгоритм пелесо образно приводить при укрупненном описании сложных программ, содержащих большое число условных и безусловных переходов, циклов и подпрограмм. Если при описании алгоритма необходимы особые пояснения (например, вывод и преобразование формул), преимуществом может обладать описательный алгоритм. Общие правила записи программ. Как отмечалось, программа на бейсике состоит из строк со словами и предложениями, составленными из операторов. Строки нумеруются от меньшего (0 или 1) до большего номера (максимальный номер зависит от типа ПЭВМ). Рекомендуется нумерация строк, кратная 5 или 10, например 10, 20, 30, 40 и т. д. Тогда в промежутки между номерами можно вставлять новые строки. Операторы или отдельные предложения с ними разделяются в строках двумя точками. Неопытные пользователи часто записывают в каждой строке один оператор или одно предложение. Такая запись наглядна и упрощает замену ошибочных операторов. Однако ее не следует рекомендовать, так как в этом случае неэкономно используется память ПЭВМ (забивается множеством номеров), увеличивается время счета, сложные программы получаются очень длинными, текст (листинг) программы неудобно выводить и его распечатка ведет к неэкономному расходу дорогостоящей бумаги. Рекомендуется записывать в строку несколько предложений с тем, чтобы строка при индикации дисплеем вмещалась в ее формат (от 20 до 80 знаков в одной строке). Соответствие структуры программы алгоритму является непременным условием для получения напитой программы и обеспечения удобства и безошибочности работы с ней. Для этого программа разбивается на отдельные части: организация ввода исходных данных и констант, организация ввода текущих переменных, организация начала циклов, построение тела циклов, организация конца циклов, вывод результатов на индикацию и печать. Не рекомендуется смешивать в одной строке фрагменты этих блоков. Отдельно записываются подпрограммы, которые можно сопровождать комментарием, записываемым с помощью оператора RF.M. В начале программы с- помощью операторов КЕМ или PRINT записывается название или код программы, в конце
указывается оператор END. Отсутствие оператора END может привести к ошибкам при записи программы на магнитные накопители и ее считывании. Виды программ. Программы могут быть линейными, разветвляющимися и циклическими. Линейные программы имеют алгоритм, при котором каждая последующая операция выполняется строго за предыдущей. Все операции исполняются от начала до конца — см. пример вычисления площади круга по формуле S = n£>2/4. Словесный алгоритм при этом следующий. 1. Введем численное значение D и присвоим его переменной D(D^-D). 2. Вычислим л£)2/4 и присвоим полученное значение переменной S (S-«—я£)2/4). 3. Выведем на печать значение переменной S. 4. Организуем останов ЭВМ. ВводЛ
Стоп
Рис. 2.3. Алгоритм вычисления площади круга Соответствующий графический алгоритм показан на рис. 2.3, а, программа имеет вид
05 19 20 30
REMВЫЧИСЛЕНИЕ ПЛОЩАДИ КРУГИ INPUTВВЕДИТЕ ДИАМЕТР КРУГА Ъ-Ъ LETS=*PI*D"2/4 PRINTПЛОЩАДЬ КРУГА S=S 40 END
Обратите внимание на комментарии при операторах INPUT в строке 10 и PRINT в строке 30. У разветвляющихся программ вычисления производятся в различных частях в зависимости от заданных исходных данных или результатов вычислений. Это обеспечивают операторы условных переходов. На рис. 2.4
показан графический алгоритм вычисления функции F(x) =sin х/х при хфО и F(x) = l при л: = 0. Соответствующая программа приведена выше (в § 2.1) при описании операторов IF...THEN. Циклические программы обеспечивают циклическое (т. е. повторяющееся) выполнение отдельных фрагментов заданное или конечное, но неопределенное число раз — до получения результата с заданной погрешностью. Циклы с заданным числом повторений организуются с помощью операторов FOR ... ТО ... STEP и NEXT. Примеры правильной и неправильной организации ряда циклов даны на рис. 2.5. FOR 1=1 ТО /V -I—FOR J=2 TO M -FDR /f=3 TO P -ЛОТ К-I—NEXT /
NEKT Ill FOR
1=1 ТО N
Рис. 2.4. Алгоритм вычисления функции sin x/x 44 ----FOR J=? TO M rFOR Л=3 Р NEXT I......................
ле*т /...................... -NEXT К...................
6 Рис. 2.5. Правильная "(а) и неправильная (б) организации циклов с помощью операторов FOR и NEXT Пример. Построение циклической программы с циклом, повторяющимся заданное число раз. Пусть надо вычислить iV-e число Фибоначчи. Напомним, что числа Фибоначчи образуют последовательность, у которой каждый очередной член равен сумме двух предыдущих: Oil 2358 13 21 34 ... 2 + 3 = 5 13 + 21=34 Словесное описание алгоритма может быть следующим. 1. Задаем число N.
2. Присвоим переменной А значение 0 (А-*-0), а переменной В значение 1 (В-<-1). 3. Организуем цикл вычислений С = = А + В, организовав счетчик цикла с помощью переменной I, значение которой должно меняться от начального 1 = 3 до конечного I = N с шагом, равным 1. В конце каждого числа проведем замену переменных: А^-В и В^С. 4. При I = N зададим выход из цикла и выведем на индикацию число С. 5. Перейдем к выполнению п. 1 с помощью операции безусловного перехода.
Рис. 2.6. Алгоритм вычисления чисел Фибоначчи
Графический алгоритм решения этой задачи показан на рис. 2.6. Программа имеет вид
18 INPUTЗАДАЙТЕ N>=3 N=N:LETA=0!l_ETB= 20 FOR 1=3 ТО N STEP 1 38 LETC=A+BsLETA=B!LETB=C
40 NEXT I 58 PRINTFN=C:60T0 10:END 60 PRIHT!F1.9!FN=C 70 60T0 20:END В строке 10 организован ввод значения N и присвоение переменным А и В значений 0 и 1. В строке 20 задан заголовок цикла и указаны пределы изменения (от 3 до N) управляющей переменной I. Далее в строке 30 проводятся вычисление переменной С = = А + В, присвоение переменной А значения В и переменной В значения С. В строке 40 задан возврат из цикла, если I = N. И, наконец, в строке 50 задается печать значения переменной С и безусловный переход к строке 10. Задав, например, N=10, получим результат 34. Пример. Построение циклической программы с циклом, повторяющимся до получения результата с заданной точностью. Пусть надо вычислить обратный гиперболический тангенс arth x с заданной точностью е = Е, используя разложение в ряд X3
ХЪ
X1
arthx = x + -g- + -g- + — + , *<1. Для этого будем вычислять сумму членов x/i для Й-/ + 2 при начальном » = 1. Графический алгоритм вычислений показан на рис. 2.7.
Рис. 2.7. Алгоритм вычисления функции arth x разложением ее в ряд
В программе (см. с. 46, сверху) цикл организован в строках 30 и 40 с помощью операторов IF ... THEN, ведущих сравнение разности (S — Z), где Z — предшествующее значение S, с числом Е, задающим погрешность. Если (S — Z)>E, то организуется условный переход к выполнению строки 30. В противном случае выдается на индикацию или печать результат вычислений (строка 50) и происходит безусловный переход (строка 60) к строке 20, т. е. ввод нового значения аргумента х, и вычислению arth x. Подобным образом строится большинство программ вычисления специальных функций по их разложениям в ряд, вычисления рядов и сложных числовых последовательностей. Следует отметить, что остановка счета в данном случае возможна, если ряд является сходящимся. Обращения к подпрограммам производятся в том случае, когда отдельные фрагменты программ должны выполняться при различных значениях исходных для их вычисления данных. Подпрограммы, как и циклы, могут вкладываться друг в друга (см. рис. 2.8). При завершении выполнения подпрограммы происходит возврат в исходную программу и выполнение оператора, следующего за обращением GOSUB п к подпрограмме, начинающейся со строки п. Это возвращение задается оператором RETURN в конце подпрограммы. Пример. Построение программы с подпрограммой. Пусть нужно вычислить Описание программы приведено на с. 45. 10 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е=Е 20 INPUTВВЕДИТЕ Х=Х: LET1=1: LETS=0 30 LETZ=SsLETS=S+X"I-i:LETI = I+2 48 IF S-Z>E THEN 30
50 PRINTAHT<X>=S 60 GOTO 20:END
Обращение к ПП1 Программа. . Подпрограммы (ПП) Рис. 2.8. Структура организации подпрограмм с вложениями их друг в друга
определенный интеграл * ь 1 = \ \12х + Г dx = \ 1{х) dx а
.
а
по простой формуле Симпсона , Ь—а~ 6 (2.1)
В этом случае нужно трижды вычислить значение подынтегральной функции /(л-) = = V2A+ Для х = а, !а + 6)/2 и 6. Поэтому вычисление /(х) целесообразно вынести в подпрограмму. и засекают время ее исполнения. Деля его на N, получают время исполнения пустого цикла /ц. Затем внутрь цикла вставляется команда с заданной операцией, например LET С = А-4-В, если нужно найти время проведения операции сложения. Снова, определяют общее время вычислений и делят его на N. От полученного времени отнимают /ц и получают время исполнения заданной операции (о„. Время /„,, сильно зависит от типа ПЭВМ, поэтому подобные испытания следует провести для конкретной ПЭВМ, имеющейся в распоряжении пользователя (разумеется, если нужных данных нет в ее описании). Ниже приведены типовые значения ton для СПП
10 INPUTВВЕДИТЕ ПРЕДЕЛЫ ИНТЕГРИРОВАНИЯ А/В А.В 28 LETX=A: 60SUB 60: LETS=F 30 LETX=<A+B>/2: GOSUB 60: LETS=S+4*F 40 LETX=B: 60SUB 60: LETS=S+F 50 PRINTЗНАЧЕНИЕ ИНТЕГРАЛА 1 = 8*>ГВ-А>,-б: ЯТЛР 1 55 REM ПОДПРОГРАММА ВЫЧИСЛЕНИЯ F<X) 60 LETF=SGR;2*X+1): RETURN 70 END
Здесь подпрограмма с оператором возврата занимает строку 60. Суммирование членов в квадратных скобках (2.1) производится с помощью вспомогательной переменной S. Для а = 0 и Ь—\ вычисления по этой программе дают результат /==1,398150843. Оценка времени вычислений производится суммированием времен выполнения отдельных операций с учетом повторяемости их в циклах и подпрограммах. Для приближенной оценки времени выполнения отдельных операций можно использовать следующую методику. Вначале определяют время проведения /V циклов (/V=IOO или 1 000). Для этого, задав /V, пускают простейшую программу 10 FOR 1 = 1 ТО N: NEXT 1 20 PRINT END: END 46
на базе настольной ЭВМ Электроника-ДЗ-28 и ПЭВМ класса Pocket Computers FX-702P (/on в секундах): ton Для ПЭВМ Операция
Электрони FXка-ДЗ-28 702P
Сложение и вычитание 0,03 0,04 0,05 Умножение и деление Функция 0,06 0,05 0,1 0,065 0,07 yjx Функции \п х, lg*, e* 0,05—Т),1 0,18 0,25 Тригонометрические функции 0,065 0,3 Обратные тригонометрические 0,2 функции Гиперболические функции
Операция
/он ДЛЯ
Электр они-ка-ДЗ28 Обратные гиперболические функции Функции int (х), abs (x) Функция у Безусловный переход Условный переход Обращение к подпрограмме и выход из нее Один цикл (<ц)
ПЭВМ FX702P
0,1
0,3
0,025
0,04
0,08 0,01
0,33 0,03
0,04
0,06
0,02
0,04
0,012
0,02
В данном случае арифметические операции сложения, вычитания, умножения и деления выполняются почти за одинаковое время. Это не общее правило. У многих ПЭВМ операция деления производится медленнее, чем операция умножения, а последняя, в свою очередь, выполняется медленнее, чем операции сложения и вычитания. Самой медленной обычно является операция возведения в степень (у). Сложность подсчета числа операций, особенно если число циклов в программе не фиксировано, а задается погрешностью вычислений, делает целесообразным определение общего времени выполнения вычислений по данным решения типового контрольного примера. Исключения возможны, если время выполнения всей программы менее 5- 10 с. Оптимизация программ проводится с целью сокращения времени их исполнения и объема памяти ПЭВМ, придания программам компактности и алгоритмической ясности. Поскольку эти качества часто взаимо-противоречивы, то процесс оптимизации носит субъективный характер. Для большинства пользователей ПЭВМ вполне справедливо правило — составляйте программу так, как это вам нравится и как это йам удобно. Это правило справедливо, если вычисления по программе носят единичный или эпизодический характер. В этом случае большие затраты времени на тщательную оптимизацию программы нерациональны. Тем более, что нередко программу, составленную за десяток минут, можно оптимизировать многие дни, хотя конечный результат остается тем же. Большинство начинающих пользователей, как правило, размещают в каждой строке один оператор. Выше отмечались недостатки таких программ: чрезмерная длина листинга программы, неэкономное использование ОЗУ, трудность обозрения сразу всей программы, большой расход бумаги при распечатке программ принтером. Поэтому лучше сразу привыкнуть к размещению в строке нескольких простых операторов, если к иному не обязывает алгоритм вычислений. Программы, рассчитанные на многократное использование, желательно тщательно оптимизировать. Несмотря на субъективный характер подготовки программ, есть ряд приемов, которые следует использовать при
составлении и оптимизации программ. Прежде всего необходимо особо внимательно отнестись к выбору алгоритма. Порой затрата на это в 10.....20 мин в дальнейшем сокращает время массовых вычислений на многие часы, сутки и даже месяцы. Например, переход от обычного спектрального анализа к процедуре быстрого преобразования Фурье (БГ1Ф) часто ведет к уменьшению времени счета в десятки и даже сотни раз. В программах надо учитывать реальное время выполнения операций (см. выше). Например, если ПЭВМ выполняет деление медленнее, чем умножение, то операцию вида В = А/2 лучше записать как В = .5*А. Возведение в малую целую степень ух (при л —2,.4,...) j/iymue заменить умножением, например Y—.2 (или Y ] 2) следует заменить операцией Y*Y. При табуляции функций иногда полезно использовать не полностью завершенные циклы следующей конструкции: FOR I=-A TO 1E99 STEP H:...:NEXT I Цикл практически не завершается, так как конечное значение управляющей переменной 1 задано очень большим (10м). Такой цикл аналогичен цепочке операторов НС] LET I = A НСМ LET I = I-|- H HCN GOTO HC1 но выполняется существенно быстрее (выигрыш во времени до 3-—5 раз при пустом цикле, т. е. учете затрат времени только на выполнение операторов в строках НСМ и HCN). Выход из цикла, если он нужен, задается рабочими операторами, записанными вместо многоточия. Арифметические, выражения в программах целесообразно приводить к виду, позволяющему уменьшить число операций. Например, вычисление значения с = а2 —2а6 + 6 при обычной записи с = а-а-\-2-а-Ь — Ь-Ь требует четырех операций умножения и по одной операции сложения и вычитания. Представив с = а — Ь и с = с*с,-т. е. учитывая соотношение (а2 — 2аЬ + &2) = (а — Ь)2, получим тот же результат всего при одной операции вычитания и одной умножения. Аналогичным образом вычисление .у = е"/е* лучше выполнить в виде y — e°"h, что уменьшит число обращений к микропрограммам вычисления функций. В простых программах такие преобразования опускаются, если они идут в ущерб наглядности программы или приводят к отказу от общепринятой формы записи вычисляемого арифметического выражения. Эффективным приемом упрощения вычислительных операций и придания им более общего вида является нормирование арифметических выражений. Следует по возможности убирать повторяющиеся фрагменты вычислений и сосредоточивать их в одном месте. Особое внимание необходимо уделять «чистке циклов», т. е. 47
выносу за пределы циклов всех повторяющихся фрагментов вычислений. Например, выражение
требует вычисления In а, и е" 3000 раз. Между тем, представив это выражение в виде
можно сразу сократить число вычислений In а, до 30. Если позволяет память ЭВМ, можно отдельно сформировать массив экспонент £(/)=<?* и сократить до 100 число вычислений ех. Однако при этом будет иметь место обращение к массиву £(/) 3000 раз. Тем не менее последний вариант по затратам машинного времени будет лучшим. При использовании переменных из массивов нередко повторяются их индексы. Например, при каждом использовании выражения
A(J*K+1)=/1(J*K+1) + R к переменной A(J*K+1) прибавляется значение R. Однако индекс (J*K + 1) вычисляется при этом дважды — в левой и в правой частях равенства. Замена этого выражения фрагментом программы I=J*K+1:A(I)=A(I)+R ведет к экономии памяти (выражение стало короче) и сокращению времени счета (индекс I=J*K+1 вычисляется один раз). Эта экономия будет еще существеннее, если переменные A(J*K + 1) используются в программе более двух раз, например в циклических фрагментах. Часто полезно заменять индексированную переменную простой переменной. Например, вычисление арифметического выражения Y = A(I*K+1)*A(I*K+1)+X можно выполнить в виде Z = A(I*K+1): Y = Z*Z + X Сокращение времени вычислений в этом случае связано и с тем, что ЭВМ опознает простую переменную быстрее, чем индексированную. Иногда, в какой-то мере копируя подход, принятый при составлении программ на языке фортран, программы составляются по блочному принципу: делается основная программа, в которой обеспечивается обращение к вспомогательным подпрограммам. Если последние снабжены комментариями, в целом программа оказывается очень наглядной. Однако в общем случае не следует злоупотреблять обращениями к подпрограммам, так как на них затрачивается дополнительное время (особенно, когда обращения идут из циклов). Необходимо также отметить, что использование особых «программных трюков» в настоящее время считается недостатком, а не достоинством программ. Сокращение времени вычислений не является самоцелью. В правильно составленных программах принимаются меры по устранению неоправданных потерь машинного времени. Поэтому рекомендации по составлению программ не следует абсолютизировать. В некоторых версиях языка бейсик имеются специальные операторы для включения в программы фрагментов, выполняемых на других языках, например на машинно-ориентированном языке конкретной ПЭВМ. Последнее позволяет уменьшить время выполнения программ (иногда в десятки раз), сохранить присущий бейсику диалог ПЭВМ с пользователем и заметно расширить круг решаемых на данной ПЭВМ задач [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) строится с осью Y поперек, а с осью X — вдоль направления печати. Зона печати при использовании оператора TAB разбивается На Лмакс (Л^аке — ОбыЧНО 80 ИЛИ 100) ПОЗИЦИЙ, каждая из которых задается целой частью арифметического выражения. Так, приведенная ниже программа обеспечивает построение графика функции Y = X2, который строится с помощью знаков *. В этой программе изменение аргумента X от значения —6 до +6 задается циклом с началом в строке 10 и концом в строке 60. Если ХфО, осуществляется печать значений Y = X2 с помощью операторов PRINT TAB в строке 35 знаками *. Одновременно печатается знак !, образующий горизонтальную ось графика. При Х = 5 и Х=—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—1, она высвечивается. С помощью оператора PLOT можно по точкам строить сложные графики, например, если Y и X связаны соотношением Y = X2, то будет построена линия, подобная приведенной на рис. 2.9 (однако график при й1 PRINTПРИМЕР ПОСТРОЕНИЯ ЭЛЕКТРОННОЙ СХЕМЫ
2 3 4 5 6
7 8
0 PR INT 0 PR INT 0 PR C2 INT 0 PR INT 0 PR <INT !====! 0 PR Rll INT 0 PR INT 0 PR
i
1
=
09
==
1
!
_____j
R3
==== ! — — ж-! ж---!
i
>
j
i
i
-
i
— I
i
C4 === !
+
ii
! !
____i 1
9 0 1 2 3 0
INT 1 PR INT 1 PR INT 1 PR INT 1 PR INT 2 EN
!
Rli
1
I
i
i
„
i
i
I
!
1
--
--
i
----
D 05 PRINT#1ПРИМЕР ПОСТРОЕНИЯ ГРАФИКА ФУНКЦИИ V=X"2 10 FOR X=-6 TO 6 STEP .5 20 IF X<>@ THEN 35 25 PRINT0--------------10--------------20--------------30--V=X"2
30 60T0 60 35 PRINT!TAB<X~2>* 40 IF X=-5 THEN PRINTX=-5; 50 IF X=5 THEN PRINTX=5.i 60 NEXT XsEND 49 „ Пример построения графика, функции y= ! * *
!
*
i *I *
*
i* I* в---------10---------20---------30----и= !* i Рис. 2.9. График функции V = А1 с координатными осями этом может иметь более высокую разрешаю щую способность). С помощью оператора LINE X, Y вычерчивается прямая линия с концом, заданным целыми значениями X и Y. и началом, заданным предшествующим оператором PLOT. Например, операторы PLOT О, О, I и LINE 50, 50 обеспечивают построение прямой с началом в точке (0,0) и концом в точке (50,50) декартовой системы координат на плоскости. С помощью этих операторов можно строить динамические, т. е. движущиеся изображения и сложные рисунки. Некоторые типы принтеров (например, Электроника-УВВПЧ-30-004, входящие в комплект последних моделей СПП на базе микроЭВМ Электроника-ДЗ 28) могут формировать высококачественные одноцветные графические изображения по точкам, причем печать графики возможна как вдоль, гак и поперек бумажной ленты. Диалог с применением кодов. Часто нужно на ПЭВМ выполнить ту или иную операцию, например, провести расчет по той или иной формуле. Это можно сделать, -используя операторы INPUT и IF, THEN. Диалог с применением клавиш пользователя. У ряда ПЭВМ есть команды присвоения клавишам функций клавиш пользователя. При этом пуск программы с заданного места производится нажатием только клавиш пользователя. Ниже дана программа для ПЭВМ FX-702P, иллюстрирующая применение клавиш пользователя. После ввода значения д- символьной переменной А$ командой KEY придается (строка 20) свойство управляющей переменной. Теперь, если нажать клавишу 2, оператор IF в строке 30 передаст управление строке 200; если нажать клавишу 3, аналогичный оператор в строке 40 передаст управление строке. 300. Во всех других случаях происходит переход к строке 20 и ПЭВМ ждет нажатия одной из клавиш пользователя. Если ввести х = 2 и нажать клавишу 2, будет получен результат Х|2 = 4, если нажать клавишу 3, то Х|3 = 8 (напомним, что в системе команд FX-702P стрелка f означает возведение в степень). Диалог с применением символьных констант. Он наиболее близок к естественному, так как при нем машина задает вопросы, а пользователь отвечает на них на естественном языке (словесном или математическом). Иллюстрацией к организации такого диалога на ПЭВМ FX-702P является следующая программа: 10 IHP "Х",Х 20 INP "Xt2 OR Xt3 ?"$ 38 IF $="Xt2" THEN 200 40 IF :j="X+3" THEN 3№ 50 60T0 20 200 PRT"XT2=".! Xt2: 60T0 10 300 PRT"Xt3=".: Xt3: GOTO 10 , Здесь после задания х ПЭВМ в строке 20 задает пользователю вопрос: X f 2 OR Xf3? (хг или хл?). Надо ответить фразой Х|2 или X f 3. Если ответ был X f 2, символьной переменной $ присваивается значение Xf2, .а в строке 30 операторы (F ... THEN передают управление строке 200. т. е. вычислению и выдаче значения Х\2 — х\ Если задать Х|3, то в строке 10 операторы IF ... THEN передадут управление строке 300, т. е. вычис10 20 30 40 50 60 70
INPUTВВЕДИТЕ Х=Х PRINTДЛЯ ВЫЧИСЛЕНИЯ Х"2 УКАЖИТЕ КОД 2 INPUTДЛЯ ВЫЧИСЛЕНИЯ Х"3 УКАЖИТЕ КОД 3 IF K=2 THEN 66 IF K=3 60T0 76: GOTO 20 PRINTX2=X"2: 60T0 10 PRIHTX"3=X"3: GOTO 1@:END
В этой программе при задании по запросу ЭВМ кода 2 вычисляется значение х\ а при задании кода 3 — х3.
> При ошибочно введенном коде повторяется ,кшрое кода. 10 INP "Х"гХ 20 A$=KEV!IF A$=" " THEN 2S 38 IF й$="2" THEN 200 40 If A$="3" THEN 3№ =ifi 6ЛТ0 20 : й0 PRT"Xt2="" X+2 ~m PRT"X+3="; х+з; GOTO 10: END ГуКОД=К
........_ и выдаче значения X f 3. Во всех других случаях безусловный переход GOTO 20 в строке 50 ведет к повторению запроса ПЭВМ. Переходы с косвенной адресацией. Они возможны в расширенных версиях бейсика. Так, у ПЭВМ FX-702P возможны 6 типов таких переходов: 1. GOTO у 2. GOTO фу 3. IF а (условие) р; GOTO у 4. IF а (условие) р; GOTO Фу 5. GSB у 6. GSB Фу Здесь а, р и у — переменные или арифметические выражения. Номер строки или программной области (при знаке ф перед у) задается целой частью арифметического выражения или значения переменной у. Это значение не должно выходить за пределы 9 при адресации к программным областям и 10 000 при адресации к строкам у. Применение косвенной адресации поясним таким примером: пусть надо выполнить интегрирование нескольких функций по формуле Симпсона, не меняя основную программу. Для этого можно" каждую функцию обозначить номером N (iV= 1, 2, 3 ...) и вычислять подпрограммой, записанной, например, со строк 100;V (100 при Л=1, 200 при JV = 2 И Т. Д.). Соответствующая программа имеет вид 05 IHP "F H=">N IS INP "A">fi, "B",B 2в Х=А: 6SB N*iee: S=F 30 Х=<А+В>/2: 6SB н-«10@: S=S+4«F 40 x=e: &SB н*100: S=S+F 59 PRT "1="} S*<B-AV6: STOP 100 F=SQR<2*X+1>: RET 200 F=l/<1+Xt2>! RET 300 F=10*LN X: RET 500 END При задании N — \, 2 или З эта программа будет вычислять соответственно интегралы
Задав, например, Л/ = 1,а —0и6 = 1, получим для первого интеграла значение /=1,398150843.
§ 2.6. Перевод программ с одной версии бейсика на другую Различия между версиями бейсика могут заключаться в синтаксисе (правилах записи операторов) и в словарном запасе операторов. Различия в синтаксисе, как правило, носят непринципиальный характер и сводятся к замене апострофов на кавычки, двоеточия на точку с запятой, знаков возведения в степень (—i на 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. Если версии бейсика сильно различаются, целесообразно составить детальный описательный или графический алгоритм решения нужной задачи и затем по нему заново составить программу на нужной версии бейсика. Некоторые практические рекомендации по переводу программ. При переводе пользователь может существенно изменить характер Таблица 2.12 Формальные правила перевода операторов вычисления математических функций для некоторых версий бейсика (Р = я = 3,141592654) Версии бейсика СПП на базе микроЭВМ МикроЭВМ Электроника-С60, Искра-226, ПЭВМ Электроника-ДЗ-28
комплексы ДВК-1, ДВК-2
FX-702P
DEG(X)
180*Х/Р
MODE4
RAD(X) TAN(X) ASN(X) ACS(X) HSN(X) HCS(X) HTN(X) AHS(X) AHC(X) AHT(X) LGT(X) LOG(X) X-INT(X) EXT(X)
Р*Х/180 SIN(X)/COS(X) ATN(X/SQR(1—X*X)) Р/2—ATN(X/SQR(1-X*X)) (ЕХР(Х)-ЕХР(-Х))/2 (ЕХР(Х)+ЕХР(-Х))/2 (ЕХР(Х) -ЕХР(-Х))/(ЕХР(Х) +ЕХР(-Х)) LOG(X + SQR(X*X+1)) LOG(X + SQR(X*X—1)) LOG((l+X)/(l-X))/2 LOG(X)/LOG(10) LOG(X) X-INT(X) X"110
MODE5 TAN X ASN X ACS X HSN X HCS X HTN X AHS X AHC X AHT X LOG X LN X FRAC X X| 10
диалога с ПЭВМ (сократить или, напротив, расширить его). При переводе зарубежных программ целесообразно перевести комментарии с английского языка на русский. У пользователей зарубежными ПЭВМ может возникнуть необходимость в обратном переводе. У некоторых версий бейсика (например, для микроЭВМ Электроника-С60) комментарии не вводятся с помощью оператора INPUT. В этом случае при переводе используется оператор PRINT. Пример. Версия для микроЭВМ Электрони-ка-ДЗ-28 10 INPUT ВВЕДИТЕ X, Y X, Y . Версия для микроЭВМ Электроника-СбО 10 PRINT "ВВЕДИТЕ X, Y" 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) при I<10, J<20 и К<Ю в версии бейсик-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/ji) В последнем случае аргумент приводится к интервалу от —2л до +2л. Редактирование и отладка переведенных программ. Редактирование программ, полученных путем перевода, сводится к проверке правильности записи всех операторов. Если перевод сделан с простой версии бейсика на более сложную, следует изучить возможность оптимизации программ, используя специфические возможности применяемой версии бейсика. Например, выражение вида Х = Л1А2 + В2 на ПЭВМ FX-702P может вычисляться с помощью оператора RPC А, В вместо выражения X = SQR(A*A + B*B) и т. д. Отладка полученных переводом программ существенно облегчается, если программа-оригинал была снабжена контрольными тестами (примерами). При редак-
тировании и отладке программ следует использовать заложенный в основу бейсика начальный диалог. Так, при неточностях в записи операторов и в их синтаксисе ПЭВМ подсказывает пользователю характер и место ошибок, что позволяет легче найти и устранить их. Иногда причиной грубых расхождений результатов вычислений при правильном переводе программ являются особенности округления чисел при исполнении операторов циклов вида FOR <х = р ТО у STEP б. Малые погрешности в
вычислении у, например, когда 7 есть целое число в целой степени, могут приводить к тому, что число циклов окажется на 1 меньше или больше, чем предполагаемое. Например, число циклов, заданных оператором FOR I = 1 ТО N "13, при /V = 2 может быть не 8, а 7 или 9 в зависимости от того, как округляется N3. У некоторых ПЭВМ округление при возведении в целую степень целых чисел специально предусмотрено. Однако у других, в частности у Электроники-ДЗ-28, этого нет (хотя при вычислении N:i с помощью оператора PRINT N 13 будет получен точный результат — ошибка содержится в скрытых разрядах) . В подобных ситуациях округление можно проводить с помощью оператора INT. Например, выполнение точно N3 циклов гарантировано, если оператор цикла записать в виде FOR 1 = 1 ТО INT (N Л 3+1). Небольшая добавка 0,1 к N3 создает определенность в операции округления. Подобные ситуации возможны и при использовании операторов косвенной адресации вида ON a, GOTO а, GOSUB а, когда а задает номер строки, т. е. целое число. 53
ГЛАВА3 АЛГОРИТМЫ И ПРОГРАММЫ ЭЛЕМЕНТАРНЫХ ВЫЧИСЛЕНИЙ § 3.1. Операции с действительными числами Перевод чисел из одной системы счисления в другую выполняется по правилам, описанным в [36]. Для перевода целого числа Аи с основанием /И в число A.v с основанием /V число AV[ делится на .V (/=1, 2, 3,. . .), а последовательность остатков от деления умножается на М< (/ = 0,1,2,...) и складывается. Числа Хм в виде правильных дробей последовательно умножаются на N (г = = 1,2,3__), целые части результата делятся на М (/=1,2,3,...). В приведенных ниже программах операции над целыми и дробными частями Хм проводятся одновременно. Количество цифр Хм и XN не должно превышать разрядности ЭВМ. Программа 3.1.
Пример. Для N = 23345, /И = 9135 получим (N, М) = 1015, а для N = 238 и М=347 (Л/, М) =34. Разложение целого числа М на простые множители производится последовательным делением М на 2 и ряд простых чисел d (<i = 3, 5, 7, 9, 11, 13, ...) по формуле до_ тех
пор,
пока
соблюдается
условие
Программа 3.3. Пример. Число 1234567890 раскладывается на множители 2ХЗХ ЗХ5Х3607Х Х3803. Преобразование десятичного числа X в цепную, или непрерывную, дробь производится выделением целой части X, а затем 10 PRINTПРЕОБРАЗОВАНИЕ ЧИСЛА ХМ В ЧИСЛО XN 2Й INPUTВВЕДИТЕ ХМ=Х:INPUTВВЕДИТЕ M=Q 25 INPUTВВЕДИТЕ N=N:LETU=8 38 LETS=10!LETK=10!LETM=Q:&OSUB 58 35 LETS=L:LETK=H:LETX=Us1_ЕТМ=Ш
48 60SUB 5Й: PRINT!8.4!XM=U:&QT0 28 58 LETL=KsLETD=1sLETE=1:LETU=8 68 LETC=INT<X):LETW=X-C 7Э FOR I=S TO 8 STEP -1 88 LETB=U«L!LETA=INT<B> Э0 LETD=D«M:LETU=A/D+U 100 UETT=C:LETb)=B-AsIF Ы=8 THEN 128 110 NEXT I 120 |_ЕТЙ=ШТ::Т.--О 138 I_ETU= CT-A*L>жЕ+U: LETE=E*M 148 LETT=A:IF A<>@ THEN 120 150 RETURN:END Контрольные примеры. Ха = —»-.¥в = 27 (;И = 5, Л" = 8), X]i,= 100 —»- Х? = = 1100100 (M = l0, N = 2), время счета /с«5 с.
Нахождение- наибольшего общего делителя двух чисел Л и М проводится с помощью рекуррентного соотношения Nk = Nk 2 — Int (Л/V 2/Nb i) A,, i, где iVn = max(|i¥!, \M\), N\ = min,( | N\, \M\). Если Nk станет нулевым, то наибольший общий делитель С= (Л, М) = Nit- \- Числа /V и М должны быть меньше 103 для ЭВМ с разрядностью 10. Программа 3.2. 54 цел ы х inl X, частей Х;~- \/(Х, _i —int A",_i), где -- целая часть А ;.
Программа 3.4. П р и м с р. ____о ,
Ч исло
X = л = 3,14159264 -[3, 7, 15, 1, 252, 1. 1, 1, 41, т. е. 1
7+
15+--------I I —
252 + ... Преобразование цепной дроби
в десятичное число V Программа 3.2. 18 PRINTНАХОЖДЕНИЕ НАИБОЛЬШЕГО ОБЩЕГО ДЕЛИТЕЛЯ 15 INPUTВВЕДИТЕ ПЕРВОЕ ЧИСЛО N=N 28 INPUTВВЕДИТЕ ВТОРОЕ ЧИСЛО М=И 30 LETI = IHT(N--ri):LETL=M 48 LETri=N-M*IiLETN=L 5@ IF MOO THEN ЗЭ 66 PRINT!Э.0!НАИБОЛЬШИЙ ОБЩИЙ ДЕЛИТЕЛЬ»N 70 GOTO 15:END Программа 3.3. 05 PRINTРАЗЛОЖЕНИЕ ЧИСЛА X НА ПРОСТЫЕ МНОЖИТЕЛИ 10 INPUTВВЕДИТЕ Х=А
производится
непосред-
15 PRINT!9.9!МНОЖИТЕЛИ XsSOTO 40 20 PRINT 2:|_ETA=A/2 30 IF A-1=0 THEN 50 40 IF A/2-INT<A/2>=8 THEN 20 50 LETB=3 60 LETC=SQR<A>+1 78 IF B>=CTHEN 140 80 IF AB-INT<A/B>=0 THEN 100 9Ci LET6=B+2:G0T0 70 100 IF A/-B*B-A=0 THEN 120 110 GOTO 90 120 PRINT В 138 LETA=A/B:60T0 60 140 PRINT A:PRINTKOHEU:60T0 10:END Программа З.4. 05 PRINTПРЕОБРАЗОВАНИЕ ДЕСЯТИЧНОГО ЧИСЛА В ЦЕПНИ» ДРОБЬ 10INPUTВВЕДИТЕ ДЕСЯТИЧНОЕ ЧИСЛО Х=Х 15 FOR 1=1 ТО 10 20 LETF=INT<X>iPRINT!9.0!F 30 LETX=l/<X-F>sNEXT I 40 GOTO 10:END Программа 3.5. 05 PRI NTПРЕОБРАЗОВАНИЕ ЦЕПНОЙ ДРОБИ В ДЕСЯТИЧНОЕ ЧИСЛО 10 INPUT C:LETD=1:LETA=0:LETF=C:LETB=1 20 PRINT F*-B: INPUT E:LETQ=C Зв I_ETC=C*E+D: LETD=Q: LETQ=B 4@ LETB=B«E+A:LETA=Q:LETF=C 50 GOTO 20:ENP
Программа З.6. 10 20 30 40 50 60 70
PRINTДЕЛЕНИЕ ЧИСЛА А НА ЧИСЛО В PRINTС ПРОИЗВОЛЬНОЙ ТОЧНОСТЬЮ INPUTВВЕДИТЕ А.-В ft,Б LETI=INT<A/B):PRINT!9.0!ЦЕЛАЯ ЧАСТЬ РЕЗУЛЬТАТА PRINTПОСЛЕДОВАТЕЛЬНОСТЬ ЦИФР РЕЗУЛЬТАТА LETF=INT<А/В)SPRINT!1.0! F; LETA=;A-F*B>*10:6OTO 60:END
I
55 ственным вычислением X по формуле цепной дроби. Программа 3.5. Пример. [3, 7, 15, 1, 292, 1, 1, 1, 4]->--^3,141592654.
Деление числа А на число В с произвольной точностью выполняется выделением целой части отношения А/В при вычислении F = int (Л/В) и затем использованием рекуррентной формулы Л,= (Л,_1 — /XBJXlO. Программа 3.6.
Пример. 32/9,3 = 3,4408602150537 . . . Цифры результата выдаются до остановки ЭВМ пользователем. Получение N-го числа Фибоначчи, т. е. числа из последовательности 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ..., у которой новый член равен сумме двух предыдущих (Ci =0; С2=\): С;=С;_,+С;_2, / = 3, 4, 5, ... Программа 3.7.
10 PRINTВЫДАЧА Н-ГО ЧИСЛА ФИБОНАЧЧИ 20 LETA=e:LETB=l:INPUTВВЕДИТЕ N>=3 N=N 30 FOR 1=3 TO N 40 LETC=A+B:LETA=B:LETB=C 50 NEXT I 60 PRINT!F1.9!FH=C 70 GOTO 20:END Для ;V=10 получим do = 34. Умножение и деление комплексных чисел ZI=J4I+/BI И г2=Л2 + /В2 выполняется по формулам Z,
z2 Al +1 . В,А2 — 1
Al + W , (3.1) а в тригонометрической форме e sin6, где R =
sine, где R = Rt/R2, 0 = 9,-92. Программа 3.8.
Контрольный пример. Вычисление выражения
+ (0,5 + /-1) —/-4)
дает результат ReZ0= 1,158823529 и ImZ0 = = 1,464705882, т. е.
Zo= 1,158823529+ /Х X 1,464705882. Программа
3.9.
05 Для Zi=2e 07 /-0,5 /-0,25
получим 025
Алгебраические функции комплексного переменного: Z2= (А2 —В2) +/2ЛВ, 1
Л
.
В
§ 3.2. Операции и функции с комплексными числами и переменными Комплексные числа записываются в алгебраической форме Z—A + /B = ReZ + /ImZ или в тригонометрической Z=Re", причем R = -{A2 + B2 И e = arctg(S//l). Сложение и вычитание комплексных чисел Zi=A\-\-jB\ и Z2 = A2-\-j В2 выполняется по формулам А2-В2 2АВ
-±
exp Z = е1 = еА cos В + jeA sin В,
Программа 3.8. 05 PRINTIF1.9! 10 PRINTАРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ С КОМПЛЕКСНЫМИ 20 PRINT ЧИСЛАМИ В АЛГЕБРАИЧЕСКОЙ ФОРМЕ 30 INPUTВВЕДИТЕ RE Zb IM Z1 А,В 40 INPUTВВЕДИТЕ RE Z2> IM Z2 OD 50 INPUTВВЕДИТЕ КОД ОПЕРАЦИИ + Ь-2>*3,/4 К 60 IF K=l THEN 110 70 IF K=2 THEN 130 80 IF K=3 THEN 140 90 IF K=4 THEN 160 100 PRINTКОД УКАЗАН НЕВЕРНО:60T0 50 110 LETA=A+C:LETB=B+D 120 PRINTZ 0=A + JaKBVseOTO 40 130 LETA=A-CsLETB=B-D:80T0 120 140 LETE=A*C-B«H:LETF=A*D+C*B
150 LETA=EsLETB=FsC-.OTO 120 160 LETL=C*C+D*D: LETE=A*C+Bi«D: LETF=B«C-A*D 170 LETA=E-L:LETB=F/L!SOTO 120s END 56
Программа 3.9. 10 PRINTУМНОЖЕНИЕ И ДЕЛЕНИЕ КОМПЛЕКСНЫХ 20 PRINTЧИСЕЛ В ТРИГОНОМЕТРИЧЕСКОЙ ФОРМЕ 30 INPUTB КАКОЙ ФОРМЕ 21 0-АЛГЕБ. 1-ТРИГОНОМ. 40 IF K=l THEN 70 59 60 80 90
INPUTBBEflMTE RE Zb IM Zl A,B LETR1=SQR<A*A+B*B>:LETQ1=ATN<B/A>:GOTO 80 70 INPUTВВЕДИТЕ R.1, Ql INPUTB КАКОЙ ФОРМЕ Z2 е-АЛГЕБ. 1-ТРИГОНОМ. К IF K=l THEN 120
100 110 120 13Э 140 150 160 170
INPUTВВЕДИТЕ RE 22/ IM Z2 CrD LETR2=SQR<C«C+B«D)!LETG2=ATNai/C):G0T0 130 INPUTВВЕДИТЕ R2, Q2 R2/Q2 INPUTВВЕДИТЕ КОД ОПЕРАЦИИ 0 *> 1 / К IF K=0 THEN 168 LETR=R1/-R2:LETQ=Q1-Q2:6OTO 170 LETR=R1*R2:LETQ=Q1+Q2 PRINTZ0=R« EXP<J*<Q>>
180 LETRl=R:LETQl=Qs60T0 80:ENB Yz=V«eM*=V^cos^i + /V^sin^ft, Ak = Q/n + 3№k/n, /e = 0, 1, 2, ..., n—\, Za = Raei"" = Rn cosпв + jRn sin/ге. Программа ЗЛО. 18 PRINTВЫЧИСЛЕНИЕ F<Z)=Z"2 28 INPUTВВЕДИТЕ RE 2=A:INPUTВВЕДИТЕ IM Z=B 38 LETE=ft"2-B"2:LETF=2«A*B 46 LETA=E:LETB=F 50 PRINTRE F<Z>=A!PRINTIM F<Z)=B 6в 60Т0 28:ENB Пример. (3 + /-2)2 = 5 + /-12. Программа 3.11.
10 20 30 40 50
К
PRINTВЫЧИСЛЕНИЕ F<Z> = 1-Z INPUTBBEAHTE RE Z=A:INPUT1ВВЕДИТЕ IM Z=B LET6=A"2+B2:LETE=A/& LETF=-B/6:LETA=E:LETB=F PRINTRE F<Z>=A!PRINTIM F<Z)=B
RbGl
60 GOTO 20:END Пример. 1 / (3 + / 2) = 0,2307692308 — / 0,1538461538. Программа 3.12.
10 PRINTВЫЧИСЛЕНИЕ F<2)=1^2"2 20 ШРиТВВЕДИТЕ RE Z=A: INPUTBBEflHTE IM Z=B
30 40 50 60
LET&=<A"2+B"2)"2:LETE=CA"2-B"-2>/6 LETF=-2*A*B/G:LETA=E:LETB=F PRINTRE F<Z)=A:PRINTIM F<Z>=B 60T0 20s END
Пример. 1 /(3 + /. 2) 2 = 0,02958579882 — /-0,07100591716. Программа 3.13. 10 PRINTВЫЧИСЛЕНИЕ F(Z:>=SQR<Z> 20 INPUTВВЕДИТЕ RE Z=AsINPUTBBEflHTE IM Z=B 36 LETG=SiaR<A~2+B~2>sl_ETE=SQR<:<A+6>2> 40 LETF=SQR С <-A+6)/2 >:LETA=E:LETB=F 50 PRINTRE Z=+-A!PRINTIM Z=+-B 6© GOTO 20SEND
Пример. л/3+772=± 1,817354021 ±/-0,5502505227. Программа 3.14.
10 2Э 36 40 50 60
PRINTВЫЧИСЛЕНИЕ F<Z)=EXP<X) INPUTBBEflHTE RE Z=AsINPUTBBEflHTE IM Z=8 LETE=EXF4A>*COS<B>:LETF=EXP<A>*SIN<B> LETA=EsLETB=F PRINTRE EXP;Z> = A:PRIHTIM EXP<Z) = B GOTO 20:END
Пример, exp (3+ / 2) =—8,358532651 +/-18,26372704. 57 Программа 3.15. 19 PRINTВЫЧИСЛЕНИЕ F<Z>=LOG<Z> 28 INPUTBBEflHTE RE Z=A:INPUTВВЕДИТЕ IM Z=B 38 LETE=L08<fl"2+B"2>/2:LETF=ATH<;B/A) 49 LETA=E:LETB=F 58 PRINTF=A+J*<B +2жК*#Р1> 60 GOTO 20:END Пример. In (3 + /-2) = 1,282474679 + / (0,5880026035 + 2/гл). Программа 3.16. 10 PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ FCZ>=Z<bN) 20 INPUTBBEAHTE RE Z=АМИРШГВВЕДИТЕ IM Z=B 30 INPUT-ВВЕДИТЕ N=N:LETX=SQR<A"2+B"2> 35 LETV=ATH<B.-A):LETA=X~(1 /N>«COS<V/N> 40 LETB=XU-N)*SIN<V/N):PRINTRE F<Z>=A 58 PRINTIM F<Z)=BsEND Пример. V:5 + / 2 = 1,36311829+ / 0,2018352064. Программа 3.17. 10 PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ F<Z>=Z"N 20 INPUTВВЕДИТЕ RE Z=A:INPUTВВЕДИТЕ IM Z=B 30 INPUTВВЕДИТЕ N=N:LETX=SQR<A~2+B42> 48 LETV=ATN<B/A):LETA=X"N*COS<V*H> 50 LETB=XN*SIN<V«N):PRINTRE F<Z>=A 68 PRINTIM F<Z>=B:END Пример. (3 + /-2):i=—8,999999999 + /-46. Тригонометрические функции комплексного переменного sin Z = sin A ch S + / cos A sh Й, cos Z = cos A ch B — j sin A sh S, sin 2Л sh2fi g "" cos2^+ch2S +/ cos24 + ch 2B Программа 3.18. 10 PRINTВЫЧИСЛЕНИЕ FCZ)=SIH<Z) 28 INPUTВВЕДИТЕ RE Z= A: INPUTВВЕДИТЕ III Z=B 38 LETE=SIN<A)*HCS<B>:LETF=COS<A)*HSN<B) 48 LETA=EJLETB=F 58 PRINTRE FCZ)=A:PRINTIM F<Z>=B 68 GOTO 28:END Пример, sin (3 + /-2) =0,5309210863 — /-3,59056459. Программа 3.19. t 18 PRINTВЫЧИСЛЕНИЕ F4Z>=COSCZ> 28 INPUTBBEflHTE RE Z-A:INPUTВВЕДИТЕ IM Z=B 38 LETE=COS<A>*HCS<B):LETF=-SINI:A)*HSN<B) 48 LETA=E!LETB=F 58 PRINTRE F<Z>=A:PRINTIM F<Z)=B 68 GOTO 20:END Пример, cos (3 + /-2) = —3,724545505 — /-0,51182257. Программа 3.20. 18 PRINTВЫЧИСЛЕНИЕ F<Z)=TAN<Z) 20 INPUTBBEflHTE RE Z=A:INPUTBBEflHTE IM Z=B 38 LETA=A«2: LETB=B»i2: LET6=C0S;A> +HCS<B) 35 LETE=SIN<A>^6:LETF=HSN(:B)-6 48 LETA=E:LETB=F 58 PRIHTRE F<Z>=A:pRINTIM F<Z>=B 68 SOTO 28:END Пример, tg (3 + /-2) = —0,009884375039 + / -0,965385879. 58
Обратные тригонометрические функции комплексного пере м е н н о г о : arcsin Z = arcsin В* + /1п \Аk-\-уА_к^1_\, arccos Z = arccos Bk — /I" \Ak+ \MT—1 }, . _ - , . 2,4 arctg Z = ^arct Программа 3.21.
18 PRINTВЫЧИСЛЕНИЕ F<Z)=ASN<Z) 28 INPUTBBEAHTE RE Z=A:INPUTВВЕДИТЕ IM Z=B 25 LETC=SQR << A+1)"2+B"2 >2 35 LETE=C+D:LETF=C-D:LETA=ASN < F) 40 LETB=L06<E+SQR<E*E-l)) FCZ>=A:PRINTIM F(Z>=B 60 60T0 20:END
50
PRINTRE
Пример, arcsin (3 + /-2) =0,9646585044+ / 1,968637926. Программа 3.22.
18 PRINTВЫЧИСЛЕНИЕ F<Z>=ACS<ZV 28 ШРЦТВВЕДИТЕ RE Z=A: INPUTВВЕДИТЕ LETC=SQR<<A+l)"2+B"2)/-2 30 LETD=SQRC<A-l)"2+B"2)/2 35 LETE=C+D!LETF=C-D:LETA=ftCS<F> LO6<E+SQR<E*E-1>)
IM 2= 25 40 LETB=-
58 PRIHTRE F<Z)=A:PRINtIM F<Z>=B 60 GOTO 28:END Пример, arccos (3 + /-2) =0,6061378224 — / 1,968637926. Программа 3.23.
18 29 25 38
PRI NTВЫЧИСЛЕНИЕ F<Z)=ftHT<Z) INPUTBBEflHTE RE Z=B:INPUTВВЕДИТЕ IM Z=A:LETB=-B LETC=SQR<(A+1)"2+B*B)^2 LETE=ATN<2*A-a-A*A-B*B ))--£
35 LETF=LOG<<A«A+<B+1>"£>/<A*A+<B-1>~2>V4
40 LETB=E:LETA=-F 58 PRINTRE F<Z>=A!PRINTIMCZ>=B 68 GOTO 28:END Пример, arctg (0,3 + /-0,2) =0,3018746667 + /-0,1849946201. Гиперболические функции комплексного переменного: sh Z = sh A cos B + j ch A sin B, ch Z = ch A cos B + j sh A sin fl, shA . sin 2S g " ch 24+cos2B ch 2^+cos2fi" Программа 3.24.
10 28 38 48 58
PRINTВЫЧИСЛЕНИЕ F<Z)=HSN<Z) INPUTВВЕДИТЕ RE Z=A:INPUTВВЕДИТЕ IM Z=B LETE=HSN<A:>*COS<:B):LETF=HCS<A:>*SIN:B> LETA=E:LETB=F R PRINT RE F<Z>=A:PRINTIM F<Z)=B
68 GOTO 28:END Пример, sh (3 +у-2) = —4,16890696 + /-9,154499147. 59
Программа 3.25. 18 PRINTВЫЧИСЛЕНИЕ 20 INPUTВВЕДИТЕ RE 2=ft:INPUTBBEAHTE IM Z= 38 LETE=HCS<A>*COS<B):LETF=HSH<ft)»SIN<B> 40 LETA=E:LETB=F 50 PRINTRE F<Z:> = A:PRINTIM F<Z>=B 60 GOTO 20:END Пример, ch (3 + /-2) = —4,189625691 + /-9,109227894. Программа 3.26. 10 PRINTВЫЧИСЛЕНИЕ F<Z>=HTN<Z> 20 INPUTBBEflHTE RE Z=A:INPUTBBEflUTE IM Z= 30 LETA=A*2 s LETB=B*2:LET&=HCS <A > +COS < В> 35 LETE=HSN<A>.G!LETF=SIN<B>.-6 40 LETA=E!LETB=F 58 PRINTRE F<Z>=A:PRINTIM F<Z>=B 68 60T0 20:END
Пример, th (3 + /-2)=l,003238627—/-0,0037664025642. Обратные гиперболические функции комплексного
переменного:
arshZ=—/arcsin(/Z), arch Z= ±/arccos Z, arth Z=—/ arctg (jZ). Программа 3.27. 10 PRINTВЫЧИСЛЕНИЕ F(Z>=AHS<Z) 29 INPUTВВЕДИТЕ RE Z=B: INPUTВВЕДИТЕ IM Z=A:l_ETB=-B 25 LETC=SQR<<A+i:>~2+B*BV2 30 LETD=SQR < < A-1)"2+ВжВ)/Z 35 LETE=C+D:LETF=C-DsLETB=ASN<F) 48 LETA=LO&<E+SQR<E!«E-1)) 50 PRINTRE F<Z>=A:PRINTIM F<Z>=B 60 GOTO 20:END Пример, arsh (3 + / 2) =1,98338703 + /-0,5076527843. Программа 3.28.
10 20 25 30 35 40 50 60
PRINTВЫЧИСЛЕНИЕ F<Z)=AHC<Z> INPUTBBEflHTE RE Z=A:INPUTВВЕДИТЕ IM Z=B LETC=SQR<<A+O~2+B*B>/2 LETD=SQR < < A-1)"£+B*B >/Z LETE=C+Ds LETF=C-D:LETB=ACS<F) LETA=L06<E+SQR<E*E-l>:> PRIHTRE F(Z>=+-A:PRINTIM F<Z)=+-B GOTO 29:END
Пример, arch (3 + /-2) = ± 1,968637926±/-0,6061378224. Программа 3.29. 16 PRINTВЫЧИСЛЕНИЕ F<Z>=AHT<Z> 20 INPUTBBEAHTE RE Z=B:INPUTВВЕДИТЕ IM Z=A:LETB=-B 25 LETC=SQR< <A+l >"2+B«BV2 30 LETE=ATN<2i«A^<l-A*A-B*B>)^2
35 LETF=L0GC<Ai«A+<B+l)42V<A*A+(:B-l)"2>)/4 40 LETB=E:LETA=-F 56 PRINTRE F<Z>=A:PRINTIMCZ)=B 60 60T0 20:END
Пример, arth (0,3 + /-0,2)=0,2957499203 + /-0,2154744937. - В описанных программах значения Re F (Z) и Im F (Z) придаются переменным А и В (A +- Re F, B+-Imf). Поэтому, опустив комментарии, программы можно использовать в качестве подпрограмм вычисления функций комплексного переменного. 60
§ 3.3. Вычисление Устойчивость многочлена, описывающего степенных многочленов линейную систему с обратной связью (наИ дробно-рациональных функций пример, электронный усилитель), оценивак J "к ется с помощью критерия Гаусса—Гурвица. Схема Горнера применяется для вычислеДля устойчивости необходимо, чтобы значение ния степенных многочленов Р (Z) (полимодуля многочлена A(Z) =А(р), где р = ;ю, номов), при фазовом угле 6 = 0 было менее 1 (т. е. годоP(Z)=aZ" + a Zn~ + +a Z + a граф системы при to, меняющемся от 0 до оо, ^ ~г "-|-f" I -t- о, не должен охватывать точку 0,1 комплексной и имеет вид плоскости). Более удобно судить об устойчиP(Z) = (...(anZ + an-i) Z + an-2) Z+... вости А (р) по его разложению в цепную ...+ai) Z + a0. Дробь [cip, с2р..... с„р]. Если все коэффициенты с, этого разложения положительны, Коэффициенты а„, а„_|, ..., at, а0 будем многочлен устойчив. Оценка устойчивости считать действительными. При действительмногочлена ном аргументе x = Z схема Горнера применяется непосредственно, при комплексном А (р) = апр"-\-а„-[рп~ + ... -\-a\p-\-ao Z = A-\-jB— с применением операций умножения и сложения комплексных чисел выполняется с помощью следующей про-(см. § 3.2). граммы. Программа 3.30.
10 15 28 38 35 48 58 68 78 88
PRINTВЫЧИСЛЕНИЕ СТЕПЕННОГО МНОГОЧЛЕНА INPUTВВЕДИТЕ СТЕПЕНЬ МНОГОЧЛЕНА N=H:DIM A<N> FOR I=N TO 8 STEP -1 PRINT!2.8!ВВЕДИТЕ КОЭФФИЦИЕНТ АI INPUT A<I>:NEXT I INPUTВВЕДИТЕ ЗНАЧЕНИЕ X=X:LETY=0 FOR I=N TO 1 STEP -1 LETY=<Y+A<I)>*X:NEXT I LETV=V+A<8):PRINT!F1.9!ЗНАЧЕНИЕ P<X)=V GOTO 48:END
Для многочлена Р(х) = 4x4 + 3x3 + 2x2 + + получим Р(1)= 10, P(2) = 98. Программа 3.31. 18 PRINTВЫЧИСЛЕНИЕ ПОЛИНОМА С КОМПЛЕКСНЫМ АРГУМЕНТОМ 15 INPUTBBEUHTE СТЕПЕНЬ ПОЛИНОМА N=N:DIM A<N) 20 FOR I=N TO б STEP -1 38 PRINTI2.0! ВВЕДИТЕ КОЭФФИЦИЕНТ А<Г)=? 35 INPUT"A<I>:NEXT I 40 INPUTВВЕДИТЕ RE<Z>=XsINPUTВВЕДИТЕ IM<2)=Y 45 LETR=ft<N)!LETJ=0 58 FOR 1=1 TO N 68 LETE=X*R-Y*J+A<N-I> 78 UETF=V*R+X*J:LETR=E!LETJ=F 38 NEXT I:PRINT!F1.9! 90 PRINT RE P<X)=R:PRINTIM P<X>=J 188 GOTO 40:END
Для многочлена P(Z) = 8Z8 + 1Z1 + 6Z6 + ... .+ 1Z+1 получим P(l+/-1)=144 —/-113. Программа 3.32.
18 20 30 48 58 60
PRINTОЦЕНКА УСТОЙЧИВОСТИ МНОГОЧЛЕНА INPUTЗАДАЙТЕ СТЕПЕНЬ МНОГОЧЛЕНА N=N:DIM A<N> FOR I=N TO 0 ST/EP -1:PRINT!2.0! A 1= INPUT A<I):NEXT l:LETW=N-2 LETH=W+2 s LETZ=N: LETB=A (. H ): LETN=N-1: LETC=A < N > s LETN=N-2 IF C=0 60T0 140
70 LETD=B*A<ABS<H>):LETN=N+1
90 IF A<ABS<M>><8 THEN 140 108 LETU=3-H:IF U>0 THEN 120 110 LETN=Us&OTO 70 12@ LETW=Z-3:IF ЫО0 THEN 50 130 PRINTМНОГОЧЛЕН УСТОЙЧИВ:STOP 148 PRINTМНОГОЧЛЕН НЕУСТОЙЧИВSEND
61 Приме р. Многочлен A (p) = 2p4 + Зр1+ + pi--f-5/> ~j- i неустойчив, а многочлен Л (р) = = 12// fl2// -f 16//+ 10p2 + 5p+ 1 устойчив. Вычисление значений дробно-рациональной функции комплексного переменного ... -)- a i
a,nZm -\- а,„ - i Z"
производится вычислением комплексных значений многочленов A (Z) и B(Z) с последующим делением их по формуле (3.1). Программа 3.33. дробно-рациональной функции при заданном Z. Так, для приведенного примера МОДУЛЬ = 0,04454466144, ФАЗА = = —65,45048284°. Возможно также вычисление операторной функции F(p), где р = /о> (вводится ReZ = 0 и lmZ = o)), а также вычисление функции F (Z)=\/B (Z) (вводится m=l, Ui=0 и ао=1). Для вычисления дробно-рациональной функции вводится Re 1 = х и I m Z = 0. Деление степенного многочлена А (х) на двухчлен В(х) = (x2-\-b\X-\-bu) выполняется для понижения степени исходного многочлена А (х). Если А (х) —многочлен четной степени, то из него можно выделить квадШ PRINTВЫЧИСЛЕНИЕ ДРОБНО-РАЦИОНАЛЬНОЙ ФУНКЦИИ 26 PRIHTF<Z)=ft<ZVB<Z> КОМПЛЕКСНОГО ПЕРЕМЕННОГО 38 INPUTВВЕДИТЕ СТЕПЕНИ МНОГОЧЛЕНОВ А<2> И B<Z) М,Н 48 ГНИ A(M);B<N)!FOR I=M TO 8 STEP -1 58 PRINTI2.8!ВВЕДИТЕ AI:INPUT ft<I):NEXT I 60 FOR I=H TO 8 STEP -1:PRINTВВЕДИТЕ ВI 70 INPUT BCD: NEXT I 80 INPUTBBEAHTE RE Z, IM ZX,V:LETR=ft<M>:LETJ=0 99 FOR 1 = 1 TO M:LETE=X*R-V*J+A:H-I> 188 LETF=V«R+X*JiLETR=E:LETJ=F:NEXT I 110 LETQ=R!LETU=J:LETR=B<N)sLETJ=0 120. FOR 1 = 1 TO N:LETE=X*R-V*J+B<N-I> 130 LETF=V«R+X*J:LETR=E:LETJ=F:NEXT I 140 LETC=R«R+F«F:LETB=G*R+U*F 158 LETE=U*R-Q!«F: LETP=D/C: LET I =E/C 168 PRINT!F1.9!RE F<Z>=PiPRINT IM F(Z>=I 178 LETMlt=SQR<P*P+I*I):LET6=ATN<I^P) 175 PRINTМОДУЛЬ М=М 188 PRINTФАЗА В РАДИАНАХ Q=Q 198 PRINTФАЗА В ГРАДУСАХ Q=Q*188/#PI 200 60T0 88:END К о и i p о лъныи приме р. Для функ3 2
zTZZ
+ 2Z
+ Z + 0,2
где Ш----3 и н—5, при Z = 3 + /-2 получим F (3 f /" 2) = 0,01850739412 — /- 0,040551793708. Программа 3.33 обеспечивает также вычисление модуля
ратичный множитель В(х) и использовать операцию деления для исключения двух корней, полученных из решения уравнения В(х)=0. В общем случае деление А (х) на В(х) дает многочлен D(x) и остаток R(x) = г |*+ /-0Программа 3.34. Пример. Для выражения
15x4+ МОДУЛЬ F(Z) =-\l]R и фазы ФАЗА / (Z) =arctg [Irn F (Z)/Re F (Z)] Программа 3.34.
А(х) В(х) получим остатке R(x) = — 1 JC —(— 5. 125 при 05 PRINTДЕЛЕНИЕ МНОГОЧЛЕНА А<Х) СТЕПЕНИ N 18 PRINTНА ДВУХЧЛЕН А <. X > =Х2+В 1жХ + В8 28 INPUTВВЕДИТЕ N»Bb6e N/OB:BIM ACN) 38 FOR I=H TO 8 STEP -1 48 PRINT!2.8!ВВЕДИТЕ КОЭФФИЦИЕНТ АI = 45 INPUT A<I>:NEXT I 56 LETY=A<N>:LETN=N-1:LETX=A<N):LETN=N-1 60 FOR I=N TO 8 STEP -1 88 60SUB 188:NEXT I 98 60T0 120 108 LETB=X-V*C::LETE=A< I >: LETA< I >=V 118 LETX=E-V«B:LETV=D;RETURN 128 PRINTIF1.9!ОСТАТОК R<X)=V*X + CX> 130 PRINTКОЭФФИЦИЕНТЫ МНОГОЧЛЕНА-ЧАСТНОГО 148 FOR I=N TO 0 STEP -1 158 PRINT!2.0!AI=!F 160 NEXT I SEND
62 Программа 3.35. 85 PRINTВЫЧИСЛЕНИЕ P<C> И ДЕЛЕНИЕ Р<Х) Hft <Х-С> 18 INPUTВВЕДИТЕ ЗНАЧЕНИЯ Н/С NrC:DIM fl<N) 20 FOR I=N TO 8 STEP -1 ЗЭ PRINT!2.8!ft I=:INPUT Ad)! NEXT I . 48 PRINT!2.0!BN-1=!F1.9!A(N> 56 FOR I=N-1 TO 0 STEP -1 66 LETA<I>=A<I>+A<I+1>*C
70 IF IO0 THEN PRINT2.0!B1-1=!F1.9!AU> 88 NEXT l:PRIHT!F1.9!P<X>=A<0):END Программа 3.36. 10 PRIHTУМНОЖЕНИЕ МНОГОЧЛЕНА А<Х) СТЕПЕНИ И1
38 PRINT НА МНОГОЧЛЕН В<Х> СТЕПЕНИ N 30 INPUTВВЕДИТЕ М> N M,N:DIM ЙО1+М+П 48 FOR 1=И ТО 8 STEP -1 50 PRINT!2.0!AI=:INPUT A<OsNEXT I 60 FOR I=N+M TO M STEP -1 70 PRINT!2.@!BI-M=sINPUT U 80 FOR J=M TO 1 STEP -1 90 l_ETA<J+M+l)=A<J>*hl+A<J+M>!NEXT J 180 LETA<M+1>=A<0>*W 110 PRINTI2.0!C1=!F1.9!A<M+H+l)sNEXT I 120 FOR 1=M-1 TO 8 STEP -1
130 PRINT!2.0!CI=!F1.9!ft(I+M+O 140 NEXT I:PRINTКОНЕЦ ВЫЧИСЛЕНИЙ:END
Вычисление значения полинома Р(х) — —а.,х"-\-а„ i.r"
! + ... t "i.f-|- аи в точке х~с. и деление /(л) на (х.....с) выполняется но следующему алгоритму. 1. Вводим коэффициенты а„, и„ . i, ... . . ., а,, аи полинома Р (х).
2. Задаем а;~-а„ (i = n). 3. Преобразуем а, по рекуррентной формуле а, = а,-\-а< \С с помощью цикла с управляющей переменной i, меняющейся от значения я — 1 до 0 с шагом 1. 4. На каждом цикле п. 3, кроме .1 = 0, выводим значения #, = а, , полинома В (х) = = А (х)/(х — с)=Ь„ !А-" l
+bn--2x""-+ ... ... -\-b\x-\rbu, имеющего порядок (/г—1). 5. По окончании цикла по п. 3, 4 выводим Р(х)--=аи.
Если с > - корень Р(х), то деление Р(х) На (х — с) может применяться для понижения степени многочлена и поиска его очередного корня. Программа 3.35. П р и м е р. Для многочлена Р(х) ==ЗА"! + + 2х2 -- Ъх -\- 7 при га = 3 и t-—3 получим В (х) =Ъх+ I \х + 2Ь и I (с) =91. Умножение многочлена А (х) ^=a,,,.v" -j--\-а,„ . \ х" + -\-a\X-\~аи степени m на многочлен В (х) = b„х" + b„ i.v" " + + ^i.v4-+ 6d дает многочлен (.!v) — <",, , ,..v" + 4-Cmf;i ix" *" 4 4-<i-H--i степени (m-\-n). Эта операция выполняется но следующему алгоритму. I. Вводим коэффициенты а,,,, «™- :. ..., п\, а».
2. Организуем внещний цикл вычислений С[, задав начальное значение управляющей переменной цикла г= (п-\-т) и конечное значение т с тагом — 1. В начале каждого цикла вводим Ь, . ,„ и переходим к п. 3. 3. Организуем внутренний цикл с умриь ляющей переменной /, меняющейся о\ j - т до 1 с шагом 1. В этом цикле преобразуем коэффициенты многочлена А(х) но формуле а( + ,,.ц =a-sb,.. т + а, ;.,„. 4. При выходе из внутреннего цикла вычисляем а„,ц-1 =аиЬ, - ш, выводим на печать с, = а2;„ + 1 и переходим к п. 2 (т. е. завершаем внешний цикл). 5. С помощью цикла с управляющей неременной 1, меняющейся от i = m— 1 до О с шагом —1, выводим на печать последние т значений с, = а; 4 т -1 Программа 3.36.
Пример. Для А(х)= ix* + З.г 4 2* + 4-1*+0,5 и В(х) =2^4-1*4-0.4 получим многочлен С (*) = 8х6 4- IОх5 4- 8,6*4 45,2*3 4 4-2,8х24-0,9х4-0,2.
§ 3.4. Вычисление ортогональных многочленов Ортогональные многочлены Чебышева /„(*) =«)(*) являются решениями дифференциального уравнения второго порядка dbi ,
,
(.3.2) Они могут вычисляться с помощью явного выражения 7\,(*)==c.os (n arceos*)
(3.3)
или по рекуррентным формулам Т, i i(x) — = 2*7",-(*)— Г,-_|(*) при То(х)=\ Дифференциальному уравнению (3.2) соответствуют и решения в виде функций 63 Программа 3.37. 10 PRINT ВЫЧИСЛЕНИЕ МНОГОЧЛЕНА ЧЕБЫШЕВЙ 15 INPUT ВВЕДИТЕ N=N 28 INPUT МНОГОЧЛЕН 1-ГО ИЛИ 2-ГО РОДИ R 30 INPUT ВВЕДИТЕ Х=Х 48 IF R=2 THEN €S 50 PRINT TN<X)=COS<N*ACS<X>> : 60T0 30 60 PR I NT UN <X>>=SIN<<N+1> «ACS С X > > --SIN < ACS < X)) 78 GOTO 30 : END Программа 3.38. IS PRINTВЫЧИСЛЕНИЕ МНОГОЧЛЕНА ЛЕМАНДРА 2@ INPUTВВЕДИТЕ Н>=2 N=N 25 INPUTВВЕДИТЕ Х=X:LETA=1:LETB=X 30 FOR 1=1 TO N-l 48 LETP=<<2*I + 1>*X«B-I*AV<I + 1> 50"LETA=B: LETB=P: NEXT I 68 PRINTPN<X>=P:GOTO 25iEND
Программа 3.39. 18 PRINT ВЫЧИСЛЕНИЕ МНОГОЧЛЕНА ЛАГЕРРй 20 INPUT ВВЕДИТЕ N>=2 N=H 30 INPUT ВВЕДИТЕ X=X : LET A=l : LET B=l-X
и
7"i(*j = *.
40 FOR 1=1 TO N-l
50 LET L=<<2*I + 1-X>*B-I*AV<I + 1> 68 LET ft=B : LET B=L : NEXT I 79 PRINT LN<X)=L GOTO 39 : END
Бесселя второго рода Un(x): x, уравнения £/„(*) = sin(n arccosx)=—-------------3— ВД,
(3.4)
Они также могут вычисляться с помощью рекуррентных формул Ui+l=2xUi(x)-Ui-l(x), /=1, 2, ..., п-1, при Uo(x)=l и U\(x) = 2x.
Поскольку в большинстве версий языка бейсик предусмотрено вычисление обратных тригонометрических функций, вычисление Т„(х) и U„(х) целесообразно выполнять по явным формулам (3.3) и (3.4). Программа 3.37. Контрольные примеры. Г3(0,1) = = —0,26; {/3(0,1)=—0,392.
Ортогональные многочлены Лежандра Рп(х) являются решениями дифференциального уравнения ~dx~
(п+ 1) 00 = 0 и могут вычисляться по рекуррентным формулам Pi+ ,W = ((2i+ 1) xP{x)-iPi-i(x))/(i+ 1), (=1, 2, ..., n-l, при Pdx)=\ и Р\(х) = х. Программа 3.38. Пример. Для л = 4 их = 3 Р*(х) = 55,375. Ортогональные многочлены Лагерра Ln(x) являются решениями дифференциального 64
da
и вычисляются с формул помощью рекуррентных i=l, 2, ..., п—1, при L0(x)=l и L\(x)=\—x. Программа 3.39. Пример. L,o(3)= —0,7000223214; L,0(10) = 27,98412698. Ортогональные многочлены Эрмита Н„(х) соответствуют решениям дифференциального уравнения dx2
da 2х—----\-2па> = dx и вычисляются по рекуррентным формулам Я,+ | (х) =2хН, (х) — 2Ш,-_| (х), i=l, 2, ..., п—1, при Н0{х)=\, Н,{х) = 2х. Программа 3.40. 18 PRI NTВЫЧИСЛЕНИЕ МНОГОЧЛЕНА ЭРМИТА 20 INPUTВВЕДИТЕ N>=2 N=N 30 INPUTВВЕДИТЕ Х=Х: LETA=ls LETB=2*fX 40 FOR 1=1 TO N-l 50 LETH=2*X*B-2*I*A 60 LETA=B:LETB=H.NEXT I 70 PRINTHNCX)=H:GOTO 30:END
П р и м e p. //,0 (3) = -3093984, Hw (10) = = 8,09327821-1012.
§ 3.5. Операции с матрицами
Матрица — двумерный массив чисел вида аи 0i2 fli3 021 <?22 #23
а1п атп
(3.5) Матрица характеризуется размерностью шХп, т. е. произведением числа столбцов п на число строк пг. Квадратная матрица имеет пг = п и размерность п2 = /гХ«- У простейших ПЭВМ предусмотрено формирование одной-двух матриц размерностью 10Х10 с коэффициентами Аи (например, у ПЭВМ класса Pocket Computers FX-702P можно формировать одну матрицу 10X20 или две матрицы 10X10, причем нумерация строк и столбцов начинается с 0, а не с 1). У более сложных ПЭВМ коэффициенты матрицы могут задаваться любой переменной, например B,j, ZKL и т. д. Ввод матрицы, обычно задается по строкам с помощью двух циклов. 1. Задаем значения / от 1 (или 0) до М (или М— 1) во внешнем цикле. 2. Задаем значения J от 1 (или 0) до N (или N— 1) во внутреннем цикле. 3. С помощью оператора INPUT задаем ввод А (/, /) каждого члена матрицы. Перед операторами ввода матрицы необходимо задать размерность массива, например, с помощью операторов DIMA (M, N), СОМА (М, N) или других (зависят от конкретной версии бейсика, применяемой в ЭВМ). Программа 3.41.
18 20 30 40 59
РЕМВБОД ЭЛЕМЕНТОВ МАТРИЦЫ M*N INPUTВВЕДИТЕ M.-N M..N: DIM й<М.>Ю FOR 1=1 ТО M:FOR J=l TO N PRINT!2.0!ВВЕДИТЕ ЭЛЕМЕНТ AI.-J INPUT Aa.»J)iNEXT J:NEXT I
500 END В ЭВМ с версией бейсика, имеющей матричные операторы, программа ввода существенно упрощается пример в § 2.2). Диагональная матрица является разновидностью квадратной матрицы вида А= 0 0 ппп
(см.
0
У нее все элементы нулевые, кроме диагональных, т. е. А(1, 1)ф0 при / = /. Программа 3.42. Единичная матрица — разновидность диагональной матрицы, у которой Л(/, /)=1 при / = /. Программа 3.43. 10 REMФОРМИРОВАНИЕ ЕДИНИЧНОЙ МАТРИЦЫ 20 INPUTВВЕДИТЕ N=N:IUM А<Н,Ю 30 FOR 1=1 ТО N:FOR J=l TO N 40 IF IOJ THEN 60 50 LETACI.J> = l:60T0 70 60 LETAa.».J>=0 70 NEXT J:NEXT I 500 ENB
Нулевая матрица — очищенный массив, т. е. матрица, у которой все А (/, /)=0. Для получения такой матрицы иногда могут использоваться специальные операторы полной очистки памяти данных (например, VAC у ПЭВМ FX-702P), исполняемые до ввода всех исходных данных. Если нулевую матрицу нужно формировать по ходу вычислений, можно использовать следующую программу: Программа 3.44.
IS REMФОРМИРОВАНИЕ НУЛЕВОЙ МАТРИЦЫ 20 INPUTВВЕДИТЕ M..N М.. Hi DIM А<М.»Ю 39 FOR 1=1 ТО M:F0R J=l TO N 40 LETA<I..J>=0!NEXT JsNEXT I 508 END
Операции с константами сводятся к сложению или вычитанию элементов матрицы А (/, /) с константой, например X, или умножению А (/, J)*X или делению A (/, J)/X на константу. Все они могут проводиться в ходе ввода матрицы (см. программу 3.45). Программа 3.45. 10 PRINTУМНОЖЕНИЕ МАТРИЦЫ N*N 15 PRINT-HA КОНСТАНТУ С 28 INPUTВВЕДИТЕ N=N 25 INPUTВВЕДИТЕ ССЛИМ A<N>N> 30 FOR 1=1 ТО N: FOR J=l TO N
40 PRINT! 2.9! ВВЕДИТЕ ЭЛЕМЕНТ filrJ 58 INPUT A<bJ)!LETA<bJ>=A<bJ>«C 60 NEXT J:NEXT I 500 END Вывод матрицы на печать организуется, как и ввод, с помощью двух циклов. Однако вместо оператора ввода во внутреннем цикле используется оператор вывода PRINT. Целесообразно вывод организовать так, чтобы индицировались индексы / и / каждого элемента в формате без дробных частей (см. пример вывода для программы 3.45). Программа 3.46. 10 REMФОРМИРОВАНИЕ ДИАГОНАЛЬНОЙ МАТРИЦЫ 20 INPUTВВЕДИТЕ N=N:DIM A<N>N> 30 FOR N:FOR J=l TO N 40 IF IOJ THEN 60 PRINT! 2.0! ВВЕДИТЕ AIJJ INPUT A<bJ>s60T0 70
1=1 ТО
70 FOR 1=1 TO NiFOR J= 88 PRINT!2.0!AI*J 90 NEXT JiNEXT I 508 END TO N A<bJ>
50 55 70 NEXT JiNEXT 500 END
I Пример. Для 1=2 и матрицы 1 2 3 А= 4 5 6 7 8 9 3 В. П. Дьяконов
выполнение совместно программ 3.45 и 3.46 65 i
даст такие результаты (элементы выводятся . А 1, 1 ---2 А I, 2 ^ 4
Для матрицы 2X2, построчно):
|,
— и-wa-ua, -, ~Н-Л-AI-JMI\ \-
А 3, 3 Для матриц небольшой размерности вывод можно задать и в естественном для матрицы виде. Программа 3.47. 70 PRINT Н<ЫЪЙ<Ь2>»А<ЬЗ:> 88 PRINT Ai2*i:>.>A.;2.-2>.*A<2>3:> 98 PRINT й<3>1>.А<3>2>>А<3>3> 580 END Пример. Для приведенного выше при мера совместное выполнение программ 3.45 и 3.47 ведет к выдаче результатов в форме 2 4 6 8
II)
12
14 10 ]« Транспонированной матрицей Ат называется квадратная матрица, у которой столбцы соответствуют строкам квадратной матрицы
А, например; I 2 3 4 5 67 8 9 Нетрудно заметить, что диагональные элементы у матриц А и А одни и те же и операция транспонирования матрицы А сводится к перестановке остальных элементов симметрично относительно диагонали. Это реализуется с помощью соотношения а,, — а„ при \ф\. Программа 3.48. для матрицы 3X3 и О— (ii\ta-n— аг.Мл) ((iv,U4i и-мИ4.;) + {a, ,a-i — c/i iu..j) (iii2a.i4 --и-иа-и) + ]
(U] ia-24— Ulldsi)
(U:\o_a,Л~- U;;,jU,|;») +
+ («uf23— U13O22) (Оз|О<4 —4:14041) + --)- i О 14Й-;;: — a I :№ 1) I U:i I «.« — Wj3O4\)-\-
4 для матрицы 4X4. Программа 3.49. Прим е р.
0= =-2 Программа 3.50. Пример. 0= Программа 3.51. Пример. £) =
2 —IО1 О 2 1 -3 3 ti -9 I _1 О2
--54 1 __\> Определители матриц с любой размерностью пХп вычисляются но методу Гаусса. Он сводится к преобразованию матриц к треугольному виду с помощью следующих формул преобразования элементов матрицы А (3.5): k- n
а„ -а„ <-II
где /г=1, 2, .. , (п — I) и uwf ""^-0. Преобразование массива А (и,, п) производится в направлении расположения столбцов слева
10 20 30 40 50 6Й
PRINTТРАНСПОНИРОВАНИЕ МАТРИЦЫ INPUTВВЕДИТЕ N=N:DIM A(N»N)/B<N/N> FOR 1 = 1 ТО N8FOR J=l TO N PR I NT! Z. (3! ВВЕДИТЕ АI»J« INPUT A<bJ> NEXT JiNEXT I FOR 1=1 TON:FOR J=I+1 TO N
70 LETC=A<ЬJ>8LETA<ЪJ>=A<J»I):LETA<JrI)=C 80 NEXT Л NEXT I
Э» REMТРАНСПОНИРОВАННАЯ МАТРИЦА ЗАНЕСЕНА НА МЕСТО ИСХОДНОЙ 500 END Определитель квадратной матрицы А — число D, равное сумме л! членов (— 1) а\;\а,г>а,.-,.,...an;,,, каждый из которых соответствует одному из п\~ различных упорядоченных множеств /i, ;>...../„, полученных r-париыми перестановками элементов из множества 1, 2, . . ., п. Определители матриц малой размерности (2X2. 3X3, 4X4) целесообразно вычислять по известным формулам: D= направо. Определитель вычисляется как произведение всех диагональных элементов преобразованной матрицы. Программа 3.52. Проверка программы производится по примерам, приведенным выше для программ 3.49 и 3.50. Необходимое условие простого метода Гаусса неравенстве элемента ан" нулю на всех этапах преобразования. В случае вй~! = 0 произойдет останов ЭВМ, так как деление для реализации :!аключается в 66 Программа 3,49. Ш PRINTВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ 2*2 28 INPUTВВЕДИТЕ All,A12/й2ЬA2S й,В.-С-D 38 PR I NT ОПРЕДЕЛИТЕЛЬ В= А*В~С*8: END Программа 3.50. 10 PRINTВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ 3*3 20 INPUTВВЕДИТЕ АША12.-А13 н.-В.-С 38 INPUTВВЕДИТЕ Н21/Й22/А23 B..E.-F 40 INPUTВВЕДИТЕ АЗЬ А32/АЗЗ &, Hr I 50 ЦЕТ3=Аж(Е*I-H*F) +С*<D*H-6*E!) +В*<F*6-П*I > 60 PRINTОПРЕДЕЛИТЕЛЬ D=£:END
Программа 3.51 10 PRINTВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ 4*4 15 IiIM.H<4,-4>:LETS=@ 20 FOR 1=1 ТО 4:FOR J=l TO 4 30 PRINTВВЕДИТЕ ЭЛЕМЕНТ А= !2.@! Г. J 40 INPUT A<I.J>:HEKT JSNEXT I TO
LET0=i:LETP=2."LETQ=3!LETR=4:60SUB 120 60 LET0=3:LETP=i:LETQ=2!LETR=4:b0SUB 120 78 LET0=l:LETP=4:LETQ=2:LETR=3:60SUB 128 80 LETn=?:LETP=3:LETQ=l.:LETR=4:G0SUB 120 Я8 LET0=4:LETP=2:LETG=1:LETR=3: &OSUB 120 1FI0 LET0=^iLETP=4:LETQ=l!LETR=2:60SUB 12Й 110 PRINT!Fl.9!ОПРЕДЕЛИТЕЛЬ D=S:STOP 120 LETB=Aa.-0>*A<2>P>-й(ЬР>*А<2.-0) 130 LETS=S+B«<A(3- 0)«Й(4r R>-A<3/ R)«A<4> Q> : 140 RETURN!END Программа 3.52. 19 PRINTВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ 28 INPUTВВЕДИТЕ ПОРЯДОК ОПРЕДЕЛИТЕЛЯ N=N 38 DIM A<N>N>sLETP=l 48 FOR 1=1 TO H:FOR J=l TO H 50 PRINT!2.8!ВВЕДИТЕ ЭЛЕМЕНТ АIt J 60 INPUT АО/J):NEXT JsNEXT I 78 FOR 1 = 1 TO N-UFOR ,J=I + 1 TO N 80 LETACJ- 1)=А<..1П:ь--Аа.. OiFOR K=I + 1 TO N Э0 LETACJ.FK)=A(JrK)-A<..l. I )«A<bK>!NEXT Y. 100 NEXT J:LETP=P»:A<I.. I>:NEXT I 110 LETP=P:«A<N> N> PRINT Fl. 9! ОПРЕДЕЛИТЕЛЬ D= P: END
Программа 3.53. 10 15 20 25 30
РИЫТВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ ПО МЕТОДУ ГАУССА PRINTС ВЫБОРОМ ГЛАВНОГО ЭЛЕМЕНТА ПО ВСЕЙ МАТРИЦЕ INPUT "ЗАДАЙТЕ ЗНАЧЕНИЕ N=N:DIM А(Н,Ю FOR 1=8 ТО N-l:FOR J=0 TO N-1 PRINT.!2.0!ВВЕДИТЕ ЭЛЕМЕНТ А1 + 1/.1+1=
48 INPUT A<bJ):NEXT JsNEXT I:LETP=0 56 LETZ=l:LETD=l:FOR K=8 TO N-2 60 LETE=8sF0R I=K TO N-1 70 FOR J=K TO N-1:IF ABS<E)>=ABS<A<I/J)) THEN 90 80 LETE=Aa..J>!LETB=l:LETC=J:NEXT JsNEXT I 90 IF K=B THEN 120 100 FOR J=K TO N-l:LETS=A<K/J) 118 LETAiK.. J)=A<B/ J>sLETA<B.J>=S!NEXT J:LET2=-Z 120 IF K=C THEN 158 125 FOR I=K TO N-1 130 LETS=A<bK>!t_ETAa..K>=A<bC>
148 LETA<bO=S:NEXT I:LET2=-Z 158 168 170 180 190
FOR I=K+1 TO N-l:LET6=A<bK)^A<K-K>. FOR J=K TO N-l!LETA<I/J)=A<bJ;-6«A<K».i> NEXT JsNEXT Is NEXT К FOR 1=8 TO N-l:LETD=D*A<bI> NEXT IsLETB=B*ZsPRINTОПРЕДЕЛИТЕЛЬ П=!F1.9!D:END
67 на 0 считается некорректной операцией. Большие погрешности возникают, если a4V~[)=^O, H0 является малым числом. Для повышения точности вычисления определителя и исключения останова ЭВМ в ходе вычислений применяются варианты метода Гаусса с выбором главного элемента по столбцу, строке или по всей матрице. В последнем случае перед преобразованиями в матрице А (3.5) выбирают наибольший по модулю (главный) элемент, допустим ац. Далее переставляют первую строку матрицы с i-й строкой (это и есть выбор главного элемента по строке), а первый столбец переставляют с /-м (выбор главного элемента по столбцу). При каждой такой перестановке знак определителя меняется, поэтому результат нужно умножить на ( —1)р, где Р — число перестановок. Программа 3.53. Пример. D= 1 2 3 4 1 2 4 6 1 2 4 8 :
9 8 = -20.
6
7
Отметим, что вычисление этого определителя по программе 3.52 ведет к останову ЭВМ с индикацией ошибки (некорректная математическая операция). Обратной матрицей называется матрица А~\ произведение которой на заданную матрицу А дает единичную матрицу. Обращение матрицы А заключается в нахождении обратной матрицы А~[. Для обращения матрицы А используют следующие основные соотношения: O1 a 2 n 022
...
аи
0„2
...
ппп
Х.2
Х\п
Х2
...
ХЧп
Х
Х„2
...
Х„п
1
0
0
0 21
* п * 21
2
п\
0
1
0
0 1 0 Перемножая матрицы А и А~\ й
2
п систем уравнений с п2 неизвестными: п\ = 1, ! = О,
+ amxn \ = 0.
011*12 + 012*22+ ... +Ои*„2 = 0, 081*12 + 022*22+...+а2п*л2=1, пп 1*12 + О„2*22 + + 0„„*„2 = 0. получим (1) (2) (Л)
Решение этих уравнений определяет значения всех элементов матрицы Л~*ц. Оно выполляется по методам, описанным в § 4.1. Для простых матриц обращение выполняется по программам, реализующим готовые «рецепты» процедуры обращения. Программа 3.54.
10 PRINTОБРАЩЕНИЕ МАТРИЦЫ 2*2 2@ INPUTВВЕДИТЕ AlbftlS А;В 25 INPUTВВЕДИТЕ А2ЬА22 C>D 3S LETE=C«Bs LETF=As LETE=D*F-E:LETA=B/E 40- LETD=F/E: LETC=-C/-Es LETB=-B/E 50 PRINT ОБРАЩЕННАЯ МАТРИЦА 60 PRINT А/В:PRINT CD:END A=
Пример. 7 845 ,_ 1,66666667
—2,666666667 ~ —1,333333333 2,333333333
Программа 3.55.
Пример. 4 8 0 8 88201 0,083333 -0,083333 0,66666 0,083333 0,041666 —0,33333 — 0,16666 0,16666 —0,33333 (указаны 5 значащих цифр результата). Программа 3.56. Проверить эту программу можно по примеру, приведенному к программе 3.55. Сложение и вычитание для двух матриц А и В с одинаковой размерностью производится по формуле где 1=1, 2, ..., m и / = 1, 2..... п. Здесь С(/ — элементы результирующей матрицы С. Программа 3.57. 05 PRINTСЛОЖЕНИЕ МАТРИЦ 10 INPUT1 ВВЕДИТЕ M>N M,N 15 DIM A<M>N>/B<M»N>..C<M>N> 20 FOR 1=1 ТО Ms FOR J=l TO N 30 PRINTI2.0!ВВЕДИТЕ AIjJ 40 INPUT A<bJ):NEXT JsNEXT I 50 FOR 1=1 TO M:FOR J=l TO N 60 PRINTВВЕДИТЕ BI/J 65 INPUT B<bJ> 70 LETC<bJ)=A<bJ)+B<bJ) 80 NEXT J:NEXT I:END
Пример. Для m = 2, n=3 1 23456 7 89 8 76 8 10 11 12 12 12
Умножение матриц А с размерностью га и В с размерностью nXl выполняется формуле где /=1, 2, ..., / и k=l, 2, ..., m. Получаемая матрица С имеет размерность шУ,1.
68
Программа 3.55 10 PR I NT ОБРАЩЕНИЕ МАТРИЦЫ 3*3: DIM A<3/3> 15 INPUTВВЕДИТЕ A11/A12/A13 АСЫ )>A(b2)i й«ЬЗ) 20 INPUT ВВЕДИТЕ A21.- A22, A23 A (2.. 1), A (2.. 2 > r A < 2/ 3 > 25 I NPUT ВВЕДИТЕ A31 / A32> A33 A (.3,1 > г А С 3> 2> > A < 3> 3 > 38 FOR K=l TO 3
35 LETA=A < 2> 1 > --A < Ы > s LETB=-A 40 1_ЕТС=А<2>2>-А*Аа/2>:1_ЕТВ=А<2>3;| 50 LETA=A<3, lVftd» 1>:LETA<2,3>=-A 60 LETAC2/ 1)=А<3/2>-АжА<Ь2) 70 80 / 90 LETA<3/2)=A< Ь 3>^A<1/1) 100 LETAC3/3> = l/ft<b 1 >:LETAU, 1 >=C 110 LETA<b2>=D:LETA(b3>=B:NEXT К 120 PR INTОБРАЩЕННАЯ МАТРИЦА
130 PRINT А<:ЫЪА<Ь2>,А<ЬЗ> 140 PRINT A<2/l>;A<2/2)/A<2/3) 15@ PRINT AC3, l>,A<3,2>/A<3>3>sEND Программа 3.56. 05 PRINTОБРАЩЕНИЕ МАТРИЦ МЕТОДОМ ГАУССА 18 PRINTС ВЫБОРОМ ГЛАВНОГО ЭЛЕМЕНТА 15 INPUT-ЗАДАйТЕ N=N:DIM A<N> N^PCN/N) 20 DIM В<Ю,С<Н..Ют6<Ю>Х<Н> 25 FOR 1=1 TO NiFOR J=l TO N 38 PRINTI2.0! ВВЕДИТЕ А Г > -У = : INPUT ft(bJ) 35 LETP<bJ)=A<b.J>:NEXT J:NEXT I
40 FOR J2=l TO N:FOR 1=1 TO N 50 LETB<I)=0!NEXT I 69 LETB<J2)=1 70 FOR J3=l TO N:FOR J4=l TO H 80 LETA(J3/J4>=P<J3...J4>:NEXT J4:NEXT J3 85 60SUB 100!FOR 1=1 TO N 90 PRINT!2.0!XISJ2=!F1.9!X<I> 95 NEXT IsNEXT J2:ST0P 100 LETN1=H-1! FOR K=l TO N1 110 IF ABS<A<K*K>>>0 GOTO 200 128 LETKl=K+l:FOR M=K1 TON 138 IF ABS<A<M>K))>B 60T0 158 140 GOTO 165 158 FOR L=l TO N:LETU=A<K.L>!LETA(K.»L>=A<M/L:) 168 LETA<M/L)=U:NEXT L:NEXT M 170 LETU=B<K>:LETB<K)=B<M>:LETB<M)=U 208 I_ETG<K>=B<K>/A<K>IO:L.ETK1=K+1 218 FOR I=K1 TO N:LETB<I>=B<I)-A<bK>*6<K) 228 FOR J1=K TO N:LETJ=N-J1+K".LETC<K,.J>=A>:K,.J>/A<:K.»K> 225 LETA(bJ)=A<b.J>-A<I..K):*C<K/J> 238 NEXT JHNEXT Is NEXT К 240 LETM=N!LETX<M)=B<MVA(M/M> 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)=&<M)-S«IF M>1 GOTO 250 288 RETURN:END Программа 3.58. 18 PRINTУМНОЖЕНИЕ МАТРИЦ M:«N И N*L" 28 I NPUTВВЕДИТЕ M..N.»LMT N/L 38 DIM A<M>N>>B<N>L>>C<N/I.) 40 FOR 1 = 1 TO Ms FOR J=l TO N 58 PRINTI2.0!ВВЕДИТЕ A V, Js INPUT A<bJ) 68 NEXT JSNEXT I 78 FOR 1=1 TO N:FOR J=l TO L 88 PRINTВВЕДИТЕ В Г.< Js INPUT B(I.-J> 98 NEXT JSNEXT I 100 FOR K=l TO MsFOR J=l TO L:LETS=0 110 FOR 1=1 TO NsLETS=S+A<IOI>«B<b J)sNEXT I 120 LETCCK>J>=S:NEXT JSNEXT К 130 PRINTРЕЗУЛЬТАТ 140 FOR K=l TO (isFOR J=l TO L 158 PRINT! 2.8! CK.- J= !F1.9!C<K/ J) 168 NEXT ЛИЕХТ KsEND
69 Программа 3.58.
Пример. Для га = 4, л = 5, / = 3 1 3 1 3 4 2 5 0 5 1 3 3 6 9 2 1 2 3 X 1 3— 2 4 8 ^ 0 0 1 1 3 2 5 8 1 7 4 1 1 3 2 12 3 4 5 6 7 8 9 123 4 56 7 8 9 12 Умножение матрицы на вектор R = — \/\, г-2, ..., rm\ выполняется по формуле где ( = 1, 2, .... т. В результате получаем вектор t/ = ji»i, vi.....vm\. Скалярное произведение векторов А = = {oi, а2.....а,,} и В = {Ьи Ь2, ..., Ь„\ есть число п
где i= 1, 2.....п. Ввиду простоты составления программ для двух последних операций они не приводятся.
§ 3.6. Вычисление и комбинаторика Факториал при целом п 5
факториалов 2-1 (3.6) с особым случаем 0! = 1 у ряда ПЭВМ может вычисляться микропрограммно (например, с помощью оператора ! у ПЭВМ FX-702P). Если такой возможности нет, вычисление факториала проводится по формуле (3.6). Программа 3.59. 05 PRINTВЫЧИСЛЕНИЕ ФАКТОРИАЛА
18 29 30 50
INPUT ВВЕДИТЕ ЧИСЛО ЧИСЕЛ N=N LET 1=0: LET P=l LET 1=1+1: LET P=P«I 48 IF KN THEN 30 PRINT ФАКТОРИАЛ N!=P 70 60T0 10: END
П р и м e p. 5! = 120, 10! = 3628800. При я>70 значения п\ выходят за пределы разрядности большинства ПЭВМ (л!> 10"). Для приближенного вычисления факториала больших чисел п применяется формула Стирлинга [10, 36]. Функция л!! вычисляется по формуле ,!__[л(л — 2)-...-l при нечетном л,
"" 1 л(л — 2)-...-2 при четном п. Программа 3.60. Пример. 7!! = 105, 8!! = 384. Число перестановок р„ = п\, а число размещений из л элементов по т Л? = л!/(я —/и)!. Число сочетаний из п элементов по т причем я>1 Й Программа 3.61. Пример. Для лучим Pi о = 3628800, Л?0 и
п =10
по-
„ = 252. Подобным способом можно вычислять и другие функции, содержащие члены с факториалами. Программа 3.60. Й5 PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ ИМ 10 INPUTВВЕДИТЕ ЧИСЛО N=N:LETA=N/2iLETB=l 15 FOR 1=1 ТО 10 20 IF A-INT<A>=8 THEN 60 30 FOR 1=1 TO N STEP 2 40 LETB=B*I:NEXT I 50 60T0 80 68 FOR J=2 TO H STEP 2 78 LETB=B*J:NEXT J 80 PRINTЗНАЧЕНИЕ N!!=В 90 GOTO 10:END Программа 3.61. 10 PRINTРАСЧЕТ ЧИСЛА ПЕРЕСТАНОВОК* РАЗМЕЩЕНИЙ 20 PRINTИ СОЧЕТАНИЙ ИЗ N ЭЛЕМЕНТОВ ПО М 30 INPUTВВЕДИТЕ ЦЕЛЫЕ ЧИСЛА N* M N,M 40 LETX=N:GOSUB 180sLETP=R 50 LETX=N-M:60SUB 60 LETX=M:SOSUB 70 PRINTЧИСЛО ПЕРЕСТАНОВОК РИ=Р S0 PRINTЧИСЛО РАЗМЕЩЕНИЙ A M-N=A 90 PR I NTЧИСЛО СОЧЕТАНИЙ С M.-N=C:STOP 100 LETR=l:F0R I=X TO 1 STEP -1 110 LETR=R*I:NEXT I:RETURN:END 70
§ 3.7. Преобразования координат и векторный анализ Преобразование координат из декартовых в полярные на плоскости описывалось в § 2.3. Преобразование декартовых координат X, У, 7. в сферические в пространстве (рис. 3.1) проводится по формулам VTp+, Qani <p = arccos(Z/#), где R — полярный радиус, Q — долгота и Ф — широта. Обратные преобразования проводятся по формулам X — R sin ф cos Q, Y = R sin ф cos Q, Z — = R cos ф. Таким образом, если положить Z = 0, Ф = 90°, то из этих формул вытекают формулы для преобразования декартовых координат в полярные и наоборот на плоскости. Программа 3.62.
Рис.
3.1. Декартова
и
сферическая координат
18 PRINTПРЕОБРАЗОВАНИЕ КООРДИНАТ В ПРОСТРАНСТВЕ 20 PRINTСФЕРИЧЕСКИХ В ДЕКАРТОВЫ -КОД в 38 PRINTДЕКАРТОВЫХ В СФЕРИЧЕСКИЕ-КОЛ 1 40 ШРиТЗАДАйТЕ КОД As IF A=l THEN 110
58 INPUTВВЕДИТЕ ПОЛЯРНЫЙ РАДИУС R=R 60 INPUTBBEflHTE ДОЛГОТУ-УГОЛ<ГРАД) e=Q:LETQl=RAD<Q) 70 ШРиТВВЕДИТЕ ШИРОТУ-УГОЛ<ГРАД> F=F:LETF1=RAIKF> 88 LETX=R*SIN<F1>*COS<Q1>!LETY=R*SIN<F1>*SIN«31> 90 LETZ=R*COS<Fl>!PRINTflEKAPTOBH КООРДИНАТЫ
108 PRINTX=X,V=V>Z=Z:STOP US INPUTВВЕДИТЕ КООРДИНАТЫ X,V,Z X,Y>Z 120 LETR=SSR < X*X+Y*Y+Z*Z>:LETF=ACS <Z/R > s LETQ=ATN < V/X) 130 PRINTmHWPHblM РАДИУС R=R/ДОЛГОТА Q=DE&<Q)TPA*
140 PRINTШИРОТА F=DE6<FVГРАД:END Приме р. ДЛЯ R= 10, Q = 40° и ф = /г = = 60° получим (код 0) * = 6.634139482, Y =--= 5,566703992 и Z = 5, а для X=Y = Z=U) получим (код 1) /?= 17.32050808, Q = 4S° и ф = /г=54,73561032°. Преобразование декартовых координат на плоскости при сдвиге и повороте координатных осей (рис. 3.2) осуществляется по формулам (далее () = Q) ( Y=(Y— — (X — Xtl) sin Q,
где
Х
и
К — новые координаты точки (X, Y), Хо и Ко — координаты центра новой системы координат. Программа 3.63.
(0,0) X Рис. 3.2. Преобразование декартовых координат на плоскости при сдвиге
10 20 30 40
и повороте
PRINTПРЕОБРАЗОВАНИЕ КООРДИНАТ НА ПЛОСКОСТИ INPUTЗАДАЙТЕ УГОЛ ПОВОРОТА ПЛОСКОСТЕЙ <ГРАД> Q=Q LETS=RAD<0>!INPUTЗАДАЙТЕ КООРДИНАТЫ ЦЕНТРА X8,Y0 INPUTВВЕДИТЕ СТАРЫЕ КООРДИНАТЫ X»Y X/Y
осей
В,С
4R LETX1=<X-B)*COS<Q)+<Y~C>»SIN<Q> 58 LETY1=<Y-C>*COS<Q>-<X~B)*SIN<Q>
68 PRINTНОВЫЕ КООРДИНАТЫ 40:END плоскости, имеет длину
D = ^f[X2 — X,f + (Y2— Y,f .
Пример. Для Q = 20°, Xu = 3, У0 = 2, X = 5 и К==5 получим X =2,905445672 и Y =2,135037676. Вектор (отрезок) с координатами начала (Xt, Y\) и конца (^2, Yi), Координаты точки (X, Y), делящей этот отрезок в отношении M/N: NYt+MYi
лежащий на
M + N Y=-
M + N 71 Программа 3.64.
10 PRINTflflHHA ОТРЕЗКА И ЕГО ДЕЛЕНИЕ В ОТНОШЕНИИ M/N 20 ЩРиТЗАДАйТЕ КООРДИНАТЫ ТОЧКИ 1 XbYl XbYl 30 INPUTЗАДАЙТЕ КООРДИНАТЫ ТОЧКИ 2 X2/Y2 X2/Y2 40 LETD=SQR<<X2-Xl)"2+<:V2-Yl)-2) 50 PRINTДЛИНА ОТРЕЗКА В=В 60 INPUTЗАДАЙТЕ M/N M/N 80 LETY=<N*Y1+M*V2V<M+N> 90 PRINTКООРДИНАТЫ ТОЧКИ ДЕЛЕНИЯ ОТ>ЕЗКА 108 PRINTX=X/V=VsENIi
Пример. Для Х,=2,3, К, =4, Х2 = 8,5 и У2 = 0,7 получим 0 = 7,023531875. Задав М = 3 и N = 2, получим А" = 6,02 и К=2,02. Полярными параметрами прямой АХ-\-+ ВК+С = О, лежащей на плоскости (рис. 3.3), являются полярное расстояние от нее до точки (0,0) 2 2 Р=\С\/Л[А +В и полярный угол Q, вычисляемый из соотношений
sinQ=+S/где знак — берется, если С> 0, а знак + , если С<0. Программа 3.65.
У
N Прямая Ах+Ву+С=0
О
х
Рис. 3.3. Полярные параметры прямой на плоскости
10 20 30 40 50 70
PRINTПОЛЯРНЫЕ ПАРАМЕТРЫ ПРЯМОЙ A*X+B*Y+C=6 INPUTВВЕДИТЕ А*В,С АлВ/С LETB=l:IF C>0 THEN LETD=-1 LETF=SQR < A*A+B*D):LETP=ABS < С)/F PRINTКРАТЧАЙШЕЕ РАССТОЯНИЕ ДО ТОЧКИ <0,8> ЫРPRINTУГОЛ Q=BE6<ACS<D*A/F>):END
Пример. Для Л = 3, В=— 4 и С= 10. получим Р = 2, cosQ=—0,6, sinQ = 0,8 и Q= 126,8698976°. Вектор в пространстве с началом в точке (0,0,0) декартовой системы координат и концом в точке (X, Y, Z) имеет длину и образует с осями координат углы a = arccos (X/D), p = arccos (Y/D)
и T = arccos (Z/D). Программа 3.66. 19 PRINTДЛИНА ВЕКТОРА И УГОЛ МЕМДУ НИМ И КООРДИНАТНЫМИ ОСЯМИ 20 INPUTЗАДАЙТЕ КООРДИНАТЫ КОНЦА ВЕКТОРА X/V>Z X/V/2 30 LETB=SQR<:X!«X+V*Y+2*Z> LETA=X/D! LETB=V-B: LETC=2-H 48 PR I NT COS А ЛЬЧ>А= A/ COS БЕТ A= b, COS ГАММА= С 50 PRINT АЛЬЧ>А=ВЕ6<АСЗСА>>..BETA=DE6<ACS<B)>/ 60 PRINTГАММA=DE6<ACS<C))s60T0 20sEND
72 Пример. Для Х = 2, Г=—2 и Z= —1 получаем cos a = 0,666666667, cosp = = —0,666666667, cos у =—0,333333333, а = = 48,1896851°, р= 131,8103149° и у = = 109,4712206°. Два вектора с началом в точке (0,0,0) и концами в точках (Х\, Y\, Zi) и (Х%, У2, Z2) образуют между собой угол (рис. 3.4)
(xz,yz,zz)
Длина отрезка, заданного концами этих векторов или просто точками с их координатами, Координаты точки (Л", У, Z), делящей этот отрезок в отношении M/N, выражаются формулами Рис. 3.4. Отрезок в пространстве, образованный двумя векторами, исходящими из точки (0, 0, 0)
NXt+MX2 M+N У=-
M + N M + N Программа 3.67.
19 PRINTУГОЛ МЕЖДУ ДВУМЯ ВЕКТОРАМИ» ДЛИНЙ ОТРЕЗКА МЕЮДУ 20 PRINTИХ КОНЦАМИ И КООРДИНАТЫ ТОЧКИ,ДЕЛЯЩЕЙ ОТРЕЗОК ОТНОШЕНИИ M-"N 40 PRINTВВЕДИТЕ КООРДИНАТЫ КОНЦА ПЕРВОГО ВЕКТОРА 50 INPUT ХЬ VI/ Z1 А/Вт С 60 PRINTВВЕДИТЕ КООРДИНАТЫ КОНЦА ВТОРОГО ВЕКТОРА 70 INPUTX2/V2/Z2 D/E/F 80 LETS=SQR<<A-D>-2+<B-E>"2+<C-F>~2> 90 LETQ=SQR<A*A+B*B+C*C>*SOR<D*D+E*E+F*F> 100 LET«=<A*D+B*E+C*F>/-Q 110 PRINTУГОЛ МЕЖДУ ВЕКТОРАМИ(ГРАД) Q=BE6<ACS«a)) 120 PRINTДЛИНА ОТРЕЗКА D=S
В
30
M/NiLETR=M+N
139 INPUTЗАДАЙТЕ M/N 140 LETL=A:LETK=Ds60SUB 190:LETX=W 150 LETL=B:LETK=E:GOSUB 190:l_ETV=U! 160 LETL=C:LETK=F:GOSUB 190:UET2=W 170 PRINTКООРДИНАТЫ ТОЧКИ ДЕЛЕНИЯ 130 PRINTX=X/V=V>Z=Z:&OTO 130 190 LETW=<N*L.+M*KVR: RETURN! END Пример. Для векторов А\ (8; —3; 8) и At (6; —1; 9) получим Q = 14,6712486° и D = 3. Задав М = \ и N = 4, находим Х = 7,6, У=—2,6 и Z = 8,2. Плоскость в пространстве декартовой системы координат, описываемая уравнением AX + BY+CZ + D = 0, имеет полярные параметры (см. рис. 3.5) arccos arccos arccos где Р — кратчайшее расстояние от точки (0,0,0) до плоскости, a, (S и 7 — полярные углы (между перпендикуляром, опущенным на плоскость из точки (0,0,0) и осями координат). Перпендикуляр и плоскости
Рис. 3.5. Полярные параметры плоскости, расположенной в пространстве 73 Ориентированное расстояние от точки (Х\, Vi, Z\) до данной плоскости
/_ Знак L указывает на расположение точки (X,, У|, ?.[) сверху или снизу плоскости. Программа 3.68. 10 PRINTПОЛЯРНЫЕ ПАРАМЕТРЫ ПЛОСКОСТИ A*X+B*V+C*Z+D=0 20 PRINT И РАССТОЯНИЕ ОТ НЕЕ ДО ТОЧКИ 30 INPUTВВЕДИТЕ ПАРАМЕТРЫ А.» Б/CD 4в LETR=l:IF D>0 THEN LETR=-1 50 LETM=SQR<A*A+B*B+C*C):LETA1=DE6<ACS<R*A.H>У 70 PRINT";ТЛЫ В ГРАДУСАХ :PRINTАЛЬФА=Al 86 PRIHTJBETA=Bl:PRINTTAHMA=61 90 INPUT-ВВЕДИТЕ КООРДИНАТЫ ТОЧКИ XbYbZl Y-,,\S>Z 100 L£TL=<A*X+B*V+C*Z+ID/M 110 PRINTРАССТОЯНИЕ ДО ТОЧКИ L=L!GOTO 90:END Для /4 = 1, В =—2, С = 2 и D= -:i —131,810.4149° и у = 48,1896851". Для точки получаем Р=1, р= (5,5,5) /. = 0,666666667.
« = 70,52877937°,
ГЛАВА 4
АЛГОРИТМЫ И ПРОГРАММЫ ЧИСЛЕННЫХ МЕТОДОВ РЕАЛИЗАЦИИ ОСНОВНЫХ § 4.1. Решение систем линейных уравнений Системы и:1 п линейных уравнений вида (4.1) пх„
=- Ь„
решаются точными и итерационными методами. Точные методы дают точное решение за конечное число операций, если все они выполнялись без погрешности. Число операций у итерационных методов зависит от заданной погрешности вычислений. Метод Гаусса или метод последовательного исключения неизвестных основан на приведении матрицы коэффициентов а,, к треугольному виду. При этом алгоритм решения системы (4.1) следующий. 1. С помощью двух циклов с управляющими переменными /=1, 2, п и /= = 1, 2, ..., п организуем ввод коэффициентов а,, и /;,-, образующих массивы A(l, J) и В(1). 2. Проводим прямой ход исключения переменных путем преобразования коэффициентов (4.1) по формулам а,, =- —ац/ац; ац, — UJI, + a „an,; b, = Ь, + а,:Ь„ где i~\, 2, ..., « —I; /=i+l, / + 2, ... п и /г —(+1, ( + 2,..., / + ". В конце этих преобразований получаем *„ = &„/а„„. 3. Организуем обратный -ход (последовательное нахождение л.»—u xn—-j, .... лз. *i). проводя вычисления по формулам h = Oi и h = h—Х/ПЦ,
где i = л— 1. п — 2.....2, I, / = (+ 1, / + 2, . . . ..., п и Xi = h/an. В результате формируется массив X (/) неизвестных *„, х„- i.....х->. ,vi. 4. Организуем вывод массива А"(/). Программа 4.1. Пример. Для системы (п = 3) . 4А-, + 0,24л-, — 0,08л-, = 8, 0,09л:, + Зл2 -0,15д:., = 9. <4-2^ 0,04*1 —0.08.V2 +4 v, = 20 находим *, = 1,909198281; *2 = 3,194964417 и хл = 5,044807306. Гп:ли коэффициенты п„
близки к 0, может наступить аварийный останов ЭВМ, либо из-за погрешностей округления точность сильно ухудшается. Это является недостатком простейшей реализации метода Гаусса. Метод Гаусса с выбором главного элемента заключается в том, что при прямом ходе производится выбор наибольшего по модулю (главного) элемента и перестановка строк или столбцов (см. рис. 4.1). Последнее исключает деление на 0, если матрица А (/, У) содержит нулевые элементы, и повышает точность вычислений при наличии ошибок округления. Для ПЭВМ, ведущих вычисления с числами с плавающей запятой, достаточен выбор А(1, 1)фО. Программа 4.2. Пример. Для системы 3*i * i
+ *2 + *:1 = 4,
Хч — *з = I,
(4.3) получим А, —1,7; .«я = — 0,6 и *з = 0,1. Метод вращения [24] является разновидностью метода Гаусса, обладающей повышенной устойчивостью к «провалам» промежуточных вычислений. Этот метод обеспечивает приведение исходной системы (4.1) к системе с правой треугольной матрицей по следующему алгоритму. 1. Вводим а,, и hi.
2. Вычисляем пи
л/ai и
La— —
причем если о„=о*, = 0, то Ai,,= l и /-.«,, = 0. Проводим преобразования системы по формулам М /,,//, — LkiUt, — Mi:,h: — Lkiln, Lkii/i -- Mkiih = ЬшЬ, — Mt/bk,
где /=. I, 2, . . ., n+ I, /?=/+ I, j + 2, . . ., n, ii, и i/k — левые части, a ft, и ft(, — правые части (го и fc-го уравнений соответственно. После п(п—1)/2 шагов приходим к системе с верхней треугольной матрицей. 3. Осуществляем обратный ход:
х„ = (М,1)- «„l.m.h i *,„.,., - ..._а(„!,и„)/а(„!>„ где т= п, и - I..... I. 75
Программа 4.1. 85 PRINTРЕШЕНИЕ СИСТЕМЫ ИЗ Н ЛИНЕЙНЫХ УРАВНЕНИЙ IS INPUT ЧИСЛО УРАВНЕНИЙ N=N 20 HIM АШ,Н>,В<Ю,Х<Ю 30 FOR 1=1 ТО N« PRINT ! 2.0!ВВОД КОЭФ. УРАВНЕНИЯ I 40 FOR J=l TO N: INPUT A<bJ> 58 NEXT Js INPUT B<I>sNEXT I 60 FOR 1=1 TO N-l! FOR J=I+1 TO N 70 LETAU/I>=-AU, IVA<bI>:F0R K=I + 1 TO N 80 LETA<j,K>=A<j>io+A<j>i>*A<bK>i NEXT К 90 LETB<.J>=BCJ>+A<J/I>*B<I>: NEXT J: NEXT I 100 LETX<N>=B<N:>/A<N>N>
11© FOR I=N-1 TO 1 STEP -1: LETH=B<I) 120 FOR J=I + 1 TO N: LETH=H-X<.J>*A<bJ>:NEXT J 130 LETX<O=H/A<bI)!NEXT I
140 PRINT КОРНИ СИСТЕМЫ УРАВНЕНИЙ 150 FOR 1=1 TO Ni PRINTI2.0! X<Г>=sPRINTIE! X(I> 160 NEXT Is END Программа 4.2. 10 PRINTРЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ МЕТОДОМ 20 PRINT ГАУССА С ВЫБОРОМ ГЛАВНОГО ЭЛЕМЕНТА 38 INPUTЗАДАЙТЕ ЧИСЛО УРАВНЕНИЙ Ы= N 40 DIM A<N.-ЮгВСН!).-CXN,Ю>&<Ю>Х<Ю 50 FOR 1=1 ТО N: FOR J=l TO N
60 PR INT! 2.0! ВВЕДИТЕ AI.-J=: INPUT АСЬ J>:NEXT J 7@ PRINTВВЕДИТЕ В1=:INPUT B<I):NEXT I 88 GOSUB 100 85 FOR 1=1 TO N 90 PRINT!2.0!XI = !F1.9!Xa>:NEXT Is STOP 190 LETNl=N-l: FOR K=l TO N1 118 IF ABS<A<K/K>>>0 GOTO 200 120 LETK.l=K+l:FOR M=K1 TON 130 IF ABSc.Aai^K>:j>0 SOTO 150 140 60T0 165 150 FOR L=l TO N:LETU=A<K.L):LETA<K..L>=A<M..L> 160 LETA<M.-L>=U!NEXT L 165 NEXT M 170 LETU=B<tO:LETB<K>=B<M):LETB<M>=U 208 LET6 < К)=B < К) .A < Кг К): LETK1 =K+1 210 FOR I=K1 TO N:LETB<I>=B<I)-A<bK>«6<K) 2£@ FOR J1=K TO H:LETJ=N-Jl+KiLETC<.K...J)=ft::K..J>.A<K/K) 225 LETA(. I.. J)=ft(I,- J)-A. I.- К>*C<Ю J> 230 NEXT JUNEXT I:NEXT К 240 LETM=H: LETX < M) =B < M > --A < П, M) 250 LETM=M-l:LETS=0:FOR L=M TO N1 260 LETS=S+C<M/L+1>*X<L+1>:NEXT L
270 LETXai>=&at>-S:lF M>1 GOTO 250 280 RETURN:END
76
Рис. 4.1. Алгоритм реализации метода Гаусса с выбором главного элемента
Программа 4.3. 16 PRINTРЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ УРАВНЕНИЙ 15 PRINT МЕТОДОМ ВРАЩЕНИЯ 20 INPUTВВЕДИТЕ ЧИСЛО УРАВНЕНИЙ H=J H:LETM--=Os ШМ ACH.-N) 25 FOR 1=1 ТО И:FOR J=l TO N 30 PRINT! 2.9!ВВЕДИТЕ КОЭФФИЦИЕНТ Al.-J 40 INPUT АО.-..О: IF JON THEN 69 50 PRINTВВЕДИТЕ ВI: INPUT А<Ь0> 60 NEXT J:NEXT I 79 FOR 1=1 TO N-l:FOR K=I + 1 TO N 80 IF А<Ы)<>0 THEN 118 90 IF ACK... i:><>0 THEN 110 100 LETM=l:LETL=0!6OTO 130 110 LETM=SQR<A(b I>"2+A<K, I)"2> 120 LETL=-AOO I>.M!LETM=A<I-1 Vti 130 FOR J=l TO N:LETP=M*A<b.J>-L*A<K..J> 140 LETA <. K, J ) =L* A < Ь J>+M«A < Kr J) 150 LETAa.-.J>=R:NEXT j 160 LETR=ri*A<b0>-L.*AaO0> 170 LETA < K.- 0 У =L* A < I/8 ) +M*A < К» в ) 180 LETAa.0>=R:NEXT К: NEXT I 190 FOR I=N TO 1 STEP -1:LETM=@ 200 FOR K=0 TO N-I-l 219 LETM=M+A<0/N-K>*A<I..N-K)!NEXT К
220 LETA < 0.-1) = (A <I.- 8 У -M ) /ft (I - I > 230 PRINT!2.0!КОРЕНЬ XI = !F1.Э1Acfif Г) 240 NEXT l:END
Для проверки программы можно решить уравнение (4.3). Результат совпадает с указанным выше. Метод простых итераций, описанный в § 4.4 для систем нелинейных уравнений, применим и для решения систем линейных уравнений. Однако его сходимость гарантируется, если значения диагональных элементов матрицы Д(/, J) превосходят остальные, что снижает применимость метода простых итераций (хотя любые системы линейных уравнений можно свести к нужному для сходимости виду с помощью преобразований, описанных в [7J). Сказанное относится и к методу Зейделя. Программы реализации этих и некоторых других методов частного применения даны в Приложении 5. Отметим, что итерационные методы обладают свойством самоисправления ошибок в ходе вычислений и могут применяться в особых случаях, например, когда матрица коэффициентов а,, сильно разрежена, т. е. содержит много нулей. Метод минимизации заключается в поиске минимума целевой функции F(x\, х2.....к,,)— !/i(xi, х-,, ..., х„)\+... ... f !/2(.t|, X;, .... X,,)!,
компоненты которой формируются из уравнений решаемой системы 1\(х\, х->.....х,,)--di iX] 4-«1яХо + ... ... + ai„х„ - b i, fl(X\, X;>, ..., X,,)----«31 V| -f О:!:;.».-! .. \-J:,X,,~ ft.,. /,,(.ii, x-u .... x,,) — a,,ixi -f о„?А-а-|-...
...
...+а„„х„~Ь„. Если AI, A-..i, ..., х„ ..... решение (4.1), то фупк78 ция F (х[, Л2, .... лг„) =0. Для реализации этого ме.тода могут использоваться программы поиска минимума функции ряда переменных, описанные в § 5.6
§ 4.2. Интерполяция и экстраполяция Интерполяция функции у (х) одной переменной л, заданной (»+1) узлами у,(*,-), где /-—О, I. 2, .... п. заключается в нахождении значений i/ по значениям х, находящихся в промежутках между узлами х,. При интерполяции функция у (х) заменяется интерполяционным полиномом Р(х), значения которого Р (л",) в \з.1а\ точно совпадают с у (д"|). Значение п задает степень полипома Р
(х). Формулы Лагранжа для интерполяции при равномерном расположении узлов обеспечивают наименьшее время интерполяции, не требуют обновления ввода у, и x,j для вычисления каждого у(х) и позволяют вычислять //, в узлах х, (например, для контроля правильности вычислений). В этих формулах индексом 0 обозначается центральный узел. Для л+.1=2-=-6 формулы Лагранжа имеют вид |36] t/(x)2=(l......p)tja + py, +О.125/гУ(5): ! "Г
0,065/i;V"(6);
р(р—Г)(р —2) у(х!, =- — ——-~------и. о -у о -
pip-\- 1 i( p — 2)
pip — 1
ГДР
_ JO,O24/(V (|)при 0<р<1, lo,O42/((/V(fe) при — 1<р<0, I <p<2; (р2-1)р(р-2) у г 24 IV
iPnLL^£lziLi/ ,+ 6
+
R(P) =
0,0049/гУ(?) при 0<р<1, 0,0071 Л VV(S) при — 1 <р <(|, 1 <р<-2, 0,024 /гУ(£) при — 2</)< — 1, 2<р<3. В этих формулах где . (P-I)P(P+ 24 f 0,012/i5yv(s) при Ipl < 1. = ( 0,031 A6(/V(g) /HP2—1) (р-2)(р-3) 120 р(р-1)(р2-4)(р-3) #,
при
1< |р|
-(/2 + /?(р), <2;
а +р(
+
24 (р2-1)(р2-4)(р-3) 12
р(р+1)(р2-4)(р-3) 12 _ 24 р(р2-1)(р2-4) 120 где Л — шаг расположения у.члов, индекс у у(х) соответствует числу узлов (Л+1), .y"+ (?) — максимальное значение производной у(х) для точки х = ь. лежащей в пределах интерполяции. Последний член формулы (он в программах не вычисляется) характеризует погрешность интерполяции. Пример (к программе 4.4). Для контроля этой программы выполним интерполяцию функции Струве Н„ (х)=у (л) [36], заданной
таблицей, при Лп=1 и /г=0,2: у_2 = 0,36699П4; у„ , =0.4739944; ,</,,= = 0,5686566; у, = 0,648855; у, = 0,7117925 и у, = 0,7570255. 1. При линейной интерполяции (М=1) для х--= 1,1 получим .у (1,1) = 0,6087558. 2. При квадратичной интерполяции (М = 2) получим (/(0,9) =0,5231716; //(1,1) = = 0,6104494. 3. При кубической интерполяции (М = 3) получим у (0,9) =0,5230539688; у(1,1)== = 0,6105670313. 4. При М=4 получим .у (0,9) == = 0,5230357695; у (1,1) = 0,6105779508. 5. При Л4 = 5 получим у(0,0) = = 0,5230350945; (/(1,1) = 0,6105786258.
Программа 4.4. 10 PRINTИНТЕРПОЛЯЦИЯ ПРИ H=C0NST ПО ФОРМУЛЙМ ЛАГРйНЖй" 20 INPUTЗАДййТЕ СТЕПЕНЬ ПОЛИНОМй M=l-5 M=M!LETN=M+1 30 INPUTBBEflHTE X0,H 2;H:IF N=3 THEN 108 40 IF N«4 THEN 140 58 IF N=5 THEN 198 €0 IF H=6 THEN 250 70 INPUTBBEAHTE V0>V1 ft,B 88 INPUTBBEflHTE X=X:LETP=<X-ZVH 90"LETV«<1-P)*ft+P*B:PRINTV=V!6OTO 80 100 JNPUTВВЕДИТЕ V-bY8>Vl
Й.В^С
118 INPUTBBEflHTE X=X:LETP«(X-Z>/H 120 LETV=P*<P-1)«Й/2+ <1-P*P)*B+P*<P+1)жС/2 130 PRINTV=VS6OTO 118 140 INPUTBBEflHTE V-bV8*VbV2
150 160 170 180
A,B>C>D
INPUTВВЕДИТЕ X=X:LETP=<X-Z>/H:LETE=<P-2>/2 LETV=-P*<P-1)*Е*Й/3+<Р*Р-1)*E*B LETV=V-P*<P+l)»iE»iC+Pi«<P*P-l)«D>6 PRINTV=Y5GOTO 150
190 INPUTBBEflHTE V-2/V-ЬV8;VI/V2 Й/B/CJD/E 200 INPUTBBEflHTE X=X:LETP=<X-2)^H 210 LETF»<P«P-l)2iLETK=<P!iiP-4)-2 220 LETV=F*P*<P-2)«A/l2-<P-1)*P«K*B.3+F*K*C 230 LETV-V-< P+1)*P«K*B/3+F*P* < P+2 > *E/12
248 PRINTV=YS60T0 280 250 INPUTBBEflHTE Y-2,V-ЬW&,VI,Y2,V3 Й,В,С,Ъ,Е,Р 268 INPUTBBEAHTE X=XsLETP=<X-Z)/-H!LETM=P«P-l 270 LETI=M/24:LETJ=-P*I*<P-3>:LETK=M-3!LETL=K*<P-3)/12 280 LETY=J*(P-2)*A/5+L*P*<P-l)«B/2-t1*L«cC 290 LETV=Y+P*<P+l)!isL!iiII+J*<P+2>*E+P»I*K«F.5 300 PRINTV=V!GOTO 260:ENTJ 79 Точные значения Я о (х): На (0,9) = 0,523035 и Яо(1,1) = 0,6105787. Существует ряд специальных видов полинома Р(х) (Ньютона, Эверетта и др.) [4, 5, 7, 18, 24, 30, 38]. Однако следует помнить, что полином Р(х), имеющий P(xi) = y(xi), является всегда единственным. Поэтому при пренебрежении погрешностью вычислений ЭВМ все виды интерполяции должны давать одинаковый результат. Это характерно для современных ПЭВМ, оперирующих числами с плавающей запятой и имеющих нередко скрытые разряды для повышения точности вычислений. Интерполяция по методу Эйткена заключается в вычислении у(х) при произвольно расположенных узлах без явного построения интерполяционного полинома. Последнее достигается путем последовательного применения формул линейной интерполяции:
у( 1,55) = 0,8888683478 (все цифры результата верные). Интерполяция полиномом Лагранжа при произвольном расположении узлов в общем случае сводится к вычислению y(x) = Ln(x) с помощью интерполяционного полинома, имеющего вид (рис. 4.2) L
"W—
Хо — X | ){Хо — Х2)...{х0 — >
(х — хо) (х— х2) ... (х — х„) г У»
, кй)(х\ — х2) ... (х\ —хп) "
"
(Х —Хр) (x — Xi) . . (Х — Х„_ | ) у
__ у Л
(у
__ у Л
(у ~~v-
.
у (х, х0, Xi) —-
1
у (х,
г
/ о
Х —
а
X
Х X
—
\
У х
—
У х
—
X
о
0
г
2
X
Программа 4.6. Пример. Используя данные примера к программе 4.5, получим у( 1,55) = 0,888868348. Интерполяция с одновременным получением коэффициентов полинома Р{х) = апх" + а„ - ,х"~ + ...+ У (X, Xo,Xi,X2) =-
у(х,Хо,Х\) Х\—Х у(х,хо,х2) Х2 — х
может выполняться с применением интерполяционной формулы Ньютона [4, 24]: x2; и
т. д. В приведенной ниже программе с М = 2ч-6 для ускорения счета интерполяция ведется прямо по приведенным формулам. Программа 4.5. х2;
где А0 = у\, Ai, — f(xi; x2; ..., xk+\) — разделенные разности К-го порядка (К=1, 2, 05 PRINTИНТЕРПОЛЯЦИЯ ТАБЛИЦ С ЧИСЛОМ УЗЛОВ ДО ШЕСТИ 10 INPUT ЧИСЛО УЗЛОВ ДО ШЕСТИ М=М 20 LETB2=0!LETB3=0:LETB4=0:LETB5=0:LETB6=0SLETX3=0SLETX4=@8LETX5=0 36 INPUT ВВЕДИТЕ X0>V0 X0>Y0 40 INPUT ВВЕДИТЕ XbVlXbVl 50 LETB0=V0:LETQ1=<V1-V0>/<X1-X0)!LETB1=Q1 60 IF M=2 THEN 218 70 INPUT ВВЕДИТЕX2/V2X2/V2 8@ LETG2=<V2-V0>/<X2-X0): LETR2=<Q2-Q1 WX2-X1) 90 LETB2=R2: IF M=3 THEN 210 100 INPUT ВВЕДИТЕ X3>V3X3,V3 110 LETQ3=<V3-V0>/-<X3-X0>! LETR3=<Q3-Q1>/<X3-X1) 120 LETS3=<R3-R2V<X3-X2>sLETB3=«S3: IF M=4 THEN 210
130 INPUT ВВЕДИТЕ X4,Y4X4,Y4 140 LETQ4*(Y4-Y0V<X4-X0>iLETR4=<Q4H31 )/<X4-Xl) 150 LETS4=<R4-R2>/CX4-X2>sLETL4=<S4-S3>><X4-X3>
160 LETB4=L4s *IF M=5 THEN 210 170 INPUT ВВЕДИТЕ X5rV5 X5/Y5 180 LETQ5=<Y5-Y0V<X5-X0>:LETR5=<Q5-Q1)^<X5-X1) 190 LETS5=(R5-R2)^<X5-X2):LETL5=<S5-S3)/<X5-X3> 200 LETB5=<L5-L4)><:X5-X4)
210 INPUT ВВЕДИТЕ Х=Х 220 PRINTY=<<aB5*<X-X4>+B4>*<X-X3>+B3:>*<X-X2)+B2>*<X-Xl>+Bl>«:X-X0>+B0 230 60T0 210: END Пример. Для контроля этой программы 3, .. проведем интерполяцию гамма-функции Г(х) = 1/(х), заданной М = 6 значениями х, tpi = и (/, [36].- хо=1,5; j/o = 0,8862269255; х, = = 1,51; i/i=0,886591685; х2= 1,525; уг= .,ф = 0,8872930231; х3=1,54; г/3 = 0,8881776586; х4=1,54; (/4 = 0,889639199; х6=1,59 и г/5 = = 0,8924282141. Тогда для х=1,55 получим Фо = 80
, —1 п
)
И
фо
i
ПX
—
_
(
_
1 1
;
/
)=
1
=
= 2 , .
1, = 1;
1 Ф/^-; Ф1=(—1)* ft р
1; k=\, 2, ..., i.
Программа 4.6. 10 PRINTИНТЕРПОЛЯЦИЯ ПО ЛАГРАНКУ ДЛЯ N+1 УЗЛОВ 2@ INPUTBBEflHTE N=N:DIM A<H>:DIM B<N) 38 FOR 1=0 ТО NsPRINT!3.0!ВВЕДИТЕ XI 40 INPUT A<I>SPRINTВВЕДИТЕ VI 5в INPUT B<I):NEXT I 60 INPUTВВЕДИТЕ X=X:LETS=0 70 IF X=A<8> THE» PRINT!F1.9!V<X>=B<0):6OTO 60 80 FOR J=l TO NsLETC=l:FOR 1=1 TO N 90 LETD=A<J)-A<I>-IF I=J THEN LEni=X-A<J) 100 IF D=0 THEN PRINT!1.9!V<X)=B<I):60T0 60 110 l_ETC=C*<X-Aa>VDsNEXT I 120 LETS=S+C*B<.J):NEXT J 130 PRINT!1.9!V<X)=S:60T0 60:END
,
Рис. 4.2. Алгоритм интерполяции полиномом Лагранжа
Программа 4.7. IS PRINTПОСТРОЕНИЕ ИНТЕРПОЛЯЦИОННОГО ПОЛИНОМА НЬЮТОНА 20 PRINTИ ИНТЕРПОЛЯЦИЯ ПРИ ПРОИЗВОЛЬНО РАСПОЛОЖЕННЫХ УЗЛАХ 30 1ИРиТЗАДАйТЕ ЧИСЛО УЗЛОВ N=NsBIM A<N>>F<N),X<N>,V<N> 48 FOR 1=1 TO N:PRINT!2.9!ВВЕДИТЕ XГ > VI 50 INPUT X<I>,Y<I>sNEXT IsLETAa>=l!l_ETF<N)=Ya> 68 FOR 1=1 TO N-lsUETF<I>=8:NEXT I 78 FOR K=i TO N-JsFOR 1=1 TO N-K 88 LETV<I)=<V<I+l)-V<I))^<X<I+K)-X<I))sNEXT I 90 LETR=l:IF K/-2-INT<K^2)<>8 THEN LETR=-1 180 LETP=lsFOR J=l TO K!LETP=P*X<J):NEXT J 110 LETA<K+1>=R*P:IF K=l THEN 178 120 FOR L=l TO K!LETU=0«FOR M=l TO L 138 LETR=lslF K/2-INT<K/2)<>0 THEN LETR=-1 140 LETS=0."FOR P=l TO K:LETS=S+R«a^X<P))"M:NEXT P 158 LETW=W+<-R>*A<K+l+M-L>*S!NEXT M 160 LETA<K-L+O=I.M.iNEXT L 170 FOR J=N TO N-K STEP -1
180 190 208 218 220
LETF<J>=F<J>+A<J-N+K+1>*Y<1):NEXT J:NEXT К PRINTКОЭФФИЦИЕНТЫ СТЕПЕННОГО МНОГОЧЛЕНА FOR 1=1 TO N:PRINT!2.0!AN-I!F1.9!=F<I):NEXT I INPUTBBEMHTE ЗНАЧЕНИЕ X=XsLETS=F<O:F0R 1=1 TO N-l LETS=S*X+F<I+1>:NEXT I
230 PRINT!F1.9!V<X)=Ss60T0 210:ENB Пример. Пусть надо построить интерполяционный полином для интеграла вероятX
ности у (х) = Фо (х) = (1 /л/2л) ) ехр (— t2) dt, о заданного пятью узлами у, (2,2) = 0,4860966-г/2(2,3) =0,4892759; </з(2,4) =0,4918025; 1/4(2,5) =0,4937903 и у а {2,6) =0,4953388. Введя эти значения, найдем: ао =—0,1706447; ai=0,805165666; a2=— 0,3712775; а3 = = 0,07783333333 и а, = —0,0625. Далее можно вычислить у(х) для заданного х (в том числе и в узлах интерполяции). Экстраполяция — получение значений у(х) при х, не принадлежащем отрезку [хо, х„] или [лг|, А-„+|], также осуществляется по описанным выше программам, но с существенно большей погрешностью. Для гладких у(х) экстраполяция целесообразна при х, выходящих за указанные пределы не более чем на /г/2. Обратная интерполяция — процесс нахождения значений х по заданным значениям у. Она может выполняться по любой программе интерполяции с произвольно расположенными узлами. При этом вместо зна-чени-й xi вводятся значения </,-, а вместо у, — значения х-,. Многоинтервальная интерполяция заключается в интерполяции г/,(х,) в ряде частичных интервалов (ограниченных двумя узлами или группой узлов) отдельными полиномами невысокой степени. Такая интерполяция может применяться при широком общем отрезке [a, b], когда обычная интерполяция полиномом высокой степени дает большую погрешность и ведет к большому времени вычислений. Заметим также, что по виду полинома и значениям его коэффициентов трудно судить о виде зависимости у(х). Многоинтервальная кусочно-линейная интерполяция при равномерном расположении узлов сводится к заданию начального значения хо = а, шага Л (расстояния между узлами), номера п последнего узла и (гг + 1) ординат у<\, у и ..., у„, после чего вычисление у(х) при заданном х выполняется по формулам ( = int((x — a)/h). На примере многоинтервальной кусочно-линейной интерполяции отчетливо видны общие свойства многоинтервальной интерполяции: степень интерполирующего полинома (в данном случае 1) не зависит от числа узлов; с ростом последнего погрешность интерполяции монотонно стремится к нулю; для любого интервала вычисление у(х) производится по одним и тем же относительно простым (из-за малой степени полинома) формулам, поэтому время вычислений у{х) при заданных х мало; массив у, несет наглядную информацию о виде зависимости у(х). Задание асимптотического поведения у{х) при х<х„ — а и л-> b — a-\-nh заключается в линейной экстраполяции, т. е. вычислении у(х) за пределами отрезка [a, b] по формулам ( yo)/h при х<а, yn-i)/h при х>Ь. Такое задание не всегда строго, но позволяет избежать грубых искажений асимптотического поведения экстраполирующей функции у(х) за пределами отрезка [a, b], которые нередко наблюдаются при обычной полиномиальной экстраполяции. Многоинтервальная квадратичная интерполяция заключается в задании четного числа парных интервалов {п — четное число) с вычислением у{х) при заданном х по формулам (хц = а) i — \nt ((х — a)/2h)+ I, p = (x~a — ih) Выражение для у(х) есть интерполяционная формула Лагранжа для трех ординат, применяемая для каждого частичного интервала. Асимптотическое поведение у(х) задается с помощью линейной экстраполяции с вычислением первой производной в концах общего отрезка [о, Ь\ по формулам численного дифференцирования для трех точек: у[х) — уо + (х — а) (4//,— у2 — 3#о)/2/г при х < о. при Сплайн-интерполяция есть специальный вид многоинтервальной интерполяции, при котором интерполирующий полином обеспечивает не только равенство у(х) значениям у, в узлах, но и непрерывность заданного числа первых производных на границах частичных интервалов. В общем случае сплайн задается глобальным способом, т. е. с использованием всех узлов при любом их расположении (см. § П5.11 Приложения 5). Ниже рассматривается задание кубичекого сплайна локальным способом, которое реализуется сравнительно просто и требует существенно меньшего объема памяти ЭВМ,- чем при глобальном способе задания. Кубический сплайн, заданный локально,— это интерполирующая функция в виде полинома третьей степени, начисляемая по формулам [6|, i = int(U — a)/h). Уг (х — Xjf (2 (*, + .-*
, (*, + i— xf(x — X/) (x—Xi)2(x — Xi+])
где т, и m, + i — первые производные у(х). Производные локального сплайна могут задаваться двумя способами. Способ 1. Производные т, и m,-+i вычисляются с помощью формул численного дифференцирования по трем точкам: mi = (</i+i—I/I-i)/2A для <"=1, 2, ..., я —1, mo = (4i/i— у2 — Зуо)/2Л
для 1 = 0,
т„ = (Зу„ + у„-2 — 4i/i- 0/2/г для i = n. Способ удобен тем, что для задания сплайна требуется вводить лишь ординаты у; (значения т, вычисляются программой). Для уменьшения времени многократных вычислений у(х) желательно предварительно вычислить массив nit и хранить его в памяти ЭВМ. Способ 2. Значения т, (вычисленные отдельно или полученные из графика как наклоны его в узлах) задаются непосредственно в виде массива т,. Задание асимптотического поведения у(х) за пределами отрезка [а, Ь\ осуществляется так же, как и при многоинтервальной квадратичной интерполяции. У рассмотренного локально заданного сплайна непрерывны лишь нулевая и первая производные (у глобально заданных кубических сплайнов непрерывна также и вторая производная). Кусочно-линейная и многоинтервальная квадратичная интерполяция рассматриваются как дефектные сплайны, у
которых обеспечивается непрерывность только нулевой производной. Все эти виды интерполяции реализуются программой 4.8. После задания нужного вида интерполяции вычисления у(х) выполняются подпрограммами: кусочнолинейная интерполяция — экстраполяция со строки 1000, квадратичная—со строки 2000 и кубическая — со строки 3000. Эти подпрограммы могут использоваться для задания (аппроксимации) нелинейных зависимостей у(х) в дополнительных программах, вписываемых пользователем в программу 4.8. Программа 4.8.
10 PRINTАППРОКСИМАЦИЯ,ИНТЕРПОЛЯЦИЯ И ЭКСТРАПОЛЯЦИЯ 20 PRINTСПЛАйНАИИ ПРИ ЛОКАЛЬНОМ ИХ ЗАДАНИИ 39 INPUTВВЕДИТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ Х8=А 40 INPUTВВЕДИТЕ ШАГ Н=Н 50 INPUTBBEflHTE НОМЕР ПОСЛЕДНЕГО УЗЛА N=NtBIM YOO 60 FOR 1=0 ТО N:PRINT!3.0! ВВЕДИТЕ VI 70 INPUT Y<I)!NEXT I 80 INPUTBBEflHTE ПОРЯДОК Ь2 ИЛИ 3 ПОЛИНОМАР 90 IF P=2 THEN 130 100 IF P=3 THEN 150 110 INPUTBBEfiHTE X=Xt60SUB 1800 120 PRINT!F1.9!V<X)=liJ:60T0 lie 130 INPUTВВЕДИТЕ X=X:SOSUB 2806 140 PRINT!F1.9!Y<« = W:60T0 136 150 РРШТЗАДАйТЕ КОД 0-DV-BX НЕ ЗАДАЕТСЯsDIM М<Ю 160 1НРиТЗАДАйТЕ КОД 1-DYDX ЗАДАЕТСЯК 170 IF K=0 THEN 280 180 FOR 1=0 TO NiPRIHT!3.0! ВВЕДИТЕ BV-BXI 190 INPUT MW.NEXT I:60T0 236 290 LETM<0) = <4*Y<1)-Y<2)-3*Y:0)>^2/H 210 LETM<N> = <3*YCN>+V<H-2>-4*Y<N-l>>.2.H 220 FOR 1=1 TO H-l:LETM<I)=<V<I+l)-Y<I-l))/2/H:NEXT I 238 INPUTВВЕДИТЕ X=X»60SUB 3000 S3
240 PRIKT!F1.9!V<X>=U!&OTO 230 1908 R#T ВЫЧИСЛЕНИЕ/V<X>=bJ ПРИ СТЕПЕНИ ПОЛИНОМА 1 1810 IF Х<=А THEN 1050 1020 LETB=A+H*N!IF X>=B THEN 1968 1030 LETI=INT<<X-A)H):LETU»V<I) 1040 LETU=W+<V<I+l)-V<I))*<| 1858 LETW»V<0>+<X-ft)«<V<l)-V<0>)-HSRETURN: 1060 LETW=V<H> + <X-B>*<V;N)-V<N-1)S/:H«RETURN 2008 REMВЫЧИСЛЕНИЕ V<X)=UI ПРИ СТЕПЕНИ ПОЛИНОМА 2 2018 IF X<=A THEN 2060 2820 LETB=A+N*H:IF X>=B THEN 2070 2038 lETI=l+2*IHT<<X-A>/-2--H>:LETP=<X-A-I*HVH 2048 LETW=P*<P-1)*V<1-1)/2+<1-P*P>*V<I> 2058 LETU=kl+P*< P+1 > *V < I +1) /2.: RETURN 2860 LETIJ=V<0>+<X-A>*<4*Va>-Y<2>-3*V<8:>>/2/HrRETURN 2870 LETW=V <N >+ <X-B>*< 3*V <N)+V< N-2 >-4*V <N-1> >/2/H:RETURN 3880 REMВЫЧИСЛЕНИЕ V<X>=td ПРИ СТЕПЕНИ ПОЛИНОМА 3 3810 IF X<=A THEN 3080 3820 LETB=A+Nwh!IF X>=B THEN 3898 3830 LETI=INT<<X-A>/H>sLETB=A+H*I 3048 LETC=B+H:LETD=X-C:LETE=X-B 3050 LETW=D*D*<E+E+H)*V<I>+E*E!iKH-D-B>*va + l> 3868 1_ЕТЫ=Ы/Н+ЮТ*ЕжМ<1> 3878 LETW=<W+E*E*D*M<I+1)>/H/H!RETURN 3088 LETU=V<8>+<X-A>*M<8):RETURN 3098 LETW=V<N>+<X-B>*M<N>!RETURN:END
Пример. Провести интерполяцию (аппроксимацию) jV-образной вольт-ампернбй характеристики туннельного диода, заданной в виде влияние на ход у(х) по всей кривой, что качественно неверно описывает физические явления, лежащие в основе нелинейности интерполируемой функции. Xi=U
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
!//=!,
0
10
4
2
1,5
2
5
9
13
,В мА
Задаем л:о = О, Л = 0,1 и п = 8. Введя ординаты yi для кусочно-линейной интерполяции — экстраполяции, будем иметь г/(0,1) = 10, </( — 0,1) = — 10, 1/(0,05) = 5, {/(0,8) = = 13 и т. д. Для многоинтервальной квадратичной интерполяции — экстраполяции (/(0,1)= 10, (/( — 0,1)=— 18, (/(0,25) = 2,8125, t/(l) = 21 и т. д. Для кубической сплайнинтерполяции и экстраполяции i/(0,l)=10; (/(0,25) = 2,65625, (/( — 0,1)= — 18, (/(1) =
= 21 и т. д. Из этого примера видно, что для задания сплайна, аппроксимирующего некоторую зависимость у{х!), достаточно задать лишь определенное число ее ординат yt. Массив значений (/, сохраняется в памяти ЭВМ и в любой момент может быть использован для восстановления вида аппроксимируемой зависимасти, например, для вывода по точкам ее графика. Достоинством локально заданных сплайнов является описание свойств зависимости yi (xi) на каждом частичном интервале независимо от ее свойств на других интервалах. Подобное поведение нередко встречается на практике, например, восходящие туннельная и диффузионная ветви iV-образной вольт-амперной характеристики туннельного диода обусловлены совершенно различными физическими явлениями. Отметим, что у обычной полиномиальной аппроксимации этого свойства нет и изменение у(х) вблизи какого-либо узла оказывает 84 Более точной, но и более сложной, является аппроксимация сплайнами при глобальном их задании. В этом случае коэффициенты т, вычисляются по всем узлам i/, (xi). Этот вид аппроксимации рассматривается в § П5.11. Интерполяция функции двух переменных х и у по трем точкам (см. рис. 4.3, а) выполняется по формулам f(x, y) = (l—p — q)foo + pf[o + qfoi, где p = (x — xo)/h и q = (y — yo)/l. Здесь h — шаг изменения х, а / — шаг изменения у. Несколько лучшие результаты дает интерполяция по четырем точкам (рис. 4.3,6): f(x, y) = (l-p)(l-q)f Ошибка при этом пропорциональна /г2. При интерполяции по шести точкам (рис. 4.3, в) Ух< У)
-/o-i-i------2"-----/-10+
p(p-2q+\) погрешность пропорциональна А3. У (0,0) (0,1) (1,0)
У к (0,0) (0,1) Ш (1,0) --------щ----------
У (0,0) (-1,0) О (0,1)» (1,1) (1,0) X
а
о
о
Рис. 4.3. Расположение равноотстоящих узлов при интерполяции функции двух переменных по 3(а), 4(6) и 7(в) точкам Программа 4.9. 18 PRINTИНТЕРПОЛЯЦИЯ ФУНКЦИИ ДВУХ ПЕРЕИЕННЫХ 26 PRINTF<X,Y> ПО 3,4 И 6 ТОЧКАМ 39 INPUTЗАДАЙТЕ ШАГ X Н=Н 40 INPUTЗАДАЙТЕ ШАГ V L=L 58 INPUTЗАДАЙТЕ ЧИСЛО ТОЧЕК-3*4 ИЛИ 6 N=N 6@ IF N=4 THEN 90 78 IF N=6 THEN 188 80 INPUTBBEflHTE F88,F10,F01 A>B,C:60TQ 110 98 INPUTВВЕДИТЕ F68>F10/F0bFl 1 AfB/C,jDs60T0 110 180 INPUTBBEflHTE F8-bF-10*F80.F10,FQl^Ffll A,B,CrIbE> I 118 INPUTВВЕДИТЕ ЗНАЧЕНИЯ X8>Y8 X0.-Y8 128 INPUTВВЕДИТЕ X»Y X.-Y 130 LETP=4X-X0VH!L.ETQ=<V-V0>/L.:IF N=4 THEN 168, 148 IF N=6 THEN 178 158 LETF=a-P~Q>*A+P*B+Q*C!60T0 198 160 LETF=a-P>*a-Q>*A+P*a-G:>*B+Q*<l-P>S«C+P*Q*B:60T0 198 170 LETF=Q*<Q-1)«A/2+P*<P-1)*B/2+ < 1 +P*S-PssP-Q*Q >*C 180 LETF=F+P*<P-2*Q+1 >*Ii/2+Q*K PQI 190 PRINTF<X>V>=Fs60T0 120SENH Контрольные примеры, поляция функции последействия Интер-
fix, У)= dz.
,
)у
заданной таблично. 1. Интерполяция по трем точкам. Задано: п = 3; /г = 0,3; / = 0,1; хо = 0,4; уо = О; foo = 2,5; foi =2,456 и fк, = 1,429. Получим /(0,7; 0,05) = = 1,407; /(0,4; 0,05) = 2,478 и т. д. 2. Интерполяция по четырем точкам. Задано: n=4, A = 0,3; / = 0,1; x0 = 0,4; j/o = O; /оо = 2,5; /,о=1,429; /01 = 2,456 и /и = 1,4. Получим /(0,7; 0,05)= 1,4145; /(0,5; 0,08) = = 2,1118 и т. д. 3. Интерполяция по шести точкам. Задано: ,1 = 6, /г = 0,3; / = 0,1; х о = О,7; г/0 = 0,05; /o-i = l,429; /_, о = 2,487; /Оо= 1,419; /,0 = = 0,995; /oi = l,4; /и =0,981. Получим /(0,4; 0) = 2,502; /(0,5; 0,03) = 2,065857778.
Многоинтервальная квадратичная интерполяция — аппроксимация функции двух переменных может использоваться, когда необходимо интерполировать или аппроксимировать таблично или графически заданные функции двух переменных. Такая интер-, поляция — аппроксимация удобна, например, для вычисления токов по заданным напряжениям у приборов с графически определенным семейством вольт-амперных характеристик (биполярных и полевых транзисто-
ров, тиристоров и т. д.). Алгоритм интерполяции — аппроксимации следующий. 1. Функция f(x, у) задается в виде матрицы F(I, J), где / — номер строки таблицы (или кривой графика), / — номер столбца (или точки на кривой). При нумерации 7 и / с 0 имеем 0</sgiV— 1 и 0</</И—1, где N — число строк (кривых), М — число столбцов (точек на каждой кривой). Кроме того, задаются приращения (шаги) Ax = h — = const и Ay = / = const и начальные значения хо = а и уо = Ь. 2. Для каждого значения хну вычисляются: / = int ((x — a)/h), если / = 0, то берем /= 1, / = int((y — 6)//), если / = 0, то берем /=1, P = (x-a-Jh), Q = (y — b — If). 3. Для каждого / = /—1, /, /+1 (в правой части / соответствует вычисленному в п. 2) вычисляется значение )
+ Р (Р+\) F (I,J + \)/2. Эти значения присваиваются переменным С, D и Е. Таким образом, обеспечивается тройная квадратичная интерполяция по переменной х. 4. Выполняется квадратичная интерполяция по переменной у: Считаем F(x, y) = Z. 85
При аппроксимации неоднократно используются п. 2, 3 и 4 алгоритма. Общее время вычислений примерно в 4 раза больше, чем при квадратичной интерполяции — аппроксимации функций одной переменной. Программа 4.10. всех корней сводится к локализации каждого корня с последующим сужением отрезков локализации корня [а, Ь] одним из описанных далее методов. 10 РКШТМНОГОИНТЕРВйЛЬНнЯ ДВУХМЕРНАЯ КВАДРАТИЧНАЯ 28 PRINTИНТЕРПОЛЯЦИЯ-АППРОКСИМАЦИЯ ФУНКЦИИ F<X>V> 30 INPUTЗАДАЙТЕ ЧИСЛО ТОЧЕК КАКДОй КРИВОЙ M=MiLETM=M-l 40 INPUTЗАДАЙТЕ ЧИСЛО КРИВЫХ N=N:LETN=N-l!DIM F<N,M]> 56 INPUT ЗАДАЙТЕ X0..V0 А,В 60 INPUTЗАДАЙТЕ ПРИРАШЕНИЯ ПО X И V - Н>L И>L 78 FOR I=fi TO H:FOR J=0 TO M
80 PRINT!3.0!ВВЕДИТЕ V I,JiINPUT F<I»J> 90 NEXT JiNEXT I 100 INPUTВВЕДИТЕ VrX V,X:60SUB 4690 119 PRINT!F1.9!F<X/V>=Zi60TG 100 400Й REMПОДПРОГРАММА ВЫЧИСЛЕНИЯ F<X,V> 4010 LETJ=INT<<X-A)^H):IF J=S THEN LETJ=1 4020 LETI = INT<<V-B>/L>HF 1=8 THEN LETI = 1 4030 LETP=<X-A-J*H>/H:LETQ=CV-B-Ii«L)--L
4040 LETI=I-ls60SUB 4080:LETC=Z 4050 LETI-I+2I60SUB 4080sLETE=2 4060 LETI=I-ls&OSUB 4080:LETD=Z 4070 LETZ=Q*CQ-l>*C/2+a-Q«Q>*D+Q*<Q+l>*E.2sRETURN 4080 LETZ=P«<P-t>*F<bJ-O^2+a-P«P)»F<IJ) 4090 LETZ=2+P*<P+i>*F<I>J+l>/2:RETURN:END Пример. Пусть требуется провести интерполяцию для семейства вольт-амперных характеристик мощного полевого транзистора (F{x, y) = Ic{Uc, U,), где /с — ток стока, x = Uc — напряжение на стоке и y=U3 — напряжение на затворе), если она задана таблицей (/V = Af = 6, /i = 10, /=1, /у„ = 3, хо=0): Метод простых итераций основан на представлении (4.4) в виде x = f(x) (4.5) и многократном применении итерационной формулы xn+l=f(xi,) до тех пор, пока соблюдается условие \х„+\—х„\^гЕ, .(4.6) Напряже на стоке Напряжени ние х, В е на затворе У, В
0
10
20
30
40
50
3
0
0
0
0
0
0
4 5 6 7 8
0 0 0 0 0
0,35
0,4 1,1 1.8 2,7 4
0,45
0,5
1,2 2
1,22 2,12 3,17
0,55 1,25 2,15
0,8
1,25 1,8
2,95
3,15 4,45
4,5
"
3,2 4,7
Значения токов приведены в амперах. Введя эти данные, будем получать /^35; 5,5)= 1,631875 A; f(45; 7,5) = 3,8375 А и т. д. Отметим, что этот метод обеспечивает высокую точность аппроксимации для семейств достаточно сложных кривых, в том числе не монотонных.
§ 4.3. Решение нелинейных и трансцендентных уравнений Решение нелинейных (в частности, трансцендентных) уравнений вида F(x) = 0 (4.4) заключается в отыскании одного или всех корней на отрезке [a, ft] изменения х. Обычно стараются локализовать каждый корень в своем отрезке [о, Ь]. Тогда нахождение 86
где « — заданная погрешность вычисления корня х. Итерационный процесс сходится (т. е. хп->~х при п:-> оо), если соблюдается условие / (х) <1 при а<.х<Ь. Программа 4.11.
В строке 70 программы 4.11 записано выражение ((х)-= sin .v-f 0,25 (подпрограмма), соответствующее решению трансцендентного уравнения
F(x) = x~sin х--0,25 = 0. (4.7) Для начального значения х-—хп—\,2 и погрешности р--£=1-10"6 получим х = = 1,71230493 при времени счета около 5 с. Метод Ньютона (касательных) основан на замене Fix) в точке начального приближения х = Хп касательной, пересечение которой с осью х дает первое приближение xi, и т. д. (см. рис. 4.4). Таким образом, итерационный процесс схождения к корню реализуется формулой
Программа 4.11. 18 PRINTРЕШЕНИЕ УРАВНЕНИЯ X=F<X> МЕТОДОЙ 15 PRINT ПРОСТЫХ ИТЕРАЦИЙ 26 INPUTЗАДАЙТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ X Х0=Х 25 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е=Е 30 SOSUB 70 48 IF ABS<F~XXE THEN 60 50 LETX=F:60T0 30 60 PRINTКОРЕНЬ X=Xs GOTO 29 65 REMПОДПРОГРАММА ВЫЧИСЛЕНИЯ FOO 70 LETF=SIN<X>+.25 75 RETURN:END (4.8) до тех пор, пока соблюдается условие (4.6). Метод обеспечивает быструю (квадратичную) сходимость, если F"(xo)> 0. (4.9) В качестве хо выбирают тот конец отрезка [а, Ь], на котором знаки F(xo) и F"(xa) совпадают. Выигрыш во времени вычислений за счет быстрой сходимости уменьшается из-за необходимости вычисления помимо F(xn) производной F(xn). Исключение составляют частные случаи, когда выражение, по которому вычисляется F(xn)/F(xn), не сложнее выражения для вычисления F(xn) отдельно. Программа 4.12.
О Рис. 4.4. Решение уравнения F (х) =0 методом Ньютона (касательных) 10 PRINTРЕШЕНИЕ УРАВНЕНИЯ F<X>=0 МЕТОДОМ НЬЮТОНА 20 INPUTЗАДАЙТЕ НАЧАЛЬНОЕ ПРИБЛИЖЕНИЕ Х0=Х 25 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е=Е 30 60SUB 60sLETX=X-F 40 IF ABS<F)>E THEN 38 50 PRINTКОРЕНЬ УРАВНЕНИЯ Х=Х:6ОТО 20 55 REMПОДПРОГРАММА ВЫЧИСЛЕНИЯ F<XV<HF/IiX> 60 LETF=CX-SIN<X)-.25V<1-COS<X>> 70 RETURN!ENB
Пример. Вычислить корень уравнения (4.7) на отрезке (1,1; 1,2]. В данном случае Р(*) = 1 —cos x, так что F{xn) х — sin x~ 0,25 F(xn) I —COS X
Вычисление этого выражения оформлено подпрограммой, записанной со строки 60. Поскольку F" (x) =sin x> 0 и F (х)> 0 при х — Ь, в качестве начального приближения возьмем хп — Ь = \,2: Тогда при погрешности е=Ы0~6 получим х= 1,171229656 при времени счета /с«3,5 с. Модифицированный метод Ньютона заключается в том, что вместо вычисления производной F (х„) на каждом шаге итераций находится ее приближенное значение — F(xa))/\x = \F(xn)/&x, где Ах = г. Следовательно, итерационная формула имеет вид „
_„
&xF(xn)
Значение Дх не обязательно должно быть равно г. Равенство Дд: = е, позволяет уменьшить данных при вводе. Программа 4.13.
10 1* 20 25 30 4й
PRINTРЕШЕНИЕ УРАВНЕНИЯ F\X>=0 МОДИФИЦИРОВАННЫМ PRINT МЕТОДОЙ HbWTOHA INPUTЗАДАЙТЕ НАЧАЛЬНОЕ ПРИБЛИЖЕНИЕ Х0=Х INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е=Е 60SUB 70! LETL=Fi LETX=X+E liOSUB 70!LETL=E*L.-4F-L>:LETX=X-L-E
59 IF ABS<L)>E THEN 30 6й PRINTКОРЕНЬ УРАВНЕНИЯ Х=Х:60Т0 29
число
исходных
76 LETF=X-SIH<X>-.25 39 RETURN:END 87
Пример. Вычисление F(xn) выполняется подпрограммой, записанной со строки 70. Для приведенного выше примера расчет дает х —1,171229653 при /с«4 с. При модифицированном методе Ньютона отпадает необходимость вычисления F(xn), но добавляется вычисление F(x,,-\-Ax). Метод Рыбакова также можно рассматривать как модификацию метода Ньютона при замене F(xn) некоторым числом M^FCg), где | — значение х на отрезке [о, Ь], при котором F(x) максимальна. При M~^>F(Q сходимость не нарушается, но замедляется. Метод Рыбакова удобен для поиска всех корней уравнения (4.4) на отрезке [а, Ь] с помощью следующего алгоритма [24]. 1. Задаем начальные значения x = xo = o. 2. Для каждой /1-й итерации (л = 0, 1, 2, ...) вычисляем , \F(xn)\ Х„+1—Хп-\ -ц и проверяем условие (4.10) (4.11) Если (4.11) не выполняется, значит, найдены все корни. В противном случае проверяем выполнение условия \хп+\— х„\> е. Если оно выполняется, повторяем цикл вычислений по формуле (4.10). Если это условие не выполнено, значит, хп+\ есть один из корней и значение х„+\ выводится на печать. После этого переходим к выполнению следующего пункта. 3. Задаем начальное приближение к очередному корню Хо = х„+1-\-£ и, если Ха<Ь, идем к выполнению п. 2. Если хо^й, вычисления считаем законченными. Число итераций при реализации метода Рыбакова yv=(6 — а) М/е. Функция F (х) на отрезке [а, Ь] может иметь производную с разрывами первого рода. Программа 4.14. Метод деления отрезка [а, Ь] пополам (метод дихотомии) реализуется следующим алгоритмом (для F(a)>0). 1. Находим х = (а-\-Ь)/2. 2. Вычисляем F(x). 3. Если F{x)> 0, задаем а = х, иначе 6=л:. 4. Проверяем условие b — а> е; если оно выполняется, идем к п. 1, если не выполняется, ^заканчиваем вычисления и считаем, что х = х с заданной точностью е. Число итераций при использовании этого метода /Vln((ft-a)/e) In 2 значительно, и поэтому сходимость его медленная. Однако при любой ширине отрезка [а, Ь\ сходимость гарантирована. Кроме того, простота реализации метода уменьшает число вспомогательных операций и частично компенсирует увеличение общего времени счета из-за медленной сходимости. Программа 4.15. Пример. Для уравнения F(x)=E — x — — Я/о(ехр (£)*) —1) при £ = 2, #=10, /0 = = 1-10"*, £> = 20, Л = 0, В = 2 и е = Я = = 1-10-4. Получим х = 0,8143920898. При F (а)<0 берем F (х) = — F (х). Метод поразрядного приближения для поиска всех корней отрезка [а, Ь] реализуется следующим алгоритмом. 1. Задаем шаг с = /г, х = а, /г = 0 и находим W = sgnF(x). 2. Задаем значение x = (x + c) и проверяем условие (х — с)~^Ь. Если оно выполняется, заканчиваем счет, иначе идем к п. 3. 3. Вычисляем F(x) и проверяем условие FW/o 0. Если оно выполняется, идем к п. 2, иначе к п. 4. 4. Задаем с=—c/R, где R— показатель разрядности (уменьшения шага с), и проверяем выполнение условия \с\> г/R, где е —
1@ PRINTНАХОЖДЕНИЕ ВСЕХ КОРНЕЙ УРАВНЕНИЯ FOO=@ 15 PR INT-В ИНТЕРВАЛЕ ОТ А ДО В МЕТОДОЙ РЫБАКОВА 20 INPUT-1 ВВЕДИТЕ ГРАНИЦЫ ИНТЕРВАЛА А,В А..В 25 INPUT ЗАДАЙТЕ ПОГРЕШНОСТЬ НАХОЖДЕНИЯ КОРНЯ Е=Е 30 INPUTЗАДАЙТЕ ЧИСЛО M=M:|_ETX=A:LETT=0!l_ETI=0 40 60SUB. 120:LET2=X+ABS<F).-M 50 IF 2>=B 60T0 115 60 IF Z-X>=E 60T0 90 70 IF T=0 THEN LETW=Z 80 LETX=Z+E:LETV=Z:LETT=l:60T0 48 90 IF TO1 THEN US 100 LETI=I+l:PRIHT!2.0!XI=!F1 110 LETX=Z:GOTO 40 115 PR INT-КОНЕЦ ВЫЧИСЛЕНИЙ: STOP 120 LETF=:>T4-13»iX-2+36 138 RETURN: END !<V+WV2:LETT=8 Пример. Найти все корни уравнения заданная погрешность вычисления корня. F(x) = x4— I3JC + 36 == 0 на отрезке [ — 4,4|, Если это условие выполняется, идем к п. 2, т. е. а =—4, 6 = 4, с точностью е=1-10~3. Задав Af=100, получим: J, =—2,9987453; х2= — 1,999170328; х3 = 2,000132432 и х4 = = 3,000785311. Общее время вычислений около 2 мин. 88
иначе к п. 5. 5. Задаем ft = 6+1 и выводим на печать (индикацию) значение ft-ro корня Xk = x. Затем полагаем c = h, W= — W и идем к п. 2. Программа 4.15. 01 PRI NTРЕШЕНИЕ УРАВНЕНИЕ F<X>=0 МЕТОДОЙ ДИХОТОМИИ 05 INPUT ErR>l&rb E/R/I8.-D
10 INPUT A.-B..H A>B.-H 20 LETX=<A+BV2 3@ GOSUB 90 4@ IF F>0 THEN 60 50 LETB=X: GOTO 70 60 LETA=X 70 IF B-A>H THEN 28 80 PRINT KOPEHb=X: STOP 90 LETF=E-X-R*I0*<EXP<D*X>-1> 100 RETURN! END Программа 4.16. 10 PRINTВЫЧИСЛЕНИЕ ВСЕХ КОРНЕЙ НЕЛИНЕЙНОГО УРАВНЕНИЯ F<X)=0 20 PRINT-В ИНТЕРВАЛЕ <.ЙгВ> МЕТОДОМ ПОРАЗРЯДНОГО ПРИБЛИЖЕНИЯ 30 INPUTЗАДАЙТЕ ГРАНИЦЫ ИНТЕРВАЛА А/В А,В 40 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЯ КОРНЕЙ Е=Е 50 INPUTЗАДАЙТЕ ШАГ НАЧАЛЬНОГО ПОИСКА Н=Н 60 LETC=H:LETK=0sLETX=A:6OSUB 120:LETW=S6N<F> 79 LETX=X+C:IF X-O=B THEN PRINTКОНЕЦ:STOP 80 60SUB 120! IF F*b.l.C>e THEN 70 90 LETC=-C4!IF ABSCC>>E-4 THEN 70 100 LETK=K+1:PRINT!2.0!XК!Fl.Э!=X 110 LETC=HiLETW=-bi:60T0 79 12© LET I = . 2718*X*EXP < -18*X) +1E-8* (EXP < 28*X) -1) 130 LETF= <1-X)/125-1:RETURN:END
Пример. Найти напряжения на туннельном диоде из решения уравнения 0, (4.12) где Е — напряжение источника R — сопротивление в его цепи и U
^ -1)
— М-образная вольт-амперная характеристика туннельного диода. Для х= U, А = 0,2718, <z=10, D = l-10"8, р = 20, £=1 В и У? = 125 Ом получаем подпрограмму, записанную в строках 120 и 130. Задав а = 0, Ь = Е и е = £1 =0,001, получим х\ =0,043 В, х2 = 0,234 В и х3 = 0,625 В. Следовательно, в данном случае линия нагрузки резистора R пересекает вольт-амперную характеристику в трех точках. Метод подекадного приближения аналогичен методу поразрядного приближения при /? = 10. Метод дает все верные цифры результата в пределах заданной погрешности Е (остальные цифры — нули). Метод хорд (см. рис. 4.5, а). При этом методе каждое значение х„+\ находится как точка пересечения оси абсцисс с хордой, проведенной через точки F(a) и F(b), причем одна из этих точек фиксируется — та, для которой знаки F(x) и F"(x) одинаковы. Если неподвижен конец хорды х = а, то F{xn) F(Xn)-F(a) (Хп-а),
а если неподвижен конец хорды x = b, то .. _. F{xn) F(b)-F(xn) (Ь-Хп).
Если х„\> г, то в первом случае считаем Ь = х„ + \, во втором a = xn+i и повторяем вычисления. При использовании метода хорд полагается, что корень ~х находится на отрезке [а, Ь]. Метод секущих (см. рис. 4.5, б) реализуется алгоритмом, описанным выше, если абсциссы а и Ь взяты с одной стороны от корня и не фиксируются. Необходимость вычисления F (х) (условия сходимости этих методов аналогичны (4.9)) ц выбора одной из двух формул затрудняют практическое применение методов хорд и секущих в отдельности. Комбинированный метод секущих — хорд обеспечивает гарантированную сходимость при выборе в пределах отрезка [а, Ь] двух приближений: нулевого х0 и первого х,. Он реализуется алгоритмом, описанным для метода Ньютона с заменой производной F{x) ее приближенным значением — множитель перед F (хп): Хп — Хп— !
p (XA — I
Л*»)89
Рис. 4.5. Решение уравнения F (х) = = 0 методом хорд (а) и секущих (б)
Программа 4.17.
kU PRINT РЕШЕНИЕ УРАВНЕНИЯ F<X>=0 КОИБИНИРОВЙННЫИ-1 02 PRINT ИЕТОДОИ СЕКУЩИХ-ХОРД 05 INPUT E>R.-I0f >DE.. R>I0.-D 18 INPUT Х9,ХЬН Х&, XI.- Н 20 LETX=X0: bOSUB 80 30 LETft=F: LETX=X1: 60SUB 80 48 LETB=F: LETV=X0-A*<Xl-X0)/-<B-fl> 50 LETX0=Xl: LETX1=V 60 IF ABS<X1-X0>>H THEN 20 70 PRINT KOPEHb=Xls STOP 80 LETF=E-X-R*I0«<EXP<B«X:>-i:> . 90 RETURN: ENB 100 RETURN: END Пример. Для уравнения F(x) = x3 + x2 — — Л.-—1 при xa = 2, xi = l,5 и 6=1-10~5 находим ~х= 1 при 4« 10 с. Аналогичный результат получим при хц = 0,5 и ,vi = l,5. Вычисление F(jc) оформляется подпрограммой, записанной со строки 90. Метод Эйткена — Стеффенсона с ускоренной сходимостью обеспечивает решение уравнения (4.5) по следующему
алгоритму. 1. Задаем начальное приближение хп = ха. 2. Находим первое Xt=f(xo) и второе JC2==/(XI) приближения. 3. Вычисляем хп + ,= (хах2 — х\) / (х0 — 2xrf 4. Проверяем условия \хп+\—х„\> г, Хц — 2х1-\-хгфО. Если эти условия соблюдаются, идем к п. 1, т. е. задаем х„ новое значение *л + ь в противном случае останавливаем счет и получаем х — хп+1. Метод Эйткена — Стеффенсона при слож- ных f(x) имеет ускоренную сходимость (по сравнению с методом простых итераций). Однако при простых функциях f(x) время счета практически не уменьшается, так как число дополнительных операций в этом методе существенно больше, чем в методе простых итераций. Пример. Используя данные к программе 4.11, при е = 1-10 6 получим корень (4.7) х= 1,171229421 при ic«7c. Вычисление функции f(x) выполняется подпрограммой, записанной в строках 90 и 100. Метод обратной интерполяции — экстраполяции заключается в вычислении ряда значений yi = F(xi) для заданных х, на отрезке [а, Ь]. Затем, полагая у = 0, с помощью обратной интерполяции находим х, (рис. 4.6, а). Корень может быть найден и за пределами отрезка [а, Ь] (рис. 4.6,6). В последнем случае применяется обратная экстраполяция. Для реализации этого метода могут использоваться описанные в § 4.2 программы. К сожалению, для произвольных F(x) оценка погрешности этого метода отсутствует. Однако для получения результата с заданной погрешностью можно построить итерационную процедуру уточнения корня. Отметим, что при гп = 2 отсчетах F(x) данный метод фактически является комбинированным методом секущих — хорд, реализующим линейную интерполяцию — экстраполяцию. Метод обратной квадратичной интерполяции — экстраполяции заключается в замене F(x) полиномом Лагранжа второй степени (число отсчетов т = 3). При этом можно Программа 4.18. У5 PRINTРЕШЕНИЕ УРАВНЕНИЯ X=FOO МЕТОДОМ
PRINT1 ЭйТКЕНй-СТЕФФЕНСОНАINPUTЗАДАЙТЕ НАЧАЛЬНОЕ ПРИБЛИЖЕНИЕ Х0=Х INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е=Е LETA=X:60SUB 9@:LETB=F:LETX=F bOSUB 98: LETC=CA-2*B+F> IF C=0 THEN 79 60 LETX=<A*F-B*B>/C 70 IF HBSO-;-F;OE THEN 30 38 PRINTКОРЕНЬ УРАВНЕНИЯ Х=Х:60Т0 20 9@ LETF=SIN::X> + .25 100 RETURN: END 10 15 28 30 48 5@
Рис. 4.6. Решение уравнения F(x)=O методом обратной интерполяции (а) и экстраполяции (б)
получить аналитическое выражение для приближенного значения корня. Действительно, заменив х на у и у на л\ полином Лагранжа второй степени можно представить в виде x(y)=bo + bt(y — yo) + Сходимость данного .алгоритма основана на свойстве интерполяционного полинома давать точные значения х при заданном у в узле интерполяции (т. е. в точке х\). Программа 4.19.
10 PRINTРЕШЕНИЕ УРАВНЕНИЯ F<X>=0 МЕТОДОМ КВАДРАТИЧНОЙ1 28 PRINT ИНТЕРПОЛЯЦИИ-ЭКСТРАПОЛЯЦИИ 38 INPUTЗАДАЙТЕ ГРАНИЦЫ А/В А,В 35 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЙ Е=Е 40 INPUT3AAAfiTE НАЧАЛЬНОЕ ПРИБЛИЖЕНИЕ Х1 = С 50 LETX=A!G0SU8 120sLETL=F 60 LETX=B!60SUB 120:LETM=F, 70 LETX«C:GOSUB 120sLETQ=C 80 LETN*<C-A>^<F-L)iLETP=<B-A)/<M-L) 98 LETC=A-L«<N+<N-P)*F/<M-F)> 180 IF ABS<Q-C)>E THEN 78 110 PRINTKOPEHb X=CsSTOP 120 LETF*X-SIN<X>-.25 s RETURN:END + bi(y — yi}){y — yi). Для у = 0 находим х = Ьа — Ь\уа + Ь2уаУ\. (4.13) В соответствии с методом Эйткена и с учетом взаимной замены переменных х и у имеем
Приведем алгоритм вычислений этим методом (один из возможных). 1. Полагаем хи = а и вычисляем F(xo) = yo. 2. Полагаем хг = Ь и вычисляем F{x2) = yi. 3. Задаем начальное приближение к корню х = х\ и вычисляем F(x\) = y\. 4. По формуле (4.14) находим корень х (см. рис. 4.6). _ 5. Проверяем условие \х— xi|>e; если оно выполняется, задаем xl=J и идем к п. 3, если не выполняется, останавливаем счет и считаем х корнем. Пример. Используя данные программы 4.11, при 8=1-10"6 получим х= 1,171229661 при /(. «4 с.
§ 4.4. Решение систем нелинейных уравнений
, Решение систем нелинейных уравнений может выполняться описанными выше методами, применяемыми поочередно к каждому из уравнений системы с контролем1 погрешности схождения каждой переменной к корню с заданной погрешностью. Остановимся на описании двух модификаций метода итераций. Решение системы нелинейных уравнений методом простых итераций заключается в реализации итерационного процесса по следующей формуле: Хк„+ о = №<„)), (4.15) применяемой после преобразования системы нелинейных уравнений общего вида Fi(Xi) = 0 (4.16) к виду Xi = f,{Xj). Здесь ( — номер переменной (1, 2, ..., JV), n — номер итерации. Вычисления ведутся до тех пор, пока соблюдается условие \Хц„+\) — Хц„)\> е, где е — заданная точность. Метод Зейделя отличается от метода простых итераций тем, что уточненные
Xi(n+\) сразу подставляются в последующие уравнения. Обычно (но не всегда) метод Зейделя дает лучшую сходимость. Необходимость преобразования (4.16) и трудности в обеспечении быстрой сходимости ограничивают применение
этих методов. Однако программная реализация их довольно проста (см. Приложение 5). Метод Ньютона (или Ньютона — Раф-сона) является наиболее распространенным методом решения системы уравнений (4.16). Он реализуется следующим алгоритмом. 1. Задаем абсолютную или относительную погрешность е = £, число уравнений N, максимальное число итераций М и вектор начальных приближений Хю (с компонентами 2. Используя разложение F,(Xi) в ряд Тейлора, формируем матрицу Якоби необходимую для расчета приращений при малом изменении переменных. Матрица Якоби в развернутом виде записывается следующим образом: dFi/дхх dF\/dx2 ... dF,/dxN dFi/дх, dF2/dx2 ... dF2/dxN dFN/dx\ dFN/dxN
Поскольку аналитическое дифференцирование Fi(Xi) в общем случае нежелательно, заменяем частные производные в матрице Якоби их приближенными конечно-разностными значениями дХ< Hi где Hi — малое приращение Xi, например
H
\X\
3. Составляем и решаем систему линейных уравнений для малых приращений Хг. FdF\/dxi dF\/dx2 ...dF\/dx dF2/dx, dF2/dx2 ... dF2/dxN
L dFJdxt dFJdx, ... dFJdxN
Решение этой системы дает Axi, hx2, ..., AxN, т. е. t±Xi. 4. Вычисляем уточненные значения X{(n+\)=Xl(n)-\-l\X\, А
% (л+l) ~XN (я)
или в общем виде 5. Для всех AXi проверяем одно из условий: |ДА-,|>е, \AXi/Xi\>e. Если оно выполняется, идем к п. 2, т. е. выполняем новую итерацию. Иначе считаем вектор Хцп+[) найденным решением. Отметим, что решение системы нелинейных уравнений (4.16) можно представить и в виде Х,(п+ i) = Xi(n)-WCn)lFi(Xi(n)), где W\n) - обращенная матрица Якоби. Обращение матрицы Якоби осуществляется в ходе решения системы линейных уравнений для приращений АХ, методом Гаусса. Программа 4.20.
10 PRINTРЕШЕНИЕ; СИСТЕМЫ НЕЛИНЕЙНЫХ УРАВНЕНИЙ1 28 PRIWT МОДИФИЦИРОВАННЫМ МЕТОДОМ НЬЮТОНА
30 ШРиТЗАДАйТЕ ЧИСЛО УРАВНЕНИЙ H=NiDIM A<N,N>,B<NbX<N>,F<N:>
40 INPUTЗАДАЙТЕ МАКСИМАЛЬНОЕ ЧИСЛО ИТЕРАЦИЙ М=М 50 INPUTЗАДАЙТЕ ОТНОСИТЕЛЬНУ» ПОГРЕШНОСТЬ E=EsLETS=8 N;PRINT!2.0! ВВЕДИТЕ ХЧ<8> 70 INPUT X<I>«NEXT I 80 60SUB 2608FOR 1=1 TO H:LETB<I)=-F(I):NEXT I 90 FOR J=l TO NSLETX=X<J):LETH=E«ABS<X)
,60
FOR
+
I«l
TO
180 LETX<J)=X+H56OSUB 260:FOR 1=1 TO N ,110 LETA<bJ>=<IFa> B<I>>/H:NEXT HLETX<J>=X!NEXT J ^128 LETS=S+lsIFS=M+l THEN PRINTHHCflO ИТЕРАЦИЙ S=M:STOP 130 FOR 1=1 TO Ijl-UFOR .J=I + 1 TO N 140 LETA<JW)=-A<J^I)-A<bI)!FOR K=I + 1 TO N 150 LETA<J>K>=ACJ»K>+A<J/i:>*A<bK>iNEXT К 160 LETB<J)=B<J>j+A<J, I>*B<I>iNEXT ЛНЕХТ I 170 LETF<N)=B<N>/A<:N;N):FOR I=N-1 TO 1 STEP -1
180 LETH=B<I)sFOft J=I + 1 TO N«LETH=H-F<J)«A<bJ):NEXT J 190 LETF<I>=H-A<ibI):NEXT IsLETR=0 200 FOR 1 = 1 TO N8LETXa>=X<I>+Fa> 218 IF ABSCFa>xXa>)>E THEN LETR=1
220 NEXT I: IF R=41 THEN 80 230 PRWTPEiUEHHE СИСТЕМЫ
240 245 250 260 270 280
FOR 1 = 1 TO Nf»PRINT!2.0!XI!F1.9! = Xa:>!NE:<T I PRWT!2.0!4)(lCflO ИТЕРАЦИЙ S=S«STOP REMПОДПРОГРАММА ВЫЧИСЛЕНИЯ F<I>=F<X<1)>X<2>> .. . LETF<n=X<O+3«L6T<X<l))-XC2)*XC2) LETF<2>=2*xa>*xa>-x<i;>*x<£>-5*xa>+i RETURN!END
92
Пример. В программе со строки 260 записывается подпрограмма вычисления правых частей (4.16) в виде F(/) = (Функция переменных Х(1)). В данном случае подпрограмма служит для решения системы уравнений
xi+3 1gxi-xl = 0, 2*i — xix2 —5xi + 1 =0. Задав N = 2, М=10 (максимальное число итераций для случая, если решение расходится), е = £=Ы(Г4, JCIO = X1(0) = 3,4 и *2о = Х2(О) = 2,2, получим х, =3,487442788, х2 = 2,261628631 и S = 3. Значение переменной S дает число итераций, а значения , F(l) — невязки системы. Время счета контрольного примера 16 с. Решение (4.16) с помощью методов минимизации функций ряда переменных описано в § 4.6.
§ 4.5. Решение алгебраических уравнений с действительными и комплексными коэффициентами Алгебраические (но не трансцендентные) уравнения сводятся к канонической форме имеет решение в виде а\ xi,2 = —тгг~ ао а? где коэффициенты Ао, А\..... А„— в общем случае комплексные числа. В таком виде алгебраические уравнения используются редко. Ца практике обычно встречаются поли-номиальйые уравнения с действительными коэффициентами aox" + a\xn-] + ...+an~ix + an = 0, (4.18) причем нередко (4.18) записывается в другой форме: (4.19) о=О. Отметим некоторые известные свойства алгебраических уравнений, на которых базируются методы их решения. 1. Корни алгебраических уравнений могут быть действительными и комплексно сопряженными, причем на комплексной плоскости все они лежат в пределах кольца, ограниченного окружностями с радиусами #=1 + наибольший по модулю коэффициент полинома, аМакс — следующий наибольший по модулю коэффициент (т. е. без учета аманс)2. Число корней с учетом их кратности равно п, причем полиномы нечетной степени обязательно имеют хотя бы один действительный корень. 3. Число положительных (отрицательных) корней равно числу перемен (постоянств) знаков в последовательности ап, ап-\, ..., по коэффициентов или меньше его на четное число. Квадратное уравнение =0
(4.20)
причем если подкоренное выражение отрицательно, корни получаются комплексно сопряженными, если оно положительно, они действительные. Программа 4.21. Пример. Для уравнения 2х2— Ъх —10 = = 0 получим xi = — 1,311737691 и хг = 3,811737691, а для уравнения х2 + 2х + + 15 = 0 получим ^1,2= — 1 ±/-3,741657387. Приведенное кубическое уравнение x3 + a2x2 + aix + a0 = 0 (4.21) может решаться по точным формулам [18]. Однако более компактное решение получается при использовании следующего алгоритма. Вначале методом половинного деления с е = 1 10~ !0 находится действительный корень хъ (он обязательно существует). Затем делением (4.21) на (х — хз) получается квадратное уравнение, из которого вычисляются два других корня х\ и х2. Программа 4.22. Пример. Для уравнения х3 — 6х2 + 21х— — 52 = 0 получаем xi,2= 1 ±/-3,464101615 и хз = 4, а для уравнения х3 — 2 6х +11х— 6 = 0 ПОЛУЧИМ X] =3, Хг = 2 И Хз= 1.
Уравнение (4.19) с действительными коэффициентами решается методом Хичкока. При этом (вначале) итерационным методом из (4.19) выделяется квадратичный множитель (если п^2) и вычисляются два его корня. Затем (4.19) делится на этот множитель, т. е. п уменьшается на 2, и процесс повторяется до вычисления всех корней. Программа 4.23. Пример. Для уравнения х4 + 9х3 + + 31х + 59х + 60 = 0 получим корни х\ = == — 1+/-2, *2= — 1— /-2, х3= — 3 + /-0, *4=—4 + /-0 (т. е. хз и Х4 действительны), а для уравнения х5 + 8х4 + 31х3 + 80х2 + 94х + + 20 = 0 получим х, = — 0,2679491924, х2 = = —2, хл= — 1+/-3, х4= —1—/-3 и х5 = = —3,732050808 (при вычислениях принималось 8=1 -10"6). Решение уравнения общего вида (4.17) с комплексными коэффициентами Л, = а, + /& ; обобщенным методом Ньютона реализуется следующим алгоритмом. 1. Вводим массив Л, и задаем точность вычислений е. 2. Задаем начальное приближение Zo = = xo + /t/o, в частности лго = О и уо = О (метод дает сходимость к какому-либо корню при любых начальных приближениях). 3. По методу Ньютона (но с применением аппарата комплексной арифметики) находим корень (4.17) Z\. 4. Делим (4.17) на (Z —Zi), т. е. понижаем степень (4.17) на единицу и повторяем вычисления с п. 2 до нахождения второго корня и т. д. до тех пор, пока не будут вычислены все корни. Более подробное описание этого метода см. в [24]. При использовании програм93
.Программа 4.21. 05 PRINTРЕШЕНИЕ КВАДРАТНОГО УРАВНЕНИЯ 10 INPUTВВЕДИТЕ А£=С:INPUTВВЕДИТЕ А1=В 15 INPUTВВЕДИТЕ АЗ=А 20 LETB=B/2/C:LETF=D*B-AVC 30 IF F>0 THEN 68 40 PRINTXb2=-D+- J*SQR<-F> 58 60T0 10 60 PRINTX1=-B-SQR<F>
70 PRINTX£=-D+SQR<F> 80 60T0 10:END Программа 4.22. 05 PRINTРЕШЕНИЕ ПРИВЕДЕННОГО КУБИЧЕСКОГО УРАВНЕНИЯ 10 INPUTВВЕДИТЕ А2=С:INPUTВВЕДИТЕ А1=В 15 INPUTВВЕДИТЕ А0=A:INPUTВВЕДИТЕ /А МАХ/=К 20 LETX=0:LETK=K+1 25 LETG=X+C!LETL=&*K+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=-&-2!LETM=E»iE-L 80 IF M>=0 THEN 130 98 PRINTX1>2=E+- J*SGR<-M) 100 PRINTX3=X:ST0P 130 LETF=SQR<M>:LETH=F+Es LETI=E-F 140 PRINTX1=H:PRINTX2=I:PRINTX3=X:ENII Программа 4.23. 05 PRINTВЫЧИСЛЕНИЕ ВСЕХ КОРНЕЙ ПОЛИНОМА 10 PRINTС ДЕЙСТВИТЕЛЬНЫМИ КОЭФФИЦИЕНТАМИ 15 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ Е=Е 20 INPUTЗАДАЙТЕ СТЕПЕНЬ ПОЛИНОМА N=N:DIM A<2*N+1> 25 FOR J=l TO N+lSPRINTВВЕДИТЕ A!2.0!N+1-J 30 INPUT A<J):NEXT JsLETK=l 35 LETT=liLETC=A<2VA<l> 40 IF N=1 THEN LETP=-C:l_ETQ=0!6OTO 270 50 IF N=2 THEN 1_ЕТН=С*С/Ч-А<СЗУАа)!&0Т0 228 60 LETM=10:LETC=4sLETD=S:LETU=4 70 UETU=8!LETF=l!LETUI=2:LETT=0 88 IF MO10 THEN 100 85 LETP=C!LETM=0s LETQ=Ds LETC=UsLETD=U 90 LETU=P s LETU=Q s LETV=C:LETZ=D s LETF=-F 100 LETM=M+1sLETH=0:LETQ=A<1)sLETP=A<2>-C*QsLETL=Q 120 FOR J=3 TO N:LETR=P!LETP=A<J)-C*R-D*Q 130 LETQ=R!LETR=L!LETL*Q-C»fR-H*D:LETH=RsNEXT J 140 L.ETQ=A<N+1>-D*Q:LETS=L+C«R 150 IF T=0 THEN l_ETX=P*RsL.ETH=R*X+S*LiIF H=9 THEN 80 160 LETC=C+< P*S-Q*R)/H s LETD=D+< P*X+Q*L)/H 170 IF C-V+D-ZO0 THEN 190
Д80 185 130 200 210 220 230 240 250 270 298 300 310 320 330 340 350 94 Re Z(l) =
IF Fs-U THEN PRINTНЕТ РЕШЕНИЯ:STOP LETW=-F LETH=C«C^4-D»IF SQR<«3-P*C2>~2+P*P*ABS<:H>:>>E/N THEN 80 LETT=0!LETA<2)=A<2)-Ci«A<l)!FOR J=3 TO N-l LETA<J)=A<J)-C«A<J-1)-D*A<J-2):NEXT J LETP=-C/2:LETQ=SQR<ABS<H>> IF H>=0 THEN LETM=P+QiLETP=P-Q:LETQ=0:6OTO 250 LETM=P PRINT!2.0!XCK)=!F1.9!M +J«<Q ) :1_ETK=K+1 PRINT!2.0!X<K)=!F1.9!P +J«<-Q>:LETK=K+1 IF TO0 THEN 358 LETN=N-2:LETA=0 IF SQR<<S-Ri«C/2r-2+R*Ri«ABS:H>><=E THEN LETA=1 LETB=0sIF N>=2 THEN LETB=l IF A+B=2 THEN LETT=ls60T0 110 60T0 35 PRINTВЫЧИСЛЕНИЯ ЗАКОНЧЕНЫSEND — 2,67949-
Re Z(2) = 2,00000 Re Z(3) = 3,73205 — Re2 1.00000 (4) = ReZ
-
ю1
(5) = 1,00000 lmZ — 10" K(\) 17 (l) = 7,96970—l — Hi ImZ 1,5199 K(2)= (2) = 5-10 l 10~1 ImZ — K(3)= 7 (3) = 4,61589l ImZ 3,0000 X(4)= (4) = 0 l ImZ K(S)= (5) = 3,00000 1 мы 4.22, реализующей этот метод, вводятся: степень полинома n = N, погрешность равен-етва нулю производной £1, погрешность вы-числения корней б = £2 и массив действи-тельных а, и мнимых Ь, частей коэффициен-той А,. Если Д = а, - действительные числа, задаем ft,-= 0. Программа 4.24. Пример. Решить уравнение Zr> + 8Z4 + 31Z3 + 8f )/J + 942 + 20 --= 0. Вводим N — 5, ao=l, ai=8, a2 = 31, a:1 —80, Значения /((/) указывают на кратность a4 = 94, a5 = 20 и ftn4-ft5 = 0. Результат полу- мо корня. Для lmZ(l), Im2(2) и ImZ(3) чаем (при £1 = 1-Ю"3 и £2=l-10~s) значения меньше заданной погрешности £2, с округлением на пятой цифре: поэтому их следует считать нулевыми. Таким Программа 4.24.
05 10 15 26 25
PRINTВЫЧИСЛЕНИЕ КОРНЕЙ ПОЛИНОМА P(Z) PRINTС КОМПЛЕКСНЫМИ КОЭФФИЦИЕНТАМИ INPUTЗАДАЙТЕ СТЕПЕНЬ ПОЛИНОМА Н= NsLETH=H DIM C<N+O/D<N+1>,E<N+1>>F<N+1>>&1<N+1> DIM A<N+1>/B<:N+1)..F1<H-H)..K<N)/B1<N)^21<N>
30 LETX8=e:LETVe=e: INPUTВВЕДИТЕ ЕЬЕ2 ЕЬЕ2 40 FOR 1 = 1 TO N+l:PRINT!2.0!BBEAHTE AC 1-1>»B<I-Г V 58 INPUT AU>/Ba>:NEXT IiLETIl = l 128 LETX=X0sLETV=V0sLETS=l:FOR 1=1 TO N+l 140 LETF< I >=A< I >:LET61 < I >=B< I ) LETC< I )=A< I ): LETIK I .)=B< I) 150 NEXT IiLETM=N:&OTO 608 178 LETUl=U:LETUl=M:LETL=l:6OTO 670 130 FOR 1=1 TO N+L-l
200 LETF<I)=C<I>:LET61<I)=IKI):NEXT I 226 LET M=N-L:LETS=2!6OTO6£i0 230 IF SQR<U"2+y"2)>=El THEN 260 249 LETL=L+l:SOTG 670 266 LET 2*U"2+U~2 270 LET 6=-<Ul«U+Ul*U>^2 280 LETO=<U1*U-V1»U>/Z:LETZ=SQR<&«6+W*W>:LETU1=W>Z 300 IF ftBS<U/-Z)>l THEN LETWl=SI8N<W/2> ЗШ LETF2=ASN(W1>/L
320 330 348 350
IF 6<=0 THEN LETF2=#PI/L-ASH<W1)^L LET2=EXP(L06<Z)L)!LET6=Z*.C0S<F2) LETI»l=Z*SIN<F2>!LETT=l:LET3=3!LETM=N FOR 1*1 TO N+l
360 LETF<I>=A<I>!LET6UI>=B<I>»NEXT I
370 LETX=X0+T*&!LETV=V0+TKW:&OTO 608 390 IF (U"2+U~2X<U1"2+U1"2>THEN 465 400 LETT=T2:&OTO370 410 IF T«SQR<&"2+W"2XE2 THEN 460 420 LETX0=X:LETV0=V:LETS=l:FOR 1=1 TO N+l 448 LETCa>=A<I>:LETD<I)=B(I>:NEXT U&OTO 170
468 478 508 520 538 568 578 5S8 608 618 628 640 650 668 670 680 696
LETKC11>=L:LETD1<11)=X:LET21<11)=V FOR J=l TO L:LETQ=N".J+l!&OTO 708 FOR 1 = 1 TO QiLETA:I>=E.I>:LETBa>=Fia>:N£XT I:NEXT J IF N-L<=8 THEN 560 LETIl=Il+l!LETN=N-i:&OTO 128 FOR 1=1 TO H PRINT!2.8!RE ZC I >= !F1.5!B1(D !2.8! IM J. I > - !F1.5!ZKI) PRINT!2.0!K<M)«K<I):NEXT I«STOP LETU=F<nsLETU=6Kl> FOR 1=2 TO M+l LETZ=U*X-y«V+Fa>:LET U=U*V+U*X+G1<I):LETU=2 NEXT I:IF S=l 60T0 170 IF S=2 ЬОТО 230 60T0 390 FOR 1=1 TO M LETCq>=<M-I + l)*C<I):LETB(I>=<M-l+l)*IKI> NEXT is 60T0 190
700 LETE<1)=A<1)8LETFK1)=B<1> 718 FOR 1=2 TO Q 720 LETEU>=«A<I>+Ea-i:>*X-FUI-l>*V 738 LETFl<I>=Ba>+E<I-l>*V+Fia-l>*X 74B NEXT П60Т0 580SEND 95 образом, уравнение имеет три действительных корня Zi = — 0,267949, Z2 = — 2 и Z3 = = —3,73205 и два комплексно сопряженных Z4,5= —1±/3. Время счета контрольного примера около 10 мин.
§ 4.6. Поиск экстремумов функций одной и множества переменных На практике часто необходимо найти экстремум (или экстремумы) некоторой целевой функции F(xi, X2, , х„) п переменных Xi (проектных параметров). Такая функция описывает (га+ I) -мерную поверхность. Соответственно функция F(x) одного параметра Х\ =х описывает некоторую кривую на плоскости (рис. 4.7, а). Поиск экстремумов функций одной переменной является самостоятельной и часто встречаемой задачей. Кроме того, к нему сводится гораздо более сложная задача поиска экстремумов функций множества переменных [3, 41]. В общем случае функция F(x) может иметь несколько экстремумов (максимумов или минимумов). Из них главный (оптимальное решение для пространства проектирования) называется глобальным. Задача поиска экстремумов сводится к их локализации и уточнению значений х и F(x) в точке экстремума. В дальнейшем для функций одной переменной под экстремумом будем подразумевать максимум F(x). Поскольку максимуму функции F(x) соответствует минимум функции — F(x), то, сменив знак у F(x), программами поиска максимума можно пользоваться и для поиска минимума функций. Будем также полагать, что на изменения х (если это особо не оговорено) накладываются ограничения в виде неравенств a^xsgib, где о и Ь — границы интервала поиска. В пределах отрезка [а, Ь] функцию считаем унимодальной, т. е. содержащей один максимум (рис. 4.7, б). Метод равномерного поиска основан на том, что переменной х присваиваются значения х-\-&х с шагом Лх = const и вычисляются значения F{x). Если F(xn+\)> F(xn), переменной х дается новое приращение. Как только F(xn+\) станет меньше F(xn), поиск останавливается. При малой заданной погрешности этот метод неэкономичен по затратам машинного времени. Метод поразрядного приближения является разновидностью метода равномерного
Рис.
4.7.
Функция
с
несколькими
экстремумами
(а)
и унимодальная функция с одним экстремумом максимумом
(б)
поиска и реализуется следующим алгоритмом. 1. Задаем начальное приближение х = хо слева от максимума F(x) и вычисляем F(xo). Задаем D = h, где п = Ах — начальный шаг поиска. 2. Полагаем G = F(xn), где вначале F(xn) = = F(XQ), задаем x = x-\-D и вычисляем F(xn+0 = F(x). 3. Проверяем условие F(xn+\)> G; если оно выполняется, идем к п. 3, если нет — к п. 4. 4. Полагаем D=—£>/4. Проверяем условие \D\> Е/4, где Е — заданная погрешность вычисления х„ в точке максимума. Если оно выполняется, идем к п. 2, т. е. обеспечиваем поиск максимума в другом направлении с шагом в 4 раза меньше прежнего. Если данное условие выполняется, заканчиваем счет. Программа 4.25.
10 15 20 25 30 35 40 50
PRINTПОИСК МАКСИМУМА F<« МЕТОДОМ PRINT ПОРАЗРЯДНОГО ПРИБЛИЖЕНИЯ INPUTВВЕДИТЕ НАЧАЛЬНЫЙ ШАГ ПОИСКА Н= Н INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е= Е INPUTЗАДАЙТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ X Х0= X LETD=Hs60SUB 86 LETG=F:LETX=X+B:60SUB 80 IF F>6 THEN 40
60 70 80 90
LETD=-B/4: IF ABS<D>>E/4 THEN 40 PRINTXM=XsPRINTF<XM)=FsSTOP LETF=<<.1*X-2>*X+10>*X RETURN!END
Пример. Найти максимум функции Fix] = 0 1 х3 — 2х24-1 Ох
(см. алгоритм ниже). Он позволяет сужать 1АГ>9\ отрезок [а, Ь], каждый раз вычисляя лишь I -") одно значение F(x), а не два, как в методе Подпрограмма вычисления F(x) записана со дихотомии. Данный метод реализуется слестроки 80. Задав h=\, £ = 0,001 и хп = 2, дующим алгоритмом. получим хт = 3,33203125 и F(Xm]= 14,81481312. 1. Находим коэффициент дробления k = Метод дихотомии (деления интервала ==(-^/5—1)/2 отрезка [а, 6]. поиска [а, Ь] пополам) реализуется следую2. Находим абсциссу х\ = а-4-(1—k)(b — а) щим алгоритмом. и вычисляем F(x\). \. Проверяем условие \Ь — а\ <2£, где 3. Находим абсциссу x2 = a-\-k(b — а) и выЕ — заданная погрешность вычисления х,„. числяем £(хг). Если это условие выполняется, идем к п. 6; 4. Проверяем выполнение условия если не выполняется, идем к п. 2. х2— xi|<£, где £— заданная погрешность 2. Делим интервал поиска [а, Ь] пополам вычисления хт. Если это условие выпол-и вычисляем две абсциссы, симметрично няется, вычисляем хт= (х\ + х2) /2 и F (хт), расположенные относительно точки х= после чего останавливаем счет с выдачей = (а+Ь)/2: х\ = (а + Ь — е)/2 и JC2 = (а4-6+ значений х„, и F (хт). Если данное условие + Е)/2. не выполняется, идем к п. о. 3. Для этих значений х вычисляем F(x\) 5. Проверяем условие F{x\)<Z. £(хг). Если и £(х2). оно выполняется, полагаем а = х\, х\ =хг 4. Проверяем условие F{x\)> Flx-i). Если и F(x{) = F(x2), после чего выполняем п. 3 и п. 4. оно выполняется, полагаем 6 = хг и идем 6. Если F{x\)~^ F{xi), полагаем 6 = хг, к п. 1. Если не выполняется, идем к п. 5. x2 = Xi, f(x2) = f(xi), после чего выполняем п. 2 5. Полагаем a = xi и идем к п. 1. и п. 4. 6. Выводим на печать хт=(а-\-Ь)/2 и Программа 4.27. вычисляем F (хт). Пример. Со строки 180 записана под-Программа 4.26. программа вычисления F(x) для функции 19 PRINTПОИСК МАКСИМУМА FCX) МЕТОДОМ ДИХОТОМИИ1 20 INPUTВВЕДИТЕ ГРАНИЦЫ ИНТЕРВАЛА ПОИСКА А.. В-А.-В 25 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е=Е 30 IF ABS<B-AX2*E THEN 100 40 иЕТС^^А+В-Е^^-ггиЕТГ^^А+В+Е^-г 4
50 LETX=C:GOSUB 120sLETK=F 60 LETX=D:60SUB 120:LETL=F 76 IF K>L THEN 98 80 LETA=C: 60T0 38 9S LETB=D". GOTO 30 100 LETX=<ft+B:>.-"2:60SUB 120 110 PR IHT XM= X: PR I NT F < XM > = F: ST OP 120 LETF=<<.1*X-2>*X+10>*X 138 RETURN: END
"
Пример. Со строки 120 записана под(4.22). Для a = 2, b=5 и £ = 0,001 получим программа поиска максимума функции F(x) хт = 3,33495386 и F (х,„) = 14,81481479. по формуле (4.22). При а = 2, 6 = 5 и £ = 0,001 Метод квадратичной интерполяции — получим хт = 3,333429565 и F(xm)= 14,81481481. экстраполяции заключается в замене F(x) Метод золотого сечения основан на делении в промежутке х\ +h, где х\ — начальное приотрезка [a, b] по правилу золотого сечения ближение, квадратической параболой, экстреПрограмма 4.27.
10 20 25 30 40 50
PRINTПОИСК МАКСИМУМА FOO МЕТОДОМ ЗОЛОТОГО СЕЧЕНИЯ INPUTВВЕДИТЕ ПРЕДЕЛЫ ИЗМЕНЕНИЯ X А,В А,В INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е= Е LETK=C5QR<5)-l)/2 GOSUB 140 60SUB 160
60 IF ftBS<D-CXE THEN 120
70 IF L>M THEN 100 80 LETA=C:LETC=D:LETL=M 90 GOSUB 160:GOTO 60 100 LETB=Ii:LETD=C:LETM=L 110 GOSUB 140!GOTO 60 120 LETX= <C+D)/2 s PRINTXM=X 130 60SUB 180:PRINTF(XM> = F:.STOP 140 LETC=A+a-K>*<B-A> 150 LETX=C:GOSUB 180:LETL=F:RETURN 170 LETX=D:60SUB 180:LETM=F:RETURN 180 LETF=<<.1«X-2)*X+10>*X 190 RETURN:END 4 В. П. Дьяконов
97
мум которой вычисляется аналитически. После приближенного нахождения экстремума хт (максимума или минимума) можно задать х\=хт и повторить поиск. Таким образом, с помощью итерационной процедуры значение хт уточняется до получения его с заданной погрешностью к. Как видно из рис. 4.8, этот метод обеспечивает поиск как максимумов, так и минимумов F(x), в том числе для случая F (х) = 0, причем точка х,„ может лежать в интервале х\ +h (интерполяция) и быть вне его (экстраполяция). Алгоритм реализации этого метода следующий.
1. Задаем начальное приближение Х| для х„ и вычисляем два смежных значения аргумента F(x):xo = X{—h и ла —Xi+Л, где h— полуинтервал интерполяции -- экстраполяции. 2. Вычисляем три значения F (х): F (х0) — = Fo, F(xt)=---F, и F(x2)=F2. 3. Находим коэффициенты
параболы у{х) = х1-\-Ьх-\-с, проходящей через выбранные три узла интерполяции — экстраполяции F(x), и по ним вычисляем аналитически положение экстремума
4. Проверяем выполнение условия1 (х„, — х\) <е. Если оно не выполняется, задаем х]=х,„ и идем к п. 1. Если выполняется, считаем х„, найденным с заданной погрешностью е, вычисляем F (х,„) и останавливаем счет. Программа 4.28. 10 PRINTВЫЧИСЛЕНИЕ ЭКСТРЕМУМОВ ФУНКЦИИ ОДНОЙ ПЕРЕМЕННОЙ 38 PRINTМЕТОДОМ КВАДРАТИЧНОЙ ИНТЕРПОЛЯЦИИ-ЭКСТРАПОЛЯЦИИ 100 INPUTВВЕДИТЕ ШЙГ Н=Н 185 INPUTВВЕДИТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ УЛ = 7. 110 INPUT-ЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е=Е 115 LETX=Zs&OSUB 200:LETU=F 120 l_ETX=Z-H!60SUB 280:LETW=F 130 LETX=Z+H:60SUB 208»LETU=F 140 LETT=W*<2:«2+H>-4.«U«2+U*<2*Z-H> 158 LETT=T.<Ui--2«U+U>.-2 160 IF ABS<T-ZXE THEN 18@ 170 LETZ=Ts6GT0 115 180 PRINTXM=T
190 PRINT RXM> = КЯ STOP 280 LETF=<Cl«X-2)*X+10)i«X 210 RETURN:END
Рис. 4.8. Поиск экстремумов максимума (а) и минимума (б) методом квадратичной интерполяции -экстраполяции причем в обоих случаях экстремумы находились за пределами интервала X\+h. Сравнение методов одномерной оптимизации показывает, что для простой функции F(x), например вида (4.22), они обеспечивают примерно одинаковое время поиска (около 10 с). Исключением является последний метод, имеющий время поиска примерно в 2,5 раза меньше. Последнее связано с тем, что функция (4.22) близка к квадратичной параболе из-за малости коэффициента при х3. Пример. Вычисление Fix) для функции (4.22) производится подпрограммой, записанной со строки 200. Для /г = 0,1; .*Г|=3 и е = 0,001 получим х„, = 3,33383342 и F (х„.) = = 14,8148146, а для х, = 8 х,„ = 9,999499962 и F (xm) =2,414881321 -КГ 7. Значения F (х,„) показывают, что в первом случае обнаружен максимум F(x), а во втором — минимум, В большинстве случаев для гладких F(x) метод квадратичной интерполяции — экстраполяции дает заметный выигрыш во времени вычислений. Удобно и то, что он без всякой перестройки программ обнаруживает как максимумы, так и минимумы F(x), причем даже за пределами первоначально заданного интервала поиска. Преимущество
метода золотого сечения перед методами поразрид ного приближения и дихотомии при простых F(x) не выявляется, поскольку программная реализация первого метода сложнее и необходимо выполнение ряда вспомогательных one раций. Однако при сложных F(x) метод золотого сечения может давать существенный выигрыш во времени. Для поиска экстремумов пользуются также методом с числами Фибо наччи [3, 41], однако особым преимуществом перед методом золотого сечения он не обла дает. Многомерная оптимизация заключается в поиске экстремумов функции многих переменных F(x\, хг, ..., ха). Методы такой оптимизации детально описаны в [3, 38, 41]. Из всего многообразия методов многомерной оптимизации ограничимся рассмотрением трех относительно простых методов поиска мини мума F(x\, х-2, ..., хг). Метод координатного спуска заключается в поочередном поиске минимума по коор динате х\, затем хг и т. д. После нахождения точки минимума по координате xt переходим к нахождению точки минимума по координате х2 и т. д. Поиск ведется с одинаковым шагом, который уменьшается после нахождения всех значений х\я, х-ш, ., хпт. Таким образом, алгоритм реализации этого метода подобен алгоритму метода поразрядного приближения и лишь дополняется циклом задания переменных х\, х2, ..., х„, внутри которого оценивается погрешность нахождения х,„, для каждой переменной. Программа 4.29. Мегод спирального координатного спуска отличается от рассмотренного выше лишь тем, что шаг // меняется каждый раз при переходе от поиска минимума по одной переменной к поиску минимума но другой переменной. В трехмерном пространстве это напоминает спуск во впадину по спирали. Обычно этот метод дает некоторое сокращение времени поиска. Программа 4.30. Со строки 120 записана подпрограмма вычисления функции (4.23). Для хю—х-2о = = л:3о = О,5; Я = 0,5 и £=1-10~4 получим jc,-m= 1,000032; х2,„ = 2,000032; х3„ = 3,000032 и F (*,)„„„ = 3,735451795 при /t.«l,5 мин.
Метод координатного спуска с квадратичной интерполяцией -— экстраполяцией основан на последовательном поиске минимума каждой переменной с применением для этого метода квадратичной интерполяции - экстраполяции. Программа 4.31. Приме р. Со строки 250 записана подпрограмма вычисления функции (4.23). При Я = 0,01; /"==]- 10 4; .1|о--=Х2о = Хад = О,5 получим х,т= 1,000033409; лг2т = 2,000016758; г3„« = 3,000008995 и F (л:,) „„„ =3,735514058 (/г« I
МИН).
Применение многомерной оптимизации для решения систем уравнений (линейных и нелинейных).. система уравнений
Если
дана
fn(Xl,
10 15 2@ 25 30 35 40 45 50
PRINTМИНИМИЗАЦИЯ ФУНКЦИЙ N ПЕРЕМЕННЫХ МЕТОДОМ PRINT КООРДИНАТНОГО СПУСКА INPUTЗАДАЙТЕ ЧИСЛО ПЕРЕМЕННЫХ H=N:BIM А<Ы> INPUTЗАДАЙТЕ НАЧАЛЬНЫЙ ШАГ ПОИСКА H=HsLETL=H INPUTЗАДАЙТЕ ТОЧНОСТЬ РЕЗУЛЬТАТА Е=Е FOR 1=1 ТО Н PRINT!2.3!ВВЕДИТЕ НАЧАЛЬНЫЕ Х1 0= INPUT A<I):NEXT I FOR 1=1 TO N:LETB=.3E98
60 LETA<I)=A<I)+H:60SUB 158:LETC=B:LETB=F
70 IF F-C<8 THEN 60 30 LETH=-H/3!IF ABSCH>)=ABS<L-3> THEN 60 90 LETH=L!NEXT I 100 LETL=L/9:LETH=L 110 IF E--9<=L THEN 50 115 PRINT!F1.9!F<XI MIH>=F 120 FOR 1=1 TO H 130 PRINT!2.0!XI MIH=!F1.9!A<1> 135 NEXT I:PRIHTКОНЕЦ ВЫЧИСЛЕНИЙsSTOP 140 NEXT I:PRINTКОНЕЦ ВЫЧИСЛЕНИЙ:STOP 150 LET 160 RETURNS END
Пример. Со строки 150 записана подпрограмма вычисления функции ^--
(4.23)
F{xt, х2, хъ)=
трех переменных. Для начальных значений х10 = х2о = хзо = 0,5; шага Я = 0,5 и погрешности £=Ы0-4 получим х\т = 0,9999745973; х2т = 1,999974597; х3т = 2,999979597 и F (х,) мин ==3,735451794. Время счета около 1,5 мин. то поиск минимума функций дает неизвестные этой системы. Пример. Найти неизвестные системы из двух нелинейных уравнений 99
Программа 4.30. IS PRINTМИНИМИЗАЦИЯ ФУНКЦИЙ N ПЕРЕМЕННЫХ МЕТОДОМ 15 PRINT СПИРАЛЬНОГО КООРДИНАТНОГО СПУСКА 20 INPUTЗАДАЙТЕ ЧИСЛО ПЕРЕМЕННЫХ N=N:DIM АОО 25 INPUTЗАДАЙТЕ НАЧАЛЬНЫЙ ШАГ ПОИСКА Н=Н 39 INPUTЗАДАЙТЕ ТОЧНОСТЬ РЕЗУЛЬТАТА Е=Е 35 FOR 1=1 ТО N 48 PRINTI2.8! ВВЕДИТЕ НАЧАЛЬНЫЕ XT 8=
45 INPUT A<I>:NEXT I 58 FOR 1=1 TO N!LETB=.9E98 66 LETA<I>=A<I>+H:GOSUB 12©:LETC=B:LETB=F 7@ IF F-C<0 THEN 68 75 NEXT I 80 LETH=-H/5: IF ABS<H)>E--5 THEN 58 98 PRINT!F1.9!F<XI MIH>=F Ш8 FOR 1 = 1 TO N 118 PRINT!2.0!XI MIN=!F1.9!A<I) 115 NEXT I:PRINTКОНЕЦ ВЫЧИСЛЕНИЙ:STOP 128 LETF=EXP<Aa>+A<2>+A<3::O.^Aa>*A<2)*A<2>*Ai3:>*A<3>*A<3:O 136 RETURN: END Программа 4.31.
10 PRINTМИНИМИЗАЦИЯ ФУНКЦИЙ N ПЕРЕМЕННЫХ F(SI) МЕТОДОЙ 15 PRINT КВАДРАТИЧНОЙ ИНТЕРПОЛЯЦИИ-ЭКСТРАПОЛЯЦИИ 28 INPUTЗАДАЙТЕ ЧИСЛО ПЕРЕМЕННЫХ H=N:DIM A<N> 25 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЯ Е=Е 30 INPUTЗАДАЙТЕ ИНТЕРВАЛ ИНТЕРПОЛЯЦИИ Н=Н 35 FOR 1=1 ТО N 40 PRINT!2.0(ВВЕДИТЕ НАЧАЛЬНЫЕ ЗНАЧЕНИЯ ХГНАЧ= 50 INPUT A<I):HEXT I 108 LETS=8 118 FOR 1=1 ТО N 120 LET2=Aa>!6OSUB 258:LETU=F 138 LETA<D=Z-H:60SUB 258:LETW=F 140 LETAU>=Z+H:6OSUB 250:LETU=F 150 LETT=W*<:2*Z+H)-4*y*2+U*<:2*Z-H> 168 LETT=T/<UI-2*U+UV2 178 IF" ABSa-Z>>E THEN LETS=1
188 190 208 210 228 238 248 258 268
LETA<I>=T:NEXT I IF SO8 THEN 180 PRINT!F1.9!F<XI MIN>=F FOR 1=1 TO N PRIHT!2.0!XIMIN=IF1.9! A<I> NEXT I PRINTKOHEU ВЫЧИСЛЕНИЙ:STOP LETF=EXP<Aa>+A<2)+A<:3>>.4A<l>*A<2>-*A<2:>*A<3>*A<3>*A<3>> RETURN:END
Для них имеем
F(xlt x2) = {xi + xl-\)2 + (x\~-x2f.
Воспользовавшись программой 4.31 при Я = 0,01; £=1-10~4 и xio = Xit)=\, получим x,m = 0,8259; ^2m = 0,5636 и F (х1т, х2п) = = 2,2726-10~4. Подстановка х\т и х1т в исходные уравнения дает xL+xL = 0,9998~ 1 и х3,т — х2т=— 2-10~4~0.
§ 4.7. Численное дифференцирование и вычисление коэффициентов чувствительности
Численное дифференцирование аналитически или таблично заданной функции у(х) заключается в замене у(х) интерполяционным полиномом Р(х), производные d"P(x)/dx"~ ~d"y(x)/dx" которого можно найти аналитически с помощью соответствующих формул. Для функций, заданных таблично со случайной погрешностью, точность численного дифференцирования может быть низкой. Численное дифференцирование при равномерно расположенных узлах с интерполяцией реализуется следующими формулами (для 3, 4 и 5 узлов):
4р3 —Зр2 —8р + 4 3 + 3р2 —8р —4 6 ~ 2p3 —5p 12 В этих формулах p = (x — xo)/h и x = Xa-\-ph. Вычисление у(л-) по последней формуле реализовано программой 4.32, в которой ординаты У-2, у~\, 1/о, j/i и i/2 обозначены как А, В, С, D и Е. Программа 4.32. Формулы численного дифференцирования для узлов у(х) существенно проще приведенных, так как в узлах Р принимает фиксированные значения. Особенно простыми являются формулы для центрального узла (Р = 0) (см. табл. 4.1).-Эти формулы удобны для
численного дифференцирования таблично заданных функций в точке х = х<>. Частные производные функции ряда переменных f(x\, хч, ..., Хп) вычисляются по приведенным выше формулам, если задавать приращение одной из переменных и оставлять неизменными (равными заданным значениям) остальные переменные. Анализ чувствительности функции f(x\, хч, ..., хп) к изменению ее параметров xi, 10 PRINTВЫЧИСЛЕНИЕ ПЕРВОЙ ПРОИЗВОДНОЙ/ТАБЛИЧНО ЗАДАННОЙ1 20 PRINTN=3-5 ОРДИНАТАМИ ФУНКЦИИ ПРИ РАВНОМЕРНОМ 30 PRINTРАСПОЛОЖЕНИИ УЗЛОВ ИНТЕРПОЛЯЦИИ:PRINT" 40 INPUTВВЕДИТЕ Х0=Ы:INPUT1ВВЕДИТЕ ШАГ Н=Н 50 INPUTЗАДАЙТЕ ЧИСЛО ОРДИНАТ N=N 60 IF H=3 GOTO 108 70 IF N=4 GOTO 110 80 IF N=5 60T0 120 Э0 INPUTПОВТОРИТЕ ВВОД N=N:GQTO 60 100 INPUTВВЕДИТЕ ОРДИНАТЫ V-Ь Y0> VIА,В,С:60Т0 130 110 INPUTВВЕДИТЕ ОРДИНАТЫ Y"-bY0/VI.-V2А,-В.-С, В: GOTO 130 120 INPUTВВЕДИТЕ ОРДИНАТЫ V-lr Y-Ь 13в 1НРиТВВЕДИТЕ X=X: 140 IF N=4 GOTO 180 150 IF N=5 GOTO 2ИЭ 160 LETF=<<P-.5>*A-2*P*B+<P+.5)*C>/H 170 PRINTBY/BX=FiGOTO 139 180 LETF=<-C3*P*P-6i*P+2>*A.6+<3«P*P190 LETE=<-<3*P*P-2*P-2>*C/2+(3«P*P200 LETF=<F+E)/H:GOTO 170 210 LETF=<<<2*P-3>»P-1>«P+1)«A-12 220 LETF=F-<<<4i«P-3>«P-8>*P+4>*B/6 230 LETF=F+<2*P*P-5)«P*C/2 240 LETF=F-<<(4iiiP+3)*P-8)*P-4)*D-6 250 LETF=F+< (. <2*Р+3>жР-1 )жР-1 >жЕ.-12 260 LETF=F/-H:GOTO 170s END V2 A,B..C>D,E Пример. Найти производную у(х) в точке х = 0,51 функции у(х), заданной при л|) = 0,5 и й = 0,02 пятью значениями у,:у--2 = = 0,35889029, у _, =0,35553253, " уо = = 0,35206533, у, =0,34849251 и j/2 = 0,344818. Введя эти. данные, получим у(0,5\) = = -0,1786491875. х2, ..., хп основан на вычислении абсолютного приращения функции по формуле Лх2 + ... +
1L дх„ ^x„, Таблица 4.1 Формулы численного дифференцирования (производные в центральных узлах) Числ Производные Погрешности о узлов У = У» 3
У=(У1~У->)/Ы y"
= (yt-2yo + y-i)/ti
-ftV"/6 -AVV/12
5
j/ = (-!/2 + 8</i-8(/-i + i/_2)/12ft y" = (-i/2+16{/,-3Oi/o + 16y-i-y.2)/12ft2 y>" = (y2-2yi + 2y-<-y-2)/2h3
ftV/30 -AV790
7
у = (уз-9(/г + 45у|~-45у_1+91/^2-у_з)/60/1 y" = (2y3-27y2 + 27Oyl-49Oyo + 270y-1-27y-2 + 2y^3)/\S0li2 У" = (-Уз + 8у2-13у1 +
-AV"/UO
13у_|-8у^2 + 1/-з)/8Л3
-A/"7560 7ft4yV"/120
101 где коэффициенты df/dxi являются абсолютными коэффициентами чувствительности к изменению параметра х,-. Применяют и относительные коэффициенты чувствительности
МП S,=-= lim (4.24) С их помощью легко вычисляется относительное приращение функции при заданных относительных изменениях параметров (переменных) l), Х20, ..., Х„(|)
= S, Ах, АК) Х2<|
Вычисление трех частных производных и относительных коэффициентов чувствительности функции /(xi, х-2, ..., х„) ряда переменных можно организовать следующим образом. 1. Будем считать переменные Xi, Х2, ..., х„ переменными массива Х(1) и организуем ввод числа переменных N и начальных значений переменных хю, хго, .... х„о. 2. Вводим приращение Лх = Я. 3. Организуем цикл вычислений частных производных по каждой переменной с управляющей переменной /=1, 2, ..., N. Внутри цикла задаем х,- = (х,о —2Л), (хю — h), (х,п + 2й) (для 5 узлов) и для этих значений Xi, обращаясь к подпрограмме вычисления f(Xi, Х-2, ..., Х„), НаХОДИМ ОрДИНаТЫ /. 2 = 1/-2,
/_I=I/_I, ..., f2 = y2. После этого вычисляем ПрОИЗВОДНЫе
/(Х;о) = (/(х,<>),
!"(Xi(>) = y"(Xio),
f"(xm) = y"(xio) по формулам табл. 4.1 и коэффициенты S,- (4.24) и выводим их на печать. 4. После выхода из цикла идем к п. 2 и повторяем вычисления (если это необходимо). При iV=l по этому алгоритму вычисляются три производные и коэффициент S функции одной переменной f(x). Программа 4.33. Пример. Найти три производные функ-ции_нопл1ального распределения г|)(х) = /(х) = = е х Д\/2л в точке Хо = О,5. Подпрограмма вычисления f (x) при х = Х(1) записывается со строки 400. Задав Н= 0,001, получим выдачу в виде D1F/DX1 = — 1,760326635-10-, D2F/DX2= —2,640406667-10 , D3F/DX3 = 4,845-10-\ S=-2,500000002 -10 l, F(XI0) = 3,352065326810-. Точные значения производных и функции f(xn): dx ~d~7 = —0,1760326633, =—0,2640489951,
-=0,48408982, /(xo) = 0,3520653267. Если значения хю, x-m, ..., х„о сильно различаются, то для повышения точности численного дифференцирования целесообразно задавать не абсолютные приращения Дх, = /г, а относительные р = Дх,/х, 0. Тогда при вычислениях п. 3 в описанном выше алгоритме нужно задавать абсциссы 2) р (л-,и —2рх,о), (xm — того, в этом случае
S,= (dfi/dxi)/p. хю + 2рх1п). Кроме Программа 4.34. Работу этой программы можно проверить по примеру, приведенному выше для программы 4.33 (при р = 0,002 получим аналогичные результаты). Подобные программы могут быть составлены и для численного дифференцирования аналитически заданных функций по 7 точкам. 10 26 30 40 5S 60 ?0 80 Э@ 100 110 120 130 140 150 160 200 210 220 230 240 400 410 PRINTВЫЧИСЛЕНИЕ ТРЕХ ЧАСТНЫХ ПРОИЗВОДНЫХ И PRINTОТНОСИТЕЛЬНОГО КОЭФФИЦИЕНТА ЧУВСТВИТЕЛЬНОСТИ1 PRINTФУНКЦИИ F<XI> РЯДА ПЕРЕМЕННЫХ, ЗАДАННОЙ PRINTS ОРДИНАТАМИ-ПОДПРОГРАМИА СО СТРОКИ 400 INPUTВВЕДИТЕ ЧИСЛО ПЕРЕМЕННЫХ N=N DIM X<N),ACN>»B<N>,C<N),S<N)!FOR 1 = 1 ТО N PRINT!2.8!ВВЕДИТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ XCI) INPUT X<I): NEXT I INPUTЗАДАЙТЕ АБСОЛЮТНОЕ ПРИРАЩЕНИЕ Х<1) Н=Н FOR 1=1 ТО H!LETX<0)=X<I) LETX<I)=X<0>-2*H:&OSUB 408sLETF2=F!6OSUB 400:LETF1=F 60SUB 400:LETF0=F:6OSUB 400:LETE1=F:6OSUB 4@0:LETE2=F LETXa>=X<0):LETA(I> ;E28El8FlF212" LETS<I)=fl<I)*X<I)/F0 l2FlF2V2HHH:NEXT I FOR 1 = 1 TO Ц:РР1НТ!2.0!ДЛЯ ПЕРЕМЕННОЙ ХС1> PRINT!F1.9!DlFxDXl=A<I> PRINTD2FDX2=Ba>s PRINTD3F,DX^=C< I > PRINTS=S<I>:NEXT I PRINTЗНАЧЕНИЕ ФУНКЦИИ F<XI0> = F«:flOTO 90 LETF=EXP < -X < 1 > -2.2 > /SQR < 2ж#Р I ) LETX<I>=X<I)+H:RETURN:END
102 Программа 4.34. 19 PRINTВЫЧИСЛЕНИЕ ТРЕХ ЧАСТНЫХ ПРОИЗВОДНЫХ И1 28 PRINTОТНОСИТЕЛЬНОГО КОЭФФИЦИЕНТА ЧУВСТВИТЕЛЬНОСТИ 30 PRINTФУНКЦИИ F<XI> РЯДА ПЕРЕМЕННЫХ, ЗАДАННОЙ 48 PRINTAHAЛИТИЧЕСКИПОДПРОГРАИНЙ СО СТРОКИ 408 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!ВВЕДИТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ КС IУ 80 INPUT Х<1>: NEXT I 98 INPUTЗАДАЙТЕ ОТНОСИТЕЛЬНОЕ ПРИРАЩЕНИЕ Х<1> Р=Р 10й FOR 1=1 ТО N:LETX<S>=Xa>:LETH=P«X<@> 110 LETXa>=X<8>-2*H:G0SUB 408:LETF2=F:&GSUB 488:LETF1=F 120 60SUB 488:LETF8=F:&0SUB 460:LETE1=F:6OSUB 480SLETE2=F 138 LETX < I >=X < 0 >: LETA < I) = < -E2+8*E 1-8*F1+F2 > /12/H 148 LETSCI)=A<I>жХСIVF8 150 LETBa>=<-E2+ie«El-38«F8+16«Fl-F2>/12.-H-H 168 LETCCI> = ;E2-2*El+2*Fl-F2>-2/HH/H:NEXT I 208 FOR 1 = 1 TO N:PRINT!2.0!ДЛЯ ПЕРЕМЕННОЙ Х<Т> 218 PRINT!F1.9!DlF-DXl = ft<I) 228 PR I NT D2F^DX2= В < I >: PR I NT I3F.-BX3= С < I > 238 PRINTS=S<I>:NEXT I 240 PRINTЗНАЧЕНИЕ ФУНКЦИИ F<XI0>=F8s6OTO 98 408 LETF=EXP i-X<1>"2/2 >/SQR < 2ж#РI) 418 LETX<I)=X<IУ+Н:RETURN:END Программа 4.35.
18 28 38 48 56 68
PRINTВЫЧИСЛЕНИЕ ТРЕХ ЧАСТНЫХ ПРОИЗВОДНЫХ И PRINTОТНОСИТЕЛЬНОГО КОЭФФИЦИЕНТА ЧУВСТВИТЕЛЬНОСТИ PRINTФУНКЦИИ F(XI) РЯДА ПЕРЕМЕННЫХ, ЗАДАННОЙ PRINTАНАЛИТИЧЕСКИ-ПОДПРОГРАММА СО СТРОКИ 488 INPUTВВЕДИТЕ ЧИСЛО ПЕРЕМЕННЫХ N=N DIM X<N)/A(N)/B<N>/C<N)^S<N>:FOR 1=1 ТО Н
78 PRINTI2.0!ВВЕДИТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ ХС1У 88 INPUT X<I>! NEXT I 98 INPUTЗАДАЙТЕ ОТНОСИТЕЛЬНОЕ ПРИРАЩЕНИЕ Х<1) Р=Р 180 FOR 1=1 ТО N:LETX<0>=X<I>il_ETH=X<0>*P 110 LETXa>=X<0>-3*H:GOSUB 480:LETF3=F 120 &OSUB 488:LETF2=FS6OSUB 488:LETF1=F:6OSUB 480:LETE8=F 130 60SUB 4005LETE1=F!6OSUB 400sLETE2=Fs6OSUB 48©:LETE3=F 148 LETA<I)=<E3-9«E2+45»El-45iisFl+9»sF2-F3>/60-H 150 LETB <I)=2«ЕЗ-27ЖЕ2+278*Е1-490*E0 168 LETB<I>=<B<I>+270*F1~27*F2+2*F3>/180<H*H:> 178 LETC<O = <8*E2-E3-13*El+13*Fl-8siiF2+F3)-8/<H43> 188 LETSa>=A<I>*X<8VE8:LETXa>=X<8>:NEXT I 280 FOR 1=1 TO N5PRINT!2.0!ДЛЯ ПЕРЕМЕННОЙ Х<1>
218 PRINT!F1.9!D1F/DX1=A<I) 220 PRINTD2F/DX2=B(I>!PRINTD3F/BX3=C<I) 230 PRINTS=S<I)sNEXT I 248 PRINTЗНАЧЕНИЕ ФУНКЦИИ F<XI8)=E0:6OTO 98 400 LETF=EXP <-X <1>"2/2)/SQR < 2*#P О 418 LETX(I)=X<I)+H:RETURN:END Пример. Используя данные программы 4.33, получим D1F/DX1 = — 1,760326636- ИГ , D2F/DX2= — 2,640489378- О"1, D3F/DX3 = 4,840943756 10":. S-= -2,500000004- 10 , F(X 10) = 3.3520653268 -10 . В этой программе H = consl. В приведенной ниже программе задается Р = Лх,/;с,о = — const. 103
Программа 4.36. 18 PRINTВЫЧИСЛЕНИЕ ТРЕХ ЧАСТНЫХ ПРОИЗВОДНЫХ И 20 PRINTОТНОСИТЕЛЬНОГО КОЭФФИЦИЕНТА ЧУВСТВИТЕЛЬНОСТИ 30 PRINTФУНКЦИИ F<XI> РЯДА ПЕРЕМЕННЫХ* ЗАДАННОЙ 48 PRINTАНАЛИТИЧЕСКИ-ПОДПРОГРАМГ1А СО СТРОКИ 408 50 INPUTВВЕДИТЕ ЧИСЛО ПЕРЕМЕННЫХ N=N 68 DIM X<N)..A<N>*B<N>*C<N^S<N):FOR 1 = 1 ТО N 78 PRINT!2.0!ВВЕДИТЕ НАЧАЛЬНОЕ ЗНАЧЕНИЕ XCIV 86 INPUT X<I): NEXT I 90 INPUTЗАДАЙТЕ АБСОЛЮТНОЕ ПРИРАЩЕНИЕ Х<1> Н=Н 109 FOR 1=1 ТО NsLETX<0)=X<I) 118 LETXa>=X<0>-3*Hi6OSUB 408:LETF3=F 128 60SUB 480!LETF2=Fs6OSUB 400sLETFl=F:6OSU8 460:LETE0=F 130 60SUB 480:LETE1=F:6OSUB 480:LETE2=F:6OSUB 480:LETE3=F 140 LETAa > = <Е3-Э*Е2+45*Е1-45*F1+9*F2-F3)/60/H 150 LETB<I>=2*E3-27*E2+270*El-49e*E0 168 LETB<I>=<B<I)+2?0«F1-27»F2+2*F3)-180/(H*H) 178 LETC(I> = <8i«E2-E3-13«El + 13*Fl-8.«F2+F3>,-8/<H"3> 188 LETS<I>=A<I>«X<e>-E0!LETX<I)sX<0>iNEXT I 200 FOR 1 = 1 TO Н!РР1НТ!2.0!ДЛЯ ПЕРЕМЕННОЙ Х<М) 210 PRINT!F1.9!mF/DXl = A<I)
220 238 248 408 410
PRINTB2F/BX2=B<I>:PRINTH3F.-TiX3=C<I> PRINTS=S<I):NEXT I PRINTЗНАЧЕНИЕ ФУНКЦИИ FCXI8) = E0:6OTO 98 LETF=EXP(-X< 1>"22)/SQR<2*#PI) LETX<I)=X<I>+H:RETURN:ENH
Работу этой программы также можно проверить по приведенному выше примеру. Следует отметить, что из-за ошибок округления точность численного дифференцирования при малых hap при 7 точках улучшается незначительно, а иногда даже ухудшается (в сравнении с дифференцированием по 5 точкам).
§ 4.8. Вычисление определенных интегралов Определенный интеграл
с пределами интегрирования а и Ь можно трактоврть как площадь фигуры (рис. 4.9), ограниченной ординатами а и й, осью абсцисс х и графиком подынтегральной функции / (х).
Рис. 4.9. Графическая иллюстрация численного интегрирования
Обыкновенный определенный интеграл, у которого известна его первообразная F(x), вычисляется по формуле Ньютона — Лейбница [.= F(b)-F(a). Поэтому достаточно вычислить значения функции F(x). Большое количество определенных интегралов приведено в книге [30]. Численное интегрирование применяется, если нахождение F(x) сложно или невозможно. Оно заключается в интерполяции f(x) на отрезке [а, 6] подходящим полиномом, для которого определенный интеграл вычисляется ко формулам численного интегрирования. Обычно отрезок [а, Ь\ разбивается на m частей, к каждой из которых применяется соответствующая простая формула. Таким образом получают составные (или сложные) формулы численного интегрирования. Метод прямоугольников — простейший прием численного интегрирования, при ко-ором функция y = f(x) заменяется интерполяционным многочленом нулевого порядка. Для повышения точности интегрирования отрезок [а, Ь] разбивается на пг частей и формула прямоугольника применяется к каждому отрезку. Приведем обобщенную формулу прямоугольников:
Вследствие низкой точности этот метод почти не применяется. Модифицированный метод прямоугольников базируется на представлении f(x) ординатами, смещенными на величину 0,5/г, где h = (b — a)lm:
где f"(|) — значение второй производной f(x) в точке х = |, где она максимальна. Метод трапеций заключается в линейной аппроксимации f(x) на отрезке [а, Ь]. Для уменьшения погрешности [а, Ь] разбивается на т частей длины h = (b — а)/т (при методе прямоугольников /(x/) = const = i/, на этом отрезке). С учетом суммирования смежных ординат внутри отрезка [а, Ь] обобщенная формула метода трапеций имеет вид b — а ( у» , . , . , _4 h2 (b — a) 12
Г (ЮВ связи с легкостью программной реализации и низкой точностью рассмотренных методов программы для них не приводятся. Метод Ньютона — Котеса основан на интерполяции f(x) в п промежутках полиномом Лагранжа. В общем случае f(x) должна задаваться (п+1) ординатами. Формулы интегрирования точны, если f (x) — многочлен п-й степени. При п=\ получаем метод трапеций. Метод Симпсона (парабол) — частный случай метода Ньютона — Котеса при га = 2. При разбиении отрезка [а, Ь] на m равных отрезков получим обобщенную формулу Симпсона
ь I = \ f(x)dx ~-\f(a) + 4f( Выражение для остаточного члена показывает, что формула Симпсона точна, даже если f(x) — многочлен третьей степени. Эта частная особенность формулы Симпсона объясняет ее преимущественное применение — у некоторых ЭВМ вычисление по ней реализовано микропрограммно. Алгоритм реализации метода Симпсона дан на рис. 4.10. Программа 4.37. Пример. Вычислить интеграл 1 = 1,398717474 (4.26)
при а = 0 и 6=1. Вычисление подынтегральной функции оформляется подпрограммой — см. строку 110. Для ra = Af = 8 получим /=1,39871724 при t,.a;5 с. Программа 4.37. Пуск
± /вводА В / Обращение к подпрограмме _____
/ ВВодМ / H=(B-A)lMfZ
I I=F,N=0
/
вычисления f(X)
— ч х=х+ н
1 F=ffX)
i N=N-2 ^-"^v. с | нет
х=х+ н
1 F-f(X)
I 1=1+2 *F Х=б
F-ffX) I=(l+F)*H/3
/B6odA,B,M,l/ Коней,
J
Рис. 4.10. Алгоритм численного интегрирования по составной формуле Симпсона Интегрирование по формуле Бодэ 1=
r 4a 7t/4
8/г7
fit). 10 PRINT ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ СИМПСОНА 20 INPUT ВВЕДИТЕ НИЮНИй ПРЕДЕЛ ИНТЕГРИРОВАНИЯ А=А 25 INPUT ВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В=В 38 INPUT ВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ ИНТЕГРИРОВАНИЯ М=М 40 LET H=<B-AVM/2 : LET X=A 58 60SUB 118 : LET I=F : LET N=0 60 LET X=X+H : 60SUB 110 : LET I=I+4*F
?8 LET N=N+2 s IF N=2*M THEN 9Й 88 LET X=X+H : 60SUB 110 LET I = I+2*F : 60T0 60 90 LET X=B : 60SUB 110 : LET I = a+F>*H/3 95 PRINT ДЛЯ А=А В=В И M=Ms PRINT" 100 PRINTЗНАЧЕНИЕ ИНТЕГРАЛА I=ls60T0 38 110 LET F=SQR<2*X+1) : RETURN : END 105
по формуле, содержащей одинаковые множители Ь,=2/п перед /(/,). Однако при этом абсциссы /, располагаются неравномерно. Так, для л = 3 t, = — V2/2, /2 = 0 и /3 / примененной к каждому из т отрезков разбиения \а, Ь], реализует следующая программа. Программа 4.38. 18 PRINTHHCHEHHOE ИНТЕГРИРОВАНИЕ ПО ФОРМУЛЕ БОДЭ 28 А=А 38 INPUTВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ ИНТЕГРИРОВАНИЯ М=И 50 LETH=<B-A>^HsLETE=H4:LETX=As60SUB 60SUB 130!LETI=I+32*F:LETX=X+E 88 60SUB 138:LETI=I+32«F!LETX=X+E 188 60SUB 138!LETI=I+14*F 110 NEXT N 120 LETI=I-7*F:LETI=I«2*E^45
INPUTВВЕДИТЕ НИЮНИй ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В=В 40 INPUTВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ 138!LETI=7*F 68 FOR N=1 ТО M:LETX=X+E 78 130!LETI=I+12*F!LETX=X+E 90 60SUB
125 PRINTЗНАЧЕНИЕ ИНТЕГРАЛА 1=I:GOTO 40 138 LETF=SQR С2*X+1):RETURN SEND
Пример. Для интеграла (4.26) при m = 4 получим /=1,398717463 при /,«5 с. Подпрограмма вычисления f(x) записывается со строки 130. Метод Уэддля базируется на применении к каждому из m отрезков разбиения [а, Ь\ формулы l=\ i(x)dx =
х„
3/г ,
,,
,
=
То(уо + 5-(/+-
,
47/г
7
Программа 4.39^ Пример. Для интеграла (4.26) при т = 4 получим /=1,398717474 при / (.чк5 с. Подпрограмма вычисления f(x) записывается со строки 170. Формула Ньютона — Котеса с повышенной (в сравнении с формулой Уэддля) точностью для т = 6 h (Х) (Х~ 140 реализована в следующей программе. Программа 4.40. Пример. Для интеграла (4.26) при т = 4 получим /.= 1,308717474 при / с~5 с. Подпрограмма вычисления j(x) записывается со строки 130. Приведенные выше методы интегрирования имеют равномерное расположение абсцисс х,, для которых вычисляются y; = f(xi). При этом крайние значения х, равны а и Ь (за исключением модифицированного метода прямоугольников). Метод Чепышсва основан на вычислении значения определенного интеграла /= (4.27)
интеграл (4.27) подстановкой приводится к виду (4.25) (4.28) Формула (4.27) точна для полиномов степени п. Программа 4.41. Пример. Для интеграла (4.26) при /п = 8 получим /=1,398717533 при < с«6 с. Вычисление f(x) оформлено подпрограммой (строка 140). Метод Гаусса основан на интерполяции fix) полиномом Лагранжа, но абсциссы xi выбираются из условия обеспечения минимума погрешности интерполяции. При этом интеграл (4.25) подстановкой (4.28) сводится к виду. (4.29) Метод Гаусса обычно обеспечивает повышенную точность — формула (4.29) верна для полиномов до (2п — 1)-й степени. Для и = = 3 .4, =5/9, Л = —л/Т/З, Л2 = 8/9, <2 = 0, .4,1 = 5/9 и /з = V1 /3. Остаточный член (погрешность) при этом равен 1
15750
2
"*
Для повышения ТОЧНОСТИ интегрирования отрезок [а, Ь\ дробится на m частей. Программа 4.42. II р и м е р. Для интеграла (4.26) при М --=8 получим /=1.398717474 при /гяк6 с. Подпрограмма вычисления \{х) записана со строки 130. При численном интегрировании с заданной точностью оценка погрешности интегрирования обычно сложна и требует вычисления высших производных f(x). Поэтому на практике принято проводить интегрирование для ряда m = 2, 4, 8 и т. д., считая верным число совпадающих первых цифр результата. Этот процесс легко автоматизировать, что положено в основу программы 4.43. 106 Программа 4.39. 10 PRIHTЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ У5ДДЛЯ 20 INPUTВВЕДИТЕ НИЖНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ ft=Q 30 INPUTВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ 8=-В 4Э INPUTВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ ИНТЕГРИРОВАНИЯ М=М 58 LETA=Q;LETH=<B-AVM:LETX=A:GOSUB 178 55 LETI=F".LETL=H.-6 60 FOR E=l TO M
70 LETX=X+L:GOSUB 170:LETI=I+5*F 80 LETX=X+L:G0SU6 178:LETI=I+F 98 LETX=X+L!60SUB 178:LETI=I+6*F 100 118 128 138
LETX=X+L:GOSUB 170:LETI=I+F LETX=X+UGOSUB 170:LETI=I+5*F LETX=X+L:GOSUB 178:l_ETI = I+2*F LETA=X: NEXT E
140 LETI=<I-F)«3«L-10 158 РРЛИТДЯЯ A=QB=BH H=M 160 PRINTЗНАЧЕНИЕ ИНТЕГРАЛА 1=I:GOTO 40 170 LETF=SQR<1+2*X):RETURN:END Программа 4.40. 10 PRINTЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ НЬЮТОНА-КОТЕСА 20 INPUTВВЕДИТЕ НИМНИй ПРЕДЕЛ ИНТЕГРИРОВАНИЯ А=А 25 INPUT1ВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В=В 30 INPUTВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ ИНТЕГРИРОВАНИЯ М=М 35 LETH=<B-A>.-M:LETE=H-6 40 LETX=A:60SUB 130:LETI=41*F 50 FOR N=1 TO M:LETX=X+E
60 G0SU8 138:LETI = I+216*Fs|-ETX=X+E 70 60SUB 130:LETI = I+27:«F!LETX=X+E 80 60SUB 130:LETI=I+272*F:LETX=X+E 90 60SUB 138:LETI=I+27*FsLETX=X+E 160 60SU8 130:LETI=I+216«F:LETX=X+E 118 60SUB 130:LETI=I+82*F:NEXT N 128 LETI = a-41«F>*E.140 125 PRINTЗНАЧЕНИЕ ИНТЕГРАЛА I=I:GOTO 30 130 LETF=SQR<2«X+1>:RETURN!EHD
Программа 4.41. 10 PRINT ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ ЧЕБЫШЕВА 20 INPUTВВЕДИТЕ НИЖНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ А=Й 38 INPUTВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В=В 40 INPUTВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ ИНТЕГРИРОВАНИЯ М=М 50 LETA=Q!LETT=SQR<2)/2!LETI=0!LETH=<B-A>/M 60 FOR E=l TO M5LET(J=A+HsLETC=<W+A)-2 70 LETD=<t>)-A)/2:LETX=C-D*T:60S0B 126 88 LETI=I+FsLETX=CsbOSUB 120 90 LETI=I+F!LETX=X+H*Ti&OSUB 120 108 LETI=I+F:LETA=W!NEXT E 110 LETI = I*H/-3!PRINTЗНАЧЕНИЕ ИНТЕГРАЛА 1 = П60Т0 40 128 LETF=SQR(2*X+l>sRETURNsEND Программа 4.42. 05 PRINTЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ ГАУСГ:А 10 INPUTВВЕДИТЕ НИЙНИй ПРЕДЕЛ ИНТЕГРИРОВАНИЯ A=Q 12 INPUTВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В=В 15 INPUTВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ ИНТЕГРИРОВАНИЯ M=M:LETA=Q 20 LETT=SQRCe.6):LETI=e:LETH=<:B-A>/M 30 FOR E=l TO M: LETB1=A+H 40 LETC=CB1+A).2: LETD=<Bl-A).-2 58 LETX=C-H*T: 60SUB 130 60 LETV=D*5*F.-9: LETI = I+V 70 LETX=C: GOSUB 130 88 LtTW=lmS»F^S: LETI=I+V 90 LETX=C+B*T: 80SUB 138 180 LETV=D*5*:F.-9: LETI = I+V 118 LETA=Bl: NEXT E 115 PRINTДЛЯ A=QB=BH M=M:PRINT" 120 PRINT ЗНАЧЕНИЕ ИНТЕГРАЛА I=I: GOTO l^ 138 LET F=SSR<2«X+1>!RETURN:END
107 Программа 4.43. 10 PRINTЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ С ЗАДАННОЙ ТОЧНОСТЬЮ 1Г> PRINT МЕТОДОЙ ГАУССА £й INPUTВВЕДИТЕ НИЖНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ AQ 22 INPUTВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ ВВ 25 INPUTВВЕДИТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е=Н 30 LETN=N«60!LETN=l:LETK=e 40 LETM=2*M;LETA=Q 45 LETT=SQRC.6>!LETI=0.LETH=<B-A>/M яе FOR J=l TO M:LETW=A+HJLETC=<W+A:b2 55 LETD=<W-A>--2sLETE=B*53 69 LETL=D*8.-9:LETD=D»:T 70 LETtf=C-Ds60SUB 150sLETI=I+E*F 80 LETX=C:&OSUB 150sLETI=I+E*F 108 LETA=td:NEXT J lie LETL=K:LETK=I 126 IF A8S<I-L>>H THEN 48 130 PRINT3HA4EHHE ИНТЕГРАЛА I-Is STOP 158 LETF=SQR<2*X+1>:RETURH!END
158:LETI=I+L*F
98
LETX=C+ris60SUB
Для погрешности е == 1.10 6 вычисление интеграла (4.26) дает /=1,398717485 при tc~ 8 с. Подпрограмма вычисления f(x) записывается со строки 150.
§ 4.9. Вычисление определенных интегралов специального вида Несобственными интегралами называются интегралы, у которых f (х) -*- оо на отрезке [а, Ь] либо f (а) ->- оо или / (Ь) —>- оо.
Вычисление несобственных интегралов с f (х) -> оо на концах отрезка [а, Ь] в принципе осуществляется методами Гаусса и Че-бышева, так как у них в ходе вычислений узлы интерполяции f (x) не совпадают с пределами интегрирования. Наличие особенности может повлиять на точность интегрирования. Методы Ньютона — Котеса (в частности, метод Симпсона) удобно применять, если f (х0) -»- оо при Хо, принадлежащем интервалу (а,Ь). Равномерное расположение узлов интерполяции у этих методов облегчает контроль за их положением и исключение в ходе вычислений значений л:,=х0. Если / (х) имеет на концах предела интегрируемости устранимую особенность, например неопределенность 0/0 или оо/оо, можно использовать эти методы с отдельным вводом значений /(а) и /(Ь). Программа 4.44. Пример. При е=Ы0-4 получим для интеграла (4.26) значение /==1,3987 при 4да 4 с. Сходящиеся несобственные интегралы с бесконечными пределами интегрирования вычисляются различными приемами [4]. Так, интеграл вида /= ) f (х) dx = \ f (х) dx+ ) f (x) dx (4.30) a
a
b
может вычисляться как обыкновенный при выборе вспомогательного промежуточного предела интегрирования из условия
=)f (X)dx<£, b где £ — заданная погрешность интегрирования. Другой прием заключается в автоматическом изменении Ь, например как 60, 2£0, 4&о, 8йо и т. д., где й0 — начальное значение b с контролем на каждой г-й стадии условия П|ж выполнении этого условия счет прекращается. Последний способ реализован в программе 4.45, где вычисляются несобственные интегралы вида (4.30) методом Гаусса.
Программа 4.45. Пример. Для функции f (х) =хе~:, а — = 0 при £=1-10 и йо=1О получим /=1,000457964 при /сяк20 с. Отметим, что при малых Е время счета может резко возрастать, а из-за погрешностей вычисления /, и /,_! программа может зациклиться. В строке 150 записана подпрограмма, вычисляющая f (х). Двойные (кратные) интегралы вида *d
/=J \f (х,у) dxdy ас
могут вычисляться по кубатурной формуле Симпсона. При этом область интегрирования в плоскости х, у разбивается на четыре квадрата (рис. 4.11, а), а значение / вычисляется по формуле [7] hk hk ~-§-{{( (-«о, yo)+f (Х2, i/o) +f (хо, уч) +
If Программа 4.46. Пример. Для интеграла (подпрограмма записана со строки 140) dx dy ху (4.31) - = In 3- in 1,1 =0,02500598522, введя а —4, 6 = 4,4, c = 2 и d = 2,6, получим / = 0,02500698,577. Для повышения точности область интегрирования можно разбить на 108 Программа 4.44. 10 PRIHTЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ МЕТОДОМ СИМПСОНА С ЗАДАННОЙ 15 PRINTТОЧНОСТЬ» Е И F<X) С ОСОБЕННОСТЯМИ ПРИ Х=А И Х=В 20 PRINT":INPUTВВЕДИТЕ НИИНИй ПРЕДЕЛ ИНТЕГРИРОВАНИЯ А=А 25 INPUTВВЕДИТЕ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГРИРОВАНИЯ В=В 38 INPUTВВЕДИТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА E=EsLETM=l 40 PRINTВВЕДИТЕ 8 ЕСЛИ НЕТ ОСОБЕННОСТИ ПРИ Х=А 45 INPUTИ 1 ЕСЛИ ЕСТЬ ОСОБЕННОСТЬ ПРИ Х=А S 50 IF S=8 THEN 65 60 INPUTВВЕДИТЕ ЗНАЧЕНИЕ F<A)=C:60T0 78 65 LETX=A:60SUB 210:LETC=F 70 PRINTВВЕДИТЕ 0 ЕСЛИ НЕТ ОСОБЕННОСТИ ПРИ Х=В 75 INPUTИ 1 ЕСЛИ ЕСТЬ ОСОБЕННОСТЬ ПРИ Х=В S 80 IF S=0 THEN 100 90 INPUTВВЕДИТЕ ЗНАЧЕНИЕ F<B)=D:60T0 118 180 LETX=B:GOSUB 210:LETB=F:LETJ=0 110 LETM=M*.2:LETH=< 128 LETN=0:LETI=0:LETX=A 138 LETX=X+H:60SUB 210 148 LETI=I+4*F:LETN=N+2 150 IF N=2*M THEN 180 160 LETX=X+Hs&OSUB 210 170 LETI=I+2*F:G0T0 138 188 LETI = a+C+D)«H/3.LET 198 IF ABS<I-K>>E*15 THEN 118 208 PRINT" SPRINTЗНАЧЕНИЕ ИНТЕГРАЛА I = I:STQP 205 REMПОДПРОГРАММА ВЫЧИСЛЕНИЯ F<XV 218 LETF=SIN<XVX:RETURN: END Программа 4.45. 05 PRINTВЫЧИСЛ. НЕСОБСТВ. ИНТЕГРАЛА МЕТОДОМ ГАУССА 10 INPUTВВЕДИТЕ НИКНИй ПРЕДЕЛ ИНТЕГРИРОВАНИЯ A=Q 15 INPUTВВЕДИТЕ НАЧАЛЬНЫЙ ВЕРХНИЙ ПРЕДЕЛ ИНТЕГР. В8= 28 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Е=Н 25 LETM=I:LETK=8:LETB=2^2:LETT=SQR(.6 >:LETU=8 38 LETB=B*2 35 LETM=M*2s LETA=«s LET 1=8: LETH=<:B-A)/M 48 FOR J=l TO M:LETC=A+H^2sLETD=H/2 58 LETE=B*59:LETL=II*8/9:LETII=II*T 68 LETX=C-D:&OSUB 158:LETI=I+E*F 78 LETX=C:6OSUB 150:LETI=I+L*F 88 LETX?=C+Ii:60SUB 158:LETI = I+E*F 98 LETA=A+H:NEXT J 188 LETL=K:LETK=I 118 IF ABS<I-L)>Ni«30 THEN 35 128 LETU=U:LETU=I 138 IF ABS<I-U>>N/2 THEN 30 140 PRINTЗНАЧЕНИЕ ИНТЕГРАЛА 1 = Is STOP 150 LETF=X«EXP<-X>:RETURN:END Программа 4.46. 19 PRINTВЫЧИСЛЕНИЕ ДВОЙНОГО ИНТЕГРАЛА ПО ПРОСТОЙ 15 PRINT ФОРМУЛЕ СИМПСОНАsLETS=@ 28 INPUTВВЕДИТЕ ПРЕДЕЛЫ А.-В.-С, В А.-В.. СгВ 38 LETH=CB-A>--2: LETK=<D-CV2 48 LETX=A: LETV=Cs 60SUB 148: LETS=S+F 58 LETX=B: 6OSUB 14й: LETS=S+F 69 LETX=A: LETV=If: 60SUB 148: LETS=S+F
78 LETX=B: GOSUB 148: LETS=S+F 88 LETX=A+H: LETV=C: GOSUB 148: LETS=S+4*F 90 LETV=D: GOSUB 14@: LETS=S+4*F 108 LETX=A: LETV=C+K: GOSUB 140: LETS=S+4«F 110 LETX=B: GOSUB 148: LETS=S+4*F 128 LETX=A+Hs &OSUB 149: LETS=S+16*F 130 PR I NTЗНАЧЕНИЕ ИНТЕГРАЛА 1 = :-:жНжК^9:Г-,ПТО 28 140 LETF=1.--X,-V: RETURN: END
109 У (0,2) d
2)
(1,2)
(2, (0, 1)
с
(1,1 )
(0, 0)
(1,0 )
2
3
1
4
(2 ,1) (2 ,0)
X
О
а Рис. 4.11. Расположение узлов при вычислении двои и Гау<
несколько квадратов, вычислив /, для каждого /-го квадрата. Программа 4.46 предусматри вает последовательное суммирование значений /,. Например, разбив область интегрирования (4.31) на 4 квадрата (Д|.= 4; 6i=4,2; с, =2,3; rf, =2,6; «2 = 4,2; ft? = 4.4; с2 = 2,3; d2 = 2,6; а.ч = 4,2; ft;i = 4,4; с,, = 2; а!з = 2,3; а< = 4; Л4 = 4,2; л,=2 и rf., = 2,3 см. рис. 4.11,6), получим / = 0,02500605059. Время счета для каждого квадрата менее 2 с. Кубатурная формула Гаусса с п =1 имеет вид ь а l = \ \ f (х, y) = PR И (х>, </,)+/ (х2, у,) + ас
+ f (х3, №)+/ (х,„.(/4)|,
(4.32)
где Р=(Ь — а)/2, R=(d—c)/2, а узлы интерполяции расположены на расстоянии + КР и +А« от осей, где /(=-- vT/3. Программа 4.47.
пых определенных интегралов методом Симпсона (а) та (б)
Программа 4.47. Пример. Для интеграла (4.31) с областью интегрирования в виде одного квадрата получим / = 0,02500532089, а с областью интегрирования в виде четырех прямоугольников / = 0,02500594169. Время вычисления для одного квадрата области интегрирования — около 1,5 с. Сложная кубатурная формула Гаусса реализуется разбивкой отрезков [а, Ь\ на М и [с, d\ на /V частей с применением для каждого элементарного прямоугольника формулы (4.32). Программа 4.48. Пример. Для интеграла (4.31), задав М = N = 4 (всего 16 прямоугольников), получим / = 0,02500598247 при 4 = 24 с. Аналогичным образом могут быть составлены программы для вычисления интегралов с большей кратностью. Формулы численного интегрирования для них приведены в [18, 36]. Интегралы большой кратности вычисляются методом Монте-Карло (см. [4]). 1@ PR I NT ВЫЧИСЛЕНИЕ ДВОЙНОГО ИНТЕГРАЛА ПЛ ПРПГТПй1 15 PRINT ФОРМУЛЕ ГАУССА!LETS=0 20 INPUTВВЕДИТЕ ПРЕДЕЛЫ й.-В,С.»В й- Вг С И Зй LET0=CA+B)2: LETP=<e-AV2s LETQ=<C+D>.--2 4й LETR= < B-C >.-2: LETK=SQR< 1 /3> 50 LETX=0+P*K:L.ETY=Q+R*Ks60SUB 1йй 60 LETX=O-P*K:SOSUe 100 70 LETV=Q-R*K!&OSUB 100 80 LETX=u+P*K:60SUP. 100 96 PRINTЗНАЧЕНИЕ ИНТЕГРАПЙ I = -S*P*P:f-.OTO 20 100 LETF= 1 .-У,.V: LETS=S+F: RETURN: EKB Программа 4.48. 10 PRINTВЫЧИСЛЕНИЕ ДВОЙНОГО ИНТЕГРАЛА ПО СЛОМНОй 15 PRINT ФОРМУЛЕ ГАУССА!LETS=0 20 INPUT ВВЕДИТЕ ПРЕДЕЛЫ А, В, С,В W,B/CD 25 INPUTВВЕДИТЕ ЧИСЛА П,Н M,N 30 LETH=<B-U>/M!LETL=<D-C)/N!LETK=SQR<l-3> 4@ FOR 1=1 ТО Ы: LETD=C+L 50 LETQ= < С+В ) /2: LETR=L-2s LETА=Ы 60 FOR J=l TO M:LETB=A+H:LET0=<A+B)/2:LETP=H/2 70 LETX=O+P«KsLETV=Q+R«K:GOSUB 140
88 LETX=O-P*(<!GOSUB 140 90 LETV=Q-R«K:60SUB 140 100 LETX=O+P*K:GOSUB 148 110 LETA=B!NEXT J 120 LETC=B:NEXT I 130 PRINTЗНАЧЕНИЕ ИНТЕГРАЛА I=S»H*L^4sST0P 140 LETF=1^X^V: LETS=S+F:RETURN! END
110
§ 4.10. Решение систем дифференциальных
уравнений
Задана Коши заключается в решении систем обыкновенных дифференциальных уравнений первого порядка, представляемых в виде rfi/ -=Fi (х, у,, ..., у,-.....yN\ dx
^ML
= FN (Х> У......Уь . У dx где j=\^rN — номер каждой зависимой переменной у,, х — независимая переменная. Если задача Коши решается для анализа поведения системы или объекта во времени, то х является временем (x = t). Решение системы (4.33) при заданных начальных условиях х = хо, У\ (хо) =!/1о, У1 (хо) = У2о, ..., Уц(Х1>) = Умо сводится к нахождению зависимостей (интегральных кривых) у\ (х), уг(х), .... У;{х), ..., yN (x), проходящих через точки, заданные начальными условиями (Хо, </ю), {Хо, £/20) , (Хо,У1о), ..., (xo,yNO). Задача Коши сводится к интегрированию дифференциальных уравнений. Порядок метода численного интегрирования при этом определяет и порядок метода решения (4.33). ,
Обобщенная форма записи каждого из уравнений системы (4.33) может быть представлена в общем виде v dx " где Y, в правой части уравнения — векторы переменных yi, У2, , Уь У ль а Ii — правая часть каждого из уравнений (4.33). В частности, одно дифференциальное уравнение (y=Yj = Yi и Fj — F = Fi) записывается в виде Дифференциальные уравнения высшего порядка
°), (4.35) где (п) — порядок уравнения, могут быть сведены к системам вида (4.33) или (4.34) с помощью следующих преобразований: dy_ dx dy\ dx = Уи dyn-2 -^=" =F(x,y,yi, ..., (4.36)
Следовательно, решение (4.35) сводится к решению системы дифференциальных уравнений первого порядка (4.36). Метод Эйлера — Коши — простейший метод первого порядка для численного интегрирования дифференциальных уравнений. Он реализуется следующей рекуррентной формулой: Yiin i,=Ki,- + /iF,- (xi, Ya), где h — шаг интегрирования (приращение переменной х). Этот метод обладает большой погрешностью и имеет систематическое накопление ошибок. Погрешность метода R~(h2), т. е. пропорциональна /г2. Метод Эйлера — Коши с итерациями заключается в вычислении на каждом шаге начального значения Затем с помощью итерационной формулы решение уточняется. Итерации проводят до тех пор, пока не совпадает заданное число цифр результата на двух последних шагах итераций. Погрешность метода R~(h>). Обычно число итераций не должно превышать 3—-4, иначе нужно уменьшить шаг h. Модифицированный метод Эйлера второго порядка реализуется следующими рекуррентными формулами: где Yfii+l/.2)=.Yil + hF, (x,, У,-,-)/2. Метод дает погрешность R~(h3) и имеет меньшее время вычислений, поскольку вместо нескольких итераций производится вычисление только одного значения Kf(, + i/2v Метод трапеций — одна из модификаций метода Эйлера второго порядка. Он реализуется применением на каждом шаге формулы >VH)= fy + y(*/ +К"). где Kn = hFi(xi, YH), Kji = hF; (xi + h, Yn + + /С/1), и дает погрешность R~ (h3). Этот метод относится к общим методам Рунге — Кутта (см. далее). Программа 4.49. Пример. Вычисление функций Fj (x, У,) оформляется подпрограммой, записываемой со строки 200 и завершаемой операторами RETURN и END. При этом форма записи каждой функции следующая: F (J) = <функция X, Y (1), Y (2),..., Y (N)), где J — номер, соответствующий номеру / в обобщенной форме записи F, (х, у,). Например, для решения системы дифференциальных уравнений dy, dx =F\ (х,у\,уг) =
111 Программа 4.49. 10 PR I NT РЕШЕНИЕ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ 38 INPUTЗАДАЙТЕ ЧИСЛО УРАВНЕНИЙ N=N 4й DIM V<N)/M<N)/K<N),F<N)
26 PRINT-1
УРАВНЕНИЙ МЕТОДОМ ТРАПЕЦИЙ
100 INPUT ВВЕДИТЕ НАЧАЛЬНОЕ Х@=Х 11 в FOR ,J= 1 ТО N: PR I NT! 2.0! ВВЕДИТЕ НАЧАЛЬНОЕ V8 <
J 120 INPUT W<J):LETV<J)=W<J)!NEXT
J 130 140 150 160 170 180 190 200 210
INPUTВВЕДИТЕ ШАГ H=H SOSUB 200:FOR J=l TO N LETK<J)=H*F<J)!LETV<J>=W<J)+K<J>iNEXT J LETK=X+H:PRINT!F1.9!ДЛЯ X=X:GOSUB 206 FOR J=l TO N:LETV<J)=W<J)+<K<J)+H*F<J>)^2 PRINT!2.0!V(J) = !F1,9!VCJ) LETW<J)=Y<J):NEXT J:60T0 14Й ) LETF<l)=V<2 RETURN:END
подпрограмму следует записать в виде F(1)=Y(2), F(2) = (Y(1)/X-Y(2))/X-Y (1) (см. также выражения в строке 200 программы 4.49). Для N = 2; /г = 0,1; хо = О,2; //ю = 0,099500833 и г/2о = 0,49235 получим: 0,3 0,4 0,5 1,0 0,148367183 0,1961203205 0,2424068609 0,440372468 0,4830282264 0,4701529365 0,4537779586 0,3249711437 и т. д. Время счета на каждом шаге около 1,5 с. Не рекомендуется применять этот метод, если возможны изменения г/у (х) с сильно различающейся крутизной (например, одни При переходе от одной формулы к другой задаются или вычисляются соответствующие значения х и У, и находятся по подпрограмме значения функций F, (х, У,). Решение одного дифференциального уравнения методом Рунге — Кутта. производится по приведенным формулам, если в них опустить индекс /, а из алгоритма исключить циклы. Последнее резко упрощает программу и позволяет получить минимально возможное время счета. Программа 4.50. 18 PRINTРЕШЕНИЕ ОДНОГО ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ 20 PRINT МЕТОДОМ РУНГЕ-КУТТА ЗЙ INPUT-ЗйДАйТЕ ШАГ Н=Н:INPUTЗАДАЙТЕ НАЧАЛЬНОЕ Х8=Х 40 INPUTВВЕДИТЕ НАЧАЛЬНОЕ SJ8= Z: LETV=Z 50 60SUB 100!LETA=F*H:LETX=X+H-2!LETY=Z+IV2 68 GOSUB 100:LETB=F*H:LETV=Z+B.-2 78 GOSUB 108:LETC=F:*H:LETX=X+H/2:LETV=Z+C 80 60SUB 100-.LETV=Z+(A+2*<B+C)+H*F:).--6:LETZ=V 40 PRINTДЛЯ X=X:PRIHT"v=V:60T0 58 100 LETF=-V:RETURN:END
участки кривых у-, (х) плавные, а другие резкие), поскольку при этом возможно возникновение численной неустойчивости решения. Ее устранение может потребовать выбора очень малого шага /г, что значительно увеличивает общее время вычислений. Метод Рунге — Кутта четвертого порядка является наиболее распространенным методом решения систем (4.34) при шаге h = = const. Его достоинством является высокая точность — погрешность /?~(/г5) —и меньшая склонность к возникновению неустойчивости решения. Алгоритм реализации метода Рунге — Кутта заключается в циклических вычислениях Уд.+ о на каждом г+1 шаге по следующим формулам: 112
Пример. Для дифференциального уравнения у = —у/х=~у при т=1, Л = 0,1, XQ — 0 и i/o=l будем получать у (0,1) = = 0,9048375, у (0,2) =0,8187309014, у (0,3) = = 0,740818422, у (0,4) =0,6703202889, у (0,5) =0,6065309344. Время выдачи одного значения у (х) около 1 с. Подпрограмма вычисления F = dy/dx записывается со строки 100. Реализация решения системы из N дифференциальных уравнений иллюстрируется программой 4.51. Максимальное число N зависит от сложности уравнений и объема ОЗУ ЭВМ. Для ПЭВМ типовые максимальные значения N лежат от 10—20 (для ПЭВМ класса Pocket Computers) до 50—100 (для профессиональных ЭВМ). Программа 4.51. 16 PRINTРЕШЕНИЕ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ 28 PRINTУРАВНЕНИЙ МЕТОДОМ РУНГЕ-КУТТА 30 INPUTВВЕДИТЕ ЧИСЛО УРАВНЕНИЙ Н=Н
4в гам
Y<N:^A(H).K«:N)..F<N)/W<N>
50 INPUTЗАДАЙТЕ ШАГ Н=Н 60 INPUTЗАДАЙТЕ НАЧАЛЬНОЕ XS=X 70 FOR J=l TO N: PRINT! 2.8!ЗАДАЙТЕ НАЧАЛЬНОЕ 88 INPUT WU)!LETV<J)=W<J):NEXT J 90 GOSUB 208! FOR J=l TO N:LETU=H:«F..J> 180 LETK < J )=U: LETV < J>=W С J > *WZ: NEXT J 110 LETX=X+H/2sGOSUB 208:FOR J=l TO N 128 LETU=H*F (. J > : LETK < J > =K < J ) +2*U 138 LETV<J)=b.K..O+U/-2:NEHT J 148 GOSUB 280!FOR J=l TO NsLETU=H*FJ> 150 LETKX J>=K< J>+2*U:LETYOJ>=tiKJ>+UsNEXT J
168 ЬЕТХ=Х+Н/2:РР1НТ!Р1.Э!ДЛЯ X=X:GOSUB 200 178 FOR J= 1 T0 N: LETV<J> =1.0< J) + С.К< J> +H«F< J) > -b 180 PRINT!2.0!V<J) = !F1.9!VCJ> 198 LETlil<J>=V<J)sNEXT JiGOTO 98
208 LETF<1>=V<£ 210 RETURN:END Пример. Для системы уравнений (см. подпрограмму, записанную со строки 200) вида А/2
/ \)\
\\
Г2=—.— = 1-------ч- )— —г/1
dx \х Jх при N = 2, /г = 0,1, ^0 = 0,2, yl0 = 0,099500833 и 1/20 = 0,49235 будем получать следующие значения х, у\ и г/2: 0 0,14830512 0,483108 ,3 78 5139 0,4 0,1960019791 0,470228908 0,5 0,2422342383 6 0,453843868 1 0,43997848 0,325086 82 1127 1 0,55784207 0,139842 ,5 95 3554 2 0,57662559 — ,0 81 0,064463347 79 Ввиду особого значения и широкого применения дифференциальных уравнений второго порядка полезно иметь специальную программу для их решения. Метод Рунге — Кутта. для дифференциального уравнения второго порядка имеющий погрешность /?~(/г5), реализуется с помощью следующих формул [36] : K\=hF (х,;уг,у!);
± 3; у\ + К Перед началом вычислений надо задать шаг h и начальные значения Хо, у (хо) =Уо и у (хо) =уо. Программа 4.52. 1(3 PRINTРЕШЕНИЕ ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ ВТОРОГО 26 PRINT ПОРЯДКА МЕТОДОМ РУНГЕ-КУТТА 38 INPUTBBEAHTE ШАГ H=HsINPUTВВЕДИТЕ НАЧАЛЬНОЕ Х0=Х 40 INPUTВВЕДИТЕ НАЧАЛЬНОЕ УЭ=Ы 50 INPUTВВЕДИТЕ НАЧАЛЬНОЕ DV/DX8=U:LETV=W:LETZ=U 68 GOSUB 150sLETft=H*F:LETX=X+H/2 78 LETV=W+U«H/2+A*H/8s LET2=U+A/-2 80 60SUB 150:LETB=H*F:LET2=U+e-2
99 GOSUB 150iLETC=H*F:LETX=X+H/2 100 LETV=W+H*U+H*C2:LETZ=U+C:60SUB 158 us LETV=W+H«(;U+<:A+B+C)^6)!LETW =V
120 130 148 150 113
LETZ=U+<A+<B+C)«2+H«F)/6:LETU=Z PR INTДЛЯ X=X:PRINTV=V PRINTDV/DX=Z:GOTO 68 LETF=-V+<1-V*V)*2«20!RETURN:END
:
Пример. Для дифференциального уравнения (см. подпрограмму, записанную в строке 150) 3. Находим (в последнем цикле) значение при /г = 0,003125, хо = О, (/<> = 2,0077 и у0 = (. будем получать: 0,003125 0,00625 0,009375 0,0125 0,015625 у
2,007690786 2,007665302 2,007626354 2,00757266 2,007516959 У
— — — —
0,00571555801 -0,01044479113 0,01435793978 0,01759589125 0,02027523125
Автоматическое изменение шага в ходе решения систем дифференциальных уравнений необходимо, если решение требуется получить с заданной точностью. При высокой точности (погрешность c = f= 1 10 л) и решении в виде кривых с сильно различающейся крутизной автоматическое изменение шага обеспечивает уменьшение общего числа шагов в несколько раз, резко уменьшает вероятность возникновения числовой неустойчивости, дает более равномерное расположение точек графика кривых (решений) при их выводе на печать. Метод Рунге — Кутта с автоматическим изменением шага заключается в том, что после вычисления У«;+|) с шагом h все вычисления проводятся повторно с шагом Л/2. Полученный результат У*(,-ц) сравнивается с V,(1+l). Если | Yj(i+1)— Yf(i+ i)l <e, вычисления продолжают с шагом /г, в противном случае шаг уменьшают. Если это неравенство слишком сильное, шаг, напротив, увели чивают. При той же погрешности /?~ (h") лучшие результаты дает описанный ниже метод. Метод Рунге — Кутта — Мерсона с автоматическим изменением шага обеспечивает приближенную оценку погрешности на
каждом шаге интегрирования. Погрешность интегрирования имеет порядок As [311. Этот метод реализуется следующим алгоритмом. 1. Задаем число уравнении /V, погрешность е. = £, начальный шаг интегрирования h-—H и начальное значение .to, ум, .... уNt). 2. С помощью 5 циклов с управляющей переменной У = 1, 2, ..., /V вычисляем коэффициенты: *,„=---Л Л- (х,: У,;); К,, --,-. h F, ( х,+ -j h; Гц f j Л„, J ; К-,--
.,-4 «„,+[« <„): F-lxt + l-li; Y,, | ~-Ко,-f-4 К Y,(,+ о = Yu + (Кщ + 4Kii + Кц) /6 и погрешность #,(,-+ г, = (-2Кщ + 9К21~8Км + /С4/) /30. 4. Проверяем выполнение условий [#,(Н nl <£, I/?,,; +!)1> Я/30.
Если первое условие не выполняется, делим шаг h на 2 и повторяем вычисления с п. 2, восстановив начальные значения У,,. Если это условие выполняется и выполняется второе условие, значения X; + i = х,--\-h и Уд;-1-1) выводятся на печать. Если второе условие не выполняется, шаг h увеличивается вдвое и вычисления опять повторяются с п. 2. Таким образом, Удл+о выводится на печать только при одновременном выполнении условий этого пункта. Программа 4.53. Пример. Для системы дифференциальных уравнений dx при dx = 2, fe = 0,I, £=l-10-7, x{) =
= z получим
i/i
Л
0,025 0,05
4 :<
0,075
6,25-10 2,5-10 5,625-
10 0,1
1/2
;i
1-10"
2
2, 025 2, 05 2, 075 2, 1
Следовательно, в данном случае имеет место автоматическое уменьшение шага. Для /г = = 0,02 и Я-=1 -10 А"
0 ,02 0 ,04 0 ,08 0 ,16 0 ,32 0 ,64 0 ,96 1 ,28
:!
получим:
У-2
6,73113387910 ~* 1,898781104ИГ3 6,75608836610""":i 2,60987196310"2 1,033398344Ю""1 4,12717541410 " 9,30943605210""" 1,665020406
2,02096 3777 2,04103 2153 2,08118 2964 2,16154 9932 2,32264 1762 2,74775 972 2,98165 7806 3,33895 3272
В данном случае шаг автоматически увеличивается от значения Л = 0,02 до Л = 0,32. Время вычислений на одном шаге (кроме начального при уменьшении К) составляет около 5 с. Подпрограмма вычисления производных записывается со строки 400. Как отмечалось, погрешность /?,(;+i) на каждом шаге метода Рунге —- Кутта — Мерсона оценивается приближенно. При решении нелинейных дифференциальных уравнений истинная погрешность может отличаться в несколько раз от заданной Е. Программа 4.53. 05 PRIHTРЕШЕНИЕ СИСТЕМУ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ 18 PRINTМЕТОДОМ РУНГЕ-КУТТА-ИЕРСОНА С АВТОМАТИЧЕСКИМ 15 PRINT ВЫБОРОМ ШАГА:PRINT!2.0! 40 INPUTВВЕДИТЕ ЧИСЛО УРАВНЕНИЙ N=N 45 DIM VCN)/W<N>..A<N)/C<N>,D<N)/E<N>/F<N) 50 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЙ Е=Е1 68 INPUTЗАДАЙТЕ НАЧАЛЬНЫЙ ШАГ Н=Н ?0 INPUTЗАДАЙТЕ НАЧАЛЬНОЕ Х8=Х 80 FOR J=l TO N:PRINTВВЕДИТЕ НАЧАЛЬНОЕ Ve(J)= 90 INPUT UKJ>:LETV<J)=W<J):NEXT J 119 LETE3=0:&OSUB 400:LETD=8:FOR J=l TO N 120 LETACJ>=F<;J>*H:LETV<J>=UKJ>+AC.J)/3:NEXT J 130 LETH=X+H^-3:60SUB 400: FOR J=l TO N 140 LETV<J>=WU> + <A<J>+F<J>!isH>/6:NEXT J 150 60SUB 400:FOR J=l TO N!LETC<J>=F<J)«H 160 LETV<J>=W(J)+A<J^8+.3?5iitC<J>:NEXT J
170 LETX=X+H/6:60SUB 408:FOR J=l TO N 180 190 NEXT J:LETX=X+H-2:60SUB 400 200 FOR J=l TO N:LETEa>=F<J>*H
210 220 230 IF E2<=E1 THEN 250 246 LETE3=l:60T0 260 250 IF E2<El/20 THEN LETD=D+1 260 NEXT J:IF E3=S THEN 290 270 LETX=X-H:FOR J=l TO N:LETV<J>=W(J):NEXT J 280 LETH=H-2:60T0 110 290 IF D=N THEN LETH=H+H 300 PRINT!F1.9!Afla X=X:FOR J=l TO N 31S PRINT!2.@!V<J>=!F1.9!V<J> 320 LETUKJ>=V(J):HEXT J:SOTO 110 400 LETF<l>=V(l>+V<2)-X*X+X-2 410 LETF<2>=-2*Ya:>+4*Y<2>+2*X*X-4*X-7 420 RETURN:END Метод Рунге — Кутта — Фельберга с ав-тематическим изменением шага дает более 1\ъ; = п. точную оценку погрешности на каждом шаге и реализуется последовательным циклическим вычислением по следующим формулам 13 I31]: +17Г 2 2 \ у _у _1_ _9_ ИЗ 1 (4.37) _1__!_ и- V -I__!_ к -U— к \ Погрешность + 3 "+ 12 Ап+ 4 AlV R
i =J__Ki.___3__ 6
+— К
К , 135 ,
16
ч
20
в этом методе — разность приращений Уд,+ 1), 17 27 вычисленных по двум формулам: -ру Kaj + —r- K\j— п = 4 (4.37) и порядка л+1- Последняя формула не приводится, но использована для вычисления /?д1+,). Если /?;(,+ \)> Е, шаг h 27 16 \ уменьшается вдвое, если Rja+i)<E/20, он увеличивается вдвое. Этот метод имеет четвертый порядок. 115
порядка
Программа 4.54. 05 PRINTРЕШЕНИЕ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ 18 PRINTМЕТОДОМ РУНГЕ-КУТТА-ФЕЛЬБЕРГА С АВТОМАТИЧЕСКИМ 15 PRINT ВЫБОРОМ ШАГА:PRINT!2.8! 48 INPUTВВЕДИТЕ ЧИСЛО УРАВНЕНИЙ N=N 45 DIM V<N>> НЮ г 1.КЮ.. A<NX- В<Ю> C<H}t D<N>/ E<N>.. F<N) 58 INPUT-ЗАДАЙТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЙ Е=Е1 60 INPUT1ЗАДАЙТЕ НАЧАЛЬНЫЙ ШАГ Н=Н 78 INPUTЗАДАЙТЕ НАЧАЛЬНОЕ Хв=Х 88 FOR J=l TO N:PRINTВВЕДИТЕ НАЧАЛЬНОЕ V8<J)= 98 INPUT W<J):LETV(J>=W«:j)!NEXT J 118 LETE3=8:60SUB 480:LETD=@sFOR J=l TO N 128 LETACJ)=F<J>*H:LETV<J:>=W<.J)+2«AC..O-9:NEKT J 138 LETX=X+2*H.9:60SUB 488:FOR J=l TO N 148 LET8 ; J > =H«F < J >: LET V С J ) =Ы < J >+A i J ) 1S+B < J > -Ч: NEXT J 158 LETX=X+H.S:60SUB 480: FOR J=l TO N 169 LETCi J> =H-«FC. J): LETVi J> =W< J) + < 34. 5*A< J>-121. 5*B< J) +135*C< J > ).-64 178 NEXT J:LETX=X+H*--2.4:bOSUB 488iF0R J=l TO N 188 LETD< J> =H*F<:. J>: LETQ=W(. J)-17*A< J>/12+6. 75«B< J) 185 LETV<.j:)=Q-5.4-«CCJ.> + 16*B<J>.-15iNEXT J . 198 LETX*X+H-*4:60SUB 480: FOR ,J=1 TO N 195 LETE < J :> =H*F ( J >: LETQ=W < J > +65*A < J > ^432-. 3125*B < J > 28Й LETVC J)=Q+. 8125*CC J)+4:«rKJ:.b--27+5.«E;.j:).144: NEXT J 285 LETX=X-H.--6:60SUB 480:FOR J=l TO N 21Й 228 238 248 258 268 27Й 288 290 308 310 320 488 418 428
LETL С J j =H*F < J >: LETS < J ) =W < J ) + A < J ) -9+. 45*C < J > +16:*D С J V45+E < J > /12 LETQ=A < J ) /158-. 83«C < J ) +16*IK J ) .-75+E С J ) /28 LETE2=ABS<Q-.24«L<J))!IF E2<=E1 THEN 250 LETE3=l!60T0 268 IF E2<El.-28 THEN LETD=D+1 NEXT J:LETX=X+H/-6:60SUB 488: IF E3=8 THEN 298 LETX=X-H:FOR J=l TO №LETV<J)=W<J):NEXT J LETH=H^2:60T0 118 IF H=N THEN LETH=H+H PRINT!F1.9!flfl3 X=X:FOR J=l TO N PRINT!2.8!VC.J> = !F1.9!V<J> LE™<J>=VC:,J):NEXT JS60T0 110 LETF<O=V(l)+V<2)-X«X+X-2 LETF<2)=-2 RETURN:END
Пример. Для системы дифференциальных уравнений и данных к программе 4.53 будем получать:
0 2,4999858572,04999 ,05 Ю-3 9950 0 9,9999681782,09999 ,1 10~3 9890 0 2,2499946262,14999 ,15 10~2 9819 0 3,9999919272,19999 ,2 10"2 9736 0 6,2499886232,24999 ,25 10~2 9637 Время счета для одной точки около 10 с, т. е. вдвое больше, чем у программы 4.53. Однако вдвое больше и выбранный программой шаг h. В целом скорость счета у программ 4.53 и 4.54 примерно одинакова и зависит от характера решаемой системы дифференциальных уравнений. Одношаговые методы решения систем дифференциальных уравнений, к которым относятся все описанные выше методы, основаны на вычислениях по рекуррентным формулам, содержащим данные, полученные из решения на одном предшествующем шаге. Эти методы обеспечивают автоматическое начало вычислений при заданных начальных условиях и изменение (в том числе автоматическое) шага в ходе вычислений. Многошаговые методы решения дифференциальных уравнений базируются на использовании данных решения на нескольких предшествующих шагах. Это позволяет по116 высить скорость вычислений. Однако для начала вычислений приходится выполнять одношаговыми методами несколько первых шагов. Аналогично это делается при каждой смене шага интегрирования. Методы прогноза и коррекции — разновидности многошаговых методов, при которых решение вначале проводится по формуле прогноза, а затем уточняется по формуле коррекции. Ввиду сложности программной реализации многошаговых методов, а также неявных методов численного интегрирования (последние лишены численной неустойчивости решения), они очень редко используются при решении задач на персональных ЭВМ. Алгоритмы их реализации описаны в [10, 18, 24, 36].
§ 4.11. Гармонический
синтез
Гармонический синтез — получение колебаний сложной формы путем суммирования их гармонических составляющих (гармоник). Гармонический синтез может иметь как самостоятельное значение, так и использоваться как средство тригонометрической интерполяции функций (совместно со спектральным анализом — см. § 5.1). Гармонический синтез с помощью ряда Фурье (1 вариант) заключается в вычислении ограниченного т гармониками ряда Фурье
у()=^+ где / — время, f\ — частота первой гармоники, Ак и Вк — коэффициенты ряда Фурье. Программа 4.55.
§ 4.12. Вычисление собственных значений и векторов матриц Собственные значения X,- (i = l, 2, ..., п) квадратной матрицы А = [ац\ п-го порядка есть числа (действительные или комплексные), удовлетворяющие условиям Ax = XiX. В механике собственные значения характеризуют, например, внутренние напряжения в объекте, находящимся под воздействием
10 20 30 40 50 60 70 80
PRINTГАРМОНИЧЕСКИЙ СИНТЕЗ 1 INPUTBBEAHTE ЧИСЛО ГАРМОНИК M=M:DIM А<М),8<М> PRINTВВЕДИТЕ А 0:INPUT A FOR N=1 ТО М:PRINT!2.0!ВВЕДИТЕ AN INPUT А<Ю SPRINTВВЕДИТЕ ВN: INPUT ВСЮ: NEXT N INPUTВВЕДИТЕ ЧАСТОТУ F=F INPUTBBEAHTE ВРЕМЯ T=T:LETC=2*#PI«F*T:LETS=0 FOR N=1 TO Mi LETD=C*N
9© LETS=S+<A<N>*CGS<D>+B<W*SIN<:D>>:NEXT N 100 LETV=A-2+S:PRINTV<T> = !F1.9!V:60T0 70:END Пример. Для Ло = 4, /11 = 10, Bi=5, внешних усилий, действующих со всех стоЛ2 = 8, 13 = 4, Вз=1, Л4=1, В4 = 0,2, рон. В электро-радиотехнических устройст5 = 0,1, Вб = 0,05 и fi = 1 будем получать: вах собственные значения матриц опредеf у у у (0) =25,1; у (0,1) = 16,32687379; у (0,2) = = 0,9348395361. Гармонический синтез с помощью ряда (2 ) ляют характеристические постоянные времени и режимы работы этих устройств. Все это говорит о практической важности задач б Фурье (2 вариант) сводится к вычислению на нахождение собственных значений [4, ряда
1 24, 41]. Определитель Ак cos D (к) = заданного гармониками с амплитудой Oil —Л <J|2 П2\
Ак и фазовым углом Q* (рад). Программа 4.56.
... п\„
а-22 — X . . . а-2п
. . . ап„ — к
называется характеристическим многочленом 10 PRINTГАРМОНИЧЕСКИЙ СИНТЕЗ 2 20 INPUTВВЕДИТЕ ЧИСЛО ГАРМОНИК М=М:В1М АОЧЬСКМ)
30 PRINTВВЕДИТЕ А 0:INPUT A 40 FOR N=1 ТО М:PRINT!2.0!ВВЕДИТЕ AN 50 INPUT А С N >:PRINT!£.0!ВВЕДИТЕ ФАЗУ В РАДИАНАХ 6N 55 INPUT Q<N):NEXT N 60 INPUTВВЕДИТЕ ЧАСТОТУ F=F 70 INPUTВВЕДИТЕ ВРЕМЯ T=TsLETC=2*#PI*F*T:LETS=e 80 FOR N=1 ТО MsLETS==S+A<N>*COS<C*N+G<N>>:NEXT N 100 LETSJ=A^2+S!PRINTV4T> = !F1.9! V:60T0 70:END Пример. ДЛЯ ЛО = 4, Л) = 10, Qi=0, Л2 = 8, Q2 = 0,5, Л3 = 5, Q3 = 0,8, Л4 = 2, Q4 = 2, Л5 = 0,5, <ЗБ = 3 и /i = l будем получать: у (0) =21,17690412; у (0,1) =4,223677837; у (0,2) = —2,576641635. Аналогичным образом осуществляется гармонический синтез при других тригонометрических рядах. Например, при ряде Котельникова с ограниченным числом членов [18]
у (0 = sin я (t/At — k) л (t/At — k) где At — шаг, с которым задаются отсчеты y(kAt). В некоторых случаях гармонический синтез упрощается. Так, если предполагаемая функция у (/) симметрична относительно оси /, то амплитуды всех четных гармоник равны нулю. (полиномом) матрицы Л. Уравнение Ах — Хх эквивалентно уравнению (Л — ХЕ) х = 0. Уравнение det (Л —ЯЯ) =0 называется характеристическим многочленом матрицы А: det (A —IE) =P (к) = = — а,— а2Х — а3Х2~ ... — аД"~ +Х" = 0. Его корни определяют все собственные значения Xj. Каждому X/ соответствует принадлежащий ему собственный вектор Y, с компонентами уц, у,2, ..., (/,-„. Они удовлетворяют решению системы уравнений AY; = XiYi. Коэффициенты а, характеристического полинома Р (X) находятся методом Данилевского. Для этого рассматривается специальным образом преобразованная последовательность матриц А\ А{1\ ..., Л , при117
чем преобразования (см. ниже) направлены на то, чтобы получить матрицу А , у которой коэффициенты а, характеристического полинома оказываются ее последним столбцом. Преобразования А{1" в Л111" выполняются по формулам N
где
Bt*|i.; = ^|uM*l..*
и
В« = Л<Р-
— AWBVh.i (i^k+l), причем t=l, 2...../V; / = 1, 2, . . ., Л/. Для экономии памяти ПЭВМ вспомогательная матрица
В заносится на место матрицы А. Программа 4.57.
мые программой. Степень первого полинома равна первому значению к, степень второго — разности второго и первого значений k и т. д. (степень последнего полинома равна разности N = n и последнего значения к). Так, если программа выдает fc]=2, /г2 = 3 (N = Ъ), а массив а,- выдается в виде пяти чисел
а -> з \ \
а
а
a s
4
Ч а
1
4,»
а
то >, 85 18 28 25 38 40
степень первого полинома к\=2 и, следовательно, (X) = -al.!l)PRINTВЫЧИСЛЕНИЕ КОЭФФИЦИЕНТОВ ХАРАКТЕРИСТИЧЕСКОГО ПОЛИНОМА PRINT МАТРИЦЫ МЕТОДОМ ДАНИЛЕВСКОГО INPUTЗАДАЙТЕ ПОРЯДОК МАТРИЦЫ N=N:BIM A<N,N> FOR 1=1 ТО N:FOR J=l TO N PRINT!2.8!ВВЕДИТЕ AI,J:INPUT A(I/J>:NEXT JsNEXT I:LETQ=1 FOR K=Q TO N-ltLETL=0:FOR I=K+1 TO N
а
2
V
и
и
50 IF ABS<L>-ABS<A<bK>X8 THEN LETL=AO^K):LETP=I 68 NEXT I:IF LO8 THEN 98
70 FOR J=Q TO KiLETA<8*J)=A<JjK):NEXT J 89 LETQ=K+l!PRINT!2.0!K=K:6OTO 48
98 IF K+1=P THEN 148 100 FOR J=K TO N:LETR=A<K+bJ) 118 LETA<K+bJ>=A<P>J>!LETA<P,J>=R:NEXT J
120 FOR J=Q TO N!LETR=A<J,K+1> 130 LETA<J»K+l)=A(J;P):LETA<JrP)=R!NEXT J 148 FOR J=Q TO NiLETA<0/J>=A<J^K)!NEXT J 158 LETC=A(K+bK)sFOR J=K TO N 160 LETA<K+bJ)=A<K+bО)^С:РОР I=Q TO N
178 IF I=K+1 THEN 198 188 LETA<b.J>=A<bJ>-A<8, I>*A<K+bJ> 198 NEXT Is NEXT J 280 FOR I=Q TO N:LETS=8sF0R J=K+1 TO N 210 LETS=S+A<bJ)*A<0,J)8NEXT J 228 IF I-K=K THEN 240 238 LETD=8!G0T0 268 248 IF I=Q THEN LETD=8:60T0 260 258 LETD=A<0H-1) 268 LETA<bK+l>=S+D!NEXT I:NEXT К 278 FOR J=Q TO N:LETA<8/J>=A(J/N>:NEXT J
288 FOR J=l TO NsPRINT!2.8!AJ!F1.9! = Ai;0fJ)
298 NEXT JsEND А =.
Пример. Если А — невырожденная матрица, программа 3.69 дает значения Л/ = а, характеристического полинома. Например, для матрицы — 5,509882 1,870086 0,422908 0,287865 -11,811654 5,7119 0,049099 4,308033 —12,970687 0,006235 0,269851 1,397369 0,008814 0,058717 0,229326 -17,596207 J получаем .41 =а, = —12296,55057, Л2 = а2 = = —5349,455515, Л3 = а:<=—797,2787648 и /14 = aj=-47,88843. Р.сли А — вырожденная матрица, то массив А; ~--а, содержит коэффициенты с обратными знаками всех составных полиномов. Идентификатором полиномов в этом случае являются значения переменной /г, выдаваеСтепень второго полинома k> — k\ = \ и Р, (X) = -alS + X. Степень
третьего
полинома ;V —fe2 = 2
и
Для матрицы Г 1 14 3-1 112 1 0043 L0 0 2 1 J программа 4.57 выдает k = k\=2, Л1 =0, Л2 = 2, /13 = 2 и ,44=5. Составляя полиномы по описанным для этого случая правилам, получим (X) = —2 — =
118 Корни полиномов Р (Я) могут быть вычислены по программам, описанным в § 4.5. Максимальное собственное значение матрицы (действительное) и принадлежащий ему собственный вектор могут вычисляться степенным методом по следующему алгоритму. 1. По формуле У( = Лг/~1), где
pan ai2 . . . а\„~\ ^_| а21 а22 |_а„| а„2
а2п I
а„„-Л
вычисляется вектор К (перед началом вычислений задается произвольный исходный вектор К<0)). 2. Находятся приближения к наибольшему собственному значению (
41 ^) 3. Вектор Y{c) нормируется, т. е. вместо него получается вектор " max Y\c) ~~- ~~4. Проверяется выполнение условия где е — заданная погрешность вычисления максимального по модулю собственного значения. Если это условие выполняется, считаем \ic максимальным по модулю собственным значением, а вектор ?{^ — принадлежащим ему собственным вектором. Если данное условие не выполняется, идем к п. 1, приняв за К<*^п вектор Y(k\ Программа 4.58. твердого материала со всех сторон действуют силы, которые в матричной форме записываются в виде (все элементы матрицы нормированы, реальные усилия получаем их умножением на 106 Н/м2)
Г 10 А-
5 6 ]
5 20
4
|_ 6
4
30 J
При N = 3 и е = £=1-10~4 находим (хмакс = = £макс = 33,70906694. Кроме того, вычисляется принадлежащий ему вектор: yi = = 0,3408143922, у2 = 0,4160822399 и у3=1. Все действительные собственные значения симметричной матрицы (или заданное их число) могут определяться методом скалярных произведений, реализованным с помощью следующего алгоритма. 1. Вычисляем вектор К(*! = Л,У((!~), где k — номер итерации, Л — матрица А. Находим начальные приближения к максимальному собственному значению М.*= («/*».«/*)/(</*-1),{/(*)).
3. Нормируем вектор У(*, т. е. заменяем его вектором 4. Проверяем выполнение неравенства Если оно выполняется, считаем ц* наибольшим собственным значением матрицы Aj, а У(й) — принадлежащим ему собственным вектором. Если данное условие не выполняется, повторяем _вычисления с п. 1, приняв за К (*+|) вектор f*1. 5. Если задано число искомых собственных значений /=1, 2, ..., ft, то для каждого i повторяем вычисления по п. 1—4, преобразовав матрицу А, по формуле Ai = Ai-l—K [Ui, (/,], j=l, 2.....k— 1, где [Ui, U] — произведение вектора-столбца на вектор-строку. 18 PRINTВЫЧИСЛЕНИЕ МАКСИМАЛЬНОГО СОБСТВЕННОГО ЗНАЧЕНИЯ 15 PRINTМАТРИЦЫ И ПРИНАДЛЕЖАЩЕГО ЕМУ НОРМИРОВАННОГО ВЕКТОРА 20 INPUTВВЕДИТЕ N>E N»E:DIM A<N,N>:FOR 1=1 ТО NsFOR J=l TO N 30 PRINTBBEflHTE A !2.8! I, Js INPUT A<bJ>!NEXT J:NEXT I
40 FOR 1=1 TO N: PRINT!2.0IВВЕДИТЕ V0<I) 58 INPUT A<0/I)!NEXT I:LETW=0 68 LETL=0:LETC=0:LETR=0:FOR J=l TO N:LETS=0 70 FOR 1=1 TO N:LETS=S+A<bJ>*A<0>i:>!NEXT I 80 LETA<J/0)=S:IF ABS<S)>R THEN LETR=ABSCS> 30 IF S=0 THEN 120 100 IF A<0>J>=0 THEN 120
110 UETC=C+1s LETL=L+A<J/0)/A<0» J> 120 NEXT J!LETL=l_/C 130 FOR J=l TO N:LETA<0»J>=A<J^0)/R:NEXT J 140 IF ABS<L-W>>=E THEN LETU=L:&OT0 60 150 PRINT!F1.9!МАКСИМАЛЬНОЕ СОБСТВЕННОЕ ЗНАЧЕНИЕ L=L 160 PRINTВЕКТОР!FOR 1=1 TO N
170 PRINT!2.0!VI=!F1.9!A<0/I):NEXT I:END Пример. Для контроля этой программы Этот метод применим, если все собственвоспользуемся примером из [41]: на куб ные значения матрицы А действительны, 119
2. Вычисляем первую преграду а наибольшее собственное значение не кратно. Перед началом вычислений вводится матрица А, задается погрешность вычислений е = £, число искомых собственных значений и векторов К (\ ^.K^N = п) и начальный вектор К(|)=(Л Для экономии /; = i памяти ПЭВМ симметричная матрица задается своим нижним треугольником поз. Находим внедиагональный элемент ац, строчно и занимает одномерный массив Если его нет, п0 модулю превосходящий ak (k = 0, I, 2, ...). с объемом элементов, равным N(N+l)/2. выполняем п. 5 алгоритма, Программа 4.59. иначе идем к п. 4. 10 PRINTBblHHCflEHHE СОБСТВЕННЫХ ЗНАЧЕНИЙ И ПРИНАДЛЕЖАЩИХ ИМ 15 PRINTВЕКТОРОВ ДЛЯ СИММЕТРИЧНОЙ МАТРИЦЫ МЕТОДОМ СКАЛЯРНЫХ 20 PRINT ПРОИЗВЕДЕНИЙ С ИСЧЕРПЫВАНИЕМ * 25 INPUTBBEAHTE H/E>K N»E/K.LETW=N»!<N+l>/2!LETy=l».l+N:DIM А<и+Ю 30 LETH=0:FOR 1=1 ТО NiFflR J=l TO I:LETH=H+1 40 PRINTI2.0!ВВЕДИТЕ AI,J:INPUT A<H)% 50 NEXT JJNEXT ISFOR B=l TO К 60 FOR 1 = 1 ТО NsLETA<Ul+I) = l:NEXT IiLETF=0 70 FOR 1=1 ТО N!LETA<U+I)=0sFOR J=l TO I 80 LETA<U+I)=A<U+n+A<I«<I-l>/2+J)*A<Ul+J):NEXT J 90 NEXT is FOR J=l TO N-1:FOR I=J+1 TO N 100 LETA<y+J)=A<U+J)+A(I*<I-l>/2+J>*A<b)+I) 110 NEXT I:NEXT J«LETP=0:LETR=0 120 FOR 1=1 TO NSLETP=P+A<U+I>*A<U+I> 130 LETR=R+A<UI+I>*A<U+I>:NEXT I
140 150 160 170 180 190 200
LETL=P/R:LETC=SQR < P >:LETP=0 FOR 1=1 TO HsLETA<U+I>=A<U+I)/C IF ABS<A<U+I>)>=P THEN LETP=ABS<A<W+I>> NEXT 18 IF ABS<P-F)>E THEN LETF=P:GOTO 70 PRINT СОБСТВЕННОЕ ЗНАЧЕНИЕ L И ЕГО ВЕКТОР V PRINT!2.0!LI=!F1.9!L FOR 1=1 TO N:PRINT!2.e!VT= !F1.9!A<W+I>
210 NEXT is IF B=K THEN 240 220 FOR 1=1 TO NiFOR J=l TO l!LETD=Iiii<I-O/2+.J 230 ЬЕТА(В)=А<11)-Ь*А<Ы+ПжА<Ы+и>^ЕХТ J:NEXT I 240 NEXT B:ENB
Прим ер. Для матрицы из примера к программе 4.58 получаем.: 1) L = 33,70917846. у, = 0,300158658, 1/2 = 0,3664623805, уз = 0 8806872904; 2) L = 19,14906125, У]=0 1967307594, у2 = 0,8796183084, Уз =—0 4330919532 и 3) /. = 7,141760291, у, = 0,933376197, у2 = -0,3032741433, №=-0,19192099959. Для отыскания всех собственных значений матрицы применяется также метод Якоби с преградами. Его суть заключается в проведении цепочки преобразований подобия, в ходе которых получается некоторая диагональная матрица Л<ч: А{^=ТАТ, имеющая те же собственные значения, что и матрица А. Матрица Т является произведением всех матриц Тц, где 7ц — элементарные матрицы вращения, имеющие вид 1
....S
4. Анализируем элемент а.ц. Для этого вычисляем У=(а«-аи)/2, если У —0,
sign (у) aij^/afi + y2, если уфО,
Затем преобразуем 1-й и у-й столбцы матрицы А{к) по формулам
с1
-s.-..с </,
и заменяем г-й и у-й столбцы матрицы А столбцами В, и В,. В результате на месте матрицы А получаем матрицу В. Далее 1-ю и у-ю строки матрицы В преобразуем по формулам Ci = CAi-SAh C; = SA + C4, и заменяем г-ю и у-ю строки матрицы В строками С, и Cj. При этом вместо матрицы В получаем матрицу Л(*+|). Столбцы i и у матрицы 7ц заменяем на столбцы В, и В;. 5. Находим новую преграду at+i —ak/n(1(k+l)+l} Алгоритм реализации метода Якоби с преградами следующий. 1. Задаем Tlm = E, где Е — единичная матрица порядка п. 120
и повторяем вычисления с п. 1, до тех пор, пока все внедиагональные элементы не станут меньше числа Р = еао, где
е — заданная погрешность вычислений. В результате собственные значения оказываются диагональПример. Для матрицы А из примера ными элементами матрицы А. к программе 4.58 вычисления по программе Ввиду симметрии матрицы она задается 4.60 дают L, =7,14176. L2= 19,14906 и построчно нижним треугольником и зани^з = 33,70917 (М = 3, к = £= 1 10~5). мает одномерный массив с числом элементов Программы 4.57—4.60 получены перевоN(N+l)/2. дом программ для ЭВМ «Мир-2» с языка Программа 4.60. аналитик [24] на язык бейсик. 10 PRINTВЫЧИСЛЕНИЕ ВСЕХ СОБСТВЕННЫХ ЗНАЧЕНИЙ МАТРИЦЫ 15 PRINT МЕТОДОМ ЯКОБИ С ПРЕГРАДАМИ 20 ШРиТВВЕДИТЕ ПОРЯДОК МАТРИЦЫ H=H:DIM A<N*<N+1V2> 25 INPUTВВЕДИТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЯ Е=Е 30 LETH=0:FOR 1=1 ТО NsFOR J=l TO I 40 LETH=H+l:pRINT!3.0!ВВЕДИТЕ АV> J:INPUT А<Ю 50 NEXT JjNEXT IiLETH=0sFOR P=2 TO N 60 FOR Q=l TO P-lsLETH=Ht2*A<P*<P-l>-2+Q)"2 70 NEXT Q:NEXT P:LETR=SQR<H>SLETA=E*R/N
30 LETR=R^N 90 l_ETB=0:FOR Q=2 TO N:F0R P=l TO Q-l 100 IF ABS<A<Q*(Q-l>/2+P>XR THEN 275 110 l_ETK=P*<P-i:>/-2+P!LETL=a*<G-l>/2+P
120 LETM=Q*<Q-1)/2+QsLETB=1:LETU=A<K)sLETW=A<L) 130 LETF=ACM>sLETV=<U-F)^2:LETZ=V!lF V=0 THEN LETX=-1:GOTO 150 140 LETX=-SSN СZ > *W/SQR <U*U+V*V> 150 LETS=X-SQR (2* < 1+SQR < 1 -X*X > ) ): LETC=SQR < 1 -S*S ) 160 FOR 1=1 TO N:IF K=P THEN LETV=P*<P-l)/2+I:G0T0 180 170 LETV=I«<I-l)/2+P 180 IF K=Q THEN LETX=Q!K<Q-l)/2+i:60T0 200 190 LETX=I«<I-1V2+Q 200 IF I=Q THEN 220 210 LETD=A<V>«C-AOO*S 220 LETAC;<)=A<V)!«S+A<X)«C!IF I=Q THEN 240 230 LETA<V)=D 240 NEXT I 250 LETA<K>=U*C*C+F*S*S-2*U*C*S 260 LETA<M>=U*S*S+F*C*C+2*W*C*S 270 LETA<L> = <U-F>«S*C+Wi«<C*C-S«S) 275 NEXT P:NEXT Q 280 IF B=l THEN 90 290 IF R>A THEN LETR=R^N:60T0 80 300 FOR 1 = 1 TO N:LETH=Aa*<I-lV2+I) 310 PRINT!2.0!СОБСТВЕННОЕ ЗНАЧЕНИЕ LI = !F1.9!H 320 NEXT I:END ГЛАВА 5 СПЕКТРАЛЬНЫЙ, СТАТИСТИЧЕСКИЙ, КОРРЕЛЯЦИОННЫЙ И РЕГРЕССИОННЫЙ АНАЛИЗ § 5.1. Спектральный анализ на основе дискретного преобразования Фурье Спектром временной зависимости (функции) у (I) называется совокупность ее гармонических составляющих (гармоник), образующих ряд Фурье (см. § 4.11). Спектральный анализ периодических функций заключается в нахождении коэффициентов ai,., hi, ряда Фурье У (*)= А-1
(5.1) где fi —- частота повторения (или частота первой гармоники), k — номер гармоники. Кроме ряда (5.1) широко используется ряд y(t)=-^-где
— амплитуда и Ф* = —arctg (bk/аь) ), (5.2) (5.3)
(5.4) — фаза гармоник (косинусоид). Применяются также ряды с синусоидами под знаком суммы. Коэффициенты Фурье определяются выражениями г J
*=ГЫО = ^\У (0 sin (5.6) повторения периоди непериодических
(5.5)
где T=\/fi — период ческой функции у (0 Спектральный анализ (финитных) функций, т. е. функций, полностью определенных на отрезке [0, to], заключается в вычислении составляющих их комплексной спектральной плотности ilf{
S (/со) =SC (со) + jSs (to) =S (со) e "\ 122
где со = 2л/— угловая частота, S (со) = VTSc (<o)]4-[Ss (" = —arctg [Ss (co)/Sc (ш)]
(5.7) (5.8) — модуль спектральной плотности и фаза на частоте со. При этом Sc=j у (О cos m^. о i«
S>S = \ У (0 sin » о
(5.9) (5.10) Численный спектральный анализ заключается в нахождении коэффициентов an, а\, . . . ..., аи, b], hi, ..., bk (или Mi, M-2, ..., Mk, ф1, ..., ф/,) для периодической функции 1/(0. заданной на отрезке [0, Г] дискретными отсчетами. Он сводится к вычислению (5.5) и (5.6) по формулам численного интегрирования для метода прямоугольников (см. § 4.8) а,; = — V yicos2nkf]iAt, (5.11 Af-I
б—2 V N [_,
/>
(5.12) где Al = T/N — шаг, с которым расположены абсциссы у (0Для финитных функций N—\
Sc = Al ^ у, cos (2nf АН),
(5.13)
N—\ 1=0
г/; sin (2л/ Аи). (5.14) Найденные по (5.11) и (5.12) коэффициенты Фурье для m = yV/2 гармоник приближают у (0 рядом (5.1) или (5.2) с наименьшей среднеквадратической погрешностью. Следовательно, численный спектральный анализ, совместно со спектральным синтезом (§ 4.11), является разновидностью метода наименьших квадратов, когда у (t) приближается тригонометрическим рядом. Обобщенный численный спектральный анализ базируется на том, что периодические функции у (t) являются частными случаями финитных функций. Действительно, полагая to=T (этим мы условно приписываем финитным колебаниям период Т) и считая f = kf\ (при финитных функциях k — любые, а при периодических—целые числа), из (5.11), (5.13) и (5.12), (5.14) получаем ЛГ-1
.
°c
akN
sr^
Л to — . , =—;;—=
д<
2
„
>
. (// COS /л/( A/
,4 /V— 1
(5.15) ; =0
(5.16) Численный спектральный анализ повышенной точности основан на априорном представлении у (/) в промежутках между узлами. Если такое представление невозможно, используются формулы (5.15) и (5.16), дающие наименьшую среднеквадратичную погрешность (рис. 5.1, а). Если у (/) =const в промежутках между узлами (рис.. 5.1, б), Использование только ненулевых отсчетов позволяет уменьшить время анализа, если у (Т) = 0 в начале или конце отрезка [0, Т) или [0, In]. Однако отсчеты у, = 0 при /VI =С й^/^М должны вводиться. 3. Задаем шаг А/. 4. Переменным С и S присваиваем нулевое значение, организуем ввод частоты f и находим p = nf At. 5. Находим А о и во с помощью цикла, в котором вычисляются
C = C + y,cos (2ip),
S = S+yisin (2ф),
где i = N\, /VI+ 1, ..., М. При выходе из цикла Ап = С и Вп = С.
6. Для заданного значения / находим нужные параметры аь, Ьь или Мк и (|>, S(\ S$ или вычисления S и ф применяем формулы
<5-20)
m = ^Al + Bl = <2= — arccos фрад= — Q
при
в(|
(5.21)
У
г
% \
s 1
\
Ув \ к
1 1
У\ ?
У8
1 1 1
t
S
и
ф.
Например,
для
а
5
Рис. 5.1. Задание у (t) решетчатой (а) и ступенчатой (б) функциями
то можно получить для Аь, Вь точные значения Ак\, В/я, вычисляя их по формулам Ahl=K,Ai,u, Bi,l=KjBm, (5.17) где К/= 1 при / = 0,
Kf={sinnfAt)/nf At при (5.18) Формулы (5.17) с учетом Ki (5.18) получаются в результате аналитического интегрирования (5.5) и (5.6). Если в промежутках между узлами функция у (/) аппроксимируется линейной зависимостью, то уточненные значения А и В будут равны Ak2 = KfAko, В„2 = фк0. (5.19) Последовательный спектральный анализ на ЭВМ выполняется по следующему алгоритму. 1. Вводим N — число интервалов разбиения у (t), /VI — номер первого ненулевого отсчета у (t) и номер последнего ненулевого отсчета М. 2. Организуем цикл ввода ненулевых отсчетов у, с управляющей переменной /, меняющейся с шагом 1 от значения ЛП до М. Формулы (5.21) дают представление <;;,,.,. в пределах ±и рад (или ±180°, если <( рад умножить на множитель 180/л). С помощью (5.17) — (5.19) могут вычисляться уточненные значения А\, В\, Si=fc/S и Л>. в->, S? = kfS при ступенчатой или кусочно-линейной аппроксимации у (I). 7. Возвращаемся к и. 4 и повторяем вычисления для нового значения частоты f. Таким образом, последовательный спек: ральный анализ обеспечивает возможность вычисления амплитуды и фазы любой гармоники (или спектральной плотности на любой частоте). При этом необходимо запоминание всех отсчетов у,, кроме нулевых в начале и в конце интервала дискретизации у {/). Число отсчетов ограничено емкостью O3.V ПЭВМ и достигает 100—250 у простых ПЭВМ Из-за резкого увеличения времени вычисле ний (оно пропорционально N1) спектральный анализ описанным методом на ПЭВМ при большем числе отсчетов нецелесооб разен. 123 Программа 5.1. 85 PRINT ПОСЛЕДОВАТЕЛЬНЫЙ СПЕКТРАЛЬНЫЙ АНАЛИЗ 19 INPUT ВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ РАЗБИЕНИЯ Н=Н 15 INPUT ВВЕДИТЕ НОМЕР ПЕРВОГО НЕНУЛЕВОГО ОТСЧЕТА N1=N1 20 INPUT ВВЕДИТЕ НОМЕР ПОСЛЕДНЕГО НЕНУЛЕВОГО ОТСЧЕТА 11=М 38 DIM Va-DsFOR I=N1 TO M 35 PRINTI3.8!ВВЕДИТЕ ОТСЧЕТ V<I):INPUT У<П 40 NEXT is INPUTЗАДАЙТЕ ШАГ Т=Т 58 INPUTВВЕДИТЕ ЧАСТОТУ. F=F:LETC=0:LETS=0 60 LETP=#PI*F*T:LETW=2«P:F0R I=Н1 TO M 70 LETZ=W«I:LETC=C+V<I>«COS < Z >: I_ETS=S+Y < I > *S IH < Z > : NEXT I 80 LETR=SSR<C*C+S*S):LETF=-ACS<C.-R>-#PI*T*F 98 IF S<0 THEN LETF=-F 100 LETK=SIN<P)/-PiLETRl=K*R:LETR2=K*Rl 110 PRINT!F1.9!nPH РЕШЕТЧАТОЙ V(T) S<F) = R:«T 120 PRINTflPH СТУПЕНЧАТОЙ V<T) 31 <F) = R1*T 130 PR INTПРИ КУСОЧНО-ЛИНЕЙНОЙ V<T) S2<F) = R2*T 140 PRINTФАЗОВЫЙ УГОЛ В РАДИАНАХ F=F 150 PRINTФАЗОВЫЙ УГОЛ В ГРАДУСАХ F=DE&;F> 166 60Т0 50:END
Пример. Найти спектральную плотность прямоугольного импульса, заданного отсчетами уп = 1, у\ = 1, . . ., у7.= 1 при N = 32 и Д/ = 0,125-10" 6 с для частоты / = 250 000 Гц. Вводим эти данные (/VI =0, М = 7) и получаем: So = 9,O1764195lO~7; S, = 9,003163162X X Ю~7 (это значение полностью совпадает с теоретическим, поскольку для прямоугольного импульса ступенчатая аппроксимация у (I) является точной); S2 = 8,98870762-10~7 и фазовый сдвиг <р——39,375°. При интерпретации результатов вычисления фазового сдвига следует помнить о конечной области определения углов (в данном случае от —180° до +180°). Кроме того, надо учитывать, что значения аргумента у синусов и косинусов не должны выходить за пределы, допустимые для данной ПЭВМ (см. § 2.6). Из-за приближенности аппроксимации у (/) значения ф могут сильно отличаться от точных. Иногда это можно устранить, введя поправку для tp, равную Дф = = л/Д/ (в радианах) или Дф = 180/ Li (в градусах). Так, в примере к программе 5.1 Дф= 180-2,5-105-0,125-106 = 5,625°. При этом скорректированное значение угла Ф=- (39,375 + 5,625) = -45° равно точному значению. Параллельный спектральный анализ на ЭВМ заключается в одновременном (параллельном) вычислении М гармоник. При этом память ЭВМ нужна для запоминания коэффициентов а*, Ъи (или Ai,, Вк), однако запоминать все отсчеты t/, не требуется, поскольку каждый отсчет используется для вычисления всех гармоник по мере его ввода. Параллельный спектральный анализ проводится по следующему алгоритму. 1. Вводим нужное число гармоник М, номер начальной гармоники kS, общее число отсчетов у (/) N, номер первого ненулевого отсчета IS и номер последнего ненулевого отсчета IF. 2. Обнуляем переменные массивы A (к) и В (k) и вычисляем R — 2-si/N. 3. Организуем цикл ввода у,= К с управляющей переменной /, меняющейся с шагом 1 от значения IS до IF. В этом цикле вво124
дим у„ вычисляем Z = RJ и организуем внутренний цикл (п. 4).4. Организуем цикл вычислений /Ц, Вк с управляющей переменной k, меняющейся с шагом 1 от значения 0 до М — 1. В начале цикла вычисляем W = Z(k-\-S), где S = IS, и затем
A(k) = A(k)+Y cos Г. В (k)=B (k) + Y sin W. Значения Ak соответствуют переменным массива A (k), а Вк — переменным массива В (k) после выхода из циклов. Для нулевой гармоники & + S = 0 вычисляем только А», суммируя все у-,. 5. Организуем цикл вывода Аи, Вь, Mi, и (fk = Qk (k = 0, ..., М— 1), учитывая сдвиг индекса на величину S, т. е. вывода вместо индекса к значения k-\-S. В ходе вывода вычисляем M+S
М2= £
Mf.
6. Если М1=0, т. е. вычисления начаты с первой гармоники, находим коэффициент гармоники:
7. Если S—1, можно проводить тригонометрическую интерполяцию — экстраполяцию, т. е. по заданным / вычислять
у (о =
Ак cos
Вк sin 2nkf At с помощью усеченного ряда Фурье, ограниченного М гармониками. Когда по этому алгоритму надо вычислить новый ряд гармоник, приходится повторять ввод всех отсчетов у,. Если память ПЭВМ достаточна,., можно предусмотреть хранение L/i с помощью массива Y(l), содержащего действующие (т. е. г/,=^=0) отсчеты. Тогда, предусмотрев в п. 3 алгоритма вместо ручного ввода (/,. циклический вызов отсчетов из массива К (/), получим вариант комбинированного или последовательно-параллельного спектрального анализа. В приведенной ниже программе 5.2 реализован этот метод. Кроме того, в ней предусмотрен ввод опорной частоты /| = F1. Это частота первой гармоники при анализе периодических функций или частота, задающая масштаб сетки частот kf, при анализе финитных функций (т. е. в последнем случае .им придается характер периодических функций с частотой повторения f\). Коррекция Мь и фазового сдвига в этой программе не предусмотрена (но может быть легко введена). Программа 5.2. Значения М4 и S4 недостоверны ввиду их малости (точные значения Мц = 0 и S4 = 0). Поэтому случайные значения Q4 из выдачи исключаются. Для < = 0,5-10~6 по программе 5.2 получим (/(0 = 1,07593, а для / = = 3-1(Г6 получим у (0=0,00852. Спектральный анализ функций с ограниченным спектром выполняется также непосредственно с помощью дискретного преобразования Фурье над комплексными числами. Так, если задан массив ы,=л-, + /К, (< = 0, 1, 2.....УУ—1), то прямое дискретное преобразование Фурье дает массив комплексных чисел — i (2nki/N) u-,e
Соответственно массив чисел vt при обратном дискретном преобразовании Фурье обра10 PRINTПОСЛЕДОВАТЕЛЬНО-ПАРАЛЛЕЛЬНЫЙ СПЕКТРАЛЬНЫЙ АНАЛИЗ 15 PRINTИ ТРИГОНОМЕТРИЧЕСКАЯ ИНТЕРПОЛЯЦИЯ-ЭКСТРАПОЛЯЦИЯ1 20 INPUTЗАДАЙТЕ ОБШЕЕ ЧИСЛО ОТСЧЕТОВ ФУНКЦИИ V<T> N=N 30 INPUTЗАДАЙТЕ НОМЕРА НАЧАЛЬНОГО И КОНЕЧНОГО ОТСЧЕТОВ IS.» IF 40 LET&=G-l>!DIM V<6>/A<N/2)/B<N/2)!LETR=2*#PI/N 50 FOR 1=8 TO 6:PRINT!3.0(ВВЕДИТЕ VI+U:INPUT V<I>:NEXT I 60 INPUTЗАДАЙТЕ ЧИСЛО СОСТАВЛЯЮЩИХ СПЕКТРА М=М ?0 INPUTЗАДАЙТЕ НОМЕР ПЕРВОЙ СОСТАВЛЯЮЩЕЙ СПЕКТРА KS=S 75 INPUTЗАДАЙТЕ ЧАСТОТУ F1=F 80 LETA=0:LETB=0:LETC=0:FOR K=l TO M
90 LETA<K>=0:LETB<K>=0:NEXT К 100 FOR 1=0 ТО &!LETA=A+Y<I>:LETZ=R*<I+iJ> 110 FOR K=l TO M:LETU=Z*<K+S-1> 120 LETA(K)=A<K)+V<I)itiCOS<W>:LETB<K)=B<K)+V<I)*SIN<W>
130 140 150 160
NEXT К:NEXT I:LETM0=A/H:LETS0=M0/F PRINT!F1.9!ПОСТОЯННАЯ СОСТАВЛЯЮЩАЯ М0=Мв PRINTСПЕКТРАЛЬНАЯ ПЛОТНОСТЬ НА НУЛЕВОЙ ЧАСТОТЕ S0=S0 FOR K=l TO M:LETU=SQR<A<K)i«A<K)+B<K)*B<K))
170 LETQ=-ACS<A<K>^U>sIF В<Ю<0 THEN LETQ=-0 180 LETO=K+S-1:LETB=B+U*U8IF K+3=2 THEN LETC=U 190 PRINT!3.0!АМПЛИТУДА M0!F1.9!=U*2/N 200 PR I NT! 3.0!СПЕКТРАЛЬНАЯ ПЛОТНОСТЬ S0!F1.9!«U/WF 210 PRINT!3.0!*АЗОВЫй СДВИГ Q0!F1.9!=TJE6<Q> 220 NEXT KsIFSOl THEN 60
230 240 250 260 270 280
PRINTКОЭФФИЦИЕНТ ГАРМОНИК КГ=!F1.9!SQR<B-C*C)-C INPUT1-БУДЕТ ВЫЧИСЛЯТЬСЯ Y<T>,0-HE БУДЕТ ?D IF DO1 THEN 60 INPUTЗАДАЙТЕ ВРЕМЯ T=T:LETV=0!LETP=2*#PI*T«F FOR K=l TO MiLETW=P*K!LETY=Y+A<K>*COS<W>+B<K>*SIN<W> NEXT К:LETV=M0+V*2/NSPRINTЗНАЧЕНИЕ V<T)=!F1.9!V
290 GOTO 260:END U-6
Пример. Для примера к программе 5.1 (Л/ = 32, 1/о — 1/7=1, f\ =250 000), задав М = Ь и MS = 1, получим (даны 5 цифр после запятой): МО = 0,25 Ml =0,45088 М2 = 0,32036 МЗ = 0,15224 М4 = 2,23345-10 М5 = 0,09375 Кг = 0,81369 Ql = —39,375 Q2=-78,75 Q3=- 118,125 Q5=-16,875 S0= 1 -10""6 51 =9,0176-10~7 52 = 6,40729-10~7 53 = 3,0449-10~7 54 = 4,466892- Ю^1
55 = 1,87503-10"7 зует массив комплексных чисел Л/-1
V
/ (2.ifa7/V)
Если ia=Y(ti), причем Re u, = X,= Y (t,), a Imu,= K, = 0, то прямое .преобразование Фурье дает коэффициенты См — Аю— /В*о = = Vk/N усеченного тригонометрического ряда Фурье в комплексной форме:
у (0 = А \с^е к= — ос
где \Ck\=~\Jxt+Yl ф*=—arccos (Xk/\Ck\), если Yk^O, и ф*=—ц>к, если Yk<.0. Пер-
125
вые yV/2 значений С/; соответствуют положительным частотам f = kf\, остальные — отрицательным. Соответственно, имея частотный спектр в виде N значений Ck = Xk-{-jYii и подвергнув его обратному преобразованию Фурье, получим N значений у, (ti)/N. Из них первые N/2 значений соответствуют области времен t^?0, остальные — /<0. Указанные дискретные преобразования вытекают из прямого преобразования Фурье S (ш)= \ y(t) e-!""dt ---- ОС
и из обратного преобразования Фурье у (0 = 1 2л" S (ш) е11" dm, выполняемых методиками приближенного численного интегрирования для функций у (t), определенных на конечном промежутке вреточно вычислять 2/И раз, поскольку они периодически повторяются. Кроме того, вычисления можно проводить по рекуррентным формулам (см. подробно в [5]). Выделив четную и нечетную части разложений, удается уменьшить время вычислений еще вдвое; в результате БПФ требует проведения (Л//2) logv Л/ операций вместо Л/2 (при Л/=1024 это уменьшает число операций более чем в 200 раз!). Для ПЭВМ характерны значения N==564-^256, а для профессиональных ПЭВМ — в несколько раз больше. Выбор N из ряда 2 (2, 4, 8, 16 и т. д.) является определенным неудобством БПФ. Однако оно компенсируется заметным уже при Л/ = 8 или /V=16 сокращением времени вычислений. Программы БПФ обычно позволяют проводить как прямое, так и обратное дискретное преобразование Фурье над массивами u.i = Xi-\-\Y, и vi, = Л/,-\rjYk, обеспечивая преобразование Xi —- Xh, У, -> Yk, и наоборот.
Программа 5.3.
10 PRINTПРЯМОЕ И ОБРАТНОЕ БЫСТРОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ 28 ШРиТДЛЯ Ы=2М ВВЕДИТЕ M=M:LETH=INT<2"M+.1):BIM X<N-1)>VCN-1) 38 INPUTЗАДАЙТЕ -1 ПРИ ПРЯМОМ БП* И 1 ПРИ ОБРАТНОМ В 35 INPUTВВЕДИТЕ НОМЕРА НАЧАЛЬНОГО И КОНЕЧНОГО ОТСЧЕТОВ IS»IF 18*11 40 FOR 1=0 ТО 11-105РКШТ!3.0!ДЛЯ I = I + I0 58 INPUTВВЕДИТЕ ХЬVI ХП), YU):NEXT I 60 FOR L=l TO M:LETE=.INT>;2-<M+l-L> + .l)!LETF=E/2:LETU=l:LETU=8 78 LETZ=#PI/F:LETC=COS(Z>!LETS=B*SIN(Z):FOR J=l TO F 80 FOR I=J TO H STEP EsLETO=I+F-l:LETP=X<I-l>+X<O)sLETfl=V<I-l)+V<O) 90 LETR=Xa-l>-X<O:):LETT=Y<I-l)-V<O>:LETX<O>=Ri«U-T*U 180 LETV<O>=T*U+R*U:LETX<I-l>=P:LETVa-i:>=Q8NEXT Г 118 LETU=U«C-U!tiS:LETU=U«C+U*S!LETU=lJiNEXT JsNEXT L 128 LETJ=lsFOR 1 = 1 TO N-1UF I>=J THEN 158 130 LETJl=J-l:LETI1=1-1!LETP=X<J1):LETQ=V<J1):LETX<J1)=X<II) 140 LETS4Jl)=vai):LETX(Il)=P:LETV<in=Q 158 LETK=N--2 168 IF K>=J THEN 188 178 LETJ=J-K:LETK=K>2i6OT0 168 188 LETJ=J+K!NEXT I 198 IF B=-l THEN PRINTРЕЗУЛЬТАТЫ ПРЯМОГО БПФ:60Т0 248 288 PR INTРЕЗУЛЬТАТЫ ОБРАТНОГО Enf:FOR K=8 TO N-l 210 LETX<K)=X<K)/N!LETV<K)=V<K)/H 228 PRINT!3.0!K=KiIF1.5! X=X<K>i V=V<K) 238 NEXT К:STOP 248 FOR K=0 TO N-i:LETft=SQR<X<K)i«X<K)+V<;K>«V<K)) 250 LETGl=8:IF ft=8 THEN 278 268 LETG=ACS<X<KVA>!iIF V<K)<8 THEN LETQ=-Q 278 PRINT !3.8!K=K;!F1.5! X=X<K); V=V<K)i 288 PRINT
M=A*2/H;
Q=DE6<Q):NEXT K:ENB
мени, и зависимостей S (io) с ограниченным спектром. Дискретное преобразование Фурье требует числа операций порядка N и ведет к большим затратам машинного времени уже при N> 10-^20. Кроме того (при операциях с комплексными числами), приходится 2JV раз вычислять тригонометрические функции (sin и cos) — операции по разложениям их в ряд выполняются на ЭВМ довольно медленно. Быстрое преобразование Фурье (БПФ) позволяет резко уменьшить время проведения прямого и обратного дискретных преобразований Фурье. При БПФ N выбирается из условия Л = 2М, где М=\, 2, 3, .... При этом значения
тригонометрических функций доста126 Пример. В программе 5.3 предусмотрен ввод только ненулевых отсчетов. Например, для вычисления спектра прямоугольного импульса, заданного при iV = 32 (M = 5) восемью единичными отсчетами Y (t) Xo, Х\, Хч, ..., Xj и остальными нулевыми (все К, = 0), задаем номер начального отсчета /S = 0 и конечного IF = 7 и указываем тип преобразования. При прямом дискретном преобразовании Фурье получаем спектральный состав (даны первые 6 значений из таблицы результатов, выводимой на экран дисплея): К=0 Х=8 К=1 Х = 5,57659 К = 2 X=l Y=0
Y=—4,57659 Y=—5,02734 К = 3 Х= —1.1482*8 Y=—2,14828 К=4 Х=0 Y=0 К = 5 Х= 1,43543 Y= —1,43543
М = 0,25 М = 0,45088
Q
Q —
v — , 75 — 39 .
М = 0,32036
-
Q
,
= 78 75 .
М = 0,15224 М = 0 М = 0,09375
118,12 = 5 0 Q — , 87 = 16 5 ,
Q
Если дать команды D=l GOTO 60, то после прямого будет проведено обратное дискретное преобразование Фурье. Без учета малых погрешностей округления, получим в итоге значения Ха~ Х7=\, Л"8-г- A:t! =0 и Уп-г- Ум = = 0 (т. е. исходный массив и,-). Время преобразования при М = Ъ около 2,5 мин. Повышение точности БПФ достигается специальной обработкой входных или выходных данных. Обработка входных данных заключается в умножении отсчетов на весовые коэффициенты W,, подобранные так, чтобы обеспечить заданную аппроксимацию У (t) в ходе интегрирования. Значения Wi=\ соответствуют ступенчатой аппроксимации У (t) и интегрированию методом прямоугольников. Если 1^=1/2, 1, 1, ... ..., 1, 1/2, то У (I) в ходе БПФ аппроксимируется кусочно-линейной функцией, т. е. интегрирование происходит методом трапеций. При Г,= 1/3, 4/3, 2/3, 4/3, 2/3, ... ..., 4/3, 1/3 аппроксимация У (/) будет параболической, т. е. интегрирование происходит по методу Симпсона. При более сложных последовательностях W, возможна аппроксимация У (t) полиномами более высоких степеней. Применим этот метод к примеру для программы 5.3. Зададим 9 отсчетов Хо—1/2, Xt+X7=l и Хе=\/2 (все Уо-^К8 = О). С помощью программы 5.3 получим (первые 6 строк таблицы выходных данных): К=0 Х=8 Y=0 К=1 Х = 5,07659 Y= -5,07659 К = 2 Х=—7-10-2 Y=-5,02734 К = 3 Х= 1,64828 Y=.....-1,64828 К=4 Х=0 Y=0 К = 5 X = 0,93543 Y = — 0,93543 М = 0,25 Q=0 М = 0,44871 Q=— 45 М = 0,31421 Q=— 90 М = 0,14569 Q= —135 М=0 Q=0 М = 0,09268 Q=—45 При параболической аппроксимации Y (t) задаем ее значениями АГп--= I /3, X, =4/3, Л^ = 2/3, A-;i = 4/3, Х4 = 2/3, Л5 = 4/3, ,Y6 = = 2/3, ^7 = 4/3, Л"8= 1/3, Х9-~Хм=0 и Y0-z-X:n=0. Тогда получим: К=0 Х=8 Y=0 К = 1 X = 5,0930 Y = — 5,0930 |:> К = 2 Х = 6,6-10 Y = —5,09364 К = 3 X = - 1,69884 Y = - 1,69884 К=4 Х=0 Y=0 К = 5 Х= 1,02452 Y = — 1,02452
М=0 Q=0 М = 0,45016 . Q=—45 М = 0,31835 Q=— 90 М = 0,15016 Q = — 135 М=0 М = 0,09056 Q=—45 Для данного примера точные результаты вычисляются по формулам A* = sin (nk/2) Л/2д/г, Yk= — (1 — cos (л/г/2)) /V/2JI;V, Мк = 2^х1+П/М. Qk = -arccos (Xk/-\JX2~+Yl) и равны:
K=0 Х=8 К = 1 К = 2
Y=0
X = 5,09296 Х = 0
Y = — 5,09296 Y=—5,09296
Q=0
К = К=4 К = М = М = М = М = М=0 М =
3 Х= —1,69765 Y= —1,69765 Х=0 Y=0 5 Х= 1,01859 Y= —1,01858 0,25 Q = 0 0,45016 Q=-45 0,31831 Q= — 90 0,15005 Q = — 135 Q=0 0,09003 Q = -—45
Сравнение приведенных данных ILIIVIVMIO иллюстрирует повышение точности (И1Ф ;:с мере увеличения порядка аппроксики;;):. щего у (t) полинома. Казалось бы, чю т,-я прямоугольного импульса ступенчатая аппроксимация будет наилучшей. Однако при БПФ производится приближенное численное интегрирование не самой зависимости у (/), а е( произведения на быстроосциллируютие множители. Поэтому результирующая погрет ность интегрирования определяется не только погрешностью аппроксимации у (I), но и всей подынтегральной функции. В следующем разделе описан метод спектрального анализа, в котором по точным формулам интегрируется произведение у (t) на осциллирующие множители (при этом простейшая кусочно-линейная аппроксимация у (I) с ра.ч-рывами позволяет получить точные резу.м. таты спектрального анализа). Повышение точности БПФ путем обработки выходных данных сводится к умножению Хк и Ук на множитель К/, --= sin (nk/N) / (nk/N) и введению поправки на фазовый сдвиг \ipi, = nk/N. В этом случае для рассмотренного примера будем иметь точные значения X/,, Ук, Мк и qit. Разумеется, нельзя использовать одновременно оба способа повышения точности БПФ, поскольку они являются альтернативными вариантами одного и того же подхода --- улучшение аппроксимации У (/). Эффект Гиббса наблюдается при тригонометрической интерполяции усеченным рядом Фурье функций с разрывами (в част ности, прямоугольного импульса). Он заключается в осцилляциях расчетной зависимо сти ряда Фурье, амплитуда которых може: 127
достигать 18%. Увеличение числа членов ряда ведет лишь к уменьшению длительности осцилляции. Осцилляции значительно снижаются (сглаживаются) при описанной выше обработке данных (как обычного спектрального анализа, так и с помощью БПФ).
$ 5.2. Специальные виды спектрального анализа Метод пяти ординат обеспечивает вычисление постоянной составляющей Yc и первых четырех гармоник YMl-^YM4 реакции системы с передаточной характеристикой у (х) на гармоническое воздействие х = хм cos u>]t-\-xo (см. рис. 5.2): Пример. Для у, =0,7; у2 = 2; t/3 = 3,5; (/4 = 5,2 и (/5 = 6 получим Уо = 3,516666667; КМ1 =-2,833333333; КМ2= -0,075; Уш = = 0,1833333333; Y т = —0,0916666667 и Кг = = —0,07703412267. В программе 5.4 амплитуды гармоник YMt — Ym обозначены как М\~МА. Метод семи ординат аналогичен, по сути, методу пяти ординат, но отличается большим числом ординат и позволяет найти У о И 6 гармоник [37]: Уо = У*+( — 270а,+756а2 + 334а3)/2560, Ум\ = (~ 180Р, + 1008р2 + 668р,)/2560, YM2=(- 1215а, +486а2 + оГ)9а,) /2560, Ym = (270а, — 756а2 + 306а3) /2560, КМ5=(810р,-648р2+162р3)/2560, Ym= (1215а,— 486а2 + 81а3) /2560, где <)]/12, — 2у4, аг= — 2i/4, Pi = i/5 — Уз, р2 = Уб —
К, = л/ У%2 + У%13 + У)
Метод широко применяется для расчета радиотехнических систем с малой нелинейностью зависимости у (х). Программа 5.4. 10 PRINT СПЕКТРАЛЬНЫЙ АНАЛИЗ МЕТОДОМ 5-ТИ ОРДИНАТ 20 INPUT ВВЕДИТЕ ПЯТЬ ОРДИНАТ ФУНКЦИИ VI,-Y2.-Y3,-V4,-V5 VI,-Y2.V3,Y4-V5 30 LET Y0=<Y1+V5+2*<V2+Y4>V6 40 PRINT СРЕДНЕЕ ЗНАЧЕНИЕ Y@=Y8 50 LET f1l = <Yl-Y5+V2-Y4:>/3 60 PRINT АМПЛИТУДА ПЕРВОЙ ГАРМОНИКИ М1=М1 70 LET M2=<Y1+V5-2*V3V4 80 PRINT АМПЛИТУДА ВТОРОЙ ГАРМОНИКИ М2=М2 90 LET M3=<VlrY5-2*<Y2-Y4>:b6 100 PRINT АМПЛИТУДА ТРЕТЬЕЙ ГАРМОНИКИ МЗ=МЗ 110 LET M4=Ci;Yl+S5>-4»<Y2+Y4)+6*V3:b-12 120 PRINT АМПЛИТУДА ЧЕТВЕРТОЙ ГАРМОНИКИ М4=М4 140 PRINT КОЭФФИЦИЕНТ"ГАРМОНИК К=К. 159 60Т0 20 : END
I. I Рис. 5.2. Определение yt при методе пяти ординат 128 Программа 5.5. 10 РЯШТСПЕКТРАЛЬНЫй АНАЛИЗ МЕТОДОМ 7-МИ ОРДИНАТ 28 PRINTВВЕДИТЕ ОРДИНАТЫ VI. V2, . . ., V7
30 INPUT A>B>C.-IbErFr&:LETH=2560 48 LETW=2*B: LETI=E+C-W". LETJ=F+B~W 50 LETK=6+A-W:LETL=E-C:LETM=F-B 60 LETN=6-ft:LETO=B+<756*.J-270*I+334*K>.H 7@ LETP=< 1008*M-180*L+668«N).H 86 LETQ=<486«J-1215«I+55Si»HO/-H 99 LETR= < 458*N-630*L-360*M ) /H 100 LETS= < 278» I -756*J+386*K > -H 110 LETT=<818*L-648*M+162*NVH 120 LETU=a215*I-486*J+81*KVH 130 LETU=SQR < GT 2+R~2+S"2+T~2+lT2 ) /P 140 PR INTКОЭФФИЦИЕНТ ГАРМОНИК КГ=Ч) 150 PRINT-A0=О:PRINTAl = p:PRINTA2=Q 160 PRINTA3=R:PRINTA4=S:PRINTA5=T 170 PRINTA6=U:END Пример. Для i/i =i/2 = i/3 = 0; г/4=1; 1/5 = 2; 1/6 = 3 и 1/7 = 4 получаем К о= 1,55625; KM1 =2,064375; УМ2 = 0,6265625; Умз = = -
0,2109375; УМ4= -0,05625; УМ5 = = 0,1265625; Ym= —0,1265625 и Кг = = 0,3297021676. В программе 5.5 Y0-i-Ym обозначены А0^-А6. Метод степенного полинома основан на аппроксимации передаточной характеристики полиномом у (х) =
+а„х" и вычислении спектра у (t) при воздействии в виде х (t) =хо + хм cos ®it. При этом [37] уо(О=а/.; yi (0 =а„_1+дг (0 а»; ; А—1
I 1=0
Коэффициенты А? последовательности:
последней
формулы
вычисляются
по
рекуррентным
соотношениям
в
следующей
Ввиду четности функции * (0 независимо от вида нелинейности у (х) функция у (0 также является четной и ее спектр содержит только косинусоидальные составляющие с фазой ф, = 0 (и постоянную составляющую Ао/2). Число гармонических составляющих равно п, а коэффициент гармоник ^Г = л/Л1 + Л!+ ... +A*/Ai. Программа 5.6. 1й PRINT АНАЛИЗ РЕАКЦИИ НА ГАРМОНИЧЕСКОЕ ВОЗДЕЙСТВИЕ ПОЛИНОМИАЛЬНОЙ 38 PRINT ПЕРЕДАТОЧНОЙ ХАРАКТЕРИСТИКОЙ 49 INPUT ВВЕДИТЕ СТЕПЕНЬ ПОЛИНОМА N=N
28
НЕЛИНЕЙНОЙ
СИСТЕМЫ
С
50 DIM IKH+bN+l>>A<N) 60 PRINT ВВЕДИТЕ КОЭФФИЦИЕНТЫ ПОЛИНОМА 70 FOR 1=8 ТО N! PRINT!2.0!Ais INPUT A<I): NEXT I 80 PRINTВВЕДИТЕ ПОСТОЯННУЮ СОСТАВЛЯЮЩУЮ ВХОДНОГО 90 INPUT ВОЗДЕЙСТВИЯ Х8=В8 100 INPUT ВВЕДИТЕ АМПЛИТУДУ ВХОДНОГО ВОЗДЕЙСТВИЯ ХМ=В 119 FOR 1=0 ТО N+l: FOR J=8 TO N+l 120 LET IKbJ)=0: NEXT Js NEXT I 130 LET D<8>8>=A<N>: FOR 1=1 TO N 140 LET В<Ь0>=А<М-П+В0*1К1-Ь0>+В*11<1-Ы)/2 158 LET D(IJ 1)=В0ЖВ<1-Ы)+ВЖ<1К1-Ь0>+1К1-Ь2>-2; 168 FOR J=2 TO N 178 LET D<b J)=B0*Ii<I-l/.J>+B*(IKI-b.J-n+IKI-l,J+lVJ/2 188 NEXT J: NEXT I 198 LET K=8: FOR J=2 TO N 200 LETK=K+D<N/J>*D<NfJ>! NEXT J 210 LET K=SQR<K/<Dabl)*IKNfl)>> 220 PRINT СПЕКТР ВЫХОДНОГО СИГНАЛА 230 PRINTПОСТОЯННАЯ СОСТАВЛЯЮЩАЯ Y@=!F1.9!D<N>8> 248 PRINT АМПЛИТУДЫ ГАРМОНИК 250FOR J=l TO Ns PRINT!2.8!VMJ=!F1.9!D(N*J)tNEXT J 260 PRINTIF1.9!КОЭФФИЦИЕНТ ГАРМОНИК КГ=К 270 60T0 80! END 5 В. П. Дьяконов
129 Приме р. Для у [х) - = 1 ( 1иО0л+2О0л-+ + 10Ox3 + 2(Lv:"-)-]()?; л:0 = 0 и лгм = 4 получим /1„= ,4521: Л, = 15200; Л? =4160: Д^= = 4800; Л., =-640, Л,=040 и Л, =0,42210395. Амплитуды /ID :-/д, в программе обозначены У0, УЛП-f К/И/v Метод двенадцати ординат является простейшей разновидностью ЫТФ и служит для вычисления коэффициентов Фурье йо-г-бв и П\^-ПЪ функции у (х), заданной 12 равно отстоящими ординатами y\~ry\i. Алгоритм расчета по этому методу следующий [1]. 1. Вычисляем суммы и разности ординат по схеме (.v, — суммы, d, - разности): 4. Находим коэффициенты йо-т-бе и ai-j-
е,—е3 „ = (лi + i:0 Уз/2 6 л/з ,
,
Г
ei/2+вз—е->-\/ з72
«4 = -— (п, - т| 2); а6 =—-^_I—1_—- v / 12 У У,2
«i
Ую
У
So
"ч
«г
S
d.
2. Вычисляем суммы о, и разности 6,: 3. Вычисляем суммы 0, и разности т|,: d., d,
d
d> 0,
62
УЗ/2
----------_ 62/2 + 60-6, л/3/2 6 Программа 5.7.
;
170 LET «1--1)1+1)5 180 LET H1=U1-D5 218 LET L*S 10 PRINT ГАРМОНИЧЕСКИЙ йНАЛИЗ МЕТОДОМ 12-ТИ ОРДИНАТ 28 DIM Y<li>:F0R-; = i TO 12
48 PRINT<2.t( В8ЫДИТЕ V< I): INPUT V<I)!NEXT I 5@ LET £0=V.12. LET Sl-Vm+Ycm s LET S2=YC2>+V<10> 60 LET Si=V<3)+V.9):LET b4=Y<4>W<8):LET S5=Y<5)+Y<?>!LET S6=Y(6) 90 LET В?=У:1>-У<и> s LET D2=Y<2)-Y<ie> : LET D3=Y<3>-Y<9) 100 LET D4=Y«;4>-Y--8> : LET D5=V<5>-Y<7> 130 LET &8*-P&+S6:LET bi=Sl+S5:LET G2=S2+S4:LET G3=S3 140 LET T0-S>:.i-Sb t LET Tl=Sl-85 : LET T2=y2-S4 LET Q2=D2+D4 s LET Q3=D3 LET H2=B2-D4
: LET Al=<c;Ql/2)+G!3+Q2«L>./6 220 LET A£=<H1+H2>»L^6 : LET A3=<Q1-Q3V6 230 LET H4=4Hl-H^>*L/6 s LET A5=<<Ql/2)+Q3-Q2*L)/6 246 LET B6= 168+62+61+G3VI2 : LET Bl = <<T2/2:)+T0+Tl*LV6 256 LET B24be-4fe2.-2>-K6b--£>-63V6 : LET B3=<T8-T2V6 260 LET B4-<G0-i.C-.£:/2)-<61-2)+63)/6 270 LET B5«<<t2/2)+T8-Tl»L>/6 280 LET Вб=С60+62-01-63)^12 290 PR INT!F1.9!ЗНАЧЕНИЯ КОЭФФИЦИЕНТОВ 300 PRINT Hl=Hl s PRINT A2=A2 : PRINT 310 PRINT A4=A4 : PRINT A5=A5 320 PRINT B1=B1 PRINT 1 J B2=B2 330 PRINT B4= B4 ! PRINT B5=B5 346 60T0 20 : END PRINT
A3=A3 В@=Вв B3=B3 B6=B6 130 Пример. Для </i = l. {/2 = 4; у-( —5;. i/i = 4; (/5 = 3; 1/6 = 3,5; t/; ==3,5; у« = 3; y.i~~Jl; i/ni = 0,5; (/п-=0,2 и i/i2 = 0 получим
а, = 1,34118572; а, = 0,5184827557; а3= -0,6166666667; а4 = - 0,1732050808; а5 = 0,04214761383; Ь» = 2,39: G66G67; б, = —1,556655773; Ь,= -0,733333333; Ьъ=— 0,1666666667; /;,,= —0,01666666667; Ьь= — 0,02667755999; Ьь = 0,!083333333. Отметим, что в отличие о введенных в § 5.! обозначений ,>десь использованы обратные (а, обозначено как Ь,, а и, как к,), что свизано с применением ряда Фурье, у которого члены ряда — синусы, а не косинусы. Последовательный спектральный анилин кусочно-линейных функций с разрывами обеспечивает точное вычисление спектров функций, которые могут быть синтезированы из треугольников, прямоугольников и трапе ций. При этом «аждый отсчет у, задается моментом времени /, и двумя значениями: у, (ti — О) слева и у,(/, + 0) справа, где 0 понимается как бесконечно малое приращение /,. Если yi (/, —0) =;/, i.7i-|-0), то в точке U зависимость j (/,) че имеет разрыва. Еелг имеется разоыв, он задается соответствую щими значениями функции до и после раз рыва. Например, пуя.моугольный импульс единичной амплитуды задается значениями U, i/i (<|-С)=0, у, /; H-U) --=!, ;,, 1/, (<2-— 0) = 1 и t/2 (/2-*-0) = 0. Нумерация отсчетов ( далее идет с , число отсчетов у (/) равно N. Отсчеты могут ->дти с произвольным расположением точек /, на оси времени. На произвольном участке I/. .,,/,| функция у (t) агчтоксимируется прямой, уравнение которой
Следовательно, взяв отсчеты с соответствующей соооны получим для у (I) is интервале (/, 1+0, /, — 0) следующее выражение:
Алгоритм последовательного спектрального анализа -для данного случая подобен опис; иному в § 5 1. Программа 5.8. 10 PRINTПОСЛЕДОВАТЕЛЬНЫЙ СПЕКТ^йЛЬНЫй АНйЛИЗ КУСОЧНО-ЛИНЕЙНОЙ гг 9Я1Н" ФУНКЦИИ»ЗАДАННОЙ Н ОТСЧЕТАМИ,НАЧИНАЯ С I=S Зе PRINT С ПРОИЗВОЛЬНЫМ РАСПОЛОЖЕНИЕМ ОТСЧЕТОВ 40 I4PUTВВЕДИТЕ 06МУ» ДЛИТЕЛЬНОСТЬ ВРЕМЕННОГО ИНТЕРВАЛА Т=Т 56) INPUT-ЗА ДАЙТЕ- ЧИСЛО ОТСЧЕТОВ N=N:BIM U<LN>fVCbN) 6Й FOR v = i JO NsPRINT3.0!ВВЕДИТЕ Tl-U INPUT U<I> 7ti ШРЦТ ВВЕДИТЕ ЗНАЧЕНИЯ У<Т-8), V<T+0> V<9» I)» VkbDsNEXT I 9e ^4PUTВВЕДИТЕ ЧАСТОТУ F=F: F f>e 60T0 156 100 i-ET A=8! FOR 1=2 TO N П0 ^.ET A=A+<UU)-V<I-1>>*<V<1. .-l>+V<e,I>V42*T)iHEXT I 1^0 PRINT!F." .9 ПОСТОЯННАЯ СОСТАВЛЯЮЩАЯ М<0> = A:LETS=T*ABS<AJ 13& Р>?:Н1СПЕкТРйЛЬНАЯ ПЛОТНОСТЬ S(.0>=S: 60Т0 98 158 L-I^ Й=05ЬЕ1 B=esLET R=0:LET X0-#PIi«F*T8FOR 1=2 TO N
168 u£": Х1я2ж»еР1жРжи<1-1): LET X2=2*#PI*F!«U<I> 1?0 -cT X3»--<V:e,I>--V<bl-b1>/(X2-X> 1?5 :.ET B=F*U(i-l>:lF D-INT<DXl.E--5 THEN 1_ETX1=0 T 1Й0 LE >FW(?)i IF D-INKDX1.E-5 THEN LETX2=0 r 185 LE Sr=bXN<.Xl>:LETS2=SIN<X2):LETCl=C0S<Xl>:LETC2=COS<X2>
1ЭИ L£f ft=ttf<x3*<c?-ci>+v<e>i>*s2-v<bi-i>*si>/xe 208 Lc~ В=В+СХЗж(5£:-81>-У<0/1?*С2+У;1,1-1>жС1>^Х0 210 NEXT It LET 6=SQF?<A*A+B«B>: IF &=0 60T0 23Й 215 LET Z=tV6: IF f«S(ZXl.E-il THEN LET Z=@ 220 LET R«-ftCS<Z)i IF B<0 THEN LET R=-R 230 PR1NTIF5.9! АМПЛИТУДА M<F)=6 240 PRINT СПЕКТРАЛЬНАЯ ПЛОТНОСТЬ S<F)=6»T/2 250 PRINT ФАЗА В ГРАДУСАХ Q(F)=DE6<R>:&0T0 90s END Пример. Для примера к программе 5.1 (вычисление спектра прямоугольного импульса) вводим 7" = 4-10~6 с, Л/ = 32, <i=0, F(/-0)=0, f(/ + 0) = l, /2=bl0"s с, F(t — O) = \, F{t + O)=0, / = 250000. Получим G (0) =0,25, S (0) = 1 10"6, G (f) = = 0,4501581581, S (f) =9,003163162- \0~г и Ф (f) = —45° (эти значения совпадают с точными). В этой программе нумерация отсчетов/ идет с 1, у (t)=F (Т), M (f)=G (F), S {f)=S (F) и <p(f)=<b(F). Параллельный спектральный анализ кусочно-линейной функции с разрывами основан на применении описанной выше методики при одновременном вычислении рядов пк, Ьк. Программа 5.9.
А (П =Л1А2С (/) +А%- (f) , а ФЧХ при t = Q.
Ф
(f) = = -arctg [As(f)/Ac(f)]. Здесь a (t) -производная ПХ a(t), a (0) — значение a (t)
Численный метод расчета АЧХ и ФЧХ по ПХ базируется на кусочно-линейной аппроксимации a (t) в интервале между ее отсчетами у,. Тогда
. a (t)~CLi — Qi-l
At При этом a (t) представляется ступенчатой линией, смещенной на +Д//2, что создает значительные погрешности в вычислении
ФЧХ. Сместив эту линию на —At/2, можно значительно уменьшить эти погрешности. Далее, IS PRINTПАРАЛЛЕЛЬНЫЙ СПЕКТРАЛЬНЫЙ АНАЛИЗ И ТРИГОНОМЕТРИЧЕСКАЯ 20 PRINTИНТЕРПОЛЯЦИЯ КУСОЧНО-ЛИНЕЙНОЙ ФУНКЦИИ С РАЗРЫВАМИ ПРИ 30 PRINT ПРОИЗВОЛЬНОМ РАСПОЛОЖЕНИИ ОТСЧЕТОВ
40 PRINT"
50 INPUTЗАДАЙТЕ КРАТНОСТЬ ЧАСТОТ M=M:DIM А<М),В<М> 60 INPUTЗАДАЙТЕ ЧАСТОТУ F=F 70 FOR K-0 TO M:LETA<K>=0sLETB<K)=0iNEXT К 80 LETX=2*#PI*FsINPUTЗАДАЙТЕ ДЛИТЕЛЬНОСТЬ ВСЕГО ИНТЕРВАЛА Т=Т 90 LETZ=XanV2iINPUTЗАДАЙТЕ ЧИСЛО ОТСЧЕТОВ N=N 100 INPUTВВЕДИТЕ МОМЕНТ ВРЕМЕНИ Т 0=Т0 110 INPUTВВЕДИТЕ ЗНАЧЕНИЕ ФУНКЦИИ F<T 8+0>=V0 120 FOR 1=1 ТО N-is PRINTВВЕДИТЕ МОМЕНТ ВРЕМЕНИ Т!3.0!1 130 INPUT tHINPUTВВЕДИТЕ ЗНАЧЕНИЯ F<T-0)/F<T+0) VbY2 140 LETV-V1-V0JFOR K=l TO M!LETX0=X*K*T88LETX1=X«K*T1 150 LETX2«V/<X1-X0)!LETD=2«K!LETS0=SIN<X0) 160 LETS1=SIN<X1):LETC0«=COS<X0)!LETC1-COS<X1) 170 LETA<K)*A<K) + <V1«S1-V0*S0+X2*(C1-C0)>/D 180 LETB<K>=B<K)+<V0«C0-V1*C1+X2*<S1-S0)VD!NEXT К 190 LETft<0)=A<0> + <Tl-T0)*<V0+Vl)/2-TiLETV0=V2 200 LETT0=TliNEXT I:LETE=0 210 PRINT К МОДУЛЬ М<Ю СПЕКТР. ПЛОТН.ЭСК) 220 PRINT!3.0!0; !F1.5!A<0>J A<0>*T
ФАЗА 0<ГРАД)
230 LETE=0!FOR K*l TO M:LET6=SQR<A<K)*A<K)+B<K>*B<K>) 235 IF K=l THEN LETG1=6 240 LETE=°E+6*6:LETQ=0:IF 6=8 THEN 260 250 UETQ=-ACS<A<KV6>UF B<K><0 THEN LETQ=-Q 260 PRINT!3.0!K; !F1.5!6; 6*T/2< DE6<Q>sNEXT К 265 PR INTКОЭФФИЦИЕНТ ГАРМОНИК Kr=SQR<E-Gl*61>/61 270 PRINT. INPUTВВЕДИТЕ ВРЕМЯ TX=U:LETV=A<0>!LETP=X*U 280 FOR K=l TO M!LETP=W*K8LETY=V+A<K>*C0S<liO+B<K>sisSIN<lJ>!NEXT К 290 PRINTЗНАЧЕНИЕ V<TX>=V:6OTO 270!END Эту программу можно проверить по примеру, приведенному к программам 5.1 и 5.2. Программа 5.9 обеспечивает одновременно и тригонометрическую интерполяцию, т. е. вычисление у (t) для любого заданного / с помощью гармонического синтеза. Расчет амплитудно-частотной (АЧХ) и фазо-частотной (ФЧХ) характеристик линейной системы по ее переходной характеристике (ПХ) a (t) является одним из важных практических приложений спектрального анализа. Он основан на следующей связи этих характеристик: А (/о))=а(0)+Лс(а))+/Л5 (со), применяя для вычисления Ас (со) и As (ш) метод численного интегрирования с поправочными коэффициентами (см. § 5.1), получим [9, 10]:
Ас(!) =
sin (nf At) у nfAt
L
As U) = =sin
(nf At) у (a._fl._|)sin {nfAt (2j_i)).
nf At
f—
где Ас (со) =] a (t) cos co^ dt, As (w) = 1° о = ) a (t) sin u>t dt, причем АЧХ (/ = оо/2л) о По вводимым отсчетам ПХ а, = а (tt) находим Ас (со), As (со) для заданных / и At, после чего находим точки АЧХ A (f) и ФЧХ Ш 132 Программа 5.10. 85 PRINTВЫЧИСЛЕНИЕ АЧХ И ФЧХ ПО ПХ 10 INPUT ЧИСЛО ОТСЧЕТОВ ПХ М=М 20 INPUT Й=Х: 1_ЕТМ=Г<1-1: ЩИ А<М> 30 FOR 1=1 ТО М: INPUT A=Y 40 LETA<i:>=Y-X: LETX=V 58 NEXT Is INPUT ШАГ Т=Т S0 LETC=@: LETS=0 70 INPUT ЧАСТОТА F=F 75 LETP=<#PI>*F*T 80 FOR 1=1 TO M 90 LETC=A <I>*COS < P* < 2*I-1>)+C 100 I_ETS=A<I>*SIN<P*<2*I--1>>+S:NEX-T I 110 LETC1=C*SIN<PVP: LETS1=S*SIN<P>/P 120 PRINT-КОЭФ. ПЕРЕДАЧИ ФАЗОВЫЙ УГОЛ 130 PRINT !2.3! SGRCCl"-2+Sl"2)..riE6i;-ATNCS^C>) 140 GOTO 60: END Пример. Для QI=0,05; 02 = 0,4; а-) = = 0,75; о4=1; 05=1,16; а6=1,2; а7=1,16; 08=1,08; а9= 1,02; а,„=1,0 и А/ = 0 1 получим А (2) = 0,2367203833, ф(2) = = — 160,4352421°.
Метод Берга служит для расчета спектра усеченных косинусоид, получаемых при воздействии х (t) =xM cos (u>t) -\-Xo, действующем на входе системы с передаточной характеристикой y = f (x), аппроксимированной двумя отрезками прямых: у (х) =0 при *^xo, у (x)=Sx при х> хо, где S — крутизна передаточной характеристики. При этом косинусоидальный импульс характеризуется амплитудой ум и углом отсечки 9 = arccos [(хо — Хо)/хм]. Метод Берга сводится к расчетам по формулам ао = уо/Уд} = (sin 9 — 9 cos 9)/л (1 —cos 9), <xi =Ум\/Ум= (9 — sn 9 cos 9)/л (1 —cos 9), У Nik 2 sin £9 cos 9 — к cos ^9 sin 9 Пример. Для заданной амплитуды хм=Л = 10, сдвига Xo = /r = O и порога ха = = Х0 = 0 получим угол 9 = Q = 90°, ao = = Л0 = 0,3183098862, а,=Л1=0,5 и а2 = = Л2 = 0,2122065908.
§ 5.3. Статистический анализ и подготовка гистограмм Одномерный массив из N некоторых цифровых данных xi характеризуется совокупностью статистических характеристик (одномерная статистика), перечисленных ниже. Начальные моменты k-то порядка Обычно k=\, 2, 3 и 4 (точность вычисления Шк при fe> 4 низкая). Центральные моменты k-ro порядка N
Mk
-—V " Ум «" к (к2-\) (1-Программа 5.11. -cos 9) Момент Mi (x) =0. 10 PRINT1РАСЧЕТ КОЭФФИЦИЕНТОВ БЕРГА 28 PRINTВВЕДИТЕ КОД N 30 PRINT 0.. ЕСЛИ УГОЛ ОТСЕЧКИ НЕ ЗАДАЕТСЯ 40 INPUT Xr ЕСЛИ УГОЛ ОТСЕЧКИ ЗАДАЕТСЯ N=N 50 IF H=0 60T0 80 68 IF N=l 60T0 125 70 PRINTКОД НАБРАН НЕВЕРНО:6ОТО 15 89 INPUTЗАДАЙТЕ АМПЛИТУДУ А=А 90 INPUTЗАДАЙТЕ ПОСТОЯННЫЙ СДВИГ F=F 108 INPUTЗАДАЙТЕ ПОРОГ Х0=Х 118 LETQ=ACS<<X-FVA> 120 PRINT !F1.9.УГОЛ ОТСЕЧКИ В ГРАДУСАХ 0=ВЕб<С!>:60Т0 138 125 INPUTВВЕДИТЕ УГОЛ ОТСЕЧКИ В ГРАДУСАХ Q=Q:LETQ=RAD<Q> 130 LETV0=<SIN<Q>-S*COS<G>V<#PI*<1-COS<Q>)> 140 PRINTКОЭФФИЦИЕНТ A0=V8 150 LETY1=<Q-SIN<Q>*COS<Q>>/<#Р1ж<1-COSCQ>)> 160 PRINTКОЭФФИЦИЕНТ A1=V1 478 INPUTЗАДАЙТЕ НОМЕР ВЫСШЕЙ ГАРМОНИКИ К>2 К=К 188 LETV=2*<SINС K*Q>«COS <Q>-K*COS<K«Q)*SIN СQ >> 190 l_ETV=Y/<#PI*K*< <K"2)-1 )«< l-COS(Q) ) > 200 PR INT!2.8!КОЭФФИЦИЕНТ AK = !1.9!V:60T0 170:END a
133 Связь центральных моментов с начальными устанавливается соотношениями (аргумент х в скобках опускаем) М-2 -- пг> — /л., Mi — m.{ — 3m i nw + 2m f, MA ~~ rnt — 4m: m3 + 6m irn-., — Am \, которые позволяют вычислять Alt по мере ввода х, (без запоминания массива х,). Среднее значение вытянут правый, а при А <0 — левый участок спада кривой Р (х). Коэффициент эксцесса ND1 /V
I <-< М< —3 характеризует степень остроты пика кривой Р (х) в сравнении с Р (х) для нормального распределения. Если Е> О, Р (х) имеет более острый пик, чем при нормальном распределении, если £<0 — пик менее острый. Вспомогательные коэффициенты есть наиболее вероятное значение числа в массиве. Дисперсия смещенная ОС;) =£/;! =
N
D=является наиболее вероятной степенью отклонения х, от среднего значения х. Стандартное отклонение смещенное о= \jD определяет среднеквадратичную погрешность х,, если за точной значение принять х. Дисперсия несмещенная «4=^4 =
Л /
24 (,V — 2) (Л/ —3)
(Л-I)2 (Л + З) (/V + 5) служат для приближенной проверки гипо-. тезы о нормальном распределении *,-. Если применяется при статистической обработке чисел х, с нормальным распределением. Стандартное отклонение несмещенное а о = то распределение Р (х) для массива х/ можно считать нормальным. При программировании вычислений одномерной статистики желательно предусмотреть следующие возможности: 1) накопление сумм х?; 2) возможность исключения ошибочно введенного числа х-,\ 3) подсчет /V в ходе ввода xi\ 4) выдачу статистических характеристик в любой момент (до окончания ввода всех x.i). Все это обеспечивает приведенная ниже программа. Программа 5.12. ИЗ PRINIСТАТИСТИЧЕСКАЯ ОБРАБОТКА МАССИВА ЧИСЕЛ XI 26 PRW ИНСТРУКЦИЯ! ДЛЯ ИСКЛЮЧЕНИЯ ОШИБОЧНО ВВЕДЕННОГО 38 PRINTЧИСЛА НАЙМИТЕ КЛАВИШУ СБР И ДАЙТЕ КОМАНДУ 60Т0 89 48 PRINTДЛЯ ВЫВОДА РЕЗУЛЬТАТОВ НАЖМИТЕ КЛАВИШУ ГБР И 56 PRINTДАЙТЕ КОМАНДУ 60Т0 100 55 LETA=0:LETB=0:LETC=0s LETD=8:LETI=@ 69 PRINT!4.8!ВВЕДИТЕ XI+1:INPUT X:LETI=I+1
7S LETA=A+X! LETB=-=e+X*X: LETW=X«X«XS LETC=C+W: LETD=D+lil*X: ЙПТП 69 80 LET 1 = 1-1 i L£TH=A-X: LETB=8-X*Xs LETUI=X*X*X: LETC=C-W 9@ LETD=D-W«X:GOTO 68 100 LETHl=fVI s LETM2=B.I: LETF13=CvI! LETM4=D^I 110 LETDl=M2-Ml*Ml:LETD2=m*I.<I-l> 120 LETK=M3-3«M1*M2+2*M1*M1*M1 130 LETW=Ml*Ml:LeTL=M4-4«Ml*M3+6*l...l»M2-3:«U«W 140 LETAl=K>Dl-1.5:LETE=L/Dl.-Dl-3 150 LETU3=SQR<6«<1-1V<1 + 1)/iI+3> > 160 LETU4=SQR<24*I*a-2>«a-3V4I+3>.<I+5>.a-i:r--2:> 170 PR INT!F1.9!СРЕДНЕЕ М1=*М1SPRINTДИСПЕРСИЯ D=D1 180 PRINTДИСПЕРСИЯ D@=D2:PRINTАСИММЕТРИЯ А=А1 130 PRINTOKCUECC Е=Е:РР1НТЦЕНТРАЛЬНЫй МОМЕНТ М^=К 200 РР1НТЦЕНТРАЛЬНЫй МОМЕНТ M4=L:PRINTBBEflEHO ЧИСЕЛ N=!4.0!I 210 PR INT!F1.9!КОЭФФИЦИЕНТ U3=U3 220 PR INTКОЭФФИЦИЕНТ U4=U4:G0T0 60!END Коэффициент асимметрии характеризует скошенность графической функции плотности распределения вероятностей Р (х). При Л = 0 она симметрична, при А> О 134 Пример. Допустим, надо найти статистические параметры массива из 10 чисел л,: 9, 8, 10, 9, 11, 12, 10, 10, 9 и 11. Пустив программу командой RUN, вводим числа х,. При этом индицируется номер I. Если какое-то число введено ошибочно, достаточно нажать клавишу СБР и дать команду GOTO 80 (фиксируется нажатием клавиши ПС), По окончании ввода всех чисе.1 (или их части) нажимается клавиша СБР и дается команда GOTO 100. Для указанных выше чисел получаем: среднее mi =9,9 дисперсия О = = 1,29; дисперсия £>,,= 1,433333333; А = = 1,965657837 10~; £ = — 7,5392! 0384 1Г; Мл = 0,288; М4 =3,7377; V = 10 i число введенных чисел); £/3 = 0.6:45098678 и U4=-= 0,9224435941. Сразу после получения результатов можно продолжить ввод последующих X,. Среднее геометрическое дли N чисел доопределяется как GM=(x,-x2- . . . -xN)x/N. Гармоническое среднее Программа 5.13. шинстве случаев отрезки \d\,d>\, \d>, ѐл] и г. д. имеют одинаковую ширину С=Лх =(,»>,-.<„)/Л/, (5.22) где лд! - максимальное значение Л,, Хи— минимальное значение х„ N- число интервалов. Тогда алгоритм ускоренной подготовки данных для построения гистограмм будет следующий. 1. Вводим хм, xt, и N. 2. Определяем массив счетчиког. A (N), вычисляем С по формуле (5.22) и полагаем /= I. 3. Организуем ввод х,, вычисление I *— I-\--\- 1 (формирование текущего номера i каждого х,) и вычисление вспомогательной переменной V==int (CX (х-х,,)). IS PRINTВЫЧИСЛЕНИЕ ГЕОМЕТРИЧЕСКОГО СРЕДНЕГО W 20 PRUr- i. ГАРМОНИЧЕСКОГО СРЕДНЕГО НМ ЗЭ PRINTИНСТРУКЦИЯ! ДЛЯ ВЫВОДИ РЕЗУЛЬТАТОВ ЗАДни1Е 48 PRINT ПОСЛЕ ВВОДА ПОСЛЕДНЕГО XI НУЛЬ iCi LF.TI=0!LETS=0:LETR=1 bit PRINT ВВЕДИТЕ X<4.ti!I + l!lNPUT X: IF X=8 60T0 SS 7Я LC,TR=R*-::LET$=ST:/X:LETI = I + 1:60T0 68 3ti LF T6=R" : t У I >: PR 1 NT F1.41 СРЕДНЕЕ ГЕОМЕТРИЧЕСКОЕ 6М= 6 9Ы LLTH=I"jsPRINT СРЕДНЕЕ ГАРМОНИЧЕСКОЕ НМ=Н:Е1-Ш Пример. Для вычисления Ом и Нм по этой программе после ввода последнею числа хщ нужно ввести 0. Например, для пяти чисел 2; 3,5- 6,1; 1,2 и 3,9 получим Од, = 2,88492645 и #м = 2,4-5171074. Гистограмма распределения характеризует количество чисел л:,, попадающих в интервалы изменения х с границами do, d\, 1I2.. . . . . ., dN. Гистограмма распределения графически строится в виде столбцов, высота которых соответствует количеству х<, попавших в интервал изменения х, на который опирается столбик (на горизонтальной оси х). Гистограмма интегрального распределения характеризует количество чисел, попадающих в интервалы (—oo,d\), (— oo,d2), . . ., (— 00, dN).
Значение Y указывает на номер того отрезка, в который попадает заданное значение X/. 4. Вычисляем А {Y) -^ A (Y) 4-1 (т. е. вносим I в содержимое счетчика A (Y)) и возвращаемся к п. 3. 5. Вывод данных для построении гистограмм организуем с помощью цикла с управляющей переменной /, меняющейся от значения 1 до N с шагом 1. Числа попадания х-, в J-VL отрезок получаем выводом значений А (]). Для получения данных для построения гистограммы интегрального распределения вычисляем S-«-S + Л (/) при начальном S = 0. Программа 5.14. 16 КЕМПОСТРОЕНИЕ ГИСТОГРАММ МАССИВА ЧИСЕЛ X 15 PRINTДЛЯ ВЫВОДА РЕЗУЛЬТАТОВ ПОСЛЕ ВВОДА XI НАЖАТЬ £8 PRINTКЛАВИШУ СБР И ДАТЬ КОМАНДУ 60Т0 198 Ш INPUTВВЕДИТЕ Хв=Хв!INPUTВВЕДИТЕ ХК=Х1 46 INPUTВВЕДИТЕ ЧИСЛО ИНТЕРВАЛОВ ГИСТОГРАММЫ Н=Н ЫЗ ИМ A(N):LETl=lsLETC=<Xl-X0)/N ; & PR I NT ! 4.8 ! ВВЕДИТЕ X t I ) = : INPUT X
86 LET 1 = 1 + 1!LETV=INT<C*(X-X0>> 160 LETS=0«FOR J=8 TO N-1:LETS=S+A<J) 119 PRINT!4.в!ДЛЯ J=J NJ=A<J) SJ=S 126 NEXT J:PR1 NTВВЕДЕНОI-1ЧИСЕЛ:60T0 ?8:END Алгоритмы подготовки гистограмм. Простейший алгоритм подготовки гистограмм заключается в сравнении х,- с сеткой границ d\, di, ..., dN с помощью операций условных переходов и подсчете числа попаданий х-, в каждый интервал. Однако программа прибольшом числе интервалов получается громоздкой, а главное, большим получается время обработки каждого х-,. В больПример. После ввода всех х,, для вывода данных к построению гистограмм следует нажать клавишу СБР пульта дисплея и дать команду GOTO 100. Для х() = 5, xM=10, /V = 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 = l 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. Нажав клавиши Ft и SAC (статистика, общее стирание), обнуляем накапливающие регистры. 2. Вводим Xi набором каждого числа и нажатием клавиши STAT (статистика). Если набранное (но не обработанное) число ошибочно, его исключают нажатием клавиш АС (полный сброс числа) или С (сброс последней цифры). Если ошибочно введенное число обработано (была нажата клавиша STAT), оно исключается нажатием клавиш F\ и DEL/STAT. 3. Результаты вычислений получаем набором операторов, выполнение которых фиксируется нажатием клавиши ЕХЕ: Далее, вводя соответствующие операторы (см. выше), получим MX EXE 137.7142857 (среднее х) F, SDX ЕХЕ 18,42898069 (о) F, SDXNEXE 18,2968716 (<т0) Описанные операторы могут использоваться и в программах, что упрощает их построение при более сложных статистических расчетах, например, если надо вычислять также коэффициенты асимметрии и эксцесса. Микропрограммная реализация значительной части статистических расчетов существенно повышает скорость статистических вычислений и уменьшает вероятность ошибок.
§ 5.4. Реализация метода Монте-Карло Метод Монте-Карло заключается в использовании случайных чисел для моделирования различных объектов, ситуаций и физических явлений, реализации игр (подобных игре в карты) и др. Оператор
Результат
Наименование результата
CNT
8
SX SX2 MX SDX
427
Количество чисел /V Сумма чисел xi Сумма х? Среднее х Стандартное отклонение <то Стандартное отклонение о
SDXN
22805 53.375 1.407885953 1.316956719
Возможна обработка групп чисел, например: Номер группы 12 3 4 5 Число ПО 130 150 170 190 Количество чисел в 10 31 24 2 3 группе В этом случае вводятся число, затем знак \Т\ и количество чисел в группе. Например, для ввода и обработки первой группы вводим команды
по И С помощью команды F\ ASTAT/STAT можно (после ввода всех групп) обеспечить выдачу в автоматическом режиме следующих данных- (пример для приведенной совокупности чисел): CNT = 70 SX =9640 SY =0 SX2= 1351000 SY2 = 0 SXY=0 (общее количество чисел) (сумма Xi)
(сумма у, = 0) (сумма xf) (сумма у? = 0) (сумма х,у, = 0) В этом режиме выдаются также параметры массива (/,-, элементы которого не вводились (поэтому значения SY, SY2 и SXY нулевые). 136 Равномерно-распределенные случайные числа обычно генерируются ЭВМ в отрезке значений [0;1], причем любое значение Vi в этом интервале равновероятно. Обычно для этого используется отделение дробной части от сложного арифметического выражения, содержащего предшествующее число Vi. Например, может использоваться соотношение вида где £ = 8<±3 й t — нечетное целое число (при t = 5 6 = 37 или ft = 43). Обычно перед использованием датчика случайных чисел задается начальное значение Vo на отрезке [0; +1]. Задание разных Vo позволяет формировать различные последовательности случайных чисел. В действительности получаются «квазислучайные» числа, т. е. спустя некоторое количество циклов последовательности чисел повторяются. Количество неповторяющихся чисел находится в пределах от нескольких тысяч до сотен тысяч. Перевод равномерно-распределенных случайных чисел на отрезке [а, Ь\ производится с помощью формулы /
Xi+l=a+(b-a) Vi+I. Случайные числа с различными законами распределения получают с помощью формул преобразования (см. [10, 38]). Случайные числа с нормальным распределением могут быть получены с помощью формул flf=V2ln (1/K,) cos (2яУ,-_|), /?f =V2 In (1/VO sin (2nK,_i). При этом получается сопряженная пара чисел, имеющих среднее значение R = 0 и среднеквадратичное отклонение о = 1. При других значениях R и а производится пересчет по формуле Обобщенный алгоритм реализации метода Монте-Карло (рис. 5.3) обеспечивает моделирование работы объекта и вычисление основных статистических характеристик его функциональных параметров.
Наглядным примером применения метода Монте-Карло является программа 5.13 для обучения школьников младших классов таблице умножения. Программа генерирует два случайных числа, переводит их в отрезок [1;9] и предлагает учащемуся перемножить эти числа. Результат сравнивается с правильным. Оценка выставляется по результатам анализа десяти операций перемножения. Читателю предлагается самостоятельно разобрать эту программу. Программа 5.15. Формирование случайных чисел-параметров с равномерным распределением
А. преобразование законов распределения
_L Вычисления реакции, оБъекта на случайные Зоздейстйия-параметры Статистическая обработка результатов Рис. 5.3. Обобщенный алгоритм применения ме-тода Монте-Кйрло
Корреляционный момент двух последовательностей
.» = -дГУ (У> — т<«) (xi — i 05 PRINTОБУЧЕНИЕ ТАБЛИЦЕ УМНОЖЕНИЯ 10 LETX=.7654321!LETN=0 20 FOR 1=1 ТО IS 30 LET A=RHIKX>:LET B=RNDOO 40 LET A=INT<A*9+1>:LET 6=INT<B*9+1> 59 PR I NT! 2.9! СКОЛЬКО БУДЕТ А * В =?: INPUT "С 68 LET П=Й*Б: IF C=D THEM 80 70 PRINT НЕВЕРНОА*В=D:LET N=N+ls6OTO 85 88 PRINTПРАВИЛЬНО 85 NEXT I 90 IF N=0 THEN 140 100 IF N<=1 THEN 150 lie IF N<=3 THEN 168 120 PR INTВЫ НЕ ЗНАЕТЕ ТАБЛИЦУ УМНОЖЕНИЯ 130 PRINTПОУПРАЖНЯЙТЕСЬ EU)E:60T0 10 140 PRINTОТЛИЧНО.ВСЕ РЕШЕНО ВЕРНО:60Т0 10 150 PRINTХОРОШО.ОДНА ОШИБКА:6ОТО 10 160 PRINTПОСРЕДСТВЕННО.ДОПУЩЕНЫ N ОШИБКИ:60Т0 10 178 END /?
Отметим основные области применения метода Монте-Карло: решение нелинейных уравнений, вычисление экстремумов (в том числе глобальных у многоэкстремальных функций многих переменных), вычисление определенных интегралов большой кратности и др.
§ 5.5. Корреляционный
анализ
Корреляция является признаком, указывающим на взаимосвязь ряда численных последовательностей. Парная корреляция характеризует взаимосвязь двух последовательностей Xi И (/,-. Коэффициент парной корреляции R = N
N.
y)/N /
I
Н
\.2
I
\ У
/IV
N характеризует степень отклонения между Xi и у-, от линейной. Если \R\ к 1, то эта связь линейна, т. е. у, =
(5.23) связи 137
близок
причем знак R определяет знак коэффициенописывающей связь между некоторым чиста а. Мели R :(), то а > 0, и напротив, при лом N пар значений х, и у, обеспечивая /?<0 а<(1 , при этом наименьшую среднеквадратичную Программа 5.16. погрешность. Графмески эту задачу можно 05 PRINTВЫЧИСЛЕНИЕ КОЭФФИЦИЕНТА ПАРНОЙ КОРРЕПЯЦИИ ИЗ INPUTВВЕДИТЕ N=N 2@ LETA=e:LETB=0:LETC=0:LETIi=0:Lr:TE=e 30 PR I NTВВЕДИТЕ ПОПАРНО XCi>,V<l> 40 FOR 1 = 1 TO NsPRiNTT-f.e!- i = I 45 INPUTX<I>=X;INPI IT. U<I>=Y 50 LETA=A*X: LET6=B+V: LETC=C*-Xm?! 6® LETti=TJ+r2:LETt=E-<X«SJ:NEXT I 70 LETR= < E-АЖВ/N > -SOR ; < C- < PTZ ) /4) * < В- < Р" > N > > 80 PPINT!F 1.9! КО:>Ч>.КОРРЕЛЯЦИИ R=P Пример. Для Л/=-5 и i): |v,-), равных 2(0,95); 4,05(2.1): 5,8(3). 8.1(4,1) и Л2(4,)), получим /?= 0,9987280191. Порядковая корреляция пи Спирмену оценивается коэффициентом порядковой корреляции [18| V "«—
-~ ТТ^Т,
~
/
{>*>k
Lit/)
.
представить слгдующим образом — в облаке точек x,iji плоскости ху (рис. 5.4) требуется провести прямую так, чтобы величина всех отклонений отвечала условию N
IJ
== L (У — У (*,-)]2 = min,
где у (X,) - зависимость (5.24). Для этого где At и Bi - место (ранг), которое занимают хь и 1/1- при убывании дг*-. Программа 5.!7. 10 PRINT ВЫЧИСЛЕНИЕ КОЭФФИЦИЕНТА РЙНГОВОй КОРРЕЛЯЦИИ 20 INPUT-ВВЕДИТЕ N=N:LETS=n Зв FOR 1=1 ТО N:PRINT!4,0!ДЛЯ 1=I
48 INPUTВВЕДИТЕ А-В А,В 50 LET3=S+<A-B:>~2:NEXT I dU ~db\ \Щ~
что дает для определения неизвестных коэффициентов Ь,- и Ь: "истему линейных 7Й PRINT!F1.3!КОЭФФИЦИЕНТ R K0P=RsEND Пример. Для N-^7 и A (ft), равных НУЖНО ПРИР;1ВНЯ™> нулю частные производ-5(6), 4(7), 3(3), 7(5), -(I), 1(2), 6(4), пон лучим /?„ = 0,6428571429 v Вычисление коэффициента корреляции rltj у на специализированных ПЭВМ выполняется ~дп~7 ~~ ("(l~^~"lXt> J > микропрограммно. Так, на ПЭВМ FX-702P i^i для этого выполняй>тся следующие операции, v 1. Нажатием клавиш Ft и SAC обнуляются ячейки памяти статистических расчетов. 2. По схеме OVA.
*□# П5ЖГ1 вводятся папы чисел х, и //,. Ошибочно вве денная и обработанная пара исключается нажатием кланиш F, и iF.L/STAT. Л. Внодом К>чанцы (OR вычисляется R.
§ 5.6. Регрессионный анализ (приближение функций по методу наименьших квадратов) Линейный парный регрессионный анализ заключается в определении параметров эмпирической линейной зависимости ц (x)=b,x + bo. (5.24) 138
Рис. 5.4. К линейной регрессии . .V уравнен V
ий
boN + b^ Л
bo Y, X
;V
H Решени
е
э той
системы: ,v
J
,v
V
z*
; =i
I *Y-JV I */ yv 1\
\:=l
/V
i=l
Программа 5.18.
85 16 2@ 30 46 50 60
PRINTЛИНЕЙНАЯ РЕГРЕССИЯ INPUT ВВЕДИТЕ N=N LETA=0:LETB=0sLETC=0:LETB=0 PRINT!3.(5!ВВЕДИТЕ X<I>»Y<IV FOR 1=1 TO H:PRINT 1=I INPUT Х<П=Х! INPUT V<I> = V LETA=A+X: LETB=B+V!LETC=C+:>:"2
79 LETD=rj+X*V:NEXT I
80 LETBl=<A*B~N*H)/-<A-2-N*C> 90 LETB0=<B-BI*A: ^N 100 PRINT!F1.9!V=B0+B1*X 110 IHPUTBBEflHTF X=X 120 PRINTV<X)=B0+B1*XS6OTO llSsEND Пример. Пусть имеется совокупность из ^ = 5 пар y,(xi): 5,Г>(2); 6,3(4); 7,2(6); 8(8), 8,6(10). Введя эти данные, получим ftn = 4,75 и Ь\ =0.395. Следовательно, зависимость у (х) имеет вид Программа предусматривает вычисление у по заданному значению х. При необходимости программа может быть легко дополнена вычислением коэффициента парной корреляции R (5.2.4) или среднеквадратичной погрешности у
=4,75 + 0,395х. что позволит количественно оценивать степень приближения точек х,у к прямой (5.24). Линейная регрессия с помощью специализированных ПЭВМ зыг-олчяется микропрограммно. Так, у Г ЭВМ FX-702P пре дусмотрены операторы RA и LRB для вычисления параметров А--Ьп и В~1>\ линей ной регрессии ;/ [<) -- -А -г В:, а также операторы
FOY для вычисления у по заданному у и ЕОХ для вычисления х по заданному у. Одновременно при это^ вычисляется коэффициент корреляции R а другие статистические параметры массивов к, и у,, опи санные ранее (всего i7 параметров). Последовательность вычислений рассмотрим на примере к программе 5.1Д (;м. ниже). Как показывает данный пример, ПЭВМ FX-702P, специализированные на научно-технические и статистические рас четы, обеспечивают микропрограммное .т. е. без ввода внешних программ) вычисление важнейших характеристик двумерных массивов х.у,, а также проведение коррег:яьионного и линейного регрессионного анализа. Указанные выше операторы могут использоваться и в составе внешних программ, что речко /прощает последние. Нелинейная парная регрессия сводится к получению заданной нелинейной зависимости у (х) (нелинейной по гезапиоимой переменной х, но линейной по параметрам этой зависимости!), приближающей совокупность Обнуление регистров памяти F, SAC Ввод 1 пары X/, у-, Ввод 2 пары х-,, у. Ввод 3 пары 1С,-, у. Ввод 4 пары х„ у,Ввод 5 пары X/, у. Вычисление А
5.5 6.3 7.2 8 8.6
2, 4, 6, 8, 10,
F,
LR
STAT STAT STAT STAT STAT FXF.
4.75
LR
EXE
0..Ч95
SD
EXE
SD
EXE
SD
EXE
SD
EXE
CO
EXE
3.; 6227766 2.828427) 25 I.2.S1798 706 ] ; J954.)fs 0 99784",8"S5
A Вычисление В
F, B
Вычисление с,-
F, X
Вычисление сто*
F, XN
Вычисление а,
F, Y
Вычисление ао„
F, YN
Вычисление R
F, R
Вычисление N
F,
AS С NT =TAT --5
Вычисление суммы х, Вычисление суммы и,. Вычисление суммы х,1 Вычисление суммы у? Вычисление суммы х;/. Вычисление х
M X
Вычисление у
M
SX=30 SY = 35.6 SX2=^ 22O 4;Y2"2 59.7 SXY = 229.4 EXE 6
4
EXE
7.12
EXE EXE
6.725 5
Y Вычисление у при х=-5 Вычисление х при у = 6,725
EOY 5 ЕОХ 6.725
139
чисел xi и у, с наименьшей среднеквадратичной погрешностью. Сведение нелинейной регрессии к линейной выполняется с помощью линеаризирующих преобразований в ходе ввода х-,, у, и при выводе bo и Ь\ (см. табл. 5.1). Такое сведение целесообразно, если ПЭВМ имеет микропрограммное вычисление параметров 6о и Ь\ линейной регрессии или в распоряжении пользователя имеется только такая программа. Пример. Зависимость у-, (xi), заданная числами 21,4(6,9); 15,7(12,9); 12,1(19,8); 8,5(26,7) и 5,2(35,1) близка к экспоненциальной у-=Аеь". Для нахождения А и В ввод х-, и у, проводим по схеме (для ПЭВМ FX-702P) х, LN у, STAT т. е. вместо у, вводим In у,. Тогда константу Л =0,2388010829 получим, введя команды EXP LRA ЕХЕ, а константу В = 2,771866148 получим, введя команды LRB ЕХЕ. В общем случае для нелинейной регрессии более удобно использовать специальные программы, не требующие специальных преобразований при вводе xi, у;, а также при выводе результатов вычислений. Гиперболическая регрессия заключается в нахождении параметров функции у (х) =bo + bt/x из решения системы уравнений N 1=1 1=1
N
Программа 5.19. 95 PRINTГИПЕРБОЛИЧЕСКАЯ РЕГРЕССИЯ КЗ INPUTВВЕДИТЕ Н=Н 28 LETA=0:LETB=0:LETC=S:LETB=8
30 40 50 6Й
PRINTВВЕДИТЕ ПОПАРНО X<I>,V<IV FOR 1=1 TO Ns PRINT!3.0!I=I INPUTX<I)=X:INPUTY<I>=Y LETA=A+1/Xi LETB=B+1/<X"2>
70 LETC=C+V: LETD=D+V/X:NEXT I 88 LETE=N*B-A"2: LETF=C*B-D*A 90 LETK=N*D-A*C: LETF=F-E: LETK=K-E 100 PRINT!Fl.9!V<X)=F+K /X 110 INPUTВВЕДИТЕ Х=Х 128 PRINTV<X)=F+K^X!60T0 110:END Пример. Для JV = 8 И yt (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 и Ь, == 10,16017523. При х = 2 получим у = 7,015849511. Степенная регрессия обеспечивает нахождение параметров функции по формулам N
N
N
Y. In JC,- £ In у, — N £ In х,-In у: N /=1
N i=l
2
/
[1 /
N
N
\~\
ln
"F( X ^~61 X lnXi)\ Таблица 5.1 Преобразования, сводящие нелинейную регрессию к линейной (ее параметры помечены штрихами) № Функция у (х) x y b« b, 1
bo + biX
X
У
bo
b\
2 3 4 5 6 . 7 8 9 10 11 12
\/(bo + b,x)
X
Чу
bo + bi/x x/(bo + b,x) bob
\/x
b\ b\ bo
боехр (Ь\/х) bo 10*"
X
l/(/>0 + ft,e-*) бол: йо + fti Ig J: йо + fti In A:
e~x \gx \%x In x
У х/У Igi/ In x Ig i/ 1/У. Ig i/ У У
bo bo bo 10*6 exp.fto 10*° bo 10*" bo bo
feo/(fti+x)
X
13
&oJc/(fti+Je)
l/x
ЧУ ЧУ
1/M i/b\
bo/b, bo/b\
14 15 16
6o exp (b)/x)
\/x l/x x"
In х.. ig* у
exp 6o 10M bo
b\ b\ b\
bo]Oh/x
bo + b,x"
X X
X
\0b\
.
b\ b\ b\ b\ b\ b\
140
Программа 5.20. 05 PRINTСТЕПЕННАЯ РЕГРЕССИЯ 10 INPUTВВЕДИТЕ N=N 20 LETA=0sLETB=0:LETC=0!LETB=0 30 PRINTВВЕДИТЕ ПОПАРНО X<I>»Y<I> 40 FOR 1=1 TO N: PRINTS.0!1=I 50 INPUTX<I)=X:INPUTV<I>=V 60 LETA=A+LO&<X)!LETB=B+LOG<Y) 70 LET C=C+LOG <X> «LOG <V>!LETB=D+L0&<X:>~2i NEXT I 80 LETE=<A*B-N:«C>/<A"2-N«tO 90 LETF=EXP<<B-E«A)/N) 100 PRIHT!F1.9!V<X>=F*X~E 110 INPUTВВЕДИТЕ Х=Х
и
120 PRINTV<X> = F*X"E:CiOTO 110:ENB Пример. Для /V = 6 и у, (х,), заданных Экспоненциальная регрессия обеспечивает числами 3(1), 12(2), 27(3), 48(4), 75(5) и получение параметров функции 108(6), получим Ь,= _ = 2,000000004. Для х = 2 получим у= y — boexp{b,x) = 11 99999998 _. м.ээаээаао. п0 формулам Показательная регрессия обеспечивает получение параметров а и b показательной функции
£ xi £ \nyi — N £ x,\ny,
y(x)=ab ,
i=i
N
i=i
;=i
из решения системы уравнении
N
\ga I x, + \gb I xf= 2_ (Xilgy,). i=i
/=1
6o-exp| —
;=i
Программа 5.21.
05 10 20 30
йо = 2,999999987
PRINTПОКАЗАТЕЛЬНАЯ РЕГРЕССИЯ INPUTВВЕДИТЕ N=N LETA=0sLETB=0:LETC=0:LETB=0 PRINTВВЕДИТЕ ПОПАРНО X(D»V<DJ
&i =------------------------------------------,
40 FOR 1=1 TO N:PRINT!3.0!I=I 50 INPUT X<I>=X! INPUTYd>=Y 60 LETA=A+X:LETB=B+X"2:LETC=C+LGT<Y>. 70 LETB=B+X*L6T<V>: NEXT I 80 LETE=N*B-A"2: LETF=C*B-D*A 90 LETK=H«B-me LETF=EXT < F/E ) LETK=EXT < K/-E ) 100 PRINT!F1.9!VC>O=F*K"-X : 110 IHPUT-ВВЕДИТЕ X=X 120 PRINTY<X>=F*K~X:60T0 110sEND
Пример. Для /V = 5 и у, (д:,-), равных К программе 5.22. 6(1), 7(2), 8,7(3), 10,4(4) и 12,4(5), полуПример. Для N = 9 и у,(*,), заданных чим а = 4,941990005 и 6 = 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), получим 6„= Программа 5.22.
05 PRINTЭКСПОНЕНЦИАЛЬНАЯ РЕГРЕССИЯ 10 INPUTBBEflUTE N=N 20 LETA=0:LETB=0-.LETC=0:LETD=0 30 PRINTВВЕДИТЕ ПОПАРНО X<I>>Y<I> 48 FOR 1=1 ТО N:PRINT!3.0!I=I 50 INPUT Xa) = X: IHPUTY<I> = Y 60 LETA=A+X: LETB=B+LOG С Y ): LETC=C+X"2 70 LETD=D+X*L06<Y): NEXT I 80 LETB1=<A*B-H*D>/4A"2-N*C> 90 LETB0=EXP(<B-B1*A)/N> 190 PRINT!F1.9!Y<X>=B0«EXP<B1*X> 110 INPUTВВЕДИТЕ Х=Х 120 PRINTY<X>=B0*EXP<B1*X>:GOTO 110:ENB 141 -=1,939481364 и fti =0,305283305. При л1 =-5
нч решения системы из трех уравнений получим # = 8,924828620.
Логарифмическая репрессия лает пар.: /V
метры а и Л функции
bn.M + b, 2_, x,-\-b.; ^ лу = /^ (/,-,
(/ = e-fftlgA-
-=
=
-=
из решения системы уряпноний N
V
., , , V i
V
/V
Л/
#
?> ) >i-\-b\ i А;--/?2 ) *;! = ) iV
/V
° Z »-» <* Z CR )= Z (.«Aiк».)
N
N
N
ьп X ^+*i Z ---*- Z x> = Z
"I i----\ /----I /=l cil il <=! Программа 5,23. 135 PRINTЛОГАРИФМИЧЕСКАЯ РЕГРЕССИЯ 10 INPUTВВЕДИТЕ N=N 28 LETA=@:LETB=S:LETC=0sLETB=e 3@ PRINTВВЕДИТЕ ПОПАРНО X<I>>Y<I> 40 FOR 1=1 TO NsPRINT!3.0!I=I 50 INPUT X<I>=X: INPUTV<I>=-V 60 LETA=A+L6T<X>:LETB=B+L&T<X>"2:LETC=C+V 70 LETD=D+V*L6T»:>O: NEXT I 80 LETE=N*E-A"2: LETF=C*B-D*A , 90 LETK=N*B-A*C« L.ETF=F--E: LETK=K^E 180 PRINT!F1.9!V<X>=F+<K)s«L&T<><v 110 INPUTВВЕДИТЕ Х=Х 120 П р и м е р.- Для N =fi и у, (.v,), ранных Пример (к прог.-)амми 5.24). Для N = 7 1(1): 1,451(2); 1,716(3): 1.903(4); 2,048(5) и у,(х,), чаданчых значениями 3.76(2); и 2,167(6) получим а =--0.999931767: b 4,44(4); 5.04(6); ;\fm н) 6(10): 6,36(12) = 1,499793742 и" для х = А получим ;/= и 6,64(14), получим i., = 3, /,=0,4 и 62 = = 1,902897575. =—0,01. Для х~7 ПОЛУЧИМ y = 5,3i.
Параболическая регрессия обеспечивает
Полиномиальь.а» регрессия (аппрокейма-
получение трек параметров bn, Ь, и hj при ция) обеспечивает нахождение коэффициеыближения параболической функцией TOR полинома И U) -п \ Ь,х ^ ft...r // (») =ап + а х А-М-х + . . . +отхт (5.25) Программа Я.24. 05 PRINTПАРАБОЛИЧЕСКАЯ РЕГРЕССИЯ 10 INPUT ВВЕДИТЕ N=N: LETA=H 20 ПАТА в,вгв,&, 0.8/0 30 READ B*OF>M/P/R/S 40 PRINT ВВЕДИТЕ ПОПАРНО X(OrV(!) 50 FOR 1=1 TO Ns PRINT !3.9! I=l 60 INPUT X<I)=X! INPUT Y<I)=V 70 LETB=B+X: LETC=C+X"2: LETF=F+X"3 80 LETM=M+X"4: LETP=P+V: LETR=R+X*V 90 LET3=S+V*X"2: NEXT I 100 LETD=B:LETE=C:LETK=C:LETL=F 110 LET6=B/A:LET E=E-Q*BfLETF=F-Q«C 120 LETR=R-Q*Pi LETQ=KVAгLETL=L-Q*B 130 LETM=M-Q»C:LETS=S-Q*Ps 140 LETB2=<S-R*Q>.-4M-F*G!): 150 LETB0=<P-B«B1-C*B2VA: PRINT!Ft,9 160 PRINT Bl=BlsPRINT B2=B2
170 INPUT ВВЕДИТЕ Х=Х 180 PRINTV<X>=B0+61*X+B2*X"2:END 142 из решения системы уравнений
cman где аг4- - + C«am = dm, ,v C/= } x/, / = 0. I, 2. ..., 2m,
(5.26)
1, ч.....m. (5.27) Полином (5.25) степени m<zN, где iV — число пар л, и I/,-, обеспечивает аппроксимацию (и интерполяцию) таблично заданной функции у, (х;) с минимальной среднеквадратичной погрешностью
/ =д/ £=
(5.28) Если m = /V, то имеет место обычная интерполяция, т. е. значения у (х) (5.25) при х = х, точно совпадают с заданными у,. При m<cN такого совпадения в общем случае нет. Таким образом, аппроксимация у, (xi) по методу наименьших квадратов имеет более универсальный характер, чем обычная интерполяция (§ 4.2). Если достаточно ограничиться вычислением лишь коэффициентов аа, а\, ..., а,„ полинома (5.25) без вычисления значения Е, то нет необходимости в хранении массивов х, и у/. При этом достаточно вычислить f; (массив из 2т чисел) и di, (массив из т чисел) с помощью (5.26) и (5.^7) и решить полученную систему линейных уравнений методом Гаусса (см. § 4.1). Таким образом, составлена программа 5.2Г>. Помимо вычисления коэффициентов <н,, at, ... а,„ она обеспечивает нахождение у (v) по заданному А" с помощью полученного полинома (5.25). Программа 5.25. II р и м е р. Используем пример к программе 5.24 (задаем т-—М-=2 и п = Л/ = 7). Получим следующий результат «о = Л(0) = = 3, а,=А{\) =0,4 и />=- 1(2) — —0,01. Задав далее < —7, получаем у (л) .-=-У (Х) = = 5,31. Время счета контрольного примера (без учета времени ввода xi и yfi около 7 с. Полиномиальная регрессия (аппроксимация) с автоматическим выбором степени полинома выполняется по следующему алгоритму. Вначале задается ггепгмь га=1 (линейная регрессия). Отсчеты х,, у, вводятся и запоминаются. После нахождения всех а« (вначале аи и а\) с помощью (5.28) вычисляется среднеквадратичная погрешность Е и сравнивается с заданной Е\ Если £> £1, степень полинома т увеличивается на 1, и т. д. Счет прекращается как только достигается Е<Е\. В программе ,«.26 наряду с этим алгоритмом возможна реализация алгоритма вычисления коэффициентов а(!, аи, ... .. ., а,„ полинома заданной степенью т с вычислением получаемой при этом погрешности Е. Обеспечивается также вычисление (/(«) по заданному х. Д/;я повышения точности система уравнений для вычисления an, ai, .... ат решается методом Гаусса с выбором главного ин ме:;та. Программа 5.25. Э5 PRINTЙППРОКСИМАЦИЯ ПОЛИНОМОМ ПО МЕТОДУ НАИМЕНЬШИХ КВАДРАТОВ 10 INPUTBBEAMTE СТЕПЕНЬ ПОЛИНОМА M=N:LETN=N+1
20 DIM й<НгЮ»В<Ю>С<2жЮ/ХСЮ 30 INPUTВВЕДИТЕ ЧИСЛО ПАР X,V N=H 4S FOR 1 = 1 ТО Н:PRINT!3.8!ДЛЯ 1 = Is INPUTВВЕДИТЕ X«V 45 LETF=l!FOR J=l TO 2*N-l!lF J>N THEN 55 50 LETB < J)=B сJ)+V:LETV=V*X 55 LETC<J)=C<J)+FsLETF=F*X:HEXT JsNEXT I 60 FOR 1=1 TO H:LETK=I:FOR J=l TO N . 65 LETAa...J)=C<K):LETK=K+i:HEXT ЛНЕХТ I 70 FOR 1=1 TO N-lsFOR J=I+1 TO N 75 LETAU, I)=-A<J, I>/A(bI):F0R K=I + 1 TO H 80 LETA<J»K)=A<J»K)+A<J»I)*A<bK): NEXT К 90 LETB<.J)«BCJ>+A<JH)»B<I): NEXT Л NEXT I 100 LETX;H>=B<N>/A<N>H> 110 FOR I=N-1 TO 1 STEP -l: LETH=B(I> 128 FOR .J=I + 1 TO N:. LETH=H-X<.J)»A<bJ>iNEXT J
"X,1,"
130 LETX<I>=H/A<bI>!NEXT I 140 150 160 170 180
PRINTКОЭФФИЦИЕНТЫ ПОЛИНОМА FOR 1=0 TO N-l:PRINT!3.0!A<I:> = !F1.9!X(I + l)sNEXT I INPUTBBEAHTE X=ZsLETS=0:FOR I=H TO 2 STEP -1 LETS=<rS+X<I>>*Z!NEXT I PR I NTЗНАЧЕНИЕ V<X> = !FU9!S+X<l>s60T0 1€0:END
143 Программа 5.26. 10 PRINTАППРОКСИМАЦИЯ ПОЛИНОМОМ ПО МЕТОДУ НАИМЕНЬШИХ КВАДРАТОВ 15 PRINTС ВОЗМОЖНОСТЬ» АВТОМАТИЧЕСКОГО ВЫБОРА СТЕПЕНИ ПОЛИНОМА 20 INPUTЗАДАЙТЕ ЧИСЛО УЗЛОВ ИНТЕРПОЛЯЦИИ N=4 25 DIM X<H>,V<H>,Z<H:>>B<H>>G<H>>A<H,H>,C<HJ Ю,ТК2*Н> 30 FOR 1=1 TO H: PRINTI2.0!ВВЕДИТЕ X1.-VI 35 INPUT X<I>..V<I>: NEXT I! LET N=1 40 PRINTУКАЖИТЕ б-ЕСЛИ ЗАДАНА ПОГРЕШНОСТЬ ИНТЕРПОЛЯЦИИ 50 INPUT 1-СТЕПЕНЬ ПОЛИНОМА U:IF U=9 GOTO 80 -, 60 INPUTВВЕДИТЕ СТЕПЕНЬ ПОЛИНОМА М<Н M=N:GOTO 85 80 INPUTЗАДАЙТЕ СРЕДНЕКВАДРАТИЧНУЮ ПОГРЕШНОСТЬ Е1=Е1 85 LET N=N+ls FOR J=0 TO 2*N-l: IF J>N GOTO 95 90 LET B<J)=0 95 LET D<J)=9: NEXT Js FOR 1=1 TO Hs LET R=V<I)sLET F=l 105 FOR J=l TO 2*N-l: IF J>N 60T0 115 110 LET B<J)=B<J)+R: LET R=R*X<I> 115 LET D<J)=IKJ>+F: LET F=F«X<I)s NEXT Л NEXT I 120 FOR 1=1 TO NS LET K=U FOR J=l TO N 130 LET A<bJ)=D(K): LET K=K+l: NEXT Ja NEXT I 140 LET Hl=N-ls FOR K=l TO N1 150 IF ABS<A<K,K>>>8 SOTO 239 160 LETKl=K+l:FOR M=K1 TO Hi IF ABS<A<M>K>>=Q 60T0 210 190 FOR L=l TO N: LET U=A<K>L>: LET A<K,L)=A<M/L) 200 LET A<M/L)=U! NEXT L 210 NEXT M 220 LET U=B<K>s LET B(K)=B<M)! LET B<M>=U 230 LET 6(K)=B;K)/A<K^KV. LET K1=K+1 240 FOR I=K1 TO N: LET B(I)=B<I)-A<bK).«6<K> 250 FOR J1=K TO Ns LET J=N-J1+K: LET C<K, J>=A(K> JVA<Kf Ю 260 LET A<bJ>=A<bJ>A<bK>*C<:K> J)!NEXT J1:NEXT I a NEXT К 280 LET M=N! LET Z<M>=B<MVA<M,M> 290 LET M=M-li LET S=&: FOR L=M TO N1 300 LET S=S+C<M/L+l>«2a+l)! NEXT L 310 LET Z<M)=&<M>-S: IF MM 60T0 29Э 320 LET E=0s FOR 1=1 TO H: LET S=V<I>s LET R=1 330 FOR J=l TO N: LET S=S-R*ZC..i): LET «=Р*ХП>! NEXT J 340 LET E=E+S*S:NEXT I:LET E=SQR<E-4O: IF U=l 60T0 378 350 IF E=<E1 GOTO 370 360 IF N<H GOTO 85 370 PRINTСТЕПЕНЬ ПОЛИНОМА M=N-1 380 PRINTIF1.9!ПОГРЕШНОСТЬ ИНТЕРПОЛЯЦИИ E=E:IF U=l GOTO 39в 385 PR INTЕСЛИ Е БОЛЬШЕ ЗАДАННОЙ*УВЕЛИЧЬТЕ N И ПОВТОРИТЕ ВВОД 390 PRINT КОЭФФИЦИЕНТЫ ПОЛИНОМА 400 FOR 1=1 ТО N«PRINT!2.8!A<I-1>«!F1.9!Z<I>»NEXT I 410 INPUTВВЕДИТЕ X=X".LETQ=0sFOR I=N TO 2 STEP -1 428
LETQ=<G+2a>>*X:NEXT I:LET8=Q+Za> 430 PR INTЗНАЧЕНИЕ V<X> = Q!60T0 418:ENB
Пример. Используем пример, приведенЛинейное сглаживание по трем точкам ный к программе 5.24. Так, если задать реализуется с помощью следующих формул: Е= 1 10~6, программа (после примерно 1 мин - __кречета) выдаст: М = 2, £ = 0, Л(0)=3, УП—{Ьуо +zyi~y,)/Ь, Л(1)=0,4, Л(2) = —0,01 и К (А") =5,31 при №= (№-i+№ + y,+ i)/3, 1</<Л/—1, Х = 7. Время счета существенно больше, Уы= (5уы~\~2у1ч—\—Уы — г)/6, чем по программе 5.25, в связи с вычислением Е и автоматическим выбором степени где N — номер последней точки (ордина-полинома т. ты у,). Программа 5.27. § 5.7. Сглаживание Данных Пример сглаживания дан в табл. 5.2. ЭКСпеоимента Линейное сглаживание по 5 точкам проср си и водится с использованием формул Сглаживание данных эксперимента яв- __ »>//. ляется специальной операцией усреднения У_[ ^° ^У ~т~^У^-тУя)/10, с помощью интерполяционных полиномов, yi= (yi-2-\-y,-\ +(/, + (//+] -f(/, + 2)/5, обеспечивающей получение уточненного зна2<(</V__2 чения у, по заданному значению у, и ряду г. __/,. i» ^ 7~ У близлежащих значений (. . ., у,-,, у, у,+ 1 . . .), _"~* ~ <^-з+ 2^ известных со случайной погрешностью. Ун—(3</w + 2i/yv_i -\-Уы — ч 144
Программа 5.27. 10 PRINT!F1.Э!ЛИНЕЙНОЕ СГЛАЖИВАНИЕ ПО £0 INPUTВВЕДИТЕ НОМЕР ПОСЛЕДНЕЙ ТОЧКИ 30 PRINTBBEflHTE V в: INPUT А 40 PRINTВВЕДИТЕ V 1:INPUT В 50 PRINT-ВВЕДИТЕ V 2: INPUT С 60 PR I NT SV 8= <. 5*А+2*В-С > /6 70 PR I NT SV 1 = : A+B+C > ,-3 80 FOR 1=2 TO N-l:LETA=B:LETB=C 90 PRINT!3.0!ВВЕДИТЕ V I +1 = : INPUT 109 PRINT SV Г =!1.9! <A+B+C)^3: NEXT 110 PRINTI3.0!SVN=!F1.9!<-A 120 END
3 ТОЧКАМ N=N
С I
Таблица 5.2
Результаты сглаживания
по 3 и 5 точкам (N = 9)
линейного №
у, для
для yi сглажиУ вания
i
для
сглаж и-
точн
у, сглажиУ: вания
ое вания
значе
i
для
сглаж ивания
ние
>
по 3 точкам
по 3 точкам
. по
Ох
0
0,
0,97
5 точкам 0,992
1
5
2,
1,98
1,995
2
6
2,
3
3,063333333
2,998
3
7
4,
7,056666666
7,024
7
8,
8,04
8,004
8
3,99
4,038
4
8
9,
9
8,957
9
9,
9,825
9,91
10
05 4,
9
6,
15
15 4
*
6
92
92 ,
6,
5 точкам 5,973333333 6,044
1
12 2
у=Ю х
9 1
значе ние
у=1
по
точно е
5,05
4,998
5
9 8
Программа 5.28. INPUT С INPUT D INPUT E 18 PRINTЛИНЕЙНОЕ СГЛАЮИВЙННЕ ПО 5 ТОЧКАМ 2й INPUTВВЕДИТЕ НОМЕР ПОСЛЕДНЕЙ ТОЧКИ N=N 30 PRINT!F1.9!ВВЕДИТЕ V 0=:INPUT A 40 PRINTВВЕДИТЕ V 1=:INPUT В 58 PRINTВВЕДИТЕ V 2= 60 PRINTВВЕДИТЕ V 3= 70 PRINTBBEflUTE V 4= 8в PRINTSV 0=<3»:A+2*B+C-E).<5 30 PRINTSV 1 =<4*A+3*B+2*C+D >/10 100 PRINTSV 2=iA+B+C+D+E)/5 118 FOR 1=3 TO H-2 120 LETA=B:LETB=C:LETC=D:LETD=E 130 PRINT!30!ВВЕДИТЕ VI+2=:IHPUT E 140 PRINTSV Г = !Fl.9! <A+B+C+D+E).5 150 NEXT I 160 PRINTI3.0! SV"N-r= !F1.9! i.B+2*C+3*D+4*:E).18 170 PRINTI3.0! SVH= IF1.3!
180 END Контрольный пример см. в табл. 5.2. Нелинейное сглаживание по семи точкам обеспечивает усреднение на основе применения полинома третьей степени и реализуется применением формул г/о=(39уо + %|— 4 ((/2 + 1/3 — 1/4) +№ —2(/6)/42, у, = (8уо+ 19(/i + 16(/2 + 6i/3 — 4у4 — 7у5 + + 4(/7)/42, 2=(—4г/о
б)/42, ,_[) +3 -2
Ум - 2 = 0/л - 6 — 41/лг - 5 + 2(/д/ _ 4 + yN-\ = 121/лг _ з + -4г/л,)/42, — 41/W-
_1 +8(/л,)/42, — 41/лт-з — 1 +391/Л,) /42. !45 Программа 5.29. 10 PRINTНЕЛИНЕЙНОЕ СГЛАЖИВАНИЕ ПО 7 ТОНКИМ 20 INPUTЗАДАЙТЕ НОМЕР ПОСЛЕДНЕГО ОТСЧЕТА И=М 38 ШРиТВВЕДИТЕ ОТСЧЕТЫ V0/V1.. ./V6A>BrOD/E/F/6 40 PRINTSV 0=<39*A+8*B-4*C-4«l+E+4*F-2*6:>/42
50 PRINTSV 1 = <8*A+19*B+16*C+6*D-4»E-?*F+4*6V42 68 PRINTSV 2=<-4*A+16*B+19*C+12*Ii+2»E-4*F+6V42 ?0 PRINTSV 3=<-2*A+3»B+6*C+7*rj+6*E+3*F-2*6V21 30 FOR 1=4 TO N-3:LETA=B:LETB=C!LETC=D:LETD=E
90 LETE=F:LETF=6:PRINT!3.0!ВВЕДИТЕ V1+3=:INPUT 100 LETS=-2*A+3*B+6*C+7*B+6*E 110 PRINT!3.0!SVI= ! 1.9! <S+3*F-2*6V2l: NEXT I 128 LETS=A-4*B+2*C+12*D+19*E+16*?-4*b 130 PRINT!3.0!SVN-2=!F1.9! S/42 140 LETS=4*A-7*B-4*C+6*Ii+16*E+19«F+8s«6 150 PRINT!3.0!SVN-1=IF1.9! S/42 166 LETS=-2*A+4*B+C-4*B-4*E+8«F+39*6 170 PRINT!3.0!SVN = !Fl.9! S/42!END Контрольный пример см. в табл. 5.3, где представлены грубо заданной нелинейной функции
данные
сглаживания
Таблица 5.3
Результаты нелинейного сглаживания по семи точкам (iV 0,7 1,08 1,39 1,64 1,76 0,70114285714 1,08714286 1,385 1,624285714 1,79952381 Точное значение № = |п (1 + 2) 0,6931471806 1,098612289 1,386294361 1,609437912 1,791759469 1,99 2,04 2,22 2,28 2,42 1,950952381 2,073333333 2,191428571 2,302857143 2,412619048 Точное значение у) = \п (i + 2) 1,945910149 2,079441542 2,197224577 2,302585093 2,397895273
ГЛАВА 6 ВЫЧИСЛЕНИЕ СПЕЦИАЛЬНЫХ ФУНКЦИЙ § 6.1. Методы вычисления специальных функций Специальными функциями обычно называются функции, которые в общем случае нельзя выразить через элементарные функции. Большинство из них являются решениями дифференциальных уравнений специального вида и могут быть представлены в виде интегралов. Однако эти интегралы нередко являются несобственными и имеют особенности подынтегральной функции на пределах чли в промежутке между ними. В этой главе перечислены основные методы вычисления специальных функций. Решение порождающих дифференциальных уравнений позволяет найти ряд значений специальных функций при заданных начальных условиях. Для этого могут использоваться программы, описанные в § 4.10. При описании специальных функций далее приводятся порождающие их дифференциальные уравнения. Однако этот метод (особенно при вычислениях с заданной точностью) сопряжен с применением сложных программ. Если требуется вычисление значений специальных функций при произвольных или часто сменяемых значениях аргумента, этот метод может привести к недопустимо большим затратам машинного времени.
Вычисление специальных функций численным интегрированием является универсальным и достаточно эффективным методом. Для его реализации могут использоваться программы численного интегрирования, описанные в $ 4.9, 4.10. Следует учитывать, что в них аргумент подынтегральной функции обозначен черва X, тогда как у специальных функций возможно иное обозначение, например /. Следовательно, в этом случае 1 = Х. Подынтегральные выражения должны вычисляться по соответствующим подпрограммам (ввиду простоты тексты подпрограмм не приводятся). В целом программы вычисления специальных функций численным интегрированием достаточно громоздки и вычисления требуют значительных затрат машинного времени (в сравнении с изложенными ниже методами). Вычисление специальных функций по рекуррентным соотношениям является средством сравнительно быстрого получения численных значений нужных специальных функций. Примером может служить вычисление значений ортогональных многочленов в § 3.4. Однако этот метод применим при следующих условиях: имеются исходные значения функций или простые формулы для их вычисления, рекуррентный процесс является устойчивым (т. е. не недет к накоплению ошибок), число циклов вычислений ограничено разумными пределами. Вычисление специальных функций по их разложениям в ряд является в большинстве случаев наиболее удобным при машинных расчетах. Многие специальные функции имеют представления в виде сходящихся рядов. Вычисления должны вестись с контролем суммы членов ряда либо значений последнего члена (если есть гарантия, что они по модулю монотонно убывают) до тех пор, пока результат не будет получен с заданной погрешностью. Вычисление специальных функций по их аппроксимациям является, как правило, методом, обеспечивающим получение результата за минимальное время. В большинстве случаев аппроксимация получается путем разложения функции в ряд (например, Тейлора) с удержанием конечного числа членов, достаточного для вычисления значений функции с заданной точностью. Сокращение времени вычислений обусловлено предварительным вычислением входящих в члены ряда выражений, например факториалов, значений тригонометрических функций и т. д. Однако достаточно простые аппроксимации получаются, как правило, при погрешности вычислений, заметно превосходящей предельную для ПЭВМ. Кроме того, вид аппроксимации обычно не имеет ничего общего с видом функции и для описания аппроксимации приходится использовать большое число численных констант с большим числом цифр. Поэтому вычисления по аппроксимациям следует рассматривать как дополнение к другим методам вычислений.
§ 6.2. Интегральные показательные функции Интегральная показательная функция exp (—xt) £„(*)= EN (Х)=Л t" -dt 147 вычисляется с помощью рекуррентного соотношения Е„+| (х)= — [е- — хЕп (х)\, п== 1,2,3,..., при £о (х) =ехр (—х)/х и с помощью функции £i (х), вычисляемой разложением в ряд:
Е,(х) = -у-\пх-£ (-\ух/1-П, где -у = 0.57721156647 — постоянная Эйлера. Программа 6.1.
05 PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ EN<K> 10 INPUT ВВЕДИТЕ Н=Н 20 INPUT ВВЕДИТЕ N=H 30 INPUT ВВЕДИТЕ Х=Х 40 LETK=EXP<-X>:LETE=K/X 50 IF H>0 THEN 70 60 PRINT E0<X>=E:&OTO 30 78 LETP=1:LETR=15LETS=0:LETI=0 80 LETI=I + l!LETP=<-X:>*P:LETR=I*R 85 LETC=P/<I*R>: LETS=S+C 90 IF ABS<C>>H THEN 80 100 LETE=-S-.5772156647-L0G<X> 110 FOR 1=1 TO N-l:LETV=<K-E*XVI 120 LETE=Vs NEXT I 13@ PRINT EN<X)=E:GOTO 30:END Пример. Для x = 0,5 имеем Eo (0,5) = = 1,213061319, £, (0,5) =0,3266438565, Ew (0,5) = = 0,0634583004. Интегральная показательная функция Ei (JC) =EI (X) = — vp exp ( —<)
Ei (0,5) =0,5597736065,
t
dt, x> 0,
Программа 6.3. 05 PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ AN<X>* 10 INPUTВВЕДИТЕ N=N 20 INPUTВВЕДИТЕ Х=Х 38 LETK=EXP<-X)!LETA=K/X 40 IF N>8 THEN 50 45 PRINTAN<X>=A:GOTO 20 50 FOR 1=1 TO N:LETA=<R+I*AVX 60 NEXT IsPRINT AN<X)=A 70 &OTO 29:END Пример. Для х = 2 получим oto (2) (x) = BN (X) =
0,0676676416 и а6 (2) =5,99497344. Функция
Ге~ dt, л = 0, 1,2,.. вычисляется разложением в ряд вычисляется по рекуррентной формуле P» (*) = [(-1)"е*-е* + пр„_, (х) ]/x при po(x) = (e* — e~x)/x. Программа 6.4. 05 PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ BN<X) 10 INPUT ВВЕДИТЕ N=N 20 INPUT ВВЕДИТЕ Х=Х 30 LET K=EXP<X):LETB=<K-1/K)/-X 40 IF N>0 THEN 50 45 PRINT BN<X>=B:GOTO 20 50 LETR=l:FOR 1=1 TO N:LETR=-R 60 LETB=<R*K-a-K)+B*I)/X 70 NEXT I: PRINTBN(X)=B 80 GOTO 20:END Пример. Для х = 4 получим ро (4) = = 13,6449586, p, (4.) = -10,24287677, p3 (4) = = -7,261476257.
§ 6.3. Интегральные синус и косинус Ei (х)=
Программа 6.2. 85 PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ ЕКХ> 10 INPUT ВВЕДИТЕ Н=Н 20 INPUT ВВЕДИТЕ Х=Х 30 LETP=l:LETR=l:LETS=0:LETN=0 40 LETN=N+l:LETP=P*X:LETR=R*N 50 LETC=P/<N«R>:LETS=S+C 60 IF OH THEN 40
70 LETV=S+.57?2156643+L06<X> 80 PRINT EI(X)=V 90 GOTO 20: END Пример. Для х = 0,5 получим Ei (0,5): 0,4542199049. Функция а„ (x) =AN (X)= \ t"e-" dt,
n = 0, 1,2,... l
вычисляется по рекуррентной формуле при an (x) =e~"/x. 148 Интегральный синус х
Si (x) =SI (X) =\ —-—dt вычисляется разложением в ряд Si (x)== (2n Ряд прерывается, если абсолютная величина последнего члена становится меньше 8 = 9
= ыо- . Программа 6.5.
05 10 20 30 40 50 60 70
PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ SKX) INPUT ВВЕДИТЕ Х=Х LETB=X:LETC=X LETD=-<X"2)/-2."LETI=0 LETI=I + l:LETE=<2»cI + l>-2 LETB=<<2*I-i:>*D«B:>/aii€> LETC=C+B: IF АВ8<В>< 1Е-9 THEN 80 GOTO 40
80 PRINT SKN> = C:GOTQ 10:END Пример. Для х = 0,1 получим Si (0,1) = = 0,0999444611, а для х= 10 получим Si (10) = = 1,658347594.
Интегральный косинус Ci (х)= затем формулы Стирлинга COS /— 1
dt о
вычисляется разложением в ряд — \)п хгп
а (х) =v+in 2п-(2л)! . Программа 6.6. 85 РШНТВЫЧИСЛЕНИЕ ФУНКЦИИ СИХ) 18 INPUT ВВЕДИТЕ Х=Х 28 LETS=X"2:LETI=8:LETA=8 38 LETB=l:LETC=l
40 LETI=I+l:LETD=2*I 50 LETC=<D-1>«D«<:-C>: LETB=B*S 60 LETE=B/<C*D>:LETA=A+E 78 IF ABS<EKlE-9 THEN 90 30 60T0 40
90 PRINT СКХ> = А+.5772156б49+1_0&СЮ 100 GOTO 10: END
Пример. Для х=1 получим Cj(l) = = 0,337403923. Вычисление Si (x) и Ci (x) численным интегрированием целесообразно лишь при малых значениях х. При больших х> 8 существенное уменьшение времени вычислений достигается при использовании асимптотических выражений [36].
§ 6.4. Гамма-функции (включая неполные) Гамма-функция Г (х)=Т (Х)=\ dt о
является одной из наиболее распространенных специальных функций. Поэтому целесообразно рассмотреть различные алгоритмы ее вычислений. Для —18<х<49 с погрешностью порядка 1-10 s Г (х) может быть вычислено с помощью 20-кратного преобразования по формуле Г (х-\- 1) =хГ (х) и с применением Программа 6.7. (6.1) Такое преобразование необходимо для уменьшения погрешности (6.1). Алгоритм вычисления Г (х) при этом следующий. 1. Вводим х и полагаем Z = x, X — Z и /4 = 1. 2. Вычисляем Z/-<-Z/_\ (X-\-I), где / = = 1, 2, ..., 20. 3. Полагаем В = Л + 21 и вычисляем .G = exp(B(lnB-l) + l/(12B)) V2S7ZT/ZJ0. Программа 6.7. Пример. Для различных х получаем Г ( — 1,5) =2,363272685 (2,363271801), Г (—0,5) = —3,544908843 ( — 3,544907702) Г (1,5) =0,8862271413 (0,886226926), Г (40) = = 2,039788231 10 46 (2,039788208- 104Й): В скобках указаны точные значения Г (х). Более высокую точность при — 10<х^70 имеет метод, в основе которого лежит следующий алгоритм. 1. Вводим х = Х и задаем А=А — \. 2. Полагаем Z = A — 64. 3. Если Z<0, идем к п. 4, иначе задаем D = 1 и идем к п. 6. 4. Вычисляем В= lint (2^1)1 и полагаем С = А, А=А+В и 0=1. 5. Находим где / = В, В—1, 5 — 2.....2, 1. 6. Вычисляем О = Г (х) по формуле Стирлинга в следующей ее модификации.: /А\А
При этом алгоритме формула Стирлинга используется при аргументе, значения которого превышают 64, что дает меньшие погрешности. Однако при х< —10 корректи-D<\ 10"" и ему, как приписывается нулевое рующии множитель и значению Г (х), значение. Программа 6.8. Пример. Г ( — 1,5). 2,363271825, Г (— 0,5) = — 3,544907737, Г (1,5) = = 0,8862269342 и Г (40) =2,039788229-1046. 10 PRINTВЫЧИСЛЕНИЕ ГАММА-ФУНКЦИИ Г<Х> 20 INPUTВВЕДИТЕ X=Z:|_ETX=ZiLETA=l
30 FOR 1=1 ТО 20 40 LETZ=Z»<X+D:NEXT I 58 LETB=X+21 68 LET6=EXP<B*aO&<B 78 PRINTЗНАЧЕНИЕ Г<Х)=б!бОТО 20:END
Программа 6.8.
18 28 30 48 58 68
PRINTВЫЧИСЛЕНИЕ ГАММА-ФУНКЦИИ Г<Х) INPUTВВЕДИТЕ X=X:LETA=X-i:LETZ=A-64:IF 2<8 THEN 48 LETD=l:GOTO 68 LETB=ABSaNTCZ-i>:>:LETC=A:LETA=A+B:LETD=l:FOR I=B TO 1 STEP -1 LETC=C+l:LETIi=D-C:NEXT I LET6= < < A/EXP < 1 >) "A > жЕХР < 1 - 12/ А У «SQR < 2«#P I ж А ) *D
78 PRINTT<X) = 6:G0T0 28:EHD t49 Наименьшее время вычислений обеспечивает алгоритм, основанный на аппроксимации Г (х) на отрезке [0, 1] степенным полиномом. 1. Из аргумента В=!х| последовательно вычитаем 1> для того, чтобы В попал в отрезок [0, 1]. Одновременно подсчитываем произведение D = B(B—1) (В--2) ... (В — — К), где К — число вычитаний 1 из В. 2. Если х~> 0, вычисляем Г (х) по формулам Y = B — K, F=r (К+1) = = (((((((0,035868343К - 0,193527818) Y + + (0,482199394) Y — 0,756704078) Y + + 0,918206857) Y — 0,897056937) Y + + 0,988205891) Y - 0,577191652) Y + 1, Г (X)=DF/X. 3. Если х<0, вычисляем Y и F по п. 2 для |*|, после чего находим л Г(х)=- я sin лх Г (х— 1) Программа 6.9. sin лх DF Пример. \|> (1,5) =0.03648992674, if (50) =3,901989672. Неполные гамма-функции задаются соотношениями Y (о, х) =Р (а, х) Г (а) =$
dt. (6.2) Г (а, д-) = Г, (а) — у (а, г) =\ eta- dt, о у* (а, х) =х"Р (а, х) =* ""у (а. *)/Г {а). В качестве основной можно выбрать функцию у(а,х), легко вычисляемую разложе-
Ш PRINTВЫЧИСЛЕНИЕ ГАММА-ФУНКЦИИ ГОО ПО АППРОКСИМАЦИИ 28 INPUTВВЕДИТЕ X=X:LETB=ABSCX>:LETD=1 30 IF B<=1 60T0 50 40 LETD=B*B:LETB=B-l:60TG 30 50 LETF=<<.035868343*B-.193527818>жВ+.4821Э9394>жВ 60 LETF=<<<F-.?56704078)*B+.918206857)*B-.897056937)*B 78 LETF=<<F+.988205891)*В-.577191652)жВ+1 80 LET8=F*D-K: IF X<6 GOTO 180 90 PRINTГЧХ> = 6:60Т0 20 100 LET6=#P I /ZIN ( #P I *X!) /I)/F i 60T0 90: END . Пример. Р (— 3,2) = 0,6890562856, Г (-2,5) = -0,9453086453, Г (2) = 1, Г (0,5) = 1,772453992 и Г (50) =6,082818641 X X 10 . Погрешность вычислений в этом методе не превышает 3-10~7. Логарифмическая производная гамма-функции (диагамма-функция) * {x)=~[\nV (х)} с погрешностью менее 2-10~5 для х> 20 может вычисляться по асимптотическому разложению г|> (х) = 1п х — 1 / (2*) — — 1/(12х2)+ ... С помощью рекуррентной формулы г|) (дс+1) =ч|) (*)+ 1Д значения г]) (х) при х<20 можно найти, вычисляя г|) (х + 20) и последовательно применяя эту формулу в направлении уменьшения х. Программа 6.10. нием в ряд (х\ У (а, х) = г 0, а>0) -Ьб/v +1
] где /V = iпt (2x + 8) и 0^+1 —корректирующий член. Зная у (о, х) и Г (а), можно вычислить любую другую из приведенных неполных гамма-функций. Вычисление у (а, х) реализуется программой 6.11. Программа 6.11. Пример. у (2; 8) =0,9969825948, у (0,5; 1) = 1,493648313. Неполная гамма-функция у (а, х) может вычисляться также численным интегрирова18 PRINTВЫЧИСЛЕНИЕ ЛОГАРИФМИЧЕСКОЙ ПРОИЗВОДНОЙ 15 PRINTГАММА-ФУНКЦИИ IKL06 ГОО^ВХ 28 INPUTВВЕДИТЕ Х=Х:IF X>28 THEN 48 38 LETC=20+<X-INT<X>)s6OTO 58 48 LETX=X+1!LETC=X 58 LETA=l/2/C:LETA=-A«A-3-A+L06CC) 68 LETC=C-liLETA=A-l/C 78 IF X<C THEN 68 88 PRINTЗНАЧЕНИЕ IK LOG Г<Х>)/-ЦХ= А 98 &0T0 20 s END
Программа 6.11. 18 РР1НТВЫЧИСЛЕНИЕ НЕПОЛНОЙ ГАММА-ФУНКЦИИ &СЙ,Х> 28 INPUTВВЕДИТЕ А.-Х ftjX:LETB=INT<2«X+9>sLETV=B 38 FOR I=B TO 1 STEP -ULETV=V*X/< I+A> + 1:NEXT I 48 LETG=V«EXP (. -X) *X"A/ A: PR I NT 6 < A> X) = b: 60T0 28: END
150 нием — см. формулу (6.2). Так, используя программу 4.42 численного интегрирования методом Гаусса и задав а = 2, В=х = 8, Л=0 и /И = 8, получим у (а, х) =0,9969832028 при ^сж20 с.
§ 6.5. Функции Бесселя (включая
модифицированные)
Функции Бесселя являются решениями линейного дифференциального уравнения второго порядка dx
ы
14
т-Н---------:-----
х dx
2
1--<О = 0.
Здесь v — порядок функции. Функции Бесселя могут быть первого /±, (х), второго Y±v (х) и третьего Н±у (х) родов. Они связаны следующими соотношениями: Yv (*) = (/» (х) cos (vn)—/_v (x))/sin (\>л), (6.3) Н\л (x)=Jv (x)±/Tv U). Соотношение (6.3) справедливо при дробном порядке v. При целых v оно заменяется предельным переходом. Решениями дифференциального уравнения dx2 х dx являются модифицированные функции Бесселя /„ (х) и К, (х): Я
/_v(x)-/v(x)
К, (х) =(6.4)
sin (\л) Функции Бесселя первого рода /„ (х) и /„ (х) при целом порядке v = n (n = 0, 1,2,...) могут вычисляться разложениями
«"-(т
) Етщ (х2/4)
в
ряды
~2 Ряды для /„ (х) и /„ (л:) различаются лишь знаком у члена (х2/4). Это позволяет вычислять данные функции по одной программе. Программа 6.12. Пример. /о (0,5) =0,9384698072, /зо (20) = 1,240153633-10~4, /,, (2) = = 2,279585302 и /, (2) = 1,590636855. Функции Бесселя Jv (x) и /v (x) при дробном порядке v вычисляются по следующим разложениям в ряд: /v (X) = 2
(-х /4) A:I г ЮГ Для вычисления функции Г (v + /C+ 1) = = Г (v) -v (v+1) (v + 2) ... (v + AT) должна использоваться часть программы для вычисления гамма-функции, например, по аппроксимации. Вычислив функции /±v (х) и /±v (x) по формулам (6.3) и (6.4), находим функции Бесселя второго рода Yv (x) и К,(х). Программа 6.13. Пример. Для v = 1/= 1 /3 и х=1,5, задав код 0, получим Г (v) =2,678938244, /v (x) =0,6371327061, Г (—v) = —4,062354258, /_„ (х)= 0,2348995028 и Vv (x) =0,09661015701. Задав код 1, получим /v (х) = 1,501429163, /_„ (х) = 1,62280812 и A"v (x) = 0,2201570763. Вычисление функций Бесселя Yv (x) и Kv (x) при целых v = n невозможно. На практике приближенные значения этих функций можно найти, задав v = rc + o, где 6 — малая величина (6?^ 1 10 J-=-1 10~4). Результат можно уточнить, взяв среднее при v = = я-|-6 и v = n — 6. Следует отметить, что при v^0 значения х^С9 для функций /v (x), при этом погрешность вычислений не превышает 2-10~5 (с ростом v диапазон значений х расширяется и при v= 100 х<50). Погрешность вычисления У,, (х) и К„ (х) выше; например, в приведенном примере Yv (x) верны 4 цифры после запятой. Частными решениями дифференциального уравнения dt2
л = 0, ±1, ±2 ,. .,
95 18 2в 39 40 60 70 80 90
PRINT ВЫЧИСЛЕНИЕ ФУНКЦИЙ JN<X> И IN<XV INPUT ВВЕДИТЕ -1 ДЛЯ JN<X) ИЛИ 1 ДЛЯ IN<XVZ INPUT ВВЕДИТЕ N=H INPUT ВВЕДИТЕ Х=Х LETS=9: LETA=1 50 IF N<=1 THEN 78 FOR 1=1 TO N: LETft=ft*l: NEXT I LETV=<X-2)I2: LETI=0: LETB=1 s LETC=l t LETR=1 LETI=I+i:LETB=I»B: LETC=<N+I>*C LETR=Z«R: LETE=(V"I>*R^B/C! LETS=S+E
100 IF ABS<E)>lE-9 THEN 80 110 LETJ=a+S>*<<X/2>~NVA
120 IF Z>0 THEN 148 130 PRINT JH<X)=Js GOTO 39 140 PRINT IN<X>=J: 60T0 30:ENB 151 Программа 6.13. 10 PRINTВЫЧИСЛЕНИЕ ФУНКЦИЙ БЕССЕЛЯ 15 PRINT .JU«O»VU<X)/IU<X)^KU<X> 28 INPUT0 ДЛЯ JU<X>>VU<X> И 1 ДЛЯ IV<X)>KU<X> ?К 30 INPUTВВЕДИТЕ ПОРЯДОК ФУНКЦИИ Ц=К) 40 INPUTВВЕДИТЕ АРГУМЕНТ ФУНКЦИИ Х=Х 58 LETW=X*X/4:IF K=0 THEN !_ЕТЫ=-Ы 60 60SUB 200:LETJ=F 70 PRI NTЗНАЧЕНИЕ ГАММА-ФУНКЦИИ 6<U) = 6 80 IF K=l THEN 108 90 PRINTJU(X>=J:60T0 110 160 PRINTIU<X)=J 110 LETU=-V:60SUB 200 120 PRINTЗНАЧЕНИЕ ГАММА-ФУНКЦИИ Г(-Х)=6 130 LETA=-U*#PI:IF K=l THEN 170 140 PRINTJ-O<X>=F 150 LETV=J*COS<AVSIN<A>~F-"-SIN<A> 160 PRINTVU<X>=Vi60T0 40 170 PRINTI-U<X)=F 180 LETK=#PIi«c;F-J)/2/SIN<A) 190 PRINTKU<X>=Ks60T0 40 200 LETB=ABS<U>:LETD=1 210 IF B<1 THEN 230 220 LETD=B*B!!_ETB=B-l:SOTO 210 230 LETF=<<.035868343*B-.193527818)*B+.482199394>*B 240 LETF=(< СF-.756704878 >*B+.918206857 > *B-.897056937 > *B 250 LETF=<<F+.988285891>*B-.57?191652>*B+1 260 LETS=F*DAJ: IF U>=0 THEN 280 270 LETG=#PI/-SIN<#PI*UVB-F 280 LETF=1/G/U!LETR=F:LETI=0 290 LETI = I + l:LETR=R«W/-I/<U+I)!LETU=F 360 LETF=F+R:IF ABSCF-U><>0 THEN 290 310 LETF=F*<X/2>"U:RETURN!ENB являются сферические функции Бесселя Пример (в скобках указаны точные первого рода значения). /0 (2) =0,4546487134 (0,45464871), /8 (Ю) =0,1255780237 (0,12558), /щ(1) = г-------------
/„ (х)=^л/(2х) /„+1/2 (х), =7,11655264-10-" (верны все цифры), второго рода |/о (1) = - 0,5403023059, у, (2) = . . IK-JTO-^V ,^ =-0,7339914247, уи>(5) = -26,6561144. Вреу„ (х) =-^Ы/(2х) Г„+,/2 (х) мя счета от з до & с. и третьего рода Функции Бесселя могут вычисляться также _____ по их аппроксимациям степенными полиноhn (x) =т/2л/(2х) Яп + 1/2 (х). мами (см. [36]). Однако программы вычис„ , „ ления при этом получаются громоздкими Н Эти функции можно найти по программам, одновреиз.за не обходимости Применения вычисляющим функции /, (х) и У, (х) при менно нескольких полиномов ПрИ изменении v = «+ 1/2. Вычисления облегчаются тем, что аргумента х от 0 до оо. при этом достаточно располагать известным значением Г (1/2)=д/л. Программа 6.14. 18 PRINTВЫЧИСЛЕНИЕ СФЕРИЧЕСКИХ ФУНКЦИЙ 20 PRINT БЕССЕЛЯ J<N,X> И VW,X) 30 INPUTВВЕДИТЕ X=X:LETA=1 40 INPUTВВЕДИТЕ N=W 50 FOR N=0 TO W:LETA=A/<2i«N+lJ!HEXT N 60 LETS=1:LETC=0:l_ETD=-X*X/2:LETF=l 70 LETC=C+1:LETB=B*C:LETE=2»C+l 80 LETF=F*D/C^(2»sW+E):LETU=S 90 LETS=S+F!IF ABSCS-U)<>0 THEN 70 180 LETJ=A*S*X"W:PRINT!Fl.9!J<N/X)=J 118 LETA=l:FOR N=8 TO U 120 LETA=A»<2*N-1):NEXT N 130 LETS=l:LETC=8:LETF=l 148 LETC=C+1: LETE=2«C-1: LETF=F*D/C/-<E-2*U> 158 LETU=S:LETS=S+F:IF ABS<U-S><>9 THEN 140 160 LETV=A*S,-4X"CI»)+i:OSPRINTV<NfX) = V 178 60T0 288 END 152
§ 6.6. Функции Эйри Решению дифференциального уравнения d\o -------------ХО) = 0
удовлетворяет пара независимых решении А; (А) И S, (,v), являющихся функциями Эйри. Функции Эйри могут вычисляться разложением в степенные ряды A, (x)=c,f (x)-c2g (х), B, (х)=73 [cif (x)+C2g ML 1-4 6! ;-4-7 "9! Для вычисления С (дг) можно применить программу 4.42, вписав в нее подпрограмму вычисления подынтегральной функции cos (л/2/2) при ( = Х. Задав А=0, В = х — = 2 и /И = 8, получим С (2) =0,4882522862 при точном значении 0,4882534. Для вычисления S (х) также можно использовать программу 4.42. Задав /1=0, В = х = 2 и М = 8, получим S (2) =0,3434145829 при точном значении 0,3434157. При х<3 для вычисления С (х) и S (х) могут использоваться следующие разложения в ряд: С (х) = 2 IT 7!
2-5-8 10! 11
+
где с, =0,355028054, с2 = 0,258819404. Поскольку для х<0 члены рядов оказываются знакочередующимися, х< —7 сходимость их резко ухудшается. Программа 6.15. При х> 3 эти ряды плохо сходятся и для вычисления С (х) и S (х) целесообразно 18 PR INTВЫЧИСЛЕНИЕ ФУНКЦИЙ ЭЙРИ Й1ОО И ВКХ) 20 INPUTВВЕДИТЕ ПОГРЕШНОСТЬ Е=Е 38 INPUTВВЕДИТЕ Х=К:LET1=0 48 LETF=1:LETK=1:LETL=X"3s LETJ=1:LETR=1 50 LETI=I+3: LETK=K«L*J! LETt1=F: LETR=R*I*K 1-1 )*( 1-2) 60 LETF=F+K.R:LET.J=J+3:IF ABS<F-lt)>E THEN 50 79 LET 1 = 1:LETG=1:LETK=1sLETR=1 80 LETI=I+38LETK=K*<I-2>*L!LETM=G(«LETR=R*I*a-l>*<I-2> 98 LET6=b+H>R: IF ABSO3-M)>E THEN 88 108 LETG=6*K:LETC=.355028854sLETH=.258819484 118 LETA=C*F-D*6: LETB= <C*F+D*6>«SQR<3> 128 PJJINTAKX)»As PRINTBKX) = Bs GOTO 38: END Пример. При погрешности Е=1-10 6 получим А, (1) = 0,1352924154, В, (1) = = 1,207423594 (fc«3 с), А, {-5) = = 0,3507610391 — 5) = —0,1383692054
использовать асимптотические приближения 1 , sin (лх2/2) / С (х) =т-
§ 6.7. Интегралы Френеля
Интегралами Френеля называются интегральные функции ^I2)dt, S(x) =
3
при
и В, (
Они могут cos (ЛА-2/2) cos (лх2/2) cos (ЛА-2/2) 1— (лх2)2 3 1—
вычисляться
непосредственно численным интегрированием.
5
Погрешность Программа 6.16.
вычислений
не
превышает 5/(л4х7), что при х^4 дает не менее 5 верных знаков после запятой.
05 PRINTВЫЧИСЛЕНИЕ ИНТЕГРАЛОВ ФРЕНЕЛЯ С<Х> И SCXV 10 INPUT ВВЕДИТЕ X=XsLETA=#PI*X"2 20 IF X>3 THEN 150 30 LETS=0 s LETC=0s LETN=0 s LET2=-1s LETR=1 40 6OT0 88 50 IF N>1 THEN 70 60 LETR=2s GOTO 80 70 LETR=R*2«N*<2*N-1)
153 80 LETZ=-2: LETY=4*N 98 LETB=Z*U#PI/2>42*N>>*<X"Y>/R 100 LETD=B^<4i«N+l)! LETC=C+D US LETE=B/C4*N+3>/<;2«N+D: LETS=S+E 128 LETN=N+l:IF ABS<IO>1E-10 THEN 50 130 LETC=CSKX: LETS=S*#PI*or3>/2 140 PRINTC<X>=C:PRIHTS<X>=S:&OTO IS 150 LETE^SINCA^JO/ftPI-Xs LETF=CC0S<ft/2>>/#PI-X 160 LETK=l-3/4ft~2>s LETL=l-5/4A"2> 170 LETC=.5+E*K-F*UA 180 LETS=.5-F*K-E*L/ft:60T0 140:END Пример. С (0,2) =0,1999210576, S (0,2) = = 0,004187609162 (4 «6c), С (2) = = 0,4882534059. S (2) =0,3434156788 (время счета «20 с), С (4) =0,4984199894, S (4) = = 0,4205170154 (время счета менее 2 с).
§ 6.8. Эллиптические интегралы Полные эллиптические интегралы первого К (т) и второго Е (т) рода определяются как я/2
К (т)= о я/2
Е (т)= ) (l-msin-e)l/2d0 о и могут вычисляться непосредственно с помощью численного интегрирования. Для вычисления К (т) можно использовать программу 4.42. Задав т=1/2, Л==0, В = л/2 и М =4, получим К (1/2) = 1,854074665 при точном значении 1,8540746733 и *с«15 с. Вычисление Е (т.) также выполняется численным интегрированием. Задав т=1/2, Л=0, В = л/2 и М = 4, получим £(1/2) = = 1,350643882 при точном значении 1,350643881. Эллиптические интегралы К (т) и Е (т) могут вычисляться также по их разложениям в ряд:
£)"+]
/ 1-3.5\2 т3__ V2-4-6; ~5
Пример. К (0,1) = 1,612441349 (/с»6с), К (0,5) = 1,854074676 (4«20 с), Е (0,2) = = 1,489035058 (tc«9 с). С погрешностью менее 2-10~8 полные эллиптические интегралы К (т) вычисляются с помощью полиномиальной аппроксимации [36]: К (m) = ((((a4mi+a3) т^+аъ) mt+a,} m,+ -T-ao) + ((((fe4/ni+63) т,+й2) m, + ft|) m,+ + fto) In (1/т,), где а, =0,44325141463, а2 = 0,0626060122, а3 = = 0,09666344259; а2 = 0,03590092383; а3 = = 0,03742563713; а4 = 0,01451196212; 60 = = 0,5; и, =0,12498593597; Ьг = 0,06880248576; Ьъ = 0,03328355346; 64 = 0,00441787012. Аналогично Е (т) = ((((a4mi+a3) т,+а2) т,+ Программа 6.17. + 6i) m. In (1/m,), где а, =0,44325141463, а2==0,0626060122, а-) = = 0,04757383546, а4 = 0,01736506451, 6i = = 0,24998368310, й2 = 0,09200180037, 6,= = 0,04069697526 и ЬА = 0,00526449639. Программа 6.18.
Пример (в скобках даны точные значения). К (0,1) =1,612444^352 (1,612441349), Е (0,1) = 1,530757641 (1,530757637), К (0,9) = = 2,578092105 (2,578092113), Е (0,9) = = 1,104774722 (1,104774733), Неполные эллиптические интегралы
=^ (I— о Е(<р]т)=\ (1 —msin2e)l/2d6 о
также могут вычисляться по программам численного интегрирования. В этом случае полагают В = <р. 01 05 10 20 30 35 40 45 50 60 70 80
PRINTВЫЧИСЛЕНИЕ ПОЛНЫХ ЭЛЛИПТИЧЕСКИХ ИНТЕГРАЛОВ К<Н> И Е<М> INPUTИНТЕГРАЛ ЭЛЛИПТ. КАКОГО РОДА 1 ИЛИ 2 ?С INPUTВВЕДИТЕ И=М! LETI=@ LETA=l: LETB=l: LETS=l: LETR=1 LETI=I + l: LETA=A*<2*I-l>si_ETB=B*I*2 IF C=l THEN 45 LETC=-1/42*I-1> LETR=M«R:LETD=C*R*<A/B)"2 LETS=S+B: IF ABS<B>>lE-9 THEN 30 LETK=#PI*S/2:IF C=l THEN 80 PRINTE<M>=K8 GOTO 10 PRINTK<M)=K: 60T0 10s END
154 Программа 6.18. 10 PRINTВЫЧИСЛЕНИЕ ПОЛНЫХ ЭЛЛИПТИЧЕСКИХ ИНТЕГРАЛОВ К<М> И Е<М> 15 PRINT С ПРИМЕНЕНИЕМ АППРОКСИМАЦИИ 28 INPUTВВЕДИТЕ Ж = 1 M=M:LETH=1-M 30 LETK=<<.S1451196212*М+.83742563713)*М+.03598092383>жМ 35 LETKXK+. 09666344259>*М+1.38629436112 49 1_ЕТЫ= С 88441787012*М+. 03328355346 >*М 45 UETU=<<U+.86880248576>*M+.12498593597>*Н+.5 5в LETK=K+W«L06<l^M):PRINTK<:M> = K 66 LETE= <.81736506451*М+.64757383546>*М 65 LETE=<<E+.8626868i22>i«M+.44325l4l463>*M+l 70 LETW=(.8e526449639*M+.84069697526>*M 75 I_ETW=<<W+.89230188037>*M+. 2499836831 >*М 88 tETE=E+W*L06(l^M):PRINTfE<:M>=E:6iOT0 28sEND
§ «.?!. Функции . Струве, лнгерз и Вебера Функции Струве Н, (х) входят в общее решение oa = a/v (х) + bYv (х) + Я, (х) дифференциального уравнения второго порядка вида d2(a
17 du>
~~dT
4 (JC/2)VH
ул Г (v+1/2) Функции
Hi (x)
вычисляются разложением в ряд [42]:
+
r(v-+-3/2) 3-(2v
3)-(2v+5)
Модифицированные функции Струве L-, (л) = == — /е~"Л/2Я>. (jx) можно разложить в ряд
вида
,
U (x) = — (x/2y T(v+3/2)
1+ 3-(2v
+3-5- (2v + 3) (2vТаким образом, разложения в ряд Яv (х) и Lv (х) различаются лишь тем, что члены в квадратных скобках у ряда Hv (x) знакочередующиеся, а у ряда Lv {х) — с одним Программа 6.19. знаком. В программу для вычисления этих функций нужно включать фрагмент, вычисляющий 1" (v+1,5), например, по аппроксимации гамма-функции полиномом. Программа 6.19.
Пример. Погрешность £= 1 10~7, Я, (5) =0,8078118816, Но (0,5) =0,30955589, Я_8 (4) = -8,249323233, L, (0,5) = = 0,05394217833 и L^ (6) =3,327822061. Функции Струве могут вычисляться также с помощью численного интегрирования с применением интегральных представлений (Rev> -1/2):
Я, (х) = _ А
(
/Л Г V + /2) U ) (х ~~ 2
( х/2) sin (xt)dt, п/2
2 (х/2у 1
v
2v
sh (x cos 9) sin 0
Однако и в этом случае необходимо вычисление гамма-функции Г (v + 1/2). Функции Ангера /„ (х) имеют интегральное представление вида л
yv (х) =—I cos (v6 — xsin 6) dd. При целом v = n Jv(x)=] n(x). В общем
16 PRINTВЫЧИСЛЕНИЕ ФУНКЦИЙ СТРУВЕ HUOO И LU<X) 15 INPUTВВЕДИТЕ В ДЛЯ HU<X) И 1 ДЛЯ UKX) К 28 INPUTВВЕДИТЕ U>X =U»V:LETA=V*ViIF K=S THEN LETA=-A 30 LETX=U+1.5:LETH=1s LETI = 1:LETJ=1 40 LETB=ABS<X):LETD=1 50 IF B<1 THEN 70 68 LETB=D*BsLETB=B-l:60T0 58 7в LETF=<<.035868343*6-.. 193527818>*6+.482199394)«B 89 LETF=C С (.F-. 756784078)жВ+. 918286857>*B-. 897056937)*B 90 LETF=<<F+.988205891>*B-.577191652)*B+1 100 LET6=F*D/XiIF X<8 THEN LET&=#PI/SIN<#PI*X>/D/-F 110 LE TI = I +2: LETH=H*A/1 / < 2*U+1 >: LETW=J 120 LETJ=J+H!IF ftBS<J-W)>=lE-18 THEN 118 138 LETW= < <4/Z>"<M+1) >SK2«J-CI/SQR<#PI) 140 IF K=l THEN 160 150 PRINTHV<X)=W:60T0 28 160 PRINTUKX> = W:GOTO 28:END 155 случае функции Ангера удобно вычислять с помощью численного интегрирования. Так, для v=l, /1=0, В = л, л- = 0,5, М = 4 получим /, (0,5) =0,5844468394 при tcfnl0 с. Аналогичным образом несложно организовать вычисления функций Вебера Ev (х) = x sin 0) dQ.
§ 6.10. Гипергеометрические функции Гипергеометрические функции F (а, Ь, с, х) являются частным решением дифференциального уравнения Они могут вычисляться с применением следующего ряда:
F (а, й, с, х) ~1 + N I У—1
ш (1+/) где N = 22, 6,v+i — поправка. Значения |л:|<1,с#0, —1, — 2, . . . При 0< (а, й)<с и — 0,1<!х^0,8 погрешность б<5-10~2, но обычно существенно ниже. Программа 6.20. решение U (а, й, х) = F (а, Ь,х)
sin nb \ Г (1+а + 6) -I1 (й) ,,,_„ F (\+а-Ь, 2-6, х) | Г (а) -Г (2-й) С Вырожденная гипергеометрическая функция F (а, Ь, х) вычисляется разложением в ряд
F (а, Ь, х) = 1 + У | (i+i)(b + j) J +
-е /V+1,
дающем при N = 22 погрешность 6<1-10~4 для 0<а<6 и —5<*<10. Программа 6.21. П р и мер. F (1; 1; 0,5) = 1,648721721 при точном значении 1,648721271. С помощью гипергеометрических функций можно найти большинство элементарных и специальных функций [36, 42]. Например, функция F (а, а, х) при Ь = а дает значение е". Так, в приведенном примере при 6 = а=?^1 и х = 0,5 получаем F (1; 1; 0,5) =е°-6 = = 1,648721271. Аналогичный результат дает вычисление F (3; 3; 0,5) при а — Ь = 3.
§ 6.П. Дилогарифм Дилогарифм — интегральная функция I, может вычисляться с 16 PRINT1ВЫЧИСЛЕНИЕ ГИПЕРГЕОМЕТРИЧЕСКОЙ ФУНКЦИИ F<A,B>C>X> 28 INPUTВВЕДИТЕ А»В,Сй/В/С 30 INPUTВВЕДИТЕ X=X:LETF=LST<23) 40 FOR 1=23 ТО 1 STEP -1:LETD=I-1 58 LETF=F*<D+ft)*<D+B:>.4D+CVI*X+l 68 NEXT I:PRINTF<^B/CfX)=F:60T0 30:END Пример. F(l; 1; 2; 0,5) = 1,386294358 при точном значении F (I; 1; 2; x) = = _*- In (1-х) =1,386294361 и /си8 с. Первым независимым решением уравнения Куммера помощью численного интегрирования методом Гаусса (программа 4.42). Задав А = \, В=х и 7W^= 8 для х = 0,4, получим f (x)— = 0,7275863075 при точном значении 0,727586308 и /с« 10 с. Дилогарифм может вычисляться и по разложению в ряд: dx< dx является вырожденная гипергеометрическая г /^ _ функция F (а, Ь, х) =М (а, й, х). Через нее и гамма-функцию может быть найдено второе <=1 Программа 6.21.
10 15 20 30 40 50 60 70
PRINTВЫЧИСЛЕНИЕ ВЫРОКДЕННОй ГИПЕРГЕОМЕТРИЧЕСКОЙ PRINT ФУНКЦИИ F<AfBfX) INPUTBBEAHTE A>BA,B INPUTВВЕДИТЕ X=X:LETF=L6T(23) FOR 1=23 ТО 1 STEP -1:LETD=I-1 LETF=F«<B+A>*X/<B+B>/I+1 NEXT I SPRINTЗНАЧЕНИЕ F<A,B>X> = ?F 60T0 30!END
156
Программа 6.22. 05 PRINTВЫЧИСЛЕНИЕ ДИЛОГАРИФМА IS INPUTВВЕДИТЕ Х=Х: LETV=X-1 20 LETI=0: LETS=0: LETR=l: LETP=l 30 LET 1 = 1+1: LETR=-R: LETP=P*Y 40 LETD=R«P-I"2: LETS=S+D 50 IF ABS<D>>lE-9 THEN 30 60 РРШТДИЛОГАРИФМ F<X>=S ?0 GOTO 10: END
Пример. Для х = 0,1 = 1,299715. получим / (л-) = =
§ 6.12, Функции Кельвина Функции Кельвина относятся к классу функций Бесселя и являются решениями дифференциального уравнения 2 d CO 2
d(i)
^
2ч
(\
dx dx записываемыми в виде (o = berv (х) +/ beiv (x). Функции Кельвина вычисляются разложением их в следующие ряды [36]: Ьеь (*) =
V bek (x) =
У I. *=о
sin [(3v/4 + fe/2) л] / х2 k\V (v + ft+1) V4 ДЛЯ практики интерес представляют в основном функции Кельвина целого порядка v = rt (n = 0, 1, 2, ...), в частности функции ber х и bei х (га = 0). При целом v = n имеем Г (v + & + 1) = (n + fe)!, что упрощает вычис-.ления, поскольку отпадает необходимость определять гамма-функцию Г (v + fe+1) для каждого члена ряда. Программа 6.23. Пример. При заданной погрешности £=1-1(Г6 получим Ьег2 (1,55) =0,059944 и Ъеь> (1,55) = —0,259803 (все цифры верные).
§ 6.13. Функции Дебая и Зиверта 1
Интегральная функция Дебая Dn (x) = t"dt ,, находится численным интегрированием с помощью программы 4.42. Так, для Л =0, В = х=\ ия = Л=1 приМ = 4 получим D, (х) =0,7775046341 при точном значении 0,777505, аналогично D4(l) = = 0,6137185176 (время счета менее 10 с). о
Интеграл
Зиверта Ziv (г) =\ е
— z/cosх
dx также легко находится численным интегрированием. Для г=1, /4=0, В = 8 = л/2 и /И = 8 получим Ziv (1) =0,3282894817 при точном значении 0,328286 и 16 с.
§ 6.14. Интеграл вероятности и родственные ему функции Интеграл вероятности >2
dl
желательно вычислять с высокой точностью. Это возможно с применением разложения erf х в ряд [36]: erf x=Дополнительный интеграл вероятности оо
2
erfc x = л/л ^= 1 —erf AT.
10 PRINTВЫЧИСЛЕНИЕ ФУНКЦИЙ КЕЛЬВИНА BER<X>> BEKX) 20 INPUTВВЕДИТЕ 0 ДЛЯ ВЫЧИСЛЕНИЕ BER<X> И 1 ДЛЯ ВЕКХ) ?С 38 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ Е=Е
40 ШРиТЗАДАйТЕ U,X UfX:LETA=<X/2)"U:LET 45 LETI=I+l:LETP=P«I:IF KM THEN 45 50 LETR=1/P:LET6=<3*U/4>*#PI:IF C=0 THEN 60 55 LETZ=SIN<Q>:6OTO 70 60 LETZ=COS<Q> 70 LETS=R*2:LETK=0 80 82 85 90
LETK=K+1: LETR=R«B/K^СK+M): LETQ=<3*U-4+K/2>«#PI IF Q<2*#PI THEN 9© LETQ=G-2*#PI:.60T0 82 IF C=0 THEN 110
100 110 120 125 130 140 150 160
LETZ=SIN<Q>:60T0 120 LETZ=CCS<Q) LETW=S:LETS=S+R«Z IF ABS<ZXE THEN 80 IF ABS<S-U)>=E THEN 80 LETS=S*A:IF C=l THEN 160 PRINTBERU(X)=S:60T0 40 PRINTBEIU<X)=S:60T0 40sEND
.
157 Программа 6.24. 18 PRINTВЫЧИСЛЕНИЕ ФУНКЦИЙ ERF<X> И ERFCOO 20 INPUTВВЕДИТЕ X=X:LETR=l:LETS=X:LETN=0 38 LETN=N+l:LETK=2*N+l:LETR=-R/N 40 LETW=S!LETS=S+<X"K)«R>K 58 IF йВЗ<:Ы-8>>=1Е-10 THEN 30 68 LETE=2*S/SQR < #PI)!PRINTERF < X > =E 70 LETF=l-EsPRINTERFC<X>F:60T0 20SENB В программе 6.24 вычисления заканчи- После этого находятся связанные с ней ваются, когда очередной член ряда по абсофункции Q (х) и Л (х). лютной величине становится меньше е = — Ы0~°. Программа 6.25. 05 PRINTВЫЧИСЛЕНИЕ ФУНКЦИЙ Z<X>*P<X>,Q<X> И А<Х> 10 PRINT С ПОМОЩЬ» РАЗЛОЖЕНИЯ Р<Х) В РЯД 20 INPUTВВЕДИТЕ X=X:LETZ=EXP<-X*X/-2VSQR<2*#PI> 30 PRINTZ<X)=Z:LETR=1!LETS=0!LETN=0 40 LETK=2»N+1!LETR=R*K:LET1AI=S 50 LETS=S+<X"K)/RSLETN=N+1 60 IF S-W>= IE-10 THEN 40 ?8 LETP=.5+S*Z:PRINTP<X>=P 88 LETQ=1-P:PRINTQ<X)=Q 90 LETA=2*P-liPRINTA<X>=A:6QTC 20:END П р и мер. erf (1) =0,842700793; erfc (1) = = 0,1572992071 (/c»5c),erf (2) =0,995322265 и erfc (2) =0,04677734976 (/r«12 c). Интеграл вероятности erf x находится также численным интегрированием. Так, используя программу 4.42 и вводя /4=0, В = л: = 0,5 и М = 4, получим erf x = 0,5204998779 при ^с~6 с (неверен лишь последний знак). Гауссовское (нормальное) распределение вероятности характеризуется следующими основными функциями [36]: dt, Q(x) = \—P (x)=—L- [ e~2/2dt, /2я J Функцию Р (х) удобно вычислять ложением в следующий ряд:
P(x)=-j+Z(x) раз1-3-5(2я+1) Пример. Z (1) =0,2419707275, Р(1) = = 0,8413447461, Q (1) =0,158655239, А (1) = = 0,6826894921 (/0«4 с), Z (5) = 1.4867I9515X X Ю~6, Р (5) =0,9999997133, Q (5) =2,86685Х ХЮ"7 и Л (5) =0,9999994266 (<с«20 с). Для уменьшения времени счета функции erf х и Р (А-) могут вычисляться с помощью полиномиальной аппроксимации. Для функции erf х с погрешностью не выше 1,5-10~7 справедлива аппроксимация erf *=1 — { \ где / = 1/(1+рх), р = 0,3275911, а, = = 0,254829592, а2= -0,284496736 а,= = 1,421413741, а4= —1,453152027 и аь = = 1,061405429. С погрешностью менее 7,5-10~8 Р (х) вычисляется по формуле = \—Z (x)
+bbtb),
где t=l/(l+px), p = 0,2316419, b,= = 0,31938153, 6.,= —0,356563782, Ьл = = 1,781477937, 64= -1,821255978 и 65 = = 1,330274429. С помощью программы 6.26 с применением этих аппроксимаций вычисляются следующие функции: P(A")=Z(x), Ф (X) = = erfx, П(;С)=Р(х), Q(X)=Q(x) и Л (Х)^Л (Л:). Программа 6.26. 05 PRINT ВЫЧИСЛЕНИЕ ФУНКЦИЙ Р<Х>,ЧКХ>>П<ХЪСКХ> И АСХ)
10 INPUT ВВЕДИТЕ Х=Х: LETV=1^<1+.3275911*X) 20 LETZ=<<1.0614054*V-1.453152>*V+1.421413?)«V 30 LETZ= << < Z-. 28449673 > жV+.2543295 > *V)/EXP < X"2) 40 LETF=1-Zs LETV=l^a + .2316419«X> 58 LETP=EXP<-X"2^2)/SQR<2«#PI> 60 LETZ=<<1.3302744«V-1.821256>*V+1.7814779)«V 78 LETZ=<(<Z-.35656378>*V+.31938153>*V:>*P 88 PRINT! 1.7!P<X:)=P!PRINT^<X) = 90 PRINTn<X>=Zs PRINTG«) = 1-Z 100 PRINTA<X>=2*Z-156OTO 10:END 158 Пример. Я (1) =0,2419707245, Ф (1) = = 0,84 13447497, П (1) = 0,8413447497, Q (1) = = 0,1586552503 и А (1) =0,6826894994.
§ 6.15. Некг функции гатистиК основным статистическим функциям относятся плотности вероятности и функции распределения для различных законов распределения. В большинстве своем эти функТаким образом, для реализации этих вычислений необходимо вычисление гамма-функции Г (v/2). Поскольку указанные выше функции обычно вычисляются при целых v=l, 2, ..., Г (А) = Г (v/2) можно вычислить по следующему
алгоритму. 1. Если v=l, Л = 1/2 и Г (А)=л[л. 2. Если v — четное число, то Г (А) = = (Л-1)! 3. Если v — нечетное число, то Г (А) = = (Л-1) (Л-2) ... (1/2) лЯ Программа 6.27.
85 18 28 30 40 50 55
PRINTВЫЧИСЛЕНИЕ ФУНКЦИЙ Х~2 РАСПРЕДЕЛЕНИЯ INPUTВВЕДИТЕ X"2*U X>U!LETA=U/2!LETB=X.2!LETC=A LET6=l:IF INT<A>=8 THEN 40 FOR 1 = 1 TO A-l:LET6=6*UNEXT I:GOTO 55 LETG=SQR<#PI>sIF C<1 THEN 55 LETD»Iii«C:LETC=C-l5&OTO 48:1_ЕТ6=б*И-Х LETF=<X<A-1))/G/-EXP<A).(2-~A)
ьв PRINTЗНАЧЕНИЕ FOC2>U> = F 70 LETS=8:LETK=0!LETW=8!LETZ=0SLET6=1 38 LETK=K+l!LETU=UI+2!LET2=S!LETb=&*<U+W) 98 LETS=S+<X~KV&:IF SOZ THEN 8@ 188 L.ETP=2*X*F*<1+S>/U:LETQ=1-P 118 PRINTЗНАЧЕНИЕ P<X~2/U)=P 128 PRINTЗНАЧЕНИЕ Q<X~2>U>=Q:G0T0 10:ENB
ции выражаются через элементарные и специальные функции включая последние для нормального распределения (§ 6.14). В первом случае вычисление основных статистических функций не представляет труда, а во втором требует применения некоторых специальных приемов. Распределение х2 характеризуется плотностью вероятности / (*)=/- (X)=xv/2-y(2v/2r (v/2) О и функциями распределения (х = %2) Пример. F (1,1) =0,2419707245, Р (1,1) =0,6826894921, Q (1,1) =0,05121793333 (<с«4 с) и Z7 (30,30) =0,05121793333, Я (30,30) =0,534346291, Q (30,30) =0,465653709 а~20 с). /-распределение характеризуется функцией / (X, V) = (
V+1
nvT (v/2) Для v четных функция / (х, v) вычисляется разложением в ряд: Q (x, v) =1 — P (X/v) =i 2 2-4 1-3-5 ... (v —3) 2-4-6 . . . (v —2)
для v нечетных (кроме v = l, когда v)=20/n) Вычисление Р (x/v) выполняется разложением в ряд:
, V__________f!_ "*" A
(v + 2) (v + 4)
2-4. .. (v —3) 1 -3. . . (v —2)
где 9 = arctg (х/д/v). Программа 6.28. IS PRINTВЫЧИСЛЕНИЕ ФУНКЦИЙ KX..U) Т-РАСПРЕДЕЛЕНИЯ 28 ШРиТВВЕДИТЕ X/U X»U:LET&=lsLETF=l:LETA=l !LETE=9 36 LETX=ATN<X^SQR(U)):LETC=C0S<X>-2 48 IF U-2-INT<U^2>=8 THEN 90
50 LETB=2*X/#PIsIF M=6 THEN 140 60 LETG=U-lil_ETB=3 78 LETE=E+2iIF E=G THEN 150 159 80 LETF=F*E/B*C:LETA=A+F:LETB=B+2:60T0 78 98 LETS=U!LETB=1 190 LET£=E+2rlF E=G THEN 130 110 LETF=F*D/E*C 120 LETA=A+FsLETB=B+2s60T0 100 130 LETZ=SIN<X>»A:SOTO 168 140 LETZ=B!60T0 160 158 LETZ=2/#PI«C0S<X)*SIN<X)»A+B 160 PR INTЗНАЧЕНИЕ KX>U>=Z!60T0 20:ENB
Пример. Для х = 2,13 и v= 10 получим / (x, v) =0,940978732. Функция распределения Q (x) для F-pac-пределения Q (x) = при целых vi вычисляется разложением в ряд X -4) i—2)
Пример. Для х = 2,71, У|=6 и V2 = 7 получим Q (х) =0,1090775999, а для х = 4.12, У, =4 и у2=10 получим Q (х) =0,03158204352. В ряде случаев необходимо найти значение аргумента по заданному значению функции вероятности. Общим методом решения этой задачи является решение нелинейного уравнения F (x) — F,, = 0, где F (х) — функция и F,t — ее заданное значение. Однако значительное сокращение времени вычислений достигается, если использовать аппрокси-
мацию для зависимости х от Flt. Например, значение х = хр для заданной функции Q (х) с погрешностью менее 4,5 -10~4 вычисляется с помощью следующей аппроксимации [36], справедливой для нормального распределения: а при целых у2 где ,2 , У|(У, + 2)...(У|+У2-4) + + -2-4...(v2-2)где / = v2/(v2-f vix). Бхли целыми являются vi и У ряд для меньшего из них. Программа 6.29.
берется t = ~\
ln( —
V
vР
ао = 2,515517, а, =0,802853, а2 = 0,010328, 6, = 1,432788, 62 = = 0,189269 и йз = 0,001308. Если задана функция Р (хр) =ро, то вычисляется Q (хр) = = 1 —ро, после чего находится х„. Ш PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ Q<X) F-РАСЛРЕДЕЛЕНИЯ 20 INPUTВВЕДИТЕ X»U1»U2 X»B/C 30 LET6=O < С+Х*6 > s LETА=1!LETJ=l:LETK=1:LETK=1!LETI=S 40 LETF=C/2:IF B^2-INT<B-2)=0 THEN 79
58 IF F-INT<F)=8 THEN 130 60 LET2=0s6OTO 220 79 IF F-INT<F>=8 THEN 98 88 GOTO 108 98 IF B-C>=0 THEN 138 180 LETX=0!LETF=0iLETE=C:LETH=l-6 118 IF<B-2)/2=K THEN 198 128 LETK=(B-2)/-2s&0T0 160 13Q LETX=1!LETF=0!LETE=B:LETH=S 148 IF<C-2)/2=K THEN 198 150 LETK=<C-2>/2 168 LETI=I+lslF I=K THEN 198 178 LETF=F+2sLETJ=J*E/F*H:LETA=A+J 188 LETE=E+2!60T0 160 1Э8 LETA=A+J*E^<F+2)«H!IF X=0 THEN 210 208 LETH=l-6!LETZ=l-A*H~<6.2>!60T0 220 210 LETZ=A»6"<C/-2) 228 PRINTQ<X>UbU2> = Zi&0T0 28sENB 160 Программа 6.30. 10 PRINTВЫЧИСЛЕНИЕ ХР ПО-ЗАДАННОМУ ЗНАМЕНИ» Р=Р<ХР!> 28 INPUT1 ВВЕДИТЕ Р>=12 P=P:LETQ=l-PsLETT=SQR<L06<l/G/Q>.) 30 LETA=<.0U3328*T+. 882853 >*Т+2.515517 40 1_ЕТВ=<<.001308*Т+.189269>*Т+1.432788>*Т 56 LETX=T-A/<1+В)s PRINT!1.4!ХР=X:60Т0 29:END
Пример. Для Р (х) =0,84134 получим хр = 0,999 (точное значение 1), а для Р (х) = = 0,53983 получим хр = 0,0998 (точное значение 0,1). Через описанные выше специальные функции могут быть выражены и многие другие статистические функции для различных законов распределения вероятностей. На основе приведенных выше программ могут быть составлены подпрограммы для вычисления специальных функций. Для современных ПЭВМ с большим объемом ОЗУ (32 Кбайт и выше) можно составить единую библиотеку подпрограмм специальных функций, что значительно расширяет функциональные возможности ПЭВМ в выполнении сложных математических и статистических расчетов. Для ПЭВМ с графическими возможностями с помощью описанных программ можно организовать вычисление координат точек, необходимых для построения графиков функций. Следует отметить, что приведенные выше расчеты не исчерпывают всего разнообразия вычислительных задач, связанных с вычислением специальных функций, применяемых в различных сферах науки и техники. 6 В. П. Дьяконов
ГЛАВА 7
ПРИКЛАДНЫЕ ПРОГРАММЫ ТЕХНИЧЕСКИХ И РАСЧЕТОВ § 7.1. Типовые электротехнические расчеты
ЭКОНОМИЧЕСКИХ
Преобразование звезды в треугольник. (рис. 7.1) и наоборот выполняется по формулам
Y Расчет ослабления А (в децибелах) Т- и П-образных аттенюаторов при произвольных сопротивлениях Zg генератора и Z\
Программа 7.1. Пример. ДЛЯ У?, = 12 Ом, /?2 = 47 Ом и Я) = 82 Ом (треугольник) получим «4 = = 4Ом, «5 = 27,333 Ом и «6 = 6,979 Ом (звезда). Для «4=100 Ом, «5=150 Ом и «6 = 220 Ом (звезда) ПОЛУЧИМ «I =466,667 Ом, «2 = 318,182 Ом и «з = 700 Ом (треугольник). Расчет сопротивлений аттенюаторов (рис. 7.2) при равных активных сопротивлениях генератора Za = Z и нагрузки Zi=Z по заданному ослаблению А (в неперах):
Рис. 7.1. Звезда (а) и треугольник (б), составлен ные из резисторов Тип аттенюатора = Zth(A/2) = Zth(A/2) K—e —1
Программа 7.2.
Пример. Для Z=100 Ом и А = \ неп получим нагрузки выполняется по формулам Ar = 20\g (((1+Л«,/«2) В«3 + Л A, = 201g (((l+ARt/Za) BZo + AZt)/C),
где A = l+Za/Ru B=l+Z,/«3, C = Z0 + Тип аттенюатора «=117,520 Ом 47 = 216,395 Ом 46,212 Ом 85,092 Ом R= 46,212 Ом № = 216,395 Ом «=1,718 ZK=171,818 Ом
162 Программа 7.1. 10 PRINTПРЕОБРАЗОВАНИЕ ТРЕУГОЛЬНИКА В ЗВЕЗДУ-КОД 2. 20 PRINTПРЕОБРАЗОВАНИЕ ЗВЕЗДЫ В ТРЕУГОЛЬНИК-КОД 1 39 INPUTBBEAHTE КОД ПРЕОБРАЗОВАНИЯ ? К:IF K-i THEN 89 4в ШРиТВВЕДИТЕ RbR2»R3 R1,R2>R3 50 LETR=R1+R2+R3:LETR4=R1*R2/R 60 LETR5=R2*R3/RiLETR6=R3*Rl/R 70 PRINTR4*R4 R5=R5 R6=R6:60T0 30 80 INPUTВВЕДИТЕ R4>R5>R6 R4,R5>R6 90 LETR=R4*R5+R5*R6+R6*R4 180 LETR1 =R/R5s LETR2=R/-R6: LETR3=R^R4 110 PRINTR1=R1 R2=R2 R3=R3s60T0 R2=R
R2=2W
2
3
Рис. 7.2. Резистивные аттенюаторы четырех типов
Программа 7.2. IS PRINTРАСЧЕТ СОПРОТИВЛЕНИЙ АТТЕНЮАТОРОВ
15 PRINT!5.3! ПО ЗАДАННОМУ ОСЛАБЛЕНИЮ А 20 INPUTВВЕДИТЕ ВХОДНОЕ И ВЫХОДНОЕ СОПРОТИВЛЕНИЯ E= 25 INPUTBBEAHTE ОСЛАБЛЕНИЕ В НЕПЕРАХ А=A:LETB=A2 30 INPUTBBEAHTE ТИП АТТЕНЮАТОРА Ь2>3 ИЛИ 4 ?С 40 IF C=l THEN 80 50 IF C=2 THEN 90 60 IF C-3 THEN 180 79 PRINTАТТЕНЮАТОР 4 ТИПА 75 PRINTR=Z«HTN<B> ОМ Ы= 88 PRINTАТТЕНЮАТОР 1 ТИПА 85PRINTR=2*HSN<A) ОМ 2*W=Z/HTN<B) 0M:60T0 20 90 PRINTАТТЕНЮАТОР 2 ТИПА 95 PRINTR2=Z*HTN<B> ОМ y=Z^HSN<A) 0M!60T0 28 100 PR INTАТТЕНЮАТОР 3 ТИПА :1_ЕТЮ=ЕХР<А>-1 110 PRINTK=K Z«K=Z*K OM Z/KsZ^K OM:SOTO 20JEND ZxHTN<B> OMsGOTO 20 Программа 7.З. 10 PRINTРАСЧЕТ ОСЛАБЛЕНИЯ Т- И П-ОБРАЗНЫХ АТТЕНЮАТОРОВ 20 INPUTЗАДАЙТЕ В ОМАХ Z0>Z1 tGL 30 INPUTЗАДАЙТЕ В ОМАХ RbR2*R3 H>bJ 46 LETA=l+K/HiLETB=l+bJ:LETC=K+L 50 LETF=2t3«L6T<<Ji«a+A»iH/I)*B+A«HVC) 66 LETG=20*L6T<<K*a+A*I>K:>»B+A*LVC> 78 PRINTОСЛАБЛЕНИЕ AT=F ДБ 80 PRINTОСЛАБЛЕНИЕ АП=& ДБЧбОТО 20!END
Пример. Для Zo = 2i=5O Ом, Ri = = 75 Ом, J?2 = 38 Ом и /?3=19 Ом получим Ат= 11,469 дб, Л„= 14,560 дб. Расчет сопротивлений согласующего делителя (рис. 7.3) и вносимого им ослабления выполняется по формулам LMHH = 20 log
R1 \R2< Рис. 7.З. Согласующий резистивный делитель
163 Программа 7.4. 1в PRINTРАСЧЕТ СОПРОТИВЛЕНИЙ И ОСЛАБЛЕНИЯ РЕЗИСТ0РН0Г0 ДЕЛИТЕЛЯ 28 INPUTВВЕДИТЕ В ОМАХ СОПРОТИВЛЕНИЯ Z0»Z1 29>2l!LETK=Zl^Z8 38 LETRl=28»!SiaR<l-K):LETR2=Zl/-SQR<l-K) 4в LETL=28*L6T<SQR<l/K>+SSR<i/>K-l))!PRINT!5.3!Rl = Rl ОМ 58 PRINTR2=R2 ОМsPRINTОСЛАБЛЕНИЕ L MIN=L ДБЧ60Т0 28-.END Пример. Для Zo = 500 Ом и Z, =200 Ом получаем Я, =387,298 Ом, #2 = 258,199 Ом и 1мин = 8,961 дб. Расчет сопротивлений Т- и П-образного аттенюаторов по заданным входному Zo и выходному Z\ сопротивлениям и коэффициенту ослабления мощности N выполняется с помощью следующих выражений: Т-образный аттенюатор
N+\ #i=Z0
N-\ -#з
= 50 Ом и JV=100 для П-образного аттенюатора #, = 136,147 Ом, #2 = 56,990 Ом и #3 = 360,018 Ом. Сопротивление последовательной (рис. 7.4, а) и параллельной (рис. 7.4, б) RCL цепей рассчитывается по формулам (u> = 2nf, где f — частота). Цепь последовательная \Z\ = #2 =
где #з =
N+\ N— 1 -#з, 7<VZoZi, /V—1 П-образный аттенюатор 9= arctg —1/coC # Цепь параллельная ~RT^~2V\~N^T ЛГ+1 N-l 1 2 #з /V— 1 V ZoZ, Программа 7.5. 1 #з
|Z|=Vl/#2+(coC-l/(oL)2 = arctg # coZ.
— o)C 18 PRINTРАСЧЕТ T- И П-ОБРАЗНЫХ АТТЕНЮАТОРОВ 20 PRINTПО ЗАДАННОМУ ОСЛАБЛЕНИЮ МОЩНОСТИ N 30 INPUTВВЕДИТЕ В ОМАХ СОПРОТИВЛЕНИЯ Z8.-21 28*21 48 INPUTВО СКОЛЬКО РАЗ <Ю ОСЛАБЛЯЕТСЯ МОЩНОСТЬ N=?
N
58 LETKXN+lVCH-l) 60 INPUTЗАДАЙТЕ КОД 8-Т И 1-П ? С ?0 IF C=l THEN 109 80 LETR3=2*SQR<N*Z0*Z1 >.<N-1) 98 LETRl=Z0*K-R3:LETR2=ZliisK-R3!6OTO 138 100 LET83=2*SeR<N/Z0.-Zl)-<N-l):LETR3=bG3 110 LET61=K/Ze-63! LET62=K-Zl-63
120 LETRl=l/6l:LETR2=l/62 138 PRINT!5.3!R1=R1 R2=R2
R3=R3s60T0 48SEND
Пример. При Z0 = 200 Ом, 2, = 100 Ом где \Z\ —модуль полного (комплексного) и N = 50 для Т-образного аттенюатора насопротивления, 9 — угол сдвига фаз, X — ходим #1 = 167,347 Ом, #2 = 63,265 Ом и действительная и Y—мнимая составляю#, = 40,816 Ом, а при Z0=100 Ом, Z, = щие Z.
а В В Рис. 7.4. Последовательная (а) и параллельная (б) LCR цепи и колебательный контур (в) 164 Программа 7.6. 1в PRINTСОПРОТИВЛЕНИЕ LCR ЦЕПЕЙ 20 PRINTЗАДАЙТЕ КОД 9-ЕСЛИ ЦЕПЬ ПОСЛЕДОВАТЕЛЬНАЯ 36 INPUTИ КОД 1-ЕСЛИ ЦЕПЬ ПАРАЛЛЕЛЬНАЯ ? К 4в INPUTВВЕДИТЕ В ОМАХ СОПРОТИВЛЕНИЕ R=R 50 INPUTВВЕДИТЕ В МИКРОФАРАДАХ ЕМКОСТЬ C=C:LETC=C^1E6 60 INPUTВВЕДИТЕ В МИЛЛИГЕНРИ ИНДУКТИВНОСТЬ L=LsLETL=L/lE3 65 INPUTЗАДАЙТЕ В ГЕРЦАХ ЧАСТОТУ F=F 70 LETW=2*#PI*FsIF K=l THEN 10Q . 80 LETX=R:LETV=<W«L-1-W/C)!LET6=ATN<V/X> 90 LETZ=SQR(X*X+V«V>s60T0 130 1S0 LETA=W*C-1/W.L:I_ETB=1/R/R+A*A 110 LETX=1/R/B!LETV=-A/B:LETZ=1/SQR(B) 120 LET6=ATN<A*R> 130 PRINTКОМПЛЕКСНОЕ СОПРОТИВЛЕНИЕ Z=X + J*<Y> 140 PR INTМОДУЛЬ /2/-=Z OM 158 PRINTФАЗОВЫЙ УГОЛ G=G*180/tPI ГРАДУСОВ 160 &ОТО 65:END
Пример. Для последовательной RCL цепи при 7? = 10 Ом, С = 5 мкФ, /=20 мГн и / = 60 Гц получим Х=10 Ом, Y = = —522.977 Ом, |2| =523,072 Ом и 9 = G = = —88,905°. Для параллельной RCL цепи при Я=*47 Ом, С=Л мкФ, L = 30 мГн и / = 50 Гц получаем Х= 1,827 Ом, К = 9,085 Ом, \1\ =9,267 Ом и 9 = 0 = 78,628°. Сопротивление резонансного контура (рис. 7.4, в) Z и его резонансная частота /о вычисляются по формулам (со = 2л/) fo=l/2л Л[ГС, ?, (co/.-1/wC)2 R1R2 +/ R\ (coL— 1/coC)
\Z\=^X2+YY, 9 = arctg (Y/X). Программа 7.7. Пример 1. Определить токи /ь /2 и /3 в мостовой схеме (рис. 7.5), содержащей три контура. Применяя метод контурных токов, задаем произвольные направления токов и составляем уравнения для контуров. Каждое уравнение базируется на том, что сумма э. д. с. и падений напряжения на резисторах каждого контура равна 0.
1
Рис. 7.5. Мостовая схема
10 15 20 30
PRINTВЫЧИСЛЕНИЕ СОПРОТИВЛЕНИЯ РЕЗОНАНСНОГО КОНТУРА INPUTВВЕДИТЕ В ОМАХ СОПРОТИВЛЕНИЯ RbR2 R>S INPUTВВЕДИТЕ В МИЛЛИГЕНРИ ИНДУКТИВНОСТЬ L=L: ЬЕи INPUTВВЕДИТЕ В МИКРОФАРАДАХ ЕМКОСТЬ С*С« LETC=C/lE6
40.INPUTЗАДАЙТЕ В ГЕРЦАХ ЧАСТОТУ F*F 50 ILETW=2*#PI*F 60 1_ЕТЫ=Ы*1_-1 /-Ы/-С i LETT= < R+S ) "г+Ы^г 70 LETX=<R*S*<R+S>+R*l«HifUW 80 LETV-R*R*W/TsUET2=SQR<X»iX+V*V)iLETS»ATN<V>-X) 90 PR I NTРЕЗОНАНСНАЯ ЧАСТОТА F8= 1>2/«PI/SQR(L*C> 180 PR I NTКОМПЛЕКСНОЕ СОПРОТИВЛЕНИЕ 2=«Х + J*<V> 110 PRINTМОДУЛЬ sZs=2 OM 120 PRINT»A30BHft УГОЛ Q=188*S^#PH60T0 40IENB Пример. Для /?, =20 Ом, Л2=15 Ом, С = 0,5 мкФ, L = 20 мГн, / = 60 Гц находим /о = Л) =1591,549 Гц, Х = 20,000 Ом, К = = -0,076 Ом, \Z\ =20,000 Ом и 9 = = —0,216°.
Расчеты, сложных цепей выполняются на постоянном токе методами контурных токов и узловых потенциалов. В конечном счете они сводятся к решению линейных или нелинейных систем уравнений. Контур Уравнение контура 1 4/,—4/2+15/i —15/3 —40 = 0 2 4/2-4/,+8/2+10/2-10/3 = 0 3 10/з-10/2+1/з+15/з-15/1=0 В этих уравнениях коэффициенты перед /], /2, /з — сопротивления соответствующих резисторов схемы (рис. 4.5). 165 После простых преобразований из этих уравнений получаем систему линейных уравнений: 19/, —4/2—15/3 = 40, -4/,+22/2—10/з = 0, формулы Uu = km<pT\n /о
Решая ее, например, с помощью программы 4.1, получаем: /,=7,860 А, / 2 = 4,230 А и /з = 6,192 А. Пример 2. Определить ток /к в интегральной схеме токоотвода (стабилизатора тока) (см. рис. 7,6). В общем случае это достаточно сложная задача, требующая применения громоздкой эквивалентной схемы транзистора. Однако нормальная работа токоотвода обеспечивается при работе транзистора в линейном режиме, когда /к = В/г и /э = = (B-\-I) h и напряжение база-эмиттер где /о — обратный ток диодов. Итак, применяя метод узловых потенциалов, получаем для токов Л и fa следующую систему нелинейных уравнений: (B+\)hn t/дя — mcpT!n-----j----------R,(B+l)I2n /гя+i =где Ulrt+,=km(fT In I\n — fan
fa Эта си5 = тф, In
(5+1) fa ho где
— константа, учитывающая рекомстема непосредственно пригодна для решения ее методом простых итераций (см. § 4.4). Учитывая самостоятельное значение рассчитываемого узла, составим для решения этой системы отдельную программу. Программа 7.8. 18 PRINTРАСЧЕТ ТОКОВ В СХЕМЕ ТОКООТВОДА 28 INPUTВВЕДИТЕ K,FT>E,RbR2/R3K>F,E>R..Z>W 30 INPUT1 ВВЕДИТЕ П, 10> 1Э0,ВМ, l,J, В 35 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Н=Н 40 INPUTЗАДАЙТЕ НАЧАЛЬНЫЕ ТОКИ 110>12SX/V:LETB=B+1 50 LETA=!W:LETB=A*K 6@ LETC=D*LO&i;<X-V)/I + l> 70 LETX=<E-eVR:LETT=V 80 LETY= <C-A*LOG < BasVAJ > -ЫжВжУ) ^Z 90 IF ABSIV-rOH THEN 66
100 110 128 130
PRINTTOK I1=X:PRINTTOK I2=V PRINTНАПРЯЖЕНИЕ НА ДИОДАХ UH=C PRINTTOK КОЛЛЕКТОРА IK=V*<B-1> END
бинацию носителей в эмиттерном переходе, фт = £Г/<7 — тепловой потенциал (к — постоянная Больцмана, Т — температура, q — заряд электрона), В — коэффициент передачи тока базы и /эо — обратный ток эмиттерного перехода.
f+E
Рис. 7.6. Интегральная схема токоотвода Падение напряжения на k диодах цепи базового смещения можно найти с помощью Пр и мер. Для £ = 2, фт = 0,025В, £ = 5 В, /?i=2 кОм, R2 = 20 кОм, /?э==0,1 кОм, т = 2, /о=1-1О-6 мА, />о=Ы0-7 мА, S = 50, погрешности #=Ы0™6, начального значения /20 = 0,01 мА, /ю=1 мА получаем: /, = 1,781 мА, /2 = 0,02472 мА, ил= 1,4379 В и /к =1,2358 мА.
§ 7.2. Расчет индуктивных элементов
Расчет индуктивных элементов сводится к расчету индуктивности L элемента заданной конструкции или какоголибо параметра последней при заданной индуктивности. Для большего числа индуктивных элементов существуют достаточно простые формулы для практических расчетов индуктивности L. Приводим для справок основные из них с контрольными примерами (L в наногенри, размеры в сантиметрах) [22]. 1. Индуктивность отрезка круглого провода длиной / и диаметром d ел i I
1
4
i
*
I
= 21 { arsh-r + ^—~\ \-r Для 1=1 см и d = 0,l CM L = 4,186 нГн. 166 2. Индуктивность отрезка провода прямоугольного сечения (ширина 6, толщина /) длиной / L = 2l(In , , , +0,447-< + b+t 21 Для 6=0,1 см, / = 0,001 см и 1=1 см L = = 7,017 нГн. 3. Индуктивность одиночного круглого витка диаметром D и диаметром провода d Для D = 2 см и / = 0,1 см L = 41,785 нГн. 4. Индуктивность тонкопленочного круглого витка диаметром D и шириной полоски (/ — толщина полоски) L = 2nDX 2,45lY Для 6 = 0,01 см и
X f In D = \ CM L = 25,083 нГн. 5. Индуктивность тонкопленочного квадратного витка со стороной квадрата / и /Я/
\
шириной полоски &3>/ L = Sl I In —-----2,583 Для /=1 см и 6 = 0,01 см L = 30,653 нГн. 6. Индуктивность однослойной катушки круглого сечения со средним радиусом R и длиной катушки / L=4roo2 R \\п (\ _|__£!_ \_|_ L \ l/R/ 1 Л -.2 Формула обес-
2,3+ (l/R) погрешность менее 0,1 %. Для со =10 имеем L = печивает /?=1 см, / = 2 см и = 1359,627 нГн. 7. Индуктивность однослойной катушки квадратного сечения со средней длиной стороны намотки / L= 16-оо2а In (1 + 1
^["V
квадрата
2Q
и
длиной
всей
(6/а) 3,64 + 2 (//а)+0,51 (//а)2 JДля а==1 см
/ = 2 см и оо = 40 имеем £ = 26816 нГн. 8. Индуктивность тороидальной однослойной катушки с тором круглого сечения со средним диаметром тора D и диаметром сечения D[\ ) (7.1) и (о = 300 имеем D\ = \ Для D = 3 см, L = 83486 нГн. 9. Индуктивность тороидальной однослойной катушки квадратного сечения с внутренним диаметром тора D\, наружным Ог и высотой h = 2oi2h In (D2/D1). (7.2) см и (0= 100 Для D2 = 3 см, D\ = 1 см, /i = имеем L = 21972 нГн. 10. Индуктивность многослойной тороидальной катушки со средним диаметром тора D (включая обмотку) и диаметром сечения тора D\
In
8D —1,75^ . (7.3) Формула справедлива при плотной намотке и при условии, что толщиной изоляции провода можно пренебречь. Для £> = 4 см, £>,=0,8 см и (о=100 имеем L = 487293 нГн. 11. Индуктивность многослойной короткой цилиндрической катушки со средним диаметром D, длиной 1<D и толщиной обмот- 25лю2 (О2)
КИ
° L"
с=1 см и Для D = 2,5 см, /=1 см, <о =100 имеем L= 185235 нГн. 12. Индуктивность катушки на тороидальном ферромагнитном сердечнике прямоугольного сечения с плотной намоткой при , = 2ш2цЛ1п (dH/dB) при 1,5-2, (7.4) 1,5 — 2, (7.5) где (I — магнитная проницаемость сердечника, h — его высота, dB и dB — наружный и внутренний диаметры кольца. Для dH = = 4 см, rfB = 2 см, h=\ см, ц=1000, ш=120 имеем L= 19962638 нГн, а при dB = 3 см и (о = 200 (остальные данные прежние) L = = 22857142 нГн. 13. Индуктивность катушек на П- и Ш-образных замкнутых ферромагнитных сердеч. 4nu,Fca> никах L=
где
,.,,,,,
Fc — пло-l(l
d/l)
щадь поперечного сечения сердечника, di — толщина зазора, 1т — длина магнитной линии сердечника, а= 1 —2 — поправочный коэффициент на рассеивание в зазоре. Для Fc=\ см2, d, = 0,05 см, /„=10 см, а=1,5, |х= 1000 и &) = 400 имеем L = = 46398906 нГн. 1 1 / 1 >/ я \ ; / Е
I /
/
:
/ /
: /: / :
: / : /
7
. / :/:
/ / /
=
:
У /: /
3 /
: / : / = / 2
a
г
с
L
2 \
с
Щ
Рис. 7.7. Броневой цилиндрический сердечник 14. Индуктивность катушки в броневом цилиндрическом сердечнике (рис. 7.7) 19,74цм А + В (7.6) где
dl-dl dl
hr)- " о__
h2 — h\ 7) (7.8) 167
Для di = \ см, d2 = 2 см, йз = 4 см, rf4 = 5 СМ, AI=3 см, А2 = 4 см, ц=10 и © = 100 имеем 1 = 468914 нГн. 15. Индуктивность тонкопленочных катушек L = k,-(Ae+A,B) ш5/31п где ^i =2,33 и £2 = 4 для спиральной (круглой) катушки, й] = 12,05 и &2 = 8— для квадратной, А„ и Авя — наружный и внутренний размеры. Для спиральной катушки с (о = 5, Л„=1 см и Лвн = 0,5 см получим L= 126,972 нГн. 16. Взаимная индуктивность двух тонких проводов длиной /, расположенных параллельно на расстоянии A, Af = 2/(arsh-^—|Для h = 1 /=10 см £ = 41,865 нГн. 17. Взаимная индуктивность двух тонких проводов длиной о и Ъ, расположенных на одной прямой с расстоянием между стыкуемыми концами A, M=(a-\-b-\-h) In (a + + b + h) +h In/г— (a + h) In (a + h) — (b + + A) In (й + А). Для а=10 см, & = 5 см и А=1 см Л! = 7,234 нГн. 18. Взаимная индуктивность двух проводов длиной /, сходящихся в одной точке с расстоянием между сходящимися концами и углом между ними ф, M = 2/cos(pln (1 + + 2//С). Для / = 20 см, с = 5 см и <р=30° получим Af = 76,114 нГн. 19. Взаимная индуктивность двух тонких круглых катушек с диаметром D и средним расстоянием между ними Н /W = 0,6coico204/#3, няющей весь сердечник), / — длина средней окружности тора. Однократные расчеты по приведенным формулам целесообразно выполнять в каль-куляторном режиме. 2 Пример 3. Определить взаимную индуктивность катушек (см. 20), если coi =200, 0 Fl / 8 О 2 = 50, Fcep=l ) / = 8 см. Обозначив (O| = W1, (o2 = W2, fceP = F и / = //, выполняем следующие операции: Wl=200 ПС (ввод <oi) W2 = 50 ПС (ввод (о2) F=l ПС (ввод fccp) Н=8 ПС (ввод I) PRINT 4*#PL*W1*W2*F/H ПС Получаем значение L= 15707,96327 нГн. При многократно повторяющихся вычислениях и при громоздких формулах расчеты L, (о или других параметров катушек целесообразно выполнять по программам. Поскольку составление программ формульного счета достаточно просто, ограничимся приведением нескольких характерных примеров. Пример 4. Составить программу для расчета числа витков, необходимых для получения заданной индуктивности L для трех типов тороидальных катушек: 1 — однослойной круглого сечения, 2 — однослойной прямоугольного сечения и 3 — многослойной круглого сечения. Необходимо использовать формулы (7.1) — (7.3), разрешив их относительно (о, и предусмотреть выбор типа катушки и расчет по соответствующей для нее формуле. Это можно сделать вводом кода, указывающего на тип катушки, и использованием в программе условных переходов для выбора нужной формулы. Программа 7.9. 16 PRINT ЧИСЛО ВИТКОВ ТОРОИДАЛЬНОЙ КЙТУШКН 20 PRINT ОДНОСЛОЙНОЙ, КРУГЛОГО СЕЧЕНИЯ КОД 1 38 PRINT ОДНОСЛОЙНОЙ; ПРЯМОУГОЛЬНОГО СЕЧЕНИЯ КОД 2 48 PRINT МНОГОСЛОЙНОЙ/ КРУГЛОГО СЕЧЕНИЯ КОД 3 45 INPUT ВВЕДИТЕ КОД N:IF "N-i THEN 7-G
58 IF N=3 THEN 78
69 INPUT ВВЕДИТЕ ВЫСОТУ СЕЧЕНИЯ Н=Н 70 INPUT ВВЕДИТЕ ДИАМЕТР B=D 30 INPUT ВВЕДИТЕ ДИАМЕТР Х=Х 90 INPUT ВВЕДИТЕ ИНДУКТИВНОСТЬ L=L 108 IF N=l THEN 140 110 IF N=2 THEN 160 120 IF N=3 THEN 188 138 PRINT КОД НАБРАН НЕВЕРНО s GOTO 45 140 LET UI=SQR<L.<2*#PI*CB-SQR<D~2-:>C2>)>> 158 60T0 196 160 LET W=SQR a- < 2»H*LS6 < B.X ) > ) . 178 GOTO 190
180 LET W=SQR<L-<2*#Pl*D.;«<L0C-.<8*Ii/X:>-1.75>>) 190 PRINT ЧИСЛО ВИТКОВ W=W 268 GOTO 90 : END где со i и ш2 — число витков катушек. Для Ш|=свг = 50, £> = 2 см и # = 0,5 см М — = 192000 нГн. 20, Взаимная индуктивность двух коаксиальных катушек, намотанных на общий тороидальный сердечник (материал не ферромагнитный), /И = 4л(О1(о2/:ССр//, где Fccp — площадь среднего поперечного сечения (с учетом толщины обмотки первой катушки, запол168 Пример. Код 2 А=Н=1 см D = 3 см D1 =Х= 1 см L = 1 -105 нГн L=l-105 нГн (o = W = 304,569
(o = W = 213,335
Код 1 D = 3 см D1=X=1 см Код 3 D = 4 см Dl=X = 0,8 см L = l-107 нГн и = W = 453,007 В ряде случаев зависимость t от ш или от другого параметра х неразрешима относительно искомого параметра х при заданном Lo. В этом случае значение х может быть получено из решения нелинейного уравнения Пример 5. Составить программу для расчета числа витков катушки на тороидальном сердечнике, используя при dH/dB<l,75 формулу (7.4), а при dH/dB^l,75— формулу (7.5). Программа 7.10. Lo-L (x)=0
(7.12) подходящим численным методом. Удобным является метод поразрядного приближения, при котором не требуется анализа сходимости и приближение L (х) к значению Lo 18 PRINTРАСЧЕТ L ИЛИ Ы КАТУШКИ Ни ТОРОИДАЛЬНОМ 20 PRINT ФЕРРОМАГНИТНОМ СЕРДЕЧНИКЕ 30 PRINTНЕИЗВЕСТНОМУ L ИЛИ Ы ЗАДАЙТЕ НУЛЕВОЕ ЗНАЧЕНИЕ 35 INPUTВВЕДИТЕ ВНЕШНИЙ И ВНУТРЕННИЙ ДИАМЕТРЫ ТОРА 11/1)1 Ъ 48 INPUTВВЕДИТЕ ВЫСОТУ ТОРА Н=Н. 50 INPUTВВЕДИТЕ ОТНОСИТЕЛЬНУЮ МАГНИТНУЮ ПРОНИЦАЕМОСТЬ 11=М 60 INPUTЗАДАЙТЕ ИНДУКТИВНОСТЬ КАТУШКИ L=L 70 INPUTЗАДАЙТЕ ЧИСЛО ВИТКОВ КАТУШКИ Ы=Ы 80 UETK=D^I:LETA=0:IF K<1.75 THEN LETA=l 90 IF A=0 THEN 110 100 LETF=<D+I)/4/-M^H/<D-I>:6OTO 120 110 LETF=l/2-MH/L06<D/I) 120 IF Ы=в THEN 140 130 PRINTИНДУКТИВНОСТЬ L=W*W/F:60T0 60 140 PRINTЧИСЛО ВИТКОВ W=SGR<L*F>!60T0 60:END
Для dH = D = 4 см, dB = Dl=2 см, /г = Я = = 1 см, ц = Л1=1000, L = 2-107 нГн получим co = № = 120,112, а для D = 4 см, D\ = = 3 см, Н=\ см, M=1000 и L = 2-107 нГн получим W= 187,083. Пример 6. Составить программу для расчета L по заданному со или со по заданному L для катушки на броневом сердечнике. Для этого формулу (7.6) представим в виде
/=-=(Л+й)/(19,74ц), (7.9) (7.10) (7.11) происходит при увеличении х с 0. Последнее исключает необходимость в задании начального интервала изменения L (х), который заведомо неизвестен. . Пример 7. По технологическим соображениям внутренний размер ЛВ„=Л и шаг витков Z тонкопленочных катушек должны быть заданными величинами. Найти число витков тонкопленочной катушки для этого случая при заданной индуктивности Lo. Зависимость L (со) в этом случае имеет вид L(co)= . где А и В определяются выражениями (7.7) и (7.8). Для вычисления L (по заданному со) или со (по заданному L) удобно неизвестному параметру задавать при вводе нулевое значение и с помощью оператора условного перехода задавать вычисления по нужной формуле— (7.9) или (7.10). Программа 7.11. Приведенная ниже программа решает уравнение (7.12) при х = со методом поразрядного приближения и выдает результат с заданной погрешностью решения e = Q (это, однако, не означает, что погрешность расче10 PRINTРАСЧЕТ L ИЛИ Ы КАТУШКИ НА БРОНЕВОМ 20 PRINT ФЕРРОМАГНИТНОМ СЕРДЕЧНИКЕ
30 40 50 60
INPUTВВЕДИТЕ ДИАМЕТРЫ DbD2/D3,D4 0*P>G,R INPUTВВЕДИТЕ РАЗМЕРЫ НЬН2 Н>1 INPUTВВЕДИТЕ ОТНОСИТЕЛЬНУЮ МАГНИТНУ» ПРОНИЦАЕМОСТЬ М=М LETA=<H+I>*a/4R*R-Q*C!>+b<P*P-0*0>>
70 LETB=L06<<R+QV<P+0>V<I-Ю:LETF=<A+BV19.74M 80 PRINTНЕИЗВЕСТНОМУ L ИЛИ Ы ЗАДАЙТЕ НУЛЕВОЕ ЗНАЧЕНИЕ 90 INPUTВВЕДИТЕ ЬЫ btJ:IF W=0 THEN 118 180 PR INTИНДУКТИВНОСТЬ L=W*W/F!60T0 30 110 PRINT4HCflO ВИТКОВ U=SQR<Li«F>:60T0 80:END
Для £>1 = 1 см, D2 = 2 см, Ш = 4 см, D4 = 5 см, Я1=3 см, Я2 = 4 см, ц=10, L = 5-10~s нГн, задав W = 0, получим W = = 103,261, а задав Й7=1ОО и L = 0, получим 1 = 468914 нГн. та со также равна е,— последняя прежде всего зависит от погрешности исходной формулы для L, которая может быть существенно выше г). 169
Программа 7.12. 10 PRINT ЧИСЛО ВИТКОВ ТОНКОПЛЕНОЧНОй КАТУШКИ С ЗАДАННЫМ ШАГОМ 28 INPUTКРУГЛОй-КОД ЬКВАДРАТНОй-КОД 2. ВВЕДИТЕ КОД N 58 IF N=l THEN 78 60 ЬОТО 80 78 LET Kl=2.33 : LET K2=4 : 60Т0 110 88 IF NO2 THEN 100 90 LET Kl=12.05 : LET K2=8 s 60T0 US 100 PRINTКОД НАБРАН НЕВЕРНОS60T0 26 110 INPUT ВВЕДИТЕ ВНУТРЕННИЙ РАЗМЕР А=А 120 INPUT ВВЕДИТЕ ШАГ Z=Z 130 INPUT ЗАДАЙТЕ ТОЧНОСТЬ РЕЗУЛЬТАТА <3=8 140 INPUTВВЕДИТЕ ИНДУКТИВНОСТЬ L=L:LETW=0sLETH=l 160 IF ABS<HXQ THEN 280 170 LETU=U+H8GOSUB 216:IF F/H>=8 THEN 170 190 LET H=-H/-10 : GOTO 160 200 PRINT ЧИСЛО ВИТКОВ Ы=Ы : GOTO 149 210 LET 220 RETURN i END
Для квадратной катушки (код 2) с А = = 0,2 см, Z = 0,005 см, /. = 100 нГн и Е= 1 10~3 получим W= 6,935. Программная реализация расчетов индуктивных элементов целесообразна также, если расчеты проводятся по многим сопряженным формулам. Ниже даны два таких примера. Пример 8. Расчет дросселя фильтра на стальном О-, П- или Ш-образиом сердечниках. Задается индуктивность дросселя L и рабочий ток обмотки /. 1. Определяется ширина стержня а = — 2fi\jLP, на котором находится обмотка, и сечение его Q=l,5a2. 2. Выбирается стандартный сердечник со значениями а и Q, равными полученным или несколько большими их. Для выбранного сердечника известны ширина окна Ь, высота окна h и длина магнитной линии 1т. 3. Вычисляем толщину набора c = Q/a. 4. Вычисляем коэффициент k = LI2/aclm. 5. Используя аппроксимацию зависимости оптимальной толщины воздушного зазора z% (в % от ">) от к, находим lz% по формуле lz% = (330* —15-103*2). Аналогично эффективную магнитную проницаемость материала сердечника определяем так: /И = цг= (114 ехр (— 401*) +50). 6. Находим половину длины оптимального зазора lz/2 = lzcyJM/20. 7. Задав допустимую плотность тока в проводе обмотжи, находим диаметр провода 10 PRINTPACHET ДРОССЕЛЯ ФИЛЬТРА 20 INPUT ВВЕДИТЕ ИНДУКТИВНОСТЬ L= 30 INPUT ВВЕДИТЕ ТОК 1=I 48 LETA=2.6*<<L*a~2>>-a/4>> 45 PRINT ШИРИНА СТЕРЮНЯ А=А 50 LET Q=<ft"2>*1.5
8. Определяем
число
витков
обмотки
ю= 10 -^Llm/ 1,26|17<зс.
9. Вычисляем коэффициент заполнения окна сердечника *„ = 0,008<о^ 2/йЛ. 2 10. Находим омическое сопротивление обмотки дросселя г = 0,000225ш -2 (а + с) + + nb/d . Программа 7.13. L СЕЧЕНИЕ СЕРДЕЧНИКА Q=Q ВЫБИРИТЕ СТАНДАРТНЫЙ СЕРДЕЧНИК ПО ЗНАЧЕНИЯМ ВВЕДИТЕ ШИРИНУ СТЕРЮНЯ А И ОКНА В ВВЕДИТЕ ВЫСОТУ ОКНА Н=Н ДЛИНУ МАГНИТНОЙ ЛИНИИ L1-L1 СЕРДЕЧНИКА Q=Q АИQ 55 PRINT 60 PRINT 70 INPUT 88 INPUT 90 INPUT ВВЕДИТЕ 95 INPUT ВВЕДИТЕ СЕЧЕНИЕ 100 LET C=Q/A 105 PRINT ТОЛЩИНА НАБОРА С=С 110 LET K=<L*<I"2>><A*C*Li:> 115 PRINT ВСПОМОГАТЕЛЬНЫЙ КОЭФФИЦИЕНТ К=К 120 LET X=330*K-15000*<K"2> 125 PRINTОПТИМАЛЬНАЯ ДЛИНА ВОЗДУШНОГО ЗАЗОРА Х=Х 130 LET М=114жЕХР<-401жК)+50 135 PRINT ЭФФЕКТИВНАЯ МАГНИТНАЯ ПРОНИЦАЕМОСТЬ М=М 140 LET V=X*Ll/20 150 INPUT ВВЕДИТЕ ДОПУСТИМУЮ ПЛОТНОСТЬ ТОКА В ПРОВОДЕ Р=Р 160 LET D=SQR<I/P>*1.13 165 PRINT ДИАМЕТР ПРОВОДА B=D 170 LET UI=100@0!«SQR;LKL1/<1.26*M*A*C^ 180 PRINT ЧИСЛО ВИТКОВ ДРОССЕЛЯ 1д1=Ы 190 LETK1=8.088ЖЫ* <D~2>/<ВжН) 200 PRINT КОЭФФИЦИЕНТ ЗАПОЛНЕНИЯ ОКНА СЕРДЕЧНИКА ДРОССЕЛЯ К1= 210 LET R=0.000225*W*<2*<A+C>+#PI*B>/-<:B"2)
А/
В
220 PRINT ОМИЧЕСКОЕ СОПРОТИВЛЕНИЕ ОБМОТКИ ДРОССЕЛЯ R=R 230 60Т0 10 s END
Kl 170
Для L = 3-10 4 Гн и /=15 А получаем а = Л = 1,325 сил и Q = 2,634 см2. Выбираем из стандартного ряда сердечник, имеющий а=1,6 см, Q = 2,65 см, 6 = 1,6 см, h = 4 см, /т=13,7 см. Введя эти данные, получаем С =1,656 см, nz= 104,089 и
/z/2 = 0,385 см. Далее, введя 6 = 3 А/мм2, получаем d = = 2,527 мм, (0 = 34,388, £„ = 0,274 и / = = 0,014 Ом. Пример 9. Расчет силового трансформатора, работающего от промышленной сети переменного тока (частота 50 или 60 Гц). 10. Определяем число витков первичной обмотки ш=(1/\—AU\)/l. Если трансформатор имеет несколько вторичных обмоток, то их отдаваемые в нагрузку мощности суммируются, так что N
где N — общее число обмоток. При этом расчет со,- и dL повторяется для каждой обмотки. Программа 7.14.
16 PRINTРАСЧЕТ СИЛОВОГО ТРАНСФОРМАТОРА 20 INPUTВВЕДИТЕ ГАБАРИТНУЮ МОЩНОСТЬ Р=Р 30 INPUTВВЕДИТЕ МАКСИМАЛЬНУЮ ИНДУКЦИЮ В СЕРДЕЧНИКЕ I=I 4в INPUTВВЕДИТЕ ЧИСЛО СТЕРИНЕй СЕРДЕЧНИКА С ОБМОТКАМИ S=S 56 INPUTВВЕДИТЕ ДОПУСТИМУЮ ПЛОТНОСТЬ ТОКА ПРОВОДОВ Р=Х 60 INPUTВВЕДИТЕ КОЭФФ. ЗАПОЛНЕНИЯ ОКНА СЕРДЕЧНИКА МЕДЬ» КМ=К1 70 INPUTBBEAHTE КОЭФФ. ЗАПОЛНЕНИЯ СЕРДЕЧНИКА СТАЛЬЮ КС=К2 80 INPUTЗАДАЙТЕ К.П.Д. ТРАНСФОРМАТОРА N=N 98 INPUTЗАДАЙТЕ ЧАСТОТУ СЕТИ F=F 180 INPUTBBEAHTE ДЛЯ ПЕРВИЧНОЙ ОБМОТКИ Ulill Ubll 110 INPUTBBEAHTE ДЛЯ ВТОРИЧНОЙ ОБМОТКИ U2, 12 U2>12 126 LETV=P^F/S/I^X/N/Kl/K2/.0222sPRINT!6.3!QCT*Q0«V 130 PRINTПОДБЕРИТЕ ПОДХОДЯЩИЙТИП СЕРДЕЧНИКА И ДЛЯ НЕГО 14@ INPUTBBEAHTE ПАРАМЕТРЫ А..В>С А»В»С 150 LETE=F*A*C*l*K2*444E-6!PRINT3.fi.C ОДНОГО ВИТКА Е=Е 160 LETW2=U2/E:LETI>)1=U1/E!LETD2=1.13*SQR<I2/X> 170 LETBl=1.13*SQR<Il/>OiLETLl=yi*<2!«<A+C>+#PI*B>/100 180 LETU=2.25E-2*I 1*L1/<B1"2>:LETM^Ul-UVE
19S 260 210 220
PRINTAHAMETP ПРОВОДА ПЕРВИЧНОЙ ОБМОТКИ D1=D1 PRINTAMAMETP ПРОВОДА ВТОРИЧНОЙ ОБМОТКИ В2=В2 PRINTЧИСЛО ВИТКОВ ПЕРВИЧНОЙ ОБМОТКИ U1=M PR INTЧИСЛО ВИТКОВ ВТОРИЧНОЙ ОБМОТКИ Ы2=Ы2!ЕНВ
При таких частотах несущественны индуктивности рассеивания и расчет может проводится по следующей методике. 1. Задаем габаритную мощность трансформатора Рга6, максимальную индукцию в сердечнике Вп, частоту сети /, число стержней сердечника с обмотками s, допустимую плотность тока б, к. п. д. трансформатора т)тр, коэффициент заполнения окна медью /г„, коэффициент заполнения сердечника сталью /г с, напряжение U\ и £/2, первичную и вторичную обмотки, токи /i и /г этих обмоток. 2. Находим произведение сечений стали QCT и окна Qo: QcrQo = Pra6/(0,0222}Bm6r\.wskckx). 3. По значению QCiQo выбираем подходя- щий тип магнитопровода, уточняем значения QCT и Qo и определяем для выбранного сердечника ширину стержня а, ширину окна Ь и толщину набора с. 4. Находим э. д. с, наводимую в одном витке e = 4,44fSmQcA-10~4. 5. Вычисляем число витков вторичной обмотки 0)2= (Л/е. 6. Находим первое приближение для числа витков первичной обмотки u>\ — U\/e. 7. Находим диаметр проводов первичной и вторичной обмоток d,= 1,13 -\/77/б, di = = 1,13-у/ЛгД 8. Вычисляем длину провода первичной обмотки /|=со1 [2 (а + с)+лЬ] -10""2. 9. Вычисляем падение напряжения на омическом сопротивлении первичной обмотки At/, =2,25-10" 2/,/i/d2. Для Ргаб = 215 Вт, Вт=\,2 Тл, S = 2, F = = 50 Гц, 6 = 2 А/мм2, fec = 0,95, feM = 0,32, т]тр = 0,96, (/, = 127 В, У2 = 450 В, /, = 1,7 А и /2 = 0,475 А находим QCTQo= 138,270 см2. Подходящим является ленточный магнито-провод (сердечник) ПЛ25X50 — 60 с сечением стержня 25X50 мм и размерами окна 40X65 мм (а = 2,5 см, 6 = 2 см и с = 5 см). У этого сердечника QCTQ0= 162 см4. Введя эти данные, получим ^2 = 0,551 мм2, di = = 1,042 мм, 0)2=1422,475 и он = 391,396.
§ 7.3. Расчет емкостных элементов и конденсаторов
Для емкостных элементов известны выражения, определяющие емкость (далее в пико-фарадах) как функцию их геометрических размеров (в сантиметрах) и относительной диэлектрической проницаемости диэлектрика вд. Ниже приведены формулы для емкости наиболее распространенных элементов (конденсаторов) [22]. 1. Плоский конденсатор в виде пластины диэлектрика с нанесенными с двух сторон металлическими обкладками: С = 0,088бЕд5//г, где S — площадь обкладок, h — толщина диэлектрика. Для S=l см2, /г = 0,1 см, ЕД=1 (воздух) имеем С = 0,886 пФ. Формула не учитывает краевые эффекты. 2. Дисковый конденсатор с электродами одинакового размера, занимающими всю 171
поверхность диэлектрика: С = 0,0695ед1>//г. (7.13) Для D = \ см, /г ^= 0,1 см и ед = 4,7 получим С = 3,266 пФ. 3. Коаксиальный (трубчатый) конденсатор с электродами и диэлектриком одинаковой длины /: C = 0,241^//lg (£)„/£)„), где £)„ — наружный иВ, — внутренний диаметры трубки. Для 1 = 2 см, DH = 0,5 см, DB = 0,4 см и ед = 4,7 С = 23,376 пФ. Формула не учитывает краевые эффекты. 4. Коаксиальный (трубчатый) конденсатор с электродами одинаковой длины / и диэлектриком, длина трубки которого больше /: 0241/ + a08DH ;=2 DH = С=
g (H/B) = 0,5 см, £>в = 0,4 см и ЕД = 4,7 получим С = 23,789 пФ. 5. Коаксиальный (трубчатый) конденсатор с электродами разной длины (меньшая — /): 0,241ед (/ + 0.17D.) \g(DK/DB) = 2 см, DB = 0,5 см и £>, = 0,4 см получим С = 24,370 пФ. 6. Шаровой конденсатор: С = = 0,555ед£>„/ (£>„/£>В — 1), где DH и DB — внешний и внутренний диаметры шара. Для DH = = 10 см, D» = 9 см и ед = 4,7 получим С = = 234,765 пФ. 8. Шар в свободном пространстве, заполненном диэлектриком: С = 0,555бдД, где D — диаметр шара. Для £>=10 см и ед=1 получим С = 5,55 пФ. 9. Емкость между двумя одинаковыми шарами диаметром D и расстоянием между центрами а> D: ; = 0,278ед/ 2
D (4а —£>
2
2
2а (4а — 2aD — D2) (7.14) Для D=10 см, а=15 см и 8Д=1 получим С = 4,263 пФ. 10. Круглый диск в свободном пространстве: С = 0,353ед£> ( Н—~п—V где D — диаметр и h — толщина диска. Для Р= 10 см, /i=l см, ед=1 получим С = 3,755 пФ. 11. Емкости проводников в свободном пространстве: C = kteJ/\g (k%x/d), где значения коэффициентов k\ и к2 и расшифровка параметра х даны в табл. 7.1, / — длина проводника и d — его диаметр. Пример 10. Составить программу для вычисления емкости проводников, указанных в табл. 7.1. Выбор варианта расчета можно обеспечить вводом кода и применением команд.условных переходов. Программа 7.15.
Ш PRINT ЕМКОСТЬ ПРОВОДНИКОВ В СВОБОДНОМ ПРОСТРАНСТВЕ1 20 PRINT ЕМКОСТЬ МЕЖДУ ДВУМЯ ПРОВОДАМИ ВДАЛИ ОТ ЗЕМЛИ, КОД Г МЕШДУ ГОРИЗОНТАЛЬНЫМ ПРОВОДОМ И ЗЕМЛЕЙ, КОД 2 МЕИ1ДУ ВЕРТИКАЛЬНЫМ ПРОВОДОМ И ЗЕМЛЕЙ ПРИ Н>1_/4> КОД 3 МЕИДУ ВЕРТИКАЛЬНЫМ ПРОВОДОМ И ЗЕМЛЕЙ ПРИ Н<1_/4> КСФ 4 МЕЖДУ ПРОВОДОМ И КОРПУСОМ, КОД 5 ВВЕДИТЕ ОТНОСИТЕЛЬНУК! ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е=Е ВВЕДИТЕ ДИАМЕТР ПРОВОДА Х)=Ь ВВЕДИТЕ КОД N
38 PRINT 40 PRINT 50 PRINT
60 PRINT 70 INPUT 80 INPUT 90 INPUT 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 199
150 LET Kl=0.12 : LET K2=2 : GOTO 210 160 LET Kl=0.24 : LET K2=4 : GOTO 215 170 LET К1=0.24 : LET K2=l : GOTO 230 180 LET Kl=0.24 s LET K2=1.15 : GOTO 230
190 LET Kl=0.24 s LET K2=2 i GOTO 205 200 INPUT КОД НАБРАН НЕВЕРНО : GOTO 98 205 INPUT ВВЕДИТЕ ДИАМЕТР ОТВЕРСТИЯ Х=Х : GOTO 220 210 INPUT ВВЕДИТЕ РАССТОЯНИЕ МЕМДУ ПРОВОДАМИ Х=Х i GOTO 220 215 INPUT ВВЕДИТЕ ВЫСОТУ ПОДВЕСКИ Х=Х 220 INPUT ВВЕДИТЕ ДЛИНУ ПРОВОДА L=L : GOTO 240 230 INPUT ВВЕДИТЕ ДЛИНУ ПРОВОДА Х=Х : GOTO 258 240 LET C=<K1*E*LVLGT<K2*<X/B:>> : GOTO 268
250 LET C=<K1*E*X>/LGT<K2*X/B:>
268 PRINT ЕМКОСТЬ ПРОВОДНИКА В СВОБОДНОМ ПРОСТРАНСТВЕ С=С 278 GOTO 90 : END 7. Горшковый конденсатор в виде цилиндра длиной /, заканчивающийся внизу полушаром диаметром £>„ и п г Г О-241 i внутренним DB : С = ед —j—._ ... ,----1-
Для
/
/=1
°
см
D
»=5
см
с
наружным
-
J
£), = 4 см и ЕД = 4,7 получим С= 143,014 пФ. 172 Для /=103 см, d = 0,2 см, х = 200 см и ед=1 получим С = 66,629 пФ (код 2). Более полные данные о расчете емкости можно получить из специальной литературы [13]. Часто необходимо не значение емкости конденсатора, а определение по заданной емкости его электрофизических или геометрических характеристик. Приведем примеры таких расчетов. Таблица 7.1 Значения kt, кг и наименование х для расчета емкости проводников в свободном пространстве
Код
Емкость С
кг двумя
проводами
Наименование х
1
Между земли
от
0,12
2
Расстояние проводами
между
2
Между горизонтальным проводом и землей
0,24
4
Высота подвески
3
Между вертикальным проводом и землей при расстоянии от земли до нижнего конца ft> I/A
0,24
1
Длина провода
4
Между вертикальным проводом и землей при расстоянии от земли до нижнего конца h<l/4
0,24
1,15
Длина провода
5
Между проводом и корпусом при вводе провода через отверстие
0,24
2
Диаметр отверстия
Пример 11. Определить диэлектрическую проницаемость диэлектрика вд. Для этого удобно использовать дисковый конденсатор специальной конструкции — (см. рис. 7.8). Такой конденсатор имеет охранное кольцо, которое должно иметь потенциал, равный потенциалу верхней обкладки конденсатора. Это резко ослабляет проявление краевых эффектов и позволяет пользоваться формулой (7.13) для нахождения ЁД ПО заданному значению С: ед = С/г/0,0695О. Пусть конденсатор с емкостью С = 32 пФ имеет D = 10 см и h = 0,1 см. Тогда диэлектрическая проницаемость диэлектрика ед = = 4,604. Пример 12. Составить программу для расчета тонкопленочных конденсаторов заданной емкости С. Методика расчета следующая [9]. 1. Задаем число обкладок т, толщину диэлектрика d и его диэлектрическую проницаемость 8Д. 2. Вычисляем удельную емкость (приходящуюся на 1 см2) тонкопленочного конденсатора Со = 0,0885ед (т — \)/d и необходимую площадь обкладок S = C/Co. 3. Задаем отношение сторон Q=A/B прямоугольника обкладок и находим стороны А^Л/QS И B=VS7Q\ Программа 7.16. Основной злен троЗ Охранное кольцо Общая обкладка. Рис. 7.8. Дисковый конденсатор с охранным кольцом для уменьшения краевых эффектов Для m = 3, d = 0,01 см, ед = 4,7 и С = = 100 пФ получаем С0 = 83,19 пФ/см2, S= 1,202 см2 и при Q = 2 получаем Л = 1,550 см и В = 0,775 см. Пример 13. Найти расстояние а между центрами двух шаров, имеющих диаметр £>=10 см, при котором емкость между ними составляет Со = 5 пФ. Непосредственное применение формулы (7.14) в данном случае невозможно, поскольку ее разрешимость относительно параметра а не является очевидной. В связи с этим целесообразно найти а из решения нелинейного уравнения С (а) — — Со = О, учитывая, что при а —► Д шары соприкасаются и емкость С -* ею. Поэтому, применяя метод поразрядного приближения, нужно увеличить а с начального значения 10 PKINT РАСЧЕТ ПЛЕНОЧНЫХ КОНДЕНСАТОРОВ 28 INPUT ВВЕДИТЕ ЕМКОСТЬ С=С 38 INPUT ВВЕДИТЕ ЧИСЛО ОБКЛАДОК М=М 48 INPUT ВВЕДИТЕ ТОЛЩИНУ ДИЭЛЕКТРИКА П=В 50 INPUT ВВЕДИТЕ ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУ» ПРОНИЦАЕМОСТЬ Е=Е 60 LET C0=0.@885*E*<M-1VD 78 PRINT УДЕЛЬНАЯ ЕМКОСТЬ С0=С0 80 LET S=CC0 90 PRINT ПЛОШАДЬ ОБКЛАДОК S=S 100 INPUT ВВЕДИТЕ ОТНОШЕНИЕ СТОРОН Q=A-B Q 118 LET A=SQR<Q*S> : LET B=SGR<S/Q> 128 PRINT СТОРОНА ОБКЛАДКИ А=А 130 PRINT СТОРОНА ОБКЛАДКИ В=В 148 GOTO 28 s END
173 D. Приведенная ниже программа (в ней Х) реализует такой подход. Программа 7.17. ния Zj,. Ниже рассматривается программ для таких расчетов.
комплекс 10 PRINT РАССТОЯНИЕ МЕЮДУ ЦЕНТРАМИ ДВУХ ШАРОВ ПО ЗАДАННОЙ ЕМКОСТИ 20 INPUT ВВЕДИТЕ ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е=Е 30 INPUT ВВЕДИТЕ ДИАМЕТР ШАРОВ D=D 40 INPUT ВВЕДИТЕ ТОЧНОСТЬ РЕЗУЛЬТАТА Q=Q 50 INPUT ВВЕДИТЕ ЕМКОСТЬ С=С 60 LET Х=В : LET H=10 70 IF ABSCHXG THEN IIS 80 LET X=X+H : GOSUB 120 90 IF F/H>=0 THEN 80 100 LET H*-H^10 : GOTO 70 110 PRINT РАССТОЯНИЕ Х=Х г 60Т0 50
120 LETF=. 278*E*B*< 1+< D* < 4*X*X-D*D > < 2*X*< 4*X*X-D*D-2*X*D) У ) > -С 130 RETURN s END
Для С = 5 пФ, £>=10 см, ед=1 и погрешности вычислений <5=1-10~3 получим а = = Х= 12,26 см. ПЭВМ можно использовать и для существенно более сложных вычислений емкости, описанных в [13] и требующих применения специальных методов расчета. Ограничимся одним примером такого рода. Пример 14. Вычислить емкость на единицу длины Ci между двумя компланарными (т. е. находящимися на одной плоскости параллельно друг другу) пластинами бесконечной длины шириной a = 9 см и с расстоя- нием между ними rf = 2 см. В соответствии с [13] эта емкость определяется точной формулой С//ед = /г (m)/k (in), где m = k2 = = 1/(1 -\-2a/d)2, k (in) —полный эллиптический интеграл первого рода, k (m) — полный эллиптический интеграл от параметра т=1— т. При заданных and имеем т = 0,01 и т = 0,99. Воспользовавшись программой 6.18, вычисляем k (m) =k (0,01) = = 1,5745568 и k (m) =k (0,99) =3,695637369. Следовательно, С( = ед& (m)/k (m) =ЕДХ X 2,346815539 пФ/см. Это совпадает с приведенным в [13] значением С/, но исключает необходимость применения таблиц значений эллиптических интегралов и их интерполяции и экстраполяции при произвольных значениях т и т.
§ 7.4. Расчет линий передачи и задержки Линии передачи могут быть проводными, коаксиальными (кабельными), ленточными и полосковыми. Важнейшим параметром таких линий является волновое сопротивление Za = V^i/C7, где /.I и Ci — индуктивность и емкость линий на единицу длины, фазовая скорость движения волны в линии и = = с/Уе7, где С — скорость света и ед — относительная диэлектрическая проницаемость диэлектрика линии. В справочной литературе [22] обычно приводятся формулы для инженерного расчета Zj, линий. Однако в большинстве случаев значение Zs бывает задано и требуется определить конструктивные параметры линии, обеспечивающие получение нужного значе174 Для ряда проводных линий обобщенный конструктивный параметр D ехр (2Л л/ѐГ/60) где d — диаметр круглого проводника, а D и k определяются следующим образом. 1. Для линии в виде круглого проводника, расположенного в середине между плоскопараллельными проводящими плоскостями с расстоянием между ними D, £=1,27. 2. Для линии в виде проводника, размещенного в центре экрана с квадратным сечением и стороной D, k = 1,08. 3. Для коаксиальной линии в виде экрана с круглым сечением (диаметр D) и проводником, расположенным в центре, k=\. 4. Для линии в виде проводника, расположенного на биссектрисе прямого угла, образованного двумя полубесконечными проводящими плоскостями, на расстоянии D/2 от каждой плоскости, £=1,4. В приведенной ниже программе вычисляется параметр любой из этих четырех линий. Тип линии задается кодом. Программа 7.18. Для 2л = 300 Ом и ед = £=1 получим Х= 116,861 при коде 1, Х= 137,420 при коде 2, 1=148,413 при коде 3 и 1=106,009 при коде 4. Выбрав заданным один из параметров (D или d), по значению X легко найти другой параметр. Если выражение Z,, (х) неразрешимо относительно требуемого расчетного параметра х, то для нахождения х по заданному Za = Zjo решается нелинейное уравнение 0~гл
(х)=о.
(7.15) Например, для линии в виде двух проводников одинакового диаметра D, расположенных на расстоянии А друг от друга и на расстоянии L от проводящей плоскости, 120 Г и А , —— агсп"^----In а для линии в виде двух проводников различного диаметра (D и X), расположенных Программа 7.18. Ш PRINTРАСЧЕТ ПАРАМЕТРА X ПРОВОДНЫХ ЛИНИЙ 49 PRINTЛИНИЯ - КРУГЛЫЙ ПРОВОДНИК* РАСПОЛОЖЕННЫЙ 58 PRINTВ СЕРЕДИНЕ МЕКДУ ПРОВОДЯЩИМИ ПЛОСКОСТЯМИ,КОД Г 68 PRINTS ЭКРАНЕ С КВАДРАТНЫМ СЕЧЕНИЕМ, КОД 2 76 PRINTВ ЭКРАНЕ С КРУГЛЫМ СЕЧЕНИЕМ,КОД 3 88 PRINTНА БИССЕКТРИСЕ ПРЯМОГО УГЛА, КОД 4 Эй INPUTВВЕДИТЕ КОД" N 188 IF N=l THEN 158 118 IF N=2 THEN 160 128 IF H=3 THEN 178 138 IF N=4 THEN 188 148 PRINTКОД НАБРАН НЕВЕРНО: GOTO 38 158 LET K=1.27: &OTO 138 168 LET K=1.88: 60T0 198 178 LET K=l: 60T0 198 188 LET K=1.4 198 INPUTВВЕДИТЕ ВОЛНОВОЕ СОПРОТИВЛЕНИЕ ЛИНИИ Z=Z 195 INPUTВВЕДИТЕ ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е=Е 288 LET X=<EXP<<Z*SQR<E))68))K 218 PRINTX=Xs 60T0 98: ENB
на расстоянии А в свободном пространстве, _ 60 , 4Л ? — ti1 — Хz "=^arch—ш— ЕСЛИ необходимо определить расстояние А по заданному Z.4o, ТО ЭТО МОЖНО сделать с помощью приведенной ниже программы, обеспечивающей решение (7.15) методом подекадного приближения. Программа 7.19. а для D = 0,l см, Х = 0,05 см, Z = 300 Ом (код 2) получим Л =0,434 см.
Лини?! из двух проводников одинакового диаметра D, расположенных на расстоянии А друг от друга в свободном пространстве, имеет волновое сопротивление Z.n (Z) = =----arch X, где X = A/D. Аналогично для линии в виде проводника с диаметром D, расположенного над проводящей плоскостью 18 PRINT РАССТОЯНИЕ МЕШДУ ПРОВОДАМИ ДВУХПРОВОДНОЙ ЛИНИИ 28 PRINT МЕШДУ ДВУМЯ ПРОВОДАМИ С ОДИНАКОВЫМ ДИАМЕТРОМ, КОД 1 38 PRINT МЕМДУ ДВУМЯ ПРОВОДАМИ С РАЗНЫМИ ДИАМЕТРАМИ, КОД 2 48 INPUT "ВВЕДИТЕ ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е= 58 INPUT ВВЕДИТЕ ВОЛНОВОЕ СОПРОТИВЛЕНИЕ Z=Z 68 INPUT ВВЕДИТЕ ТОЧНОСТЬ РЕЗУЛЬТАТА Q=Q 78 INPUT ВВЕДИТЕ КОД N 88 IF N=l THEN 118 90 IF N=2 THEN 210 188 PRINT КОД НАБРАН НЕВЕРНО : GOTO 78 110 INPUT ВВЕДИТЕ ДИАМЕТР В=В 128 INPUT ВВЕДИТЕ РАССТОЯНИЕ L=L . 138 LET A=8 : LET H=l 148 IF ABS<HXQ THEN 180 158 LET A=A+H : GOSUB 190 168 IF F/H>=8 THEN 158 178 LET H=-H/18 i 60T0 140 180 PRINT РАССТОЯНИЕ A=A : 60T0 78 198 LET F=Z-<120/SQRi;E))«<AHC<ft/D)-LO&<SQRa + <A/<2*L))"2))> 200 RETURN 218 INPUT ВВЕДИТЕ ДИАМЕТР B=B 228 INPUT ВВЕДИТЕ ДИАМЕТР X=X 238 LET A=8 : LET H=l 240 IF ABSCHXQ THEN 280 250 LET A=A+H : GOSUB 298 268 IF F/H>=8 THEN 258 278 LET NMV10 : 60T0 248 230 PRINT РАССТОЯНИЕ А=А s GOTO 70 298 LET F=Z-<60/SQR<E;O*<AHC<<4*<A"2>-<ir2>-<X2>:>/<:2*B*X:>>> 380 RETURN : ENB
Для г = Е=\, Z.,o = Z = 2OO Ом погрешность вычислений Q=blO~4, D = 0,l см, L=1,5-CM (код =0,2753 см, на расстоянии А от нее, Z., (X)=60archX/Ve.
1)
получим
А
175 Программа 7.20. 10 PRIHT РАСЧЕТ ПАРАМЕТРА X 28 PRINT ДВУХПРОВОДНАЯ ЛИНИЯ/ КОД 1 30 PRINT ЛИНИЯ В ВИДЕ КРУГЛОГО ПРОВОДНИКА НАД ПЛОСКОСТЬЮ, КОД 2 40 INPUT ВВЕДИТЕ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е=Е 50 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Q=Q 60 INPUT ВВЕДИТЕ ВОЛНОВОЕ СОПРОТИВЛЕНИЕ Z=Z 78 ШРиТЗАДАйТЕ КОД ЛИНИИ N:LETK=120!IF N=2 THEN LETK=60 88 IF N=1 THEN 110 90 IF N=2 THEN 110 100 PRINT КОД НАБРАН НЕВЕРНО : 60T0 70 110 LET X=0 s LET H=10 120 IF ABS<HXQ THEN 160 130 LET X=X+H : GOSUB 170
140 IF F/H>=0 THEN 130 150 LET H=-H^10 s GOTO 120 160 PRINTЗНАЧЕНИЕ X=X:GOTO 78 178 LETF=Z-(K/SQR<E)>«AHC<X)г RETURN!END
Для ZM = 300 Ом, g = £=l и погрешноПри заданных Fw = Fm0, N и D парасти g = Q = I. Ю~4 получим Х = 6,1322 (код 1) метр X находится из решения нелинейного и Х = 74,2099 (код 2). уравнения Большие Za имеют коаксиальные линии, Fw0— Fw (X) =0. у которых внутренний проводник выполнен в виде спирали. Волновое сопротивление таПрограмма 7.21. 18 PRINTРАСЧЕТ ПАРАМЕТРА X СПИРАЛЬНОЙ КОАКСИАЛЬНОЙ ЛИНИИ 28 INPUTВВЕДИТЕ N>D>E N>D/E:LETM=N*N 39 INPUTBBEflHTE FW=A:LETX=8sLETH=.1 48 IF ABS<HXE THEN 70 50 LETX=X+Hs60SUB 80s IF F/H>=0 THEN 50 68 LETH=-H/r10!6OTO 40 70 PRINTX=X:GOTO 30 80 LETF=A-SQR<l+M*<#PI*X>~2*<l-<X/D>"2V2/L0G<D/X>> 90 RETURN!EHD
ких линий Za = Z1,KFw, где Z^ — волноДля Fwu = "i, N = 4, D=\ см и погрешвое сопротивление обычной коаксиальной ности вычислений £=l-10~3 получим Х = линии со сплошным внутренним проводни=0,349 см. ком, имеющим диаметр, равный внешнему Волновое сопротивление коаксиальной лидиаметру спирали, a Fw—поправочный нии с внутренним проводником (диаметр X), множитель смещенным от центра на расстояние L р -^ -i | Ni УяЛ> Г) Iх \ 1 2Л (Х)=—— arch------—-—-------, где D — tw 2XD Л, l+N 2\n(D/X)[l \~D)\ VE внутренний диаметр внешнего проводника. где D ~~ внутренний диаметр внешнего труб- ** эт°м c^4f параметр X при заданных чатого проводника, X - внешний диаметр z- = z^, D, L ц г находится из решения спирали, N- число витков спирали на единелинейного уравнения ZM-Zn (X) =0. ницу длины линии. Программа 7.22. 10 PRINTРАСЧЕТ ПАРАМЕТРА X КОАКСИАЛЬНОЙ ЛИНИИ 28 PRINTСО СМЕШЕННЫМ ВНУТРЕННИМ ПРОВОДНИКОМ 38 INPUTВВЕДИТЕ ВНУТРЕННИЙ ДИАМЕТР ВНЕШНЕГО ПРОВОДНИКА D=D 48 INPUT1ВВЕДИТЕ РАДИАЛЬНОЕ СМЕШЕНИЕ ВНУТРЕННЕГО ПРОВОДНИКА L=L 50 INPUTЗАДАЙТЕ ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е=Е 68 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕЗУЛЬТАТА Q=Q 78 INPUTВВЕДИТЕ ВОЛНОВОЕ СОПРОТИВЛЕНИЕ ЛИНИИ Z=Z 38 LETX=0:LETH=.1
96 IF ABS<HXQ THEN 120 108 LETX=X+Hi60SUB 130:IF F^H>=8 THEN 100 110 LETH=-H/10:6OTO 90
128 125 130 148 176
PR INTДИАМЕТР ВНУТРЕННЕГО ПРОВОДНИКА Х=Х:6ОТО 70 FRINT F»Z-F LETF=60«AHC<<D«D+X«X-4 LETF=F-ZiRETURN!END
Для ZM=\00 Ом, D=\ см, L = 0,25 см, е=1 и погрешности Q = l-10~5 получим X — = 0,14038 см. Весьма широкое распространение находят полосковые несимметричные (рис. 7.9, а) и симметричные (рис. 7.9, б) линии. Микро-полосковые линии (МПЛ) изготавливаются
R при
w ~h~
W 1 ~2л~
W
T h
a
S
Рис. 7.9. Полосковая несимметричная (а) и симметричная (б) линии передачи (в разрезе)
в виде тонкопленочного печатного или напыленного проводника, нанесенного на диэлектрическую подложку с металлизированной нижней плоскостью (структура таких линий соответствует показанной на рис. 7.9, а). Расчет Za для таких линий довольно сложен, и в специальной литературе описан ряд формул, обеспечивающих расчет с различной погрешностью. Расчет Zn несимметричных микрополос-ковых линий с конечной толщиной t полоски может проводиться по формулам [2] Ед+1 при Г/ftSsl, ед-1
!2
1/2
с ,-1/2
W/h —С
60 при
1<> Jn 0,25
h J при W//K1
и
С=-
Программа 7.23. д-1 4,6 19 PRINTPACHET ВОЛНОВОГО СОПРОТИВЛЕНИЯ НЕСИММЕТРИЧНОЙ 2@ PRINT ПОЛОСКОВОй ЛИНИИ 30 INPUTВВЕДИТЕ ШИРИНУ ПОЛОСКИ Ы=Ы 40 INPUTВВЕДИТЕ ТОЛЩИНУ ПОЛОСКИ Т=Т 56 ШРиТВВЕДИТЕ ТОЛЩИНУ ДИЭЛЕКТРИКИ Н=Н 55 INPUTВВЕДИТЕ ДИЭЛЕКТРИЧЕСКУ» ПРОНИЦЙЕМОСТЬ EPS=E 60 LETK=W/H:LETP=H:IF K< = l/#PI/-2 THEN LETP=2*#PI*UI 70 LETM=K+<1.25*T/#PI/H>*(l+L06<2*P^T)> 80 LETH=8: IF K>=1 THEN LETN=.04!«(1-K)"2 90
100 110 115 120 130 140
IF K>=1 THEN 120 LET2=60»LOG<8-M+M/4)/SQR<:F):GOTO 148 LETZ=120*#PI/<M+1.393+.667*L06<M+l.444)) LET2=E/-SQR<F) PRINTВОЛНОВОЕ СОПРОТИВЛЕНИЕ 20=2:END
( «^эф
41-
+ 0,667 1 n [—Y~ + 1,444J I W, при
W , l,25f/, , ,
4лW
ГДе
+(1+I
при
W Контрольные примеры. W, см
/, см
h, см
Za, Ом
1
0,01
1
1,17
44,6 53
1
0,05
1
4,3
69,2 23
0,1
0,01
1
1
250, 426
2
0,05
1
1
87,0 86 Ширину W и отношение фазовой скорости v к скорости света с для отмеченных выше линий при заданных Za, t, h и ед 177 с точностью, достаточной для инженерных расчетов, можно вычислить с помощью формул [9] 5,98 Л 1 V/2/H7 *J W
= 1,25 Г1ехр[гл(Ед+1,41)|/:!/87 и/с=1/[(0,475бд + 0,67)1/2] для несимметричной линии и 4Л «7=0,59 Г L
exp --------2,11], /60) J систему телеграфных уравнений
дх
at
дх
Если на входе линии действует синусоидальный сигнал, то решение телеграфных уравнений имеет вид О=Ае~ух + Ёеух, где А и В — постоянные интегрирования, а y==\{R-\-j^L)(G-\-juiC) (7.16) — постоянная распространения. Ток в любой А В точке линии /=-----е~у"-\-----— для симметричной. В этих формулах h и t задаются в миллиметрах. Программа 7.24.
где (7.17) 10 PRINTРАСЧЕТ U И U/C ПОЛОСКОВЫХ ЛИНИЙ 20 PRINT ЛИНИЯ ПОЛОСКОВАЯ НЕСИММЕТРИЧНАЯ, КОД 1 30 PRINT ЛИНИЯ ПОЛОСКОВАЯ СИММЕТРИЧНАЯ, КОД 2 40 INPUT ВВЕДИТЕ КОД N 50 INPUT ВВЕДИТЕ ТОЛЩИНУ ПОЛОСКИ Т=Т 60 INPUT ВВЕДИТЕ ОТНОСИТЕЛЬНУЮ ДИЭЛЕКТРИЧЕСКУЮ ПРОНИЦАЕМОСТЬ Е=Е 70 INPUT ВВЕДИТЕ ВОЛНОВОЕ СОПРОТИВЛЕНИЕ ЛИНИИ Z=Z 80 IF N=l THEN i20 90 IF N=2 THEN 160 100 PRINT КОД НАБРАН НЕВЕРНО : 60T0 40 120 INPUT ВВЕДИТЕ ШИРИНУ ПОЛОСКИ Н=Н 130 LET Ы=1.25ж<<<5.98*Н)/<ЕХР.:2ж<<Е+1.41)"<1^2>>/87>>^-Т) 140 LET V=l/SSR<0.475ii!E+0.67) 150 60Т0 190 160 INPUT ВВЕДИТЕ ШИРИНУ ПОЛОСКИ В=В 170 LET A=EXP<Z*SQR<E>/6e> : LET W=0.59*<<<4*BVA>-2.1*T> 180 LET V=1/SGR<E> 190 PRINT ШИРИНА ПОЛОСКИ Ы=Ы 200 PRINTОТНОШЕНИЕ ФАЗОВОЙ СКОРОСТИ К СКОРОСТИ СВЕТА U/C=V 210 6ОТО 40 : END Для г„ = 75 Ом, < = 0,05 мм, h=\ мм и ед = 4,7 получим W = 0,825 мм и v/c = 0,587 для несимметричной линии, а при Z^ = 50 Ом, t = 0,5 мм, й = 2,5 мм и ЕД = 4,7 получим № = 0,349 мм и у/с = 0,461 для симметричной линии. Для реальных длинных линий с распределенными параметрами существенны потери, связанные с конечным погонным последовательным сопротивлением R (на единицу длины) и конечной погонной шунтирующей проводимостью G. При этом элементарный участок линии длиной dx представляется эквивалентной схемой (рис. 7.10), где L и С — погонные индуктивность и емкость линии. Для определения напряжения и и тока i в любой точке линии, лежащей на расстоянии х от ее начала, необходимо решить I Rdx Ldx — это характеристическое сопротивление линии. Из (7.16) следует, что у = а-т-/р, где а — постоянная затухания и р — фазовая постоянная. Постоянная а показывает, на сколько непер затухает сигнал на- единицу длины (в километрах) линии, а постоянная р показывает, на сколько радиан (или градусов) изменяется фаза на единицу длины линии. Если обозначить cpi = arctg (coL//?) и фг = = arctg(<oC/G), то
2
I
Характеристическое сопротивление линии (7.17) можно выразить в виде где &dx\ U+dU
dx
зх_ J= <pi-4>2)/ Программа 7.25. <p = Рис. 7.10. Схема замещения элементарного участка длинной линии 178 Для линии с /? = 167 Ом/км, 1 = =0,49 мГн/км, С = 0,05 мкФ/км и G = = 1,66 мкСм/км на частоте f = 1000 Гц получим \ZA =729,150Ом, ср= —44,321 град/км, а = 0,161 нп/км, р = 0,163 рад/км. При использовании линий в качестве элементов задержки или накопления электриПрограмма 7.25. IS PRINTРАСЧЕТ ПОСТОЯННЫХ РАСПРОСТРАНЕНИЯ ВОЛНЫ В ДЛИННОЙ ЛИНИИ 28 INPUTВВЕДИТЕ ПОГОННОЕ СОПРОТИВЛЕНИЕ СОП-КЮ R=R 38 INPUTВВЕДИТЕ ПОГОННУЮ ИНДУКТИВНОСТЬ (МГН/кЮ L=L 40 INPUTВВЕДИТЕ ПОГОННУЮ ЕМКОСТЬ <МКФ/КМ> С=С 50 INPUTВВЕДИТЕ ПОГОННУЮ ПРОВОДИИОСТЬ<МКОИ.КМ> G-G 60 LETL=L/1E3:LETG=G/1E6:LETC=C/1E6 70 1НРиТЗАДАйТЕ ЧАСТОТУ <ГЮ F=F: LETW=2*tPI*F 80 LETU=SSR<R*R+ <W*L>"2):LETX=SQR<6*6+<ЫжС> "2 > 90 LETA=ATN<W»L^R)sIF G=8 THEN LETB=#pi/2 108 IF 6<>8 THEN LETB=ATN<U*C/G> 120 PR I NTМОДУЛЬ СОПРОТИВЛЕНИЯ /Z/=SQR<U/X> ОМ 138 PR I NTФАЗОВЫЙ СДВИГ = DEG < (. A-B) /% > ГРАД 148 LETY=SQR<U*X)!LETZ=<A+BV2 150 PR INTПОСТОЯННАЯ ОСЛАБЛЕНИЯ АЛЬФА=V*C0S<2> 160 PRINTФАЗОВАЯ ПОСТОЯННАЯ ВЕТА=Y*SIN<Z) 178 GOTO. 78: END
ческой энергии часто применяются линии
моиндукции). Линии типа М имеют наилуч-
с сосредоточенными постоянными, т. е. элементами L и С (рис. 7.11),-в виде дискретных катушек индуктивности и конденсаторов.
шие характеристики при М = 1,27. Расчет искусственных линий проводится по
заданному
волновому сопротивлению
т т т Тт
Рис. 7.11. Искусственные линии К-типа (а) и М-типа (б)
При заданном времени задержки t3 = n-^LC, где п — число звеньев линии, такие искусственные линии имеют существенно меньшие габариты и массу, чем линии с распределенными постоянными. Если между смежными индуктивностями звеньев нет магнитной связи, линии относятся к типу К, в противном случае — к типу М (М — коэффициент взаивремени нарастания импульсов на выходе линии <ф при ее возбуждении прямоугольными импульсами и времени задержки t3. При этом для п, С и L можно использовать следующие выражения [9]: п = К\ (4/^Ф)3/2, С = и/Кгп1л и L = г Программа 7.26. 10 РКШТ РАСЧЕТ ПАРАМЕТРОВ ИСКУССТВЕННЫХ ЛИНИЙ ЗАДЕРЖКИ 20 PRINT ЛИНИЯ НА ФИЛЬТРАХ К-ТИПА/ КОД 1 38 PRINT ЛИНИЯ НА ФИЛЬТРАХ М-ТИПА, КОД 2 48 INPUT ВВЕДИТЕ КОД N
50 IF N=l THEN 60
55 GOTO 70 60 LET Kl=l.l s LET K2=1.07 s GOTO 180
78 IF NO2 THEN 98
88 LET Kl=0.94 : LET K2=1.2 s GOTO 180 90 PRINT КОД НАБРАН НЕВЕРНО i GOTO 48 108 INPUT ВВЕДИТЕ ВРЕМЯ ЗАДЕРЖКИ TZ=T1 110 INPUT ВВЕДИТЕ ДЛИТЕЛЬНОСТЬ ФРОНТА TF=T2 128 INPUT ВВЕДИТЕ ВОЛНОВОЕ СОПРОТИВЛЕНИЕ Z=Z 130 LET N=Kl*<ai/T.2>"1.5> 135 PRINT ЧИСЛО ЗВЕНЬЕВ N=N 148 INPUT ВВЕДИТЕ УТОЧНЕННОЕ ЗНАЧЕНИЕ N=N 158 LET L=<T1*ZV<N*K2> 168 LET C=T1/4K2*N*Z> 178 PRINT ИНДУКТИВНОСТЬ ЗВЕНЬЕВ L=L 130 PRINT ЕМКОСТЬ ЗВЕНЬЕВ С=С 198 GOTO 48 s END
179 Пример. Для 2л = 600 Ом, t3=\- 10~6 с и /ф = 5 10~ с получим « = 84,076. Округлив п до 85, находим (код 2) 1 = 5,882-Ю"6 Гн и С =1,634- 10"" Ф. Если при тех же исходных данных указать код 1 (линия типа К), то получим л = 98,384. Округлив п до 100, находим L = 5,607-10^6 Гн и С= 1,558- 1СГ11 Ф.
§ 7.5. Расчет усилителей При расчете усилителей на биполярных транзисторах бывает необходимо вычислять физические параметры транзистора по /г-параметрам (табл. 7.2) и наоборот (табл. 7.3) [34]. = # = 23,333 Ом, г6 = ЯВ=83,333 Ом, гк = = ЯЛ; = 3,3325- 105 Ом и а = А =0,97999. Для схемы с общим эмиттером (код 2) при /г, ,=2800 Ом, /ii2 = 2 -10~3 См, /г2[ =60 и /г22 = 5-10~5 См получим гэ = /? = 40 Ом, гв = #В = 360 Ом, rm = RM = l,22- 106 Ом и р = Л = 0,9836. Программа 7.28. Пример. Для схемы с общим эмиттером (код 1) при гэ=/?1=25 Ом, r6 = R2=400 Ом, гк = /?3=1-106 Ом и а = А =0,985 получим Ли =2,064- 103 Ом, ft,2= 1,664- 10~3, /г21 = = 65,556 и /i22 = 6,656-10"5 См. Для схемы с общей базой (код 2) и указанных выше исходных данных получим Ац =30,998 Ом, Таблица 7.2 Формулы для расчета физических параметров биполярного транзистора по ft-параметрам соответствующей схемы включения
Физический параметр Схема с общей базой Схема с общим эмиттером Сопротивление эмиттера гэ Сопротивление базы гб Сопротивление коллектора гк Сопротивление гм = аг* Коэффициент передачи тока эмиттера а (1+Л2|) ft. Л22
f
1
22
-
12
2
72 1
2
^21
2/ А
t 1
ft Л ,
+ f
t,
"Ь1
1-/1, Ли-" 1+Л2 Таблица 7.3 Формулы для расчета Л-параметров биполярного транзистора по физическим параметрам Л-параметр Схема включения
Ли
с общим эмиттером
с общей базой
гц+ f ,ГгэГ" аг
(1—а) /-бГк
Л21
с общим коллектором
Лб + ОЛк
1
1
Гэ + ^к — а г„ 1
г. + гш-аг. Программа 7.27. ft,2 = 3,998-104, Л21 = — 0,985 и ft22 = = 9,996-10~7 См. Наконец, для схемы с общим Пример. Для схемы с общей базой коллектором (код 3) получим /г,,= (код 1) при /г,,=25 Ом, ft,2 = 0,25-10"3 См, =2,064-103 Ом, /ii2 = 0,9983, Л21= — 66,556 ft2, = — 0,98 и /г22 = 3-10~6 См получим г,= и /г22 = 6,656-,10~5 См. 180
Программа 7.27. 18 PRINT РАСЧЕТ ФИЗИЧЕСКИХ ПАРАМЕТРОВ ТРАНЗИСТОРА ПО Н-ПАРАМЕТРАМ 29 PRINT СХЕМА С ОБШЕЙ БАЗОЙ* КОД 1 38 PRINT СХЕМА С ОБЩИМ ЭМИТТЕРОМ/ КОД 2 46 INPUT ВВЕДИТЕ ВХОДНОЕ СОПРОТИВЛЕНИЕ HI 1 = HI
56 INPUT ВВЕДИТЕ КОЭФФИЦИЕНТ ОБРАТНОЙ СВЯЗИ ПО НАПРЯЖЕНИЮ Н12=Н2 68 INPUT ВВЕДИТЕ КОЭФФИЦИЕНТ ПЕРЕДАЧИ ПО ТОКУ Н21=НЗ 70 INPUT ВВЕДИТЕ ВЫХОДНУЮ ПРОВОДИМОСТЬ Н22=Н4 80 INPUT ВВЕДИТЕ КОД N 90 IF N=l THEN 120 100 IF N=2 THEN 180 110 PRINT КОД НАБРАН НЕВЕРНО : &OTO 80 128 LETR1=H1-<1+H3>*H2H4!LETR2=H2-H4:LETR2=H2/-H4:LETR3=<1-H2VH4 150 LETR4=-<H2+H3)/H4!LETA=-<H2+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+H3V<1+H3> 238 PRINT СОПРОТИВЛЕНИЕ ЭМИТТЕРА R=R1 240 PRINT СОПРОТИВЛЕНИЕ БАЗЫ RB=R2 258 PRINT СОПРОТИВЛЕНИЕ КОЛЛЕКТОРА RK=R3 268 PRINT СОПРОТИВЛЕНИЕ RM=R4 278 PRINT КОЭФФИЦИЕНТ ПЕРЕДАЧИ ТОКА ЭМИТТЕРА А=А 230 60Т0 40:END Программа 7.28. 10 PRINT РАСЧЕТ Н-ПАРАМЕТРОВ ПО ФИЗИЧЕСКИМ ПАРАМЕТРАМ ТРАНЗИСТОРА 28 PRINT СХЕМА С ОБЩИМ ЭМИТТЕРОМ.. КОД 1 38 PRINT СХЕМА С ОБШЕЙ БАЗОЙ/ КОД 2 40 PRINT СХЕМА С ОБЩИМ КОЛЛЕКТОРОМ, КОД 3 58 INPUT ВВЕДИТЕ СОПРОТИВЛЕНИЕ ЭМИТТЕРА R=R1 60 INPUT ВВЕДИТЕ СОПРОТИВЛЕНИЕ БАЗЫ RB=R2 78 INPUT ВВЕДИТЕ СОПРОТИВЛЕНИЕ КОЛЛЕКТОРА RK=R3 80 INPUT ВВЕДИТЕ КОЭФФИЦИЕНТ ПЕРЕДАЧИ ТОКА ЭМИТТЕРА А=А 98 INPUT ВВЕДИТЕ КОД N 180 IF N=l THEN 140 110 IF N=2 THEN 190 120 IF N=3 THEN 240 130 PRINT КОД НАБРАН НЕВЕРНО : 60T0 98 140 LET V=R1+R3-A*R3 : LET H1=R2+R1*R3Y
150 LETH2=R1/V:LETH3=<A«R3-R1VY:LETH4=1/V:6OTO 280 190 LET M=R2+R3 : LET Hl=Rl + <a-A>*R2*R3VM 200 LETH2=R2/M:LETH3=-;R2+A«R3VM:LETH4=bM:60T0 288 240 LET Y=Rl+R3-As«R3 : LET H1=R2+R1*R3/Y 250 LETH2=R3*K 1-AW: LETH3=-R3--Y: LETH4=1 A1 280 PRINT ВХОДНОЕ СОПРОТИВЛЕНИЕ Н11=Н1 290 PRINT КОЭФФИЦИЕНТ ОБРАТНОЙ СВЯЗИ ПО НАПРЯЖЕНИЮ Н12=Н2 388 PRINT КОЭФФИЦИЕНТ ПЕРЕДАЧИ ПО ТОКУ Н21=НЗ 310 PRINT ВЫХОДНАЯ ПРОВОДИМОСТЬ Н22=Н4 320 60Т0 90:END Параметрами элементарных усилительных коэффициент усиления по напряжению Ки = каскадов (см. рис. 7.12 и эквивалентные =Umm/Ut>., сквозной коэффициент усиления схемы рис. 7.13) на средних частотахявляпо напряжению КЕ=иВыу:/Ешх и выходное ются: входное сопротивление /?вх = (Лх//вх, сопротивление А>вь,х = Л£Лых/А/Вых, где Д/вь[х— коэффициент усиления по току /С/ = /Вых//вх, изменение выходного тока, вызванное изме-
у, Жь
Рис. 7.12. Элементарные каскады на биполярных транзисторах с общей базой (а), общим эмиттером (б) и общим коллектором (в) 181
Рис. 7.13. Эквивалентные схемы каскадов с общей базой (а), общим эмиттером (б) и общим коллектором (в)
пением нагрузки. Резистивные цепи питания каскадов на рис. 7.12 и 7.13 не показаны, их учет на параметры каскада тривиален. Приведем формулы для расчета указанных параметров для каскада с общей базой: (1—а)гк + Я„ Гк Ан Гк
Ч£
г,(г, + Я„)+(гв + Ян) [и (1 - а) + лэ + Я„] для каскада с общим эмиттером: — (агк — гэ)
— (аи — гэ)Я„ — (агк
,/ для каскада с общим коллектором: Гк (r,4-RJ) Программа 7.29. Пример. Для схемы с общей базой (код 1) при гб = 400 Ом, гэ = 25 Ом, гк = = Ы06 Ом, А>„ = 34,946 Ом, а = 2,534-105 Ом получим К; = 0,9751, /(„=139,519 и КЕ = = 36,130. Для схемы с общим эмиттером (код 2) при Гб = 400 Ом, гэ = 25 Ом, гк = = 1-10 Ом, Я„ = Ю00 Ом, а = 0,98 и Я„ = = 5000 Ом расчет дает Явх = 1403,996 Ом, Яв Ы* = 3,722-104 Ом, К, = -39,16, Ки = = — 139,459 и КЕ=— 81,447 (знак — указывает на инвертирование фазы выходного сигнала по отношению к фазе входного сигнала). Для схемы с общим коллектором (код 3) при лб = 400 Ом, гэ = 25 Ом, гк = = 1 - 10ѐ Ом, Я„=Ы0" Ом, а = 0,98 и RH = = 500 Ом получаем Я>х = 2,598-104 Ом, Я„ых = 2,309- 102 Ом, Л", = 48,721, К,, = 0,9377 и /СЕ = 0,6771. Расчет по приведенной методике дает параметры каскадов в области средних частот. Искажения в области низких и высоких частот при активной нагрузке легко учитываются (см. .[34]). Если нагрузка комплексная, расчет несколько усложняется. В качестве примера рассмотрим инженерный расчет параметров каскадов с общим истоком и стоком на нолевых транзисторах [40]. Каскад с общим истоком (рис. 7.14, а) рассчитывается по следующему алгоритму. 1. Задаем исходные данные: сопротивление затвора Я3, сопротивление стока Яе, выходное сопротивление транзистора Яси, сопротивление генератора Яг, сопротивление нагрузки 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 ВВЕДИТЕ СОПРОТИВЛЕНИЕ НАГРУЗКИ RN=R0 90 INPUT ВВЕДИТЕ КОД N 100 IF N=l THEN 140 110 IF N=2 THEN 200 120 IF N=3 THEN 260 130 PRINT КОД НАБРАН НЕВЕРНО ! 60T0 90 14S LET V=R3+R1+R0 : LET R4=R2+Rl*<a-A>*R3+R0>/Y 150 LET X=A*R3+R1 : LET К1=УУЧ 160 LET K2=<X*R0V<R2*Y+Rl*R3*<i-ft:>+R0*Rl) 170 LET K3=X*R0/<<R+R2>*V+Rl*R3*a-A>+R0*Ri;> 180 LET R5=R3+R1*<1-X/<R2+R1+R)> 130 60TO 318
200 LET M=R3*<1-A>+R2+R0 :LET R4=R1+R2*<R3+R0VM
210 220 230 240 250 260 270 280 290
LET N=A*R3-R2 : LET Kl=-N/M LET K2=-N*R0/<R2*<R3+R0)+R1*M> LET K LET R GOTO 310 LET X=R2+R@ t LET V=R3*<1-A>+X s LET R4=R1+R3*X/-Y LET K1=R3/Y LET K2=R3*R0/(R3*X+R1*Y> LET K3=R3*R0.<-<R3*X+<R1+R>*Y)
308 LET R5=R2+<Rl+R)*<R3*a-AV<R3+Rl+R)> 310 PRINT ВХОДНОЕ СОПРОТИВЛЕНИЕ R=R4 320 PRINT ВЫХОДНОЕ СОПРОТИВЛЕНИЕ R=R5 330 PRINT КОЭФФИЦИЕНТ УСИЛЕНИЯ ПО ТОКУ К1=К1 340 PRINT КОЭФФИЦИЕНТ УСИЛЕНИЯ ПО НАПРЯЖЕНИЮ KU=K2 350 PRINT СКВОЗНОЙ КОЭФФИЦИЕНТ УСИЛЕНИЯ ПО НАПРЯЖЕНИЮ KZ= 360 60Т0 90 s END КЗ Рис. 7.14. Каскады с общим истоком (а) и общим стоком (б) на полевых транзисторах
а Rn, сопротивление в цепи истока /?„, входную емкость Сзи, проходную емкость Сзс, выходную емкость Сси, емкости разделительных конденсаторов С\ и Сг, емкость шунтирующего /?и конденсатора Си и крутизну транзистора S в рабочей точке. 2. Вычисляем входное RtI = R3 и выходное Явых = йсиIIRc = Леи Rc/(Rc + Rc) сопротивления каскада. 3. Вычисляем коэффициенты усиления I*
__ ^н __^
ДеиАсАи
~тг— и„ 4. Находим характеристические постоянные времени для области малых времен: Тех = I Сзи + Сзс(1 + Кио)} Rr Rs/(Rr + #з), ТВЫХ=(А>С||Л>„||А>С„) (СЗС.+ СС„), Твх.о = Rr[Cm + Сзс СсиДСзс -(- Сси)], Тэкв ^Твх ~\-Твых.
. 5. Вычисляем коэффициент т= = Твх.о ТВЫХ/TLB, характеризующий режим работы каскада. Для данного каскада при больших С„ (С„ выбирается исходя из подавления отрицательной связи на низких частотах) значения т<0,25 и режим каскада апериодический. 183
6. Вычисляем времена нарастания каскада (я = 2,2т9квУ1 — 2т и добротность £) = = S/2,2(C3H + CC«). 7. Переходная характеристика каскада в области малых времен в операторной форме имеет вид Л(р) = (1 +ртэкв + р2тэкв"г)~. 8. Находим постоянные времени каскада в области больших времен Ti = (/?r + /?3) С\, T2=(Rc + R«) С2> TH=(/?H||1/S) С„. 9. По заданной длительности импульсов tH оцениваем спады вершины импульсов Ai = = U/i\, Д2 = 4/т2, Лз = ^и/тн и общий спад А = А1 + Д2 + Аз. Если задано /?и = 0, то следует полагать Д3 = 0. Программа 7.30. 3. Находим характеристические постоянные времени в области малых времен твх = - Яг [Сз„ (1 - /С„,) + Сзс], твых=(/?, || Я„ || 1 /S) С, Твхо=/?г (Сз„+Сзс) И Тэкв=ТВх + Твых.
4.
Определяем
коэффициент
режима
m = TaXQ^Bbix/TsKB-
5. Если т<; 0,25, режим работы является апериодическим (при т = 0,25 — критическим), причем время нарастания каскада <» = 2,2т,«ву1—2т. 6. Если т> 0,25, режим работы является колебательным и операторное выражение для переходной характеристики имеет вид h(p) = = (1 +ртэ„в + р2тэквя)~1, где значения тэкв и т соответствуют полученным выше.
10 PRINTУСИЛИТЕЛЬ С ОБЩИМ ИСТОКОМ 29 INPUTВВЕДИТЕ R3>RC>RCHRbR2,R3 30 INPUTВВЕДИТЕ Rr,RH,RHR4/R5,R8 49 INPUTВВЕДИТЕ СЗИ>СЗС/ССИСЬС2,СЗ 50 INPUTВВЕДИТЕ S=S 60 LET R6=RULET R7=R3*R2/<R3+R2:> 70 PRINTR BX0AA=R6:PRINTR BblX0AA=R7
45 INPUTВВЕДИТЕ СЬС2,СИС4,С5,С6
88 LET A=R2*R3*R5/<R2*R3+R2*R5+R3*R5> 90 LET K=<Rlx-<Rl+R4))«S*flsPRINTKU=K 100 LET K1=S*A:LET T1 110 LET T2=<C2+C3>*A:LET T3=R4*<C1+C2*C3/<C2+C3>:S
115 120 130 140 150 160 170 180 190 200 210 220 230 240
PRINTTBX=TbTBHX=T2 LET T4=T1+T2:LET M=T3*T2^T4"2 PRINTH<P> = lAl+P*T4+P-2*T4~2*M>/niE PRINTT4=T4sPRINTM=M LET T5=2.2*T4*SQR<l-2*PniLET D=S/2.2/<Cl+C3> PRINTT НАРАСТАНИЯ=Т5!PRINTДОБРОТНОСТЬ ПТ=В PRINTДЛЯ ОБЛАСТИ БОЛЬШИХ ВРЕМЕН1 LET T6=<R4+R1)*C4:LET T7=<R2+R5)*C5 LETT8=C6*R8/< R8*S+1> PRINTTBX*T6/TBWX=T7/T ИСТ.ЦЕПИ=Т8 INPUTВВЕДИТЕ Т ИМПУЛЬСА=Т0 LETZ1=T0/-T6!LETZ2=T8^T7!LETZ3=0!IF T8>0 THEN LETZ3=T0/T8 LET Z=Z1+Z2+Z3 PRINTСПАД ПЛОСКОЙ ВЕРШИНЫ ИМПУЛЬСА Z=Z
250 60Т0 210:END
Пример.
Для
4
Яз=Ы06 3
Ом,
Rc = = 2 103 Ом, «с,= Ы05 Ом, Яг=Ы03 Ом,
л„=ыо ом, /;и=ыо 0м, С3„=1О-1О-12Ф,
Сзс=Ы0-12 Ф, Сс„ = 5-10^12 Ф, С,= = 0,1 10"6 Ф, С2= 1 Ю-6 Ф, С„ = 100-10~6 Ф, = 5-10~3 А/В получим )?,,= l-10s Ом, 0 Ом, К и = 8,189, твх = Твых = 9,836-10-9 с, т,кв = , т = М= 1,266-10"Л t,= > = 1,515-108 1/с, 2 т2=1,2-10с, 6 3
?и= 100- Ю-6 с,
т,= т„ = А= /
/?.„= 1,961-103 = 1,918-Ю-8 с, = Г4 = 2,90Ы0-8 = 5,516-Ю-8 с, = 1,001-ГО"1 с, = 1,667-10~2 с, для = £= 1,533-КГ2. Каскад с общим стоком (истоковый повторитель), работающий на емкостную нагрузку (рис. 7.14,6), рассчитывается по следующему алгоритму. 1. Задаем исходные данные: сопротивления затвора Мз, истока /?„, генератора Rr, нагрузки /?н, емкости Сзи, Сж и Сн (емкость С„ включает и емкость Сс„) и крутизну S. 2. Находим коэффициенты передачи по напряжению Ки =S/?HH/(1 +5/?ик), где Rnn = = /?,/?H/(/?H + /?H), и KU = R3KUJ(R3 + Rr), входное Rnx = R3 и выходное /?ВЫх = /?н N (1 /S) = = #н/(1+S/?H) сопротивления. 184 При необходимости могут вычисляться постоянные времени в области больших времен T, = Ci(/?r + tf3), т.2 = С2(#вых + «и) и относительный спад вершины импульса A = ^H/ + ^„/т2 заданной длительности tH. Программа 7.31. Пример. Для Я,= 2103 О /?1103 О Ом, #„ = 4
рр = 2-103 Ом, /?г=1-103 Ом, /?„=1-104 Ом, С3„ = 10-10-12 Ф, Сзс=1-10-12 Ф, С„ = = 100-10~12 Ф и S = 5-103 А/В получим /?вх=Ы06 Ом, /?вых= 1,818-102 Ом, Ки = = 0,892, твх = 2,071 10"9 с, тВЫх= 1,790-10~8 с, тЭкв= 1,993-10~8 с, режим работы колебательный при т = 0,495 (программа выдает формулу для h(p) при Тэкв = 7*4). Для усиления импульсных сигналов с малыми временами нарастания и спада (порядка 1 не) применяются усилители с распределенным усилением. Расчет такого усилителя на мощных СВЧ МДП-транзисторах с микрополосковыми линиями задержки (рис. 7.15) производится по алгоритму. 1. Задаем исходные данные: входное и выходное сопротивления линий ZBX и ZBblx, число транзисторов в каскаде N, их круПрограмма 7.31. 18 PRINTРАСЧЕТ ИСТОКОВОГО ПОВТОРИТЕЛЯ 20 INPUT ВВЕДИТЕ R3> RH> ИГ, RH Rb R2r R3, R4 38 INPUTВВЕДИТЕ СЗИ>СЗОСНСЬС2>СЗ 40 INPUTВВЕДИТЕ S=S 50 LETR5=R1:LETR6=R2/<R2*S+1> 68 PRINTR BX0AA=R5s PRINT R BblX0AA=R6 70 LET A=S*R2*R4-<R2+R4+S»R2*R4> 88 LET K=Rl»A--4Rl+R3>iPRINTKU=K 98 LET K1=A:LET Tl=R3«CCi«<l-Kl)+C2> 108 LETT2=C3*R6*R4/<R6+R4>:LETT3=R3*<C1+C2) 118 LET T4=T1+T2:LET M=T3*T2/T4"2 115 PRINTTBX=Tl:PRINTТВЫХ=Т2:PRINTТЭКВ=Т4 120 IF M>.25 THEN 180 130 IF M<.25 THEN 150 148 PRINTPEWHM РАБОТЫ КРИТИЧЕСКИЙ:GOTO 160 150 PRINTPEWHM РАБОТЫ АПЕРИОДИЧЕСКИЙ 160 LET T5=2.2*T4*SQR<1-2*M> 170 PRINTT НАРАСТАНИЯ»Т5:GOTO 198. 180 PRINTPEWUM РАБОТЫ КОЛЕБАТЕЛЬНЫЙ
198 PRINTH<P> = l-a+P*T4+P"-2*T4"2*PO> ГДЕ 288 PRINTT4=T4:PRINTM=Ms END
Рис. 7.15. Усилитель с распределенным усилением на мощных МДП-транзисторах с микро-полосковыми линиями
задержки Выходная МПЛЗ
Входная МПЛЗ
+£,, тизну S, емкость нагрузки С„, выходную СВых = Сси и проходную С„роход = С3с емкости транзисторов, диэлектрическую проницаемость е = £ и толщину Я диэлектрика печатной платы, толщину металлических полосок микро-полосковых линий D. 2. Вычисляем коэффициенты усиления Дус = NSZBUXZH/ (ZBbix ~Ь -£н) ,
Аусмакс^ Л/о/вых.
3. Находим время установления в режиме согласования (ZH = ZBblx), где Со = С3и + Сзс ty=l,lZBbIX(Сзи + Сэс) VF при С„ = О, приСн>0. = 1,25 4. Находим ширину полоски линий W =
5 9Я
! 1
7J 1-Д где Z = exp (ZV e-fl,41/87 ДЛЯ ВХОДНОЙ И Z = ZBbix ДЛЯ ВЫХОДНОЙ ЛИНИЙ.
5. Находим относительную скорость распространения сигнала в линиях v/c = = 1/л/0,475е + 0,67, где с — скорость света. Расстояние / между транзисторами должно быть таким, чтобы время прохождения сигнала между ними было равно или превышало значение ty при С„ = 0. Программа 7.32. 18 PRINT-УРУ НА МОЩНЫХ МДП-ТРАНЗИСТОРАХ И МЛЗ 28 INPUTВВЕДИТЕ ВОЛНОВЫЕ СОПРОТИВЛЕНИЯ ZBX>ZBblXZbZ2 38 INPUTВВЕДИТЕ ЧИСЛО ТРАНЗИСТОРОВ В КАСКАДЕ NN 40 INPUTВВЕДИТЕ КРУТИЗНУ ТРАНЗИСТОРА SS 50 INPUTВВЕДИТЕ ПАРАМЕТРЫ СХЕМЫ RH>CHR1.-C1 60 INPUTВВЕДИТЕ СВЫХ,СПРОХОД ТРАНЗИСТОРАС2»СЗ 70 INPUTВВЕДИТЕ ДИЭЛ.ПРОНИЦАЕМОСТЬ ЕЕ 8й INPUTВВЕДИТЕ ТОЛЩИНУ ДИЭЛЕКТРИКА НН 98 INPUTВВЕДИТЕ-ТОЛЩИНУ МЕТАЛ.ПОЛОСКИ ВР:PRINT 100 LET K=N*S*Z2*R1,-<Z2+R1>:LET K1=N*S*Z2 110 PRINTK!>C=K! PR I NTКУС МАКС=К1 120 LET C=C2+C3: IF Cl=8 THEN 148 138 LE T T1 =2. 2*Z2*SQR (N«C"2+C 1 "2 >. 60T0 158 148 LET T1=1.1*Z2*C*SQR<N> 158 PRINTTyCT=Tl:LET Al=EXP<Zl»SQR<E+1.41>-87> 168 LET A2=EXP<Z2*SQR<E+1.41V87) 178 LET W1=1.25»K5.98*H.A 1-ГО:LET W2=1.25*<5.98*H^A2-D) 180 PR INTШИРИНА ВХ.ЛИНИИ*Wl;ШИРИНА ВЫХ.ЛИНИИ=Ы2 190 LET U=1-SQR<. 475«E+. 67> 288 PRINTОТНОСИТ.СКОРОСТЬ PACnP0CTPAHEHH3=U:END 185 Пример. Для ZBX = 50 ОМ, ZBblx = 75 Ом, ЛГ = 5, S = 0,025 А/В (транзисторы КП905), «„ = 75 Ом, С = 0, СВЬ1Х=1,6-1(Г12 Ф, Спроход = 0,4-10^12 Ф, е = 4,7, //= 1 мм и d = 0,l мм получим: Кус = 4,6875, /СуСмакс = = 9,375, густ = 3,690-1 (Г10 с, №„„=1,68 мм, U7BMX = 0,76 мм и v/c = 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.
0 PR КОМПЛЕКС ПРОГРАММ ДЛЯ 010 INT АВТОМАТИЧЕСКОГО 0 PR ПРОЕКТИРОВАНИЯ АКТИВНЫХ 028 INT ФИЛЬТРОВ. « PR РАССЧИТЫВАЮТСЯ СЛЕДУЮЩИЕ ВИДЫ 030 INT ФИЛЬТРОВ 8 PR НИЗКОЧАСТОТНЫЕ 848 INT 0 PR А/ДБ «-КОЭФФИЦИЕНТ УСИЛЕНИЯ? 058 INT 8 PR ! <QP=2) 060 INT 0 PR 878 INT 0 PR К (жжжжжжжж! ж 088 INTI Ж 8 PR 898 INT 8 PR ! ! ж 108 INT Й PP 1 1 Й TWT .1 XKf
К Г X (\1Г1 I
PR 8 INT 128 8 PR 130 INT 8 PR 148 INT 0 PR 158 INT 0 PR 160 INT 8 PR 178 INT 98
i-----------------i i
FOJ) (Т-ФАЗА)
8 !жжжжжжжж !
*
-
8 PR 180 INT 8 PR 190 INT 180 8 PR 280 INT 0 PR 218 INT 8 IN 220 PUT 0 PR 238 INT 0 PR 248 INT
ж-----------------i_ij 1 UI
ЫМ УР
! жжжжжжжж
UP
X t
ВЫСОКОЧАСТОТНЫЕ
0 PR 258 INT 0 PR 260 INT 8 PR 278 INT 8 PR 280 INT 0 PR 298 INT 0 PR 308 INT 8 PR 318 INT 0 PR 320 INT 8 PR 330 INT 186
0348 0356 0368 0390 0400 0410 0420 0430 8440 0450 0460
А>ДБ «-КОЭФФИЦИЕНТ УСИЛЕНИЯ) ! !
ШР=2) жж
!
ж! ж
К !---ж-! —жжжжжжж !
ж
!
! ж
!
!ж
!
*------!-------------------L6T и
l PRINT ЫР PRINT F<W) <F-*A3A) PRINT ! 0370 PRINT 180 !*жжж 0380 PRINT PRINT 90 !-----ж PRINT ! !ж PRINT 0 !-----! -жжжжжжжж------L&T U PRINT1 WP PRINT INPUT X PRINT PRINT
!
ж
0470 PRINT П0Л0СН0-ПР0ПУСКАКШ1ИЕ
0480 PRINT А/ДБ tА-КОЭФФИЦИЕНТ УСИЛЕНИЯ) 0490 PRINT ! <QP=18) 0500 PRINT К !-----ж 8510 PRINT ! *!* 0520 PRINT ! *!» 0530 PRINT !*!!!* 0540 PRINT !*!!!* 0558 PRINT ! * !!! * 0560 PRINT !ж !!! ж 0578 PRINT *----!!!----------*---L&T Ы 0580 PRINT Ы1 ЫР Ы2 8590 PRINT F<U) <F-*A3A) 0688 PRINT 90 !жжжжж 8620 PRINT ! ж 0630 PRINT 0 !-----ж 0648 PRINT ! № 8650 PRINT -90 !-----!-жжжжжжжжжж----L6T W 0660 PRINT WP 0678 INPUT X 0680 PRINT 8690 PRINT 0700 PRINTП0Л0СН0-ЗАГРАЖДАЮЩИЕ 0710 PRINT ЙгАЕ <А-ю:ОФЧ>ИЦИЕНТ УСИЛЕНИЯ) 0728 PRINT ! Й730 PRINT К !жжжжжжжж жжжжжжжж 8748 PRINT ! ж ж 0750 PRINT1 ! ж 0768 PRINTКжОР,-ог!---------ж 8770 PRINT ! ! 8788 PRINT !---------!----------LGT У 0790 PRINT ЫР 0800 PRINT F<U) <F-fft3A) 0810 PRINT 90 ! 0828 PRINT ! 0830 PRINT ! ж 0840 PRINT ! * * 0850 PRINT 8 !жжжжжж ж жж*жжж 8860 PRINT ! ж ж! 0870 PRINT ! ж ! 0888 PRINT ! ! 8890 PRINT -98 !---------!----------L6T W 0908 PRINT ЫР " INPUT X
! 0610 PRINT
0918 PRINT 8928 PRINT 0938 PRINTBCEnPOnyCKftWUIHE
0948 PRINT А>ДБ <А-КОЭФФИЦИЕНТ УСИЛЕНИЯ) 0950 PRINT ! 0968 PRINT К !жжжжжжжжжжжжжжжжж 0970 PRINT ! 0980 PRINT ! 0990 PRINT !--------------------L6T Ы 1000 PRINT F<W) (F-ФАЗА) 1010 PRINT ! 1026 PRINT 0 !жжжжжжжж 1030 PRINT ! ж 1040 PRINT -180 !---------ж 1050 PRINT ! !* 1060 PRINT -360 !---------!-жжжжжжжж— LGT Ы 1070 PRINT WP=WZ 1080 PRINT 1090 PRINT 1100 PRINTВ ПРИВЕДЕННОМ НИШЕ СПИСКЕ « 1110 PRINTВЫБЕРИТЕ ТИП ФИЛЬТРА.НАБЕРИТЕ LOAD<N> 1120 PRINTTflE <N>-HOMEP ФИЛЬТРА В АПОСТРОФАХ. 1130 PRINTHAMMHTE КЛАВИШУ ПС!INPUT X 1140 PRINT 1150 PRINT Ц60 PRINTСПИСОК ФИЛЬТРОВ Ц70 PRINTНИЗКОДОБРОТНЫЕ 1180 PRINT1.НИЗКОЧАСТОТНЫЙ Ц90 РР^Тг.ПОЛОСНО-ПРОПУСКАКМИй С РЕЗИСТИВНЫМ ВХОДОМ
1200 1210 1220 1230 1240
PRINTЗ.ПОЛОСНО-ПРОПУСКАЮШИй С ЕМКОСТНЫМ ВХОДОМ PRINT4.ВЫСОКОЧАСТОТНЫЙ PRINT бА.ВСЕПРОПУСКАКИИИй-ДОБРОТНОСТЬ 0.5 ПОЛОЖИТЕЛЬНАЯ РРШТЭБ.ВСЕПРОПУСКАИШИй-ДОБРОТНОСТЬ 0.5 ОТРИЦАТЕЛЬНАЯ РР1НТб.ВСЕПРОПУСКАЮШИй
1250 PRINT7.n0fl0CH0-3ArPAHiflA»WHft 1260 PRINT
1270 1280 1290 1300 1310 1320 1330 1340 1350 1360 1370 1380 1390 1400 1410 1420 1430 1440 1450 1460 1470 1480 1490 1500 1510 1520 1530 1540 1550 1568
PRINTCPEДНЕДОБРОТНЫЕ PRINT8.НИЗКОЧАСТОТНЫЙ PRINT9.n0fl0CH0-nP0nyCKA»MIWi С РЕЗИСТИВНЫМ ВХОДОМ PRINT10 ПОЛОСНО-ПРОПУСКАЮШИй С ЕМКОСТНЫМ ВХОДОМ PRINT11.ВЫСОКОЧАСТОТНЫЙ PRINT12.BCEnPOnyCKAKH№ PRINT 13.ПОЛОСНО-ЗАГРАЖДАЮШИй PRINT14.НЧ И ВЧ С НУЛЕМ ПЕРЕДАЧИ PRINT15.ПОЛ0СН0-ЗАГРАЗДАЮЩИЙ НЧ И ВЧ С НУЛЕМ ПЕРЕДАЧИ INPUT X PRINT PRINT PRINTВЫСОКОДОБРОТНЫЕ PRINT16.НИЗКОЧАСТОТНЫЙ PRINT17.ПОЛОСНО-ПРОПУСКАИВИй PRINT18.ВЫСОКОЧАСТОТНЫЙ PRINT19.ВСЕПРОПУСКАЮШИЙ PRINT20.ПОЛОСНО-ЗАГРАИДАКИИИй PRINT21.H4 И ВЧ С НУЛЕМ ПЕРЕДАЧИ PRINT22.УНИВЕРСАЛЬНЫЙ.СХЕМА 1 PRINT23.УНИВЕРСАЛЬНЫЙ.СХЕМА 2* PRINT PRINT PRINT PRINT PRINTПРИ НЕОБХОДИМОСТИ ПОВТОРНОГО ПРОСМОТРА СПИСКА PRINTНАБЕРИТЕ 6ОТО 1160 PRINT PRINT PRINT
1578 1588 1590 1600 1610 1620
PRINT PRINT PRINT PRINT PRINT END
4STOP
Принципиальные схемы фильтров приведены в поле операторов PRINT в начале каждой программы. Поэтому отдельно в виде рисунков они не приводятся. При расчетах частоты задаются в герцах, сопротивления — в омах и емкости конденсаторов — в фарадах. Необязательный параметр (т. е. не влияющий на АЧХ и ФЧХ, но влияющий на номиналы расчетных резисторов и конденсаторов) в примерах помечен знаком *. Добротность <7P = Q однозначно определяет характер переходных процессов (апериодический, критический или колебательный). Обычно достаточно знать передаточную функцию в операторном виде. Однако если пользователь желает провести расчеты АЧХ, ФЧХ или ПХ по заданной передаточной функции, он может воспользоваться формулами для основных параметров фильтров, приводимыми перед каждой программой. Общий объем памяти, занимаемый всеми 24 программами расчета АФ, составляет около 0,3 Мбайт. Низкодобротные фильтры (Q = <7P^2). 1. Низкочастотный. Передаточная функция T(s): 7"(s) = = 6,6393365-103, #12 = 9,9590048-103, R3 = = 13,49059-103, ПУЧ = 1,8652139. Пример В. Вводимые параметры: F = = 2,3-103, Q=l,2, #12=1-1090, С2 = 27-10"9, С4 = 3,3-10~9, ЛГвх = 1 Результаты расчета: Ru =3,9836019-103, #12=1-1090, R3 = = 13,49059-103, ПУЧ = 1,8652139. 2. Полосно-пропускающий с резистивным входом. 2 -K{(a>p/qp) s/[s +(a>p/qp) Постоянный коэффициент усиления К: Я=#12/(Я„+Л12). Произведение усиление — чувствительность (ПУЧ): nY4 = q^ Программа 7.34. (#, + #12), cop= tf,C7/(l + C2/C3), Ли+#12), ^ [1 + (С3/С2)]. Программа 7.35. Пример А. Вводимые параметры: F — = 2,3-103, Q = l,4, С2 = 68-10~9, Сз=15-10-9, у^*х= 1,5. Результаты расчета: Ri\ =949,77374, /?i2= 1,5965215-103, #4 = 7,8831221-103, К = = 1,5, ПУЧ = 2,3923529. Пример В. Вводимые параметры: F = = 2,3-103, Q = l,4, С2 = 68-10-9, Сз=15-10-9, #|2=1 109°, /СЁх = 0. Результаты расчета: #,,=595,50604, #12 = Ы090, #4 = 3 = 7,8831221 10 , К = 2,3923529, ПУЧ = = 2,3923529. 3. Полосно-пропускающий с емкостным входом. T(s) = -K{ (mp/qp) s/ [s2 + (<»P/qP)
01 PRINTРАСЧЕТ ФИЛЬТРА НЧ НИЗКОДОБРОТНОГО 02 PRINT 03 PRINT С2 === ОУ ! R3 ----<-!====!—*-!====!—ж----!+ | Rll ! ! R12 ! ! - ! C4 C4
! !
—!-
!
! !
!
!
!_____
!-*->
i 04 05 08 09 10 11 12 13 20 30 48 50 55
PRINT PRINT 86 PRINT 0? PRINT PRINT PRINT PRINT PRINT PRINT PRINT --INPUTFP=F:INPUTQP=Q INPUTC2=C2 s INPUTC4= IF C2>=4*GT2*C4 THEN 60 PRINTФИЛЬТР НЕ РЕАЛИЗУЕМ. PRINTВВЕДИТЕ НОВЫЕ С2 И C4s60T0 30
60 LETA=C2/<2»Q"2*C4)-1 ?0 LETP=A+SQR<A~2-1> 30 LETR3=P*R1 s LETX=Q*SQR<C2/P/-C4)
100 INPUTKBX=K1 : IF Kl=@ THEN 140 110 IF 1-K1<=0 THEN 140 120 LETK=K1 s LETR8=R1/K 130 LETR9=R1/<1-K> s 80T0 150 148 LETR8=R1 : LETR9=9E99 i LETK=1 158 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 160 PRINTR11=R8 i PRINTR12=R9 170 PRINTR3=R3 s PRINTK=K 180 PRINTПУЧ=Х 190 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 200 PRINTT<S)=K*<<UP"2)/<S"2+<IJP/Q)!iiS+<WP42))> 210 PRINTSGOTO 100:END = 2,3 Пример А. Вводимые параметры: F = ? 3-103, Q=l,2, C2 = 27-10-9, C4 = 3,3-10-9. 1+/?з//?2), = 600-1O~3. Результаты расчета: #п =
189 Программа 7.35. i
01 02 03 04 05 06 07 08
PRINTРАСЧЕТ ФИЛЬТРА ПОЛ.-ПРОПУСК.С R ВХОДОМ И МАЛЫМ Q PRINT -------=-------------------------PRINT ! ! ! PRINT ! ! PRINT C2 === ! ! R4 ! PRINT ! ! ! ! PRINT ! ОУ ! PRINT Rll ! !! ! --------!
09 PRINT <-|=xn!~i-!!--*-----!- ! ! 16 PRINT ! ! ! C3 11 12 13 14 15 16
PRINT PRINT PRINT PRINT PRINT PRINT
! ! R12 ! ! ! -----
!
!-*-->
! ! ! !
20 INPUTFP=FiINPUTQP=Q 30 INPUTC2=C2iINPUTC3=C3 50 LETR1=1/<2*#PI*F»SQR<P*C2*C3>> 68 LETR4=P*R1 sllETK0=Q"2*< 1+CC3/C2) > 70 INPUTKBX=KlsIF K1=0 THEN 110 80 IF <K0-K1)<=0 THEN 110 90 LETK2=K18LETR8=<K0/K1>*R1 100 LETR9=<K0<K0-K1>>*R1!6OTO 120 110 LETR8=R1:LETR9=1E90:LETK2=K0 120 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 130 PRINTRU=R8!PRINTR12=R9 140 PRINTR4=R4iPRINTK2=K2 150 PRINTny4=K0 160 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 170 PRINTT<S)=-K«<<UP/Q)«S/<S"2+<b)P/Q)*S-HJP"2)> 180 PRINT!60T0 70!END Программа 7.36. 01 PRINTРАСЧЕТ ФИЛЬТРА ПОЛ.-ПРОПУСК.С С-ВХОДОМ И МАЛЫМ Q 02 PRINT ----------*03 PRINT ! 04 PRINT 05 PRINT ! ! R2 06 PRINT СИ ! ! === C4 07 PRINT ! ОУ 08 PRINT !! ! R3 09 PRINT <—!!--*—!««!—*—!_ i 10 PRINT !! ! ! !-*--> 11 PRINT ! --!+ ! 12 PRINT === C12 f !---! 13 PRINT ! ! 14 PRINT ! ! 15 PRINT ---20 INPUTFP=FsINPUTQP=Q 30 INPUTC4=*C4sINPUTCl1 = C8iINPUTC12=C9
40 IF<C8+C9>>=4*<£T2>*C4 THEN 60 50 РРШФИЛЬТР НЕ РЕАЛИЗУЕМ.ВВЕДИТЕ НОВЫЕ C4,C8,C9. .GOTO 30 60 LETC1=C8+C9 70 LETA=<C1/<2*<CT2>*C4>>-1
30 LETP=A+SQR<A~2-1> 90 CETR2»1/<2*#PI*F*SQR<P*C1*C4>>!LETR3=P*R2 180 LETX=Q*SQR<C1/P/-C4):LETK=<C3/-C1)*X 110 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА. 120 PRINTR2=R2sPRINTR3=R3 130 PRINTK=K:PRINTnV4=X 140 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 150 PRINTT<S>=-K»<<WVQ>*S.<S~2+<l»JP/Q>*S+lilP~2>> 160 END параметры: 0~\
C\i =
Пример А. Вводимые F=2,blO], Q=l,6, Cn = b&-\ = 15-10-9, С4 = 5,Ы0-9. Результаты расчета: «2= 1,816083-103, «3 = 7,4716704-103, К = 2,6071364, ПУЧ = 3,18224. 190
Пример В. Вводимые параметры: F = 2,M03, Q = l,6, Сц=68-10"9, С;2 = 0, С4 = 5,1-Ю~9. Результаты расчета: /?2 = = 2,4070895 103, R3 = 6,880664 103, К = = 3,4555748, ПУЧ = 3,4555748. 4. Высокочастотный. Т (s) = Ks2/ [s + C12 + C1/G3), K = (C/C,)]. Программа 7.37.
,= 1/7#^C2C3#4, 2[(1/#4C2) + (1/#4C3)] = ^f;,t =(WRiC2) (#5/#б), = #6/(#5
01 PRINTРАСЧЕТ ФИЛЬТРА ВЧ 02 PRINT ---------83 PRINT ! 04 PRINT 85 PRINT ! ! R2 06 PRINT ! ! 07 PRINT Cll НИЗКОДОБРОТНОГО 08 PRINT Cll ! СЗ 0У ! 09 PRINT ! ! ! ! ! -----! 10 PRINT <--!!--*--!! — ж----1-е- t ! 11 PRINT !!!!!! ! !-*12 PRINT ! ---!-!» 13 PRINT C12 === R4 ! ! ! !---! ! 14 PRINT ! ! ! ! ! 15 PRINT ! - !-------! 16 PRINT ! ! 17 PRINT 20 INPUTFP=F:INPUT QP=Q 30 INPUTC3=C3sINPUTC11=C8:INPUTC12=C9 50 LETR2= 1 /< 2*#P IisF*SQR iP*C 1 »C3) ) I LETR4=P«R2
68 LETX=Q*SQR<P*C3>C1) i LETK=C8/C1 70 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 80 PRINTR2=R2sPRINTR4=R4:PRINTK=K 90 PRINTTiy4=X
180 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 110 PRIN 120 END А. Вводимые параметры: l5 C = 100l(H Cn = Пример / = 2,5-103, Q ,, ,i , = 15-10~9, C3=15-10"9. Результаты расчета: R2 = 326,47168, Rt = 7,1965712-103, /( = = 869,56522 1 (Г3, ПУЧ = 2,5434783. Пример В. Вводимые параметры: 25103 Q 15 Ci,=27-10~9, C;2 = O, Результаты расчета: 99029742 \ Примечание. Сг = Сз или Сг> Сз ПУЧ. Программа 7.39. Начальные условия для низких значений рр 2,5-103, Q= 1,5, C) = 15-10"9, K=lА. Вводимые параметры: i__! к г___in.in —s г___ -103
у 4 = 9,9029742-1 o\ K=\, Ло = 1,0105076 ПУЧ = 3,5. 5. а) всепропускающий пропускающий Q=—0,5. Tp(s) = [s2- (ti>p/qp) s + b>2p] I [s2
+ »?)].
2
TN (s) = - [s - (щ/q,) s + со*] / [a* + (/)
+
?)]
2
]
= 0,5; б) все-
Пример 9 3 3 3 3 / = 2,3-103, ?,, 2, 3 = 10-10~ , #6 = 6,8-10 . Результаты расчета: #,=2,1624313-10 , #4 = 22,143296-10 , #5 = = 2,65625-10 , /С = 719,10112-10~3, ПУЧ = = 5,12. Пример В. Вводимые параметры: F = 2,3-103, Q=l,6, С2 = 22-10-9, С3 = = 1010~9, #6 = 0. Результаты расчета: #i = = 1,3515196-103, 3 #4=16,104216-103, #5 = 3 = 5,3710938-103, С = 3,7236364.
Если значение = 650,57179-10~
#6 =
#6 qP=l/ap Программа 7.38. Пример А. Вводимые параметры: F = 2,5-103, Q = 300-10~3, C, = 68-10~9, C2 = = 6,8-10^9, C)=15-10"9. Результаты расчета: Л4 = 8,0381583-103, R5 = 5,4374616 103, R6 = 650,41967, #7= 1,6960889-103, Rs = = 25,76939 103, R9 = 319,1209. Пример В. Вводимые параметры: F = 2,5-103, Q = 300-10"3, C,=27-10"9, C2 = 6 8-10~9, C3 = 27-10~9. Результаты расчета: #4 = 5,2115421-103,. #5 = 5,3024215-103, #6 = 2,0995252-103, R7= 1,0667594-103, #8 = = 25,90443-103, #9 = 818,44118. 6. Всепропускающий. T(s) = [2 (/)+]/[2+ {/)+] задано программа присваивает ему значение #б=1-104 Ом. 2 7. Полосно-заграждающий. Т {s)=K УЧЧ равным О, подходящее
+ #6),
Программа 7.40. Пример А. Вводимые параметры: f = 2,2-103, 9=1,7, С2=15-10~9, . С3 = = 100-10~9, #6 = 22-103. Результаты расчета: #,=370,04172, #4 = 9,4287247-103, #5 = = 992,92914, К = 956,81589 10"3, ПУЧ = = 22,156667. 191
Программа 7.38. 01 PRINTРЙСЧЕТ ФИЛЬТРА ВСЕПРОПУСКАКНМЕГО С Q=+8.5 82 PRINTВАРИАНТ 1 03 PRINT R0 84 PRINT —!====! — 85 PRINT ! ! 86 PRINT ОУ ! 87 PRINT R0 « -----! 08 PRINT -----!====!-----------ж-*-!- ! ! 89 PRINT ! ! ! Cl ! ! C2 ! !-*—> 18 PRINT <—*--!!----ж-----!l-----ж—!+ ! 11 PRINT ! !! ! 1! ! !--12 PRINT ! ! ! 13 PRINT !-!==<==!-!---ж-!====!-! 14 PRINT R4 ! ! R5 15 PRINT ! 16 PRINT R6 I !«C3 17 PRINT ! ! ! 18 PRINT ! 19 PRINT ! i 20 PRINT ------INPUT X 21 PRINTРАСЧЕТ ФИЛЬТРА ВСЕПРОПУСКАИИЕГО С Q=-0.5 22 PRINTВАРИАНТ 2 23 PRINT R0 24 PRINT —!==»=! — 25 PRINT ! ! 26 PRINT ! ОУ ! 27 PRINT R0 ! -----!
28 29 30 31 32 33 34 35 36 37 38 39 40 58
PRINT -----!==*=!----------*—!- ! ! PRINT ! R9 ! ! C2 ! !-*—> PRINT <—*-!==== !-ж-----H-----ж—!+ ! PRINT ! ! !! ! !---! PRINT ! П СЗ ! ! PRINT ! —!!"---!---*-!====!-! PRINT !! ! ! R8 PRINT ! PRINT Cl === ! ! R7 PRINT ! ! I PRINT ! PRINT ! ! PRINT ------INPUTFP=FsINPUTQP=e
68 1НРиТС1=С1:1НРиТС2=*С2!1НРиТСЗ=СЗ 78 LETH=1-<<C1+C2^<C2+C3>«4*£T2VC1/C3 88 IF H>8 THEN 118 98 PRINTФИЛЬТР НЕ РЕАЛИЗУЕМ.ВВЕДИТЕ НОВЫЕ СЬС2/СЗ.:60T0 180 180 PRINTCl=CЗ>=C2жгжQa-2жQ>:&0T0 60 110 1_ЕТР4=<1+80Р<Н>>/<гж2ж#Р1*Рж<Зж<С2+СЗ>>
128 138 148 158 168 170 180 198 280
LETR5=<Cl+C2>/<R4ж<2ж*PI*F>~2жClжcгжCЗ> LETR6=l<<2ж#PIжF>"гжClжC2ж<R4+R5)> иЕТР7=<1-8еР<Н)>/<2жгж#Р1жРж0ж(С2+СЗ>> LETR8=<Cl+Cг>.<R7ж<гж#PIжF>%гжClжcгжCЗ> LETR9=1У<<2ж#РI »F >"2жС1жС2ж < R7+R8)) PRINTРЕЗУЛЬТАТЫ РАСЧЕТА. PRINTR4=R4sPRINTR5=R5:PRINTR6=R6 PRINTR7=R7tPRINTR8=R8sPRINTR9=R9 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ДЛЯ ФИЛЬТРА С GN+8.5
218 PRINTT<S>=<S~2-<UP>Q^S+WP"2>/4S~2+<l(IP/Q^S+lilP~2>
228 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ДЛЯ ФИЛЬТРА С Q=-0.5 230 PRINTT<S>=-<S~2-<UP/Q^+liilP-2>><S~2+<WP/Q^S+UP42> 248 END Программа 7.39. 01 PRINTРАСЧЕТ ФИЛЬТРА ВСЕПРОПУСКАЮШЕГО НИЗКОДОБРОТНОГО 02 PRINT ---------ж----------83 PRINT ! ! ! 04 PRINT ! ! 05 PRINT С2 « ! ! R4 ! 06 PRINT ! ! ! ! 07 PRINT ! СЗ OV ! 0§ PRINT -----! 09 PRINT <-«-!==**-*---!! — ж----!- ! ! 10 PRINT ! H ! ! ! 11 PRINT !----!====!-------ж----!+ !-*--> 12 PRINT R5 ! !---! 13 PRINT 14 PRINT R6 ! ! 15 PRINT ! ! 16 PRINT 1 IS PRINT 20 INPUTFP=FiINPUTQP»Q 30 INPUTC2=C2»INPUTC3=C3:INPUTR6=R6 40 LETP=Q~2*<2+i;C2/C3)+<C3/C2)) 50 LETR1=1/<2*#PI*F«SQR<P*C2*C3>> 60 LETR4*P*RULETX=Q*SQR<P*C3/C2> 70 IF R6=0 THEN 100 80 LETR5=R6*<1+<C2/C3>>«2-P
90 LETK=R6<R5+R6>i GOTO 110 100 LETR6*1E4 Ив PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 120 PRINTR1=R1!PRINTR4«R4 130 PRINTR5=R5«PRINTK=K 140 PRINTnV4*X 150 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 160 PRINT T<S>*K*<S^2-<UP/Q>*S+tdP42V<S~2+<UP/Q>*S+UIP~2>
Rl
!
И
!
1? PRINT
170 END Программа 7.40. 01 PRINTРАСЧЕТ ФИЛЬТРА П0Л0СН0-ЗАГРАИ1ДАК1ИЕГ0 НИЗКО ДОБРОТНОГО 82 PRINT ---------*----------03 PRINT ! ! ! 04 PRINT ! ! 05 PRINT C2 === ! ! R4 ! 06 PRINT ! ! ! ! 07 PRINT ! СЗ ОУ ! 88 PRINT Rl ! ! ! ! -----! 09 PRINT <-*-!=:===!-*;---и---ж----!- ! ! 10 PRINT ! ! ! ! ! ! 11 PRINT !----!====!-------*----!+ .-*--> 12 PRINT R5 ! !---! 13 PRINT 14 PRINT R6 ! ! 15 PRINT ! ! 16 PRINT 17 PRINT ! IS PRINT 20 INPUTFP=F:INPUTQP=Q 30 INPUTC2=C2:INPUTC3=C3sINPUTR6=R6 40 LETP=Q"2*<2+<C2/C3>+<C3/C2>) 50 LETR1=1<2*#PI*F*SQR<P*C2*C3> > 60 LETR4*P*RlsLETX=Q*SQR<P*C3^C2> 70 IF R6=0 THEN 100 80 LETR5=R6«<1+<C2/C3))^P 90 LETK=R6/<R5+R6)i60T0 110 100 LETR6=1E4 110 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 128 PRINTR1 = RUPRINTR4=R4 130 PRINTR5»R5!PRINTK=K 140 PRINTny4*X 150 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 160 PRINTT<S>=K*<S~2+WP~2V<S"2+<WP.Q:>*S+I«IPV2> 170 END Пример = 2,2-103, 0~9 В. Вводимые параметры: 0-9 С3 = , Q ,, , 3 = 15-10~9, «1=0. Результаты расчета: «,= = 1,0132095-103, «4= 12,75383-103, «5 = = 2,2244192-103, К = 818,03478- Ю"3, ПУЧ = = 4,4955556. Если задано «6 = 0, то программа присваивает величине «6 значение 1-Ю4 Ом. Примечание. Начальные условия С2 = Сз или Сг> С3 для низких значений ПУЧ. Среднедобротные фильтры (Q 8. Низкочастотный. Пример В. Вводимые параметры: F = 2,5-103, Q = 7,5, С2 = 33-10-^, С4 = = 10-10-9, Rl = 6,8-103, /С„=1. Результаты расчета: Р= 1,5333078, ПУЧ = 30,935516 «,, =4,7455372-103, «,2 = 7,0119021 103, 3 3 «3 = 4,3394814-10 , «6 = 4,6021254-10 . Если задано «5 = 0, программа присваивает «5 значение МО4 Ом. Настройка: (1) fp резистором «з, (2) qp резистором «6. 9. Полосно-пропускающий с резистивным входом. T(s) = —K (a>P/qP) s/ [s2 + (u>p/qp) s + a>2p]. а>(7=1/Л/«,С2«з~С4\ K=[«,2A«u+«,2)][l ПУЧ = (?(,д/«|С2/«зС4 [1 +(«6/«5)f. Программа 7.41. 01 PRINTРАСЧЕТ ФИЛЬТРА НЧ 02 PRINT --------03 PRINT === C2
!
(C2/C3) ~ qP [1 + ПУЧ = (?Р [l + («5/«6)]s СРЕДНЕДОБРОТНОГО ! Rll
!
OV
! R12 ! !
R3
<—!====!—ж—!====!-*
! C4 === 1+
! !
i \ !
! —!
!-*-->
! !
!
R6 ! R5 ! ! R5 04 PRINT 85 PRINT 06 PRINT 07 PRINT 08 PRINT 09 PRINT 10 PRINT 11 PRINT* 12 PRINT 13 PRINT 14 PRINT 15 PRINT 16 PRINT 17 PRINT 18 PRINT 19 PRINT 28 INPUTFP=FJINPUTQP=Q 38 INPUTC2=C2sINPUTC4=C4:INPUTR5 48 LE 50 PRINTP ДЛЯ ОПТИМАЛЬНОГО ПУЧ PI 60 PR I NTВВЕДИТЕ КОД 0/ЕСЛИ Р=РОПТ 70 INPUTВВЕДИТЕ КОД 1/ ЕСЛИ Р ДРУГОЕА 80 IF A=0 THEN 110 90 IF AO0 THEN 100 100 LETP=Pls60T0 120 110 ШРиТВВЕДИТЕ РР 120 LETRl=l/<2*#PI*F*SQR<P*C2*C4)>sLETR3=P*Rl 130 IF R5=0 THEN LETR5=1E4 140 LETR6=R5»<<<C4^C2)*<l+ 150 LETK0=1+<R6/R5> s LETX=Q*< K0~2)«SQR <С2/Р/C4) 160 INPUTKBX=KlsIF K1=0 THEN 180 178 IF <K0-K1>>8 THEN 19© 180 LETR8=Ri:LETR9=lE90sLETK2=K0! 60T0 200 190 LETK2=K1 iLETR8=<K0/K1 )*R1 s UETR9=<K0/<K8208 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА. 210 PRINTR11=R8!PRINTR12=R98PRINTR3=R3 220 PRINTR6=R6:PRINTK=K2:PRINTПУЧ=Х:PRINTP=P 230 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 240 PRINTT<S>=K«<WP~2V<S"2+<WP,Q>*S+UP~2> 250 60T0 U0:ENB А. Вводимые параметры: 2= МО90, C2 = Пример /r = 2,5-103, Q = 7,5, = 100-10~9, С4 = 15-10-9, «5 = 0. Результаты расчета: Р = 2,7457067, ПУЧ = 25,470105 «,,=991,99029, «,2=1.Ю90, «3 = 2,7237144 103. «6 = 4,7628799-10э, К= 1,476288 (Р = Р1 в строке 40 соответствует минимальному ПУЧ). 194 Программа 7.42. 3 Пример А. Вводимые параметры: = 2,3-103, Q = 6, С2 = 68- Ю-9, С3= 15-10~9, l 3 3 3 «6=1ЫО , l «=15,215781. = 1,4128396-10 = 8,4516079-10 Результаты расчета: ПУЧ = 17,804565, «,,= «,2 = 915,29229, «4 = «5 = 2,9995345-103. Программа 7.42. R11 R12 С2
! R4 i !! -! !-! ! СЗ
; ; i j 0У ! ---j !-*--> I R5
*-! = ! ! ! ! ! !
R6
R6
01 02 63 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 38 40
PRINTPACHET ФИЛЬТРА ПОЛ.-ПРОПУСК. СРЕДНЕДОБРОТН. С R-ВХОДОМ PRINT -----------жPRINT ! ! PRINT ! PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINTS PRINT PRINT 28 PRINT 21 PRINT INPUTFP=FsINPUTQP=Q INPUTC2=C2 sINPUTC3=C3 sINPUTR6=
50 LETPl=C2/C3/44*<:Gr2:>>*<<SQRa + 12*<G
68 PRINTP ДЛЯ ОПТИМАЛЬНОГО ПУЧР! 70 PRINTВВЕДИТЕ КОД 8>ЕСЛИ Р=РОПТ 80 INPUTВВЕДИТЕ КОД If ЕСЛИ Р ДРУГОЕА 98 IF A=0 THEN 120 188 IF AO0 THEN 118 110 LETP=Pl:60T0 130 120 INPUTВВЕДИТЕ РР 130 LETR1=1/<2*#PI*F«SQR<P*C2*C3>:>!LETR4=P*R1 148 IF R6=8 THEN LETR6=1E4 158 LETR5=R6«<< 1/Р)ж( 1 + <C2/C3>)-<SQR<;C2/P/C3)>ж<1/Q)> 168 LETK8=Q*<1+<R5/R6))*SQR<P*C3^C2) 188 INPUTKBX=KH IF Kl=8 THEN 200 198 IF<K8-K1)>0 THEN 210 280 LETR8=Rl:LETR9=lE90sLETK2=K0!GOTO 228 210 LETK2=K1 sLETR8=<K0/-K1 )*R1 s LETR9=<K0/<K0-K1) >*R1 220 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА. 238 PRINTR11=R8".PRINTR12=R9:PRINTR4=R4 248 PRINTR5*R5sPRINTK=K2!PRINTP=P . 258 PRlNTTiy4=X
268 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 278 PRINTT<S>=-K*<UP-Q>*S.<S-2+<WP-Q>*S+UIP"2> 288 GOTO 120:END Пример В. Вводимые параметры: f = 2,3-103. Q = 6, С2=15-1СГ9, C3 = 3,9-10-9, /?6 = 0. Результаты расчета: Я= 13,34444, ПУЧ= 18,130512, /?„ =2,4766476-103, Я4 = = 33,049473, Л12=1.1090, R5 = 2,7368193, К = = 14,234725. Если задано /?б = 0, программа присваивает Лб значение 1 10 Ом. Настройка: (1) fp резистором Rt, (2) qp резистором R5. 10. Полосно-пропуекающий с емкостным входом. 2 Ц \=С
(R3/R2) - [ = 15-10~9, C4 = 5,l-10-9, Rl=l5-\03. Результаты расчета: Р = 6,4407124, ПУЧ = = 14,08843, #2= 1,4514756-103, R3 = = 9,3485371-103, #5 = 4,970735-103, K = = 8,6694315. Пример В. Вводимые параметры: F = 2,l-103, Q = 5, Сп=27-10-9, С12 = 0, С4 = 4,7-10~9, Rl = 0. Результаты расчета: Р = 2,500919, ПУЧ = 16,541822, R2 = = 4,2542227-103, R3 = 10,639466-103, /?5 = = 4,7745784-103, /С= 11,196135. Если задано #6 = 0, программа задает /?в = 1 -104 Ом. Настройка: (1) fp резистором ^2 или R3, (2) qp резистором R$.
11. Высокочастотный. T(s) =Ks2/ [S2+ (4,p/ C\ = C\\ + C12,
Программа 7.43. Пример А. 2,M03, Q = 5, Вводимые параметры: Ci,=68-10-9, Cl2 =
+ (Cl/C3)-(RiR6/R2R5)}, K=(Cll/Cl) [l + (Rs/Rb)] /[1
195 Программа 7.43. 01 PRINTPACHET ФИЛЬТРА ПОЯ.-ПРОПУСК. СРЕДНЕДОБРОТН. С С-ВХОДОМ 82 PRINT ---------ж---------03 PRINT ! ! ! 04 PRINT ! ! 05 PRINT ! ! R2 ! ! 06 PRINT ! ! »«» C4 ! 07 PRINT Cll ! ОУ ! 08 PRINT !! ! R3 ! -----! 09 PRINT <--!!--*-!==«!-*---!- ! ! 10 PRINT !! ! ! !-*--> U PRINT ! 12 PRINT === C12 ! !---! ! 13 PRINT ! ! ! 14 PRINT I *-!====!15 PRINT --! R6 16 PRINT 1? PRINT ! ! R5 18 PRINT ! ! 19 PRINT 20 PRINT ! 21 PRINT 30 INPUTFP=F:INPUTQP«Q!INPUTC11=C8 40 INPUTC12=C9:INPUTC4=C4:INPUTR6=R6 50 LETC1*C8+C9
—!+
! !
60 LETPl=Cl/C4/<36*<Q~2>>*<<SQR<l + 12*<GT2>*a + <C4.<Cl>>>-t-l>-2>
70 PRINTP ДЛЯ ОПТИМАЛЬНОГО ПУЧР1 80 PRINTВВЕДИТЕ КОД 0, ЕСЛИ Р=РОПТ 90 INPUTВВЕДИТЕ КОД Ь ЕСЛИ Р ДРУГОЕА 190 IF A=0 THEN 130 110 IF AO0 THEN 120 120 LETP=PH60T0 140
130 140 158 160 170
INPUTВВЕДИТЕ РР LETR2=l/<2*#PI*F!iiSQR<P*Cl«C4>>:LETR3=P*R2 IF R6=0 THEN LETR6=1E4 LETR5*R6*<(C4/C1>*<l+P>-<1/Q>*SGR<P*C4/C1>) LETK«=<C8/C1>*<1+<R5R6>>*Q*SGR<C1.P.C4>
180 LETX=Qiii<<l + <R5/R6)>"-2)itiSQR<Cl/P/C4)
190 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА. 208 PRINTR2=R2!PRINTR3=R3:PRINTR5=R5 210 PRINTK=K:PRINTP=PsPRINT ПУЧ=Х 228 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 238 PRINTT<S>=-K*<WP/Q>*S/<S~2+<UPG>*S+I>IP"2> 240 60Т0 130SEND Программа 7.44. 81 PRINTPAC4ET ФИЛЬТРА ВЧ CPEДНЕДОБРОТНОГО 02 PRINT--------------------03 PRINT ! ! 04 PRINT -
!
85 PRINT
! ! R2
! 06 PRINT 07 PRINT
! ! Cll -
! СЗ
ОУ
!
88 PRINT
! !
!
11
-----
! 09 PRINT <--!!—*--—!!—*----!+ ! ! 10 PRINT !! ! !I ! ! 1--*--> 11 PRINT ! - --!- ! ! 1| PRINT ! 13 PRINT 14 PRINT 15 PRINT
! ! !
! ! ! ! - «-!====!-! ! ! R6
C12 =====
R4 ! ! ! !---!
16 17 18 19 20 21 30 40 50 68
PRINT —----PRINT ! ! R5 PRINT ! ! PRINT PRINT ! PRINT --* INPUTFP=F:INPUTQP=GsINPUTC11=C8 INPUTC12=C9!INPUTC3=C3iINPUTR5=R5 LETC1-C8+C9 LETP1=C1/C3/<4*<Q"2>>*<<SQR<1+12*<G"2>«<1 + <C3.C1>>>--1>"2>
70 PRINTP ДЛЯ ОПТИМАЛЬНОГО ПУЧPI 80 PRINTBBEAMTE КОД 0,ЕСЛИ Р=РОПТ 98 INPUTBBEflHTE КОД Ь ЕСЛИ Р ДРУГОЕА 100 IF A=0 THEN 130 110 IFAO0 THEN 120 120 LETP=Pl:60T0 140 130 INPUTВВЕДИТЕ PP 140 LETR2=1/< 2**PI*F*SQR <P*C1*C3))гLETR4=P*R2 150 IF R5=0 THEN LETR5=1E4 160 LETR6= 170 I_ET 180 LETX=Q*<<l+<R6/R5>>"2>*SGlR<P*C3Cl> 190 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА. 200 PRINTR2=R2sPRINTR4=R4:PRINTR6=RS 218 PRINTK=K:PRINTP=P:PRINTПУЧ=Х 220 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 230 PRI 240 60Т0 130:END
Пример А. Вводимые параметры: F = =2,2-103, Q = 7, Ci, = 100-l(r9, C;2=15-10^9, С3 = 5,Ы0~9, ^5=6,8-103. Результаты расчета: P = 65,170699, ПУЧ =19,415779, R2 = = 370,03027, /?4 = 24,115131 -103, Re = = 1,8857261-103, /(=1,1107067. Пример В. Вводимые параметры: F = 2,2-103, Q = 7, C,i = 15-10-9, Cl2 = 0, C3 = 4,7-10~9, Rl = 0. Результаты расчета: P= 11,701459, ПУЧ = 22,083997, R2 = = 2,5187373 103, Ri = 29,472902 103, R6 = = 2,8359544-103, К =1,2835954. Если задано R5 = 0, программа присваивает #5 значение 1 10* Ом. Настройка: (1) fp резистором /?2 или Rt, (2) qp резистором Re,. 12. Всепропуекающий. Т (s) = [s2- (mp/qp)s + <4\ / [s2+ (<op/qp) s + m RP R*RS/{R4 + R5), ap\/^RlC2C3Rp, qp = cop/ [ (1 /RPC2) (R7/Ra) - (1 /Rt C2) -(l//?C)]/[(l//?C) + (l//?C) \
f
— у I L\/*1*/
*- * — ^ / J
I
\
+ (l/R4C2)-(l/R5C2) (R7/R6)], UY4 = qp(Rp/Rb) [l-f(#7/#6)]2-Программа 7.45. 01 PRINTРАСЧЕТ ФИЛЬТРА ВСЕПР0ПУСКАКШ1ЕГ0 02 PRINT 8 PRINT R7
2 0 PRINT
--1=5S=1--r
0 PRINT
!
!
0 PRINT
!
ОУ
3 4 !
5 8 PRINT
R6
1
6 Й
PPTKIT
8
ri\i П I
l
1
—_.-J
!+
! !
7
8
i
0 PRINT 9
! Rl
1 PRINT <—*----!====!----ж—!---! 0 ! 1 PRINT 1
!
1 PRINT 2
!
!
!
!
!
!--!!—*--!!
—!
! 1 PRINT
I j
1 PRINT
C2
C3
1 PRINT
j
R5
1 PRINT
к------! ====!----!
1 PRINT
!
;
! !
!
3 4
!
i !
5 ^
СРЕДНЕ ДОБРОТНОГО
7 1 PRINT
-
8
1 PRINT 9
R4
!
!
2 PRINT
! !
2 PRINT
—
2 PRINT
!
2 PRINT
___
0 1 2 3 FsINPUTQP=Q 3 INPUT 0 FP= C2sIN :3=C3!INPUTR6=R6 4 INPUT PUT 0 C2= 5 LETX=C 0 2/C3 2)*<< "2>/Ч2ж«Г"2>*а+Х 6 LETB=6 1+X) >-Х> 0 *<GT 70 80 PRINTP ДЛЯ ОПТИМАЛЬНОГО ПУЧPI 90 PRINTВВЕДИТЕ КОД 0>ЕСЛИ Р=РОПТ 100 INPUTBBEflHTE КОД Ь ЕСЛИ Р ДРУГОЕА 110 IF A=0 THEN 140 120 IF AO0 THEN 130 130 LETP=Pls60T0 150 140 INPUTВВЕДИТЕ РР 158 LETRl=l/<2*#PI*F!iiSQR<C2*C3»P)) 160 LETR=P*R1 170 IFR6*0 THEN LETR6=1E4 180 LETR7=R6*<P«< 1 + <C2/-C3) >+<l-a>«SQR<P*C2/-C3> >
197 190 208 218 220 238 240 250 268 270
LETH=1-<2*<SGR<P*C2-C3>VG/<1-KR7.R6:>>> LETR5=R/H:LETR4=R/<1-H> LETZ=H«Q*<<1 + <R?/R6>^ PRINTРЕЗУЛЬТАТЫ РАСЧЕТА. PRINTRl=Rl:PRINTR4=R4:PRINTR5=R5 PRINTR7=R7s PRINTP=»Ps PRINTПУЧ=2 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД PRINTKS)=<S~2-<UP/Q:>*SH)PS2V<S~2-KUP/Q:>*S+I»)P~2> GOTO 140!END
Пример А. Вводимые параметры: F = 2,A-103, Q = 5, С2 = 33-10~9, С3= 10-10~9, #6 = 6,8-103. Результаты расчета: Р = = 78,117733- Ю-3, ПУЧ = 16,473246, #,= = 13,06102-103, #4 = 7,2215149-103, #5 = = 1,1881686 102, #7 = 2,9746737 103. Пример В. Вводимые параметры: F=2,4-103, Q = 5, С2=18-10~9, С3 = 4,7-10-9, 13. Полосно-ааграждающий. Г (s) = (s2 + <в|) / [/+ (щ/qp) s + со?], (l/#iC3) = (/p 2) + (!/#,C3) (#7/#e). (1/#4C2) -С2) (#7/#б)], Программа 7.46.
R7 —! ====I —
! ОУ R6 ! ---------------!====!-------ж—!-
!
!
!
!-
<—ж-----!====!-------щ—1+
!
R1
! ! ! i
!
I
!-----!
С2
!! C3
R5
ж-----------! ====! —! ! ! R4 ! ! I
81 02 03 04 05 10 11 12 13 14 15
PRINTРАСЧЕТ ФИЛЬТРА ПОЛОСНО-ЗАГРАЮДАКШШГО PRINT PRINT PRINT PRINT 0$ PRINT 87 PRINT 08 PRINT 69 PRINT PRINT PRINT PRINT PRINT PRINT PRINT
СРЕДНЕДОБРОТНОГО.
16 PRINT 17 PRINT 18 PRINT 19 PRINT 28 PRINT 21 PRINT 30 INPUTFP=F:INPUTQP=Q 40 INPUTC2=C2sINPUTC3=C3sINPUTR6=R6 50 LETP1 = 1/43!«<1+C2/C3>> 68 PRINTP НАЧ.ЗНАЧЕНИЕ ВБЛИЗИ MIN ПУЧР1 78 PRINTВВЕДИТЕ КОД вгЕСЛИ Р=РНАЧ 80 INPUTВВЕДИТЕ КОД ЬЕСЛИ Р ДРУГОЕА 98 IF А=8 THEN 120 188 IFAO0 THEN 118 110 LETP=Pl:GOTO 138 120 INPUTВВЕДИТЕ РР 130LETR1=1/<2*#PI*F*SQR<C2*C3*P>>!LETR=P»R1 148 IF R6=8 THEN LETR6=1E4 150 LETR7=R6*a + <C2/C3>>*P 160 LETB=1-< < SQR < P*C2/C3 >)У< Q* <1+R7/R6)> > 170 LETR5=R/B:LETR4=R/<1-B) 188 LETX=Q«B*i;<l + <;R7/R6))42)!i!SQR;C3/P/C2> 198 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 208 PRINTR1=R1!PRINTR4=R4:PRINTR5=R5 210 PRINTR7=R7:PRINTP=P:PRINTПУЧ=Х 220 PRINT1ПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 230 PRINTT<S>=<S"2+WP"2>/<S"2+<:UP/Q>i«S+UiP~2> 248 &0T0 128SEND
/?f=0. Результаты расчета: = 69,566685-Ю-3, ПУЧ = 17,186565, = 27,33525 103, Я4=13,255775 103,
Р= /?,= R5 = = 2,22201114-103, #7 = 4,3922515-1O3.
Если задано #6 = 0, программа присваивает #6 значение 1-Ю4 Ом. 198
Пример А. Вводимые параметры: F=l,9-103, Q = 9, С2=68-10-9, С3=15-10-9, 3 3 #= ПУЧ = 29,283848 #,= #4= 14,782193-103, Rr = #5 = 673,05331 #6^5,6-103. = 60,240964-10"3 = 10,686131-103, = 1,8666667 103,
Результаты
расчета:
Пример В. Вводимые параметры: F=l,9-103, р = 9, С2=1510-9, С3 = = 4,7-10~9, /?б = 0. Результаты расчета: Р = 79,526227-10"3, ПУЧ = 30,42576, «,= = 35,376656-103, ^4 = 67,012608-103, R5 = = 2,936661-103, Я7 = 3,3333333-103. Если задано /?б == 0, программа присваивает Rf, значение 1-104 Ом. Настройка: (1) 1р резистором /?,, (2) \Т (fp)\=Q резистором Rt, (3) qp резистором R7. 14. Низкочастотный и высокочастотный с нулем передачи. T(s) = K(s2 + io*)/[s2 + (а>р/<7р) s + (oft
к=-
/ #1+#2
(R>+R2) (Rs --!- для НЧ.
*+*» RlR2C3C
*»
Г.
C3C4 I R? (Re
для ВЧ, С L4
(Г ,
(С
RsRa C4
RtRsR-з
c3 c
C4 г
4
L
v + R») J"
C3RIR2R9(R Программа 7.47. 01 PRINTРАСЧЕТ ФИЛЬТРй НЧ И ВЧ С & ПЕРЕДАЧИ СРЕДНЕДОБРОТНОГП 03 PRINT ; ; 0 PR C
3 INT 8 PR 4 INT 0 PR 5 INT 0 PR 6 INT 8 PR 7 INT 8 PR 8 INT 8 PR
3 — ii-
! ! !
I
!
_
!
>
;
*
! P ;
! C4
_
ОУ
>
!! СЗ
9 INT 1 PR 0 INT 1
3 4 5 6 7 3 9
i
ill
1 PP TMT
1
2
Rl
г1\1
! ! !
П1
!
!
— i +
i
—s
PR INT 1 PR INT < 1 PR —» INT 1 PR INT 1 PR INT 1 PR INT 1 PR INT 1 PR INT
-
-
«
R2 ! !
i
I 1
!R6
! | —I
)
i
-
_
i
j
|
!
----
ж
I
E —>>
R9
ж-!====1 -
ВЧ-Д- НЧ-Д!
2 PR 8 INT
*
I
i
|
-
!
ж
2 PR 1 INT 2 PR 2 INT 2 PR 3 INT
R7
---
>
R8 -
l_|--sU--
1 >
38 INPUTF2=F8sINPUTFP=Fl: INPUTQP=Q 40 INPUTC3=C3:1NPUT C4=C4:1NPUT KBX= К1 45 INPUTR9=R9 58 PRINTВЫБЕРИТЕ Р В ИНТЕРВАЛЕ ОТ 8.1 ДО 8.3 55 INPUTP=P 60 IF<F1-F8)=8 THEN 88 70 IF<F1-F0K>8 THEN 90 88 PRINTПОЛОСА ЗАДЕРЖИВАНИЯ ОТСУТСТВУЕТ:60Т0 39 98 LETX=<1+S6N<F1-F8)V2 188 LETB=2*#PI*Fl:LETN=2«P*Q 118 LET6=<C3*D>/N*<SQR<1+4*<GT2>*P*<1+C4.C3)>-1> 120 LETM=2*#PI«F8 148 IF Kl=8 THEN 178 158 LETH=1-<K1/K8) 160 IF H>0 THEN 188 170 LETK=K0:LETR1=1/&:LETR2=1E90:6GTO 198 188 LETK=K 1: LETR1 =K8^&/"K 1: LETR2= 1 /"G-H 198 288 -218 LETH1=Q-I1«(6-C3+<C3+C4>*<R5+R6)/C3.C4/R5/R6> 220
199 230 248 250 260 270 280 290 306
LETJ=<l+PV2*<ABSa-Hl>+Q«ABS<H2>> IF R9=0 THEN LETR9=1E4 LETR7=P*R9/-K: LETR8=P«R9/ < 1 -K) PRINTРЕЗУЛЬТАТЫ РАСЧЕТА PRINTR1 = RHPRINTR2=R2iPRINTR5=R5 PRINTR6=R6:PRINTR7=R7iPRINTR8=R8 PRINTK=K:PRINTP=psPRINTПУЧ=и PR INTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД
310 PRIN2"25"2<UPQ)S 320 END
= 16,750422 103 П р и м е р /> = 2,2-103,
f = 250-10~3, #г = 5-103, «8 =
#, = #5 =
Пример А (ВЧ-Д). Вводимые параметры: F7 = 2,2-103, /> = 2,5-10\ У = 10, Р = 300-10~3, C3 = 22-10"9. С4=6,8-10"9, #7 = 5-103, #8 = 7,5103, #9 = 0, К„ = 600-10~:. Результаты расчета: ПУЧ= 19,991639, = 2,554421-103, #2 = 3,6350018-103, #6 = 69,373675-103. В. Вводимые параметры: D = 2,5-103, Q = 10, Р = С3 = 22-10"9, >C4 = 10-10~9, Результаты расчета: ПУЧ= 19,680306, = 2,6521947-103, #2 = 2,562408 103, = 13,525052 103, #6 = 78,320603 103. Пример С. Вводимые параметры: Fz = 2,5-103, /> = 2,2-103, Q = 6, Р = 200- 10~3, /->
г-1
1Л — 9
С-з = О 1 * 1 U
/" ___ СО 1 Л"~9 ===
, С4
ГУ ___ О
Do 1 U
ЛО
, Д7 =0 I Ь
=з-ю , #;=7,5-ю , A:L=5OO-IO3
3
зультаты расчета: ПУЧ = 37,729721, #i = = 3,2874103 103, #2 = 3,7884357 103, #5 = = 8,1769184-103, #6 = 35,317329-103. Пример D (НЧ-Д). Вводимые параметры: Fz = 2,5-103, /"„ = 2,2-103, Q = 6, P = = 200- Ю-3, С3=18-10"9, С4=10-10-9, #7 = = 4-103, #8 = 4103, #9 = 0, /Свх = 0,5. Результаты расчета: ПУЧ = 12,109246, #, = = 2 9779819-103, #2 = 3,8147434 103, #6 = = 16,580147-103, #6 =
71,612124-103. Если задано Rg = O, программа присваивает #9 значение 1-Ю4 Ом.
15. Полосно-заграждающие низкочастотный и высокочастотный с нулем передачи. #,= #5 = Pe1+C4/CS 1 (?*=(2л/(1+С2/С1)(1+С2/Сз))- . _ (1+С4/С5)(сор/о)г) 1Ч ПУЧ = #9 J (l+C4/Cs)(o,P/a)z) Программа 7.48. R5 {
;
R7 ! ! === СЗ i
R6 С2 I {
-I !-
ji R10 ОУ
! i ж-ж-----ж—! +
!—ж—>
I
j
С4 i i----------1
! R8 I
01 PRINTРАСЧЕТ ФИЛЬТРА П0Л--ЗАГР НЧ-ВЧ С 0 ПЕРЕДАЧИ Q СРЕДНЕЕ 02 PRINT —!====!03 PRINT ! R9 04 PRINT 05 PRINT 06 PRINT 07 PRINT —!=== 08 PRINT ! 09 PRINT<--* Cl 10 PRINT ! !! 11 PRINT1 i —i !12 PRINT 13 PRINT 14 PRINT 15 PRINT 16 PRINT 17 PRINT ! ! 18 PRINT !---*------------------30 INPUTFZ=f0s INPUTFP=Fl: INPUTQP=O. 40 INPUTC1=C1:INPUTC2=C2!INPUTC3=C3 50 INPUTC4=C4:INPUTR9=R9 60 LETG=1/<2*SQRC<1+C2/Cl>i«a+C2/C3:O> 70 LETR5=1/<2*2*#PI*F0*G*<C2+C3>> 80 90 180 LETR7=1 105 __....... 110 IF H<0 THEN PRINTC4>=(<F8"2)/<Fl"2)-l>*C:G0T0 30 120 IF H=8 THEN LETR8=1E90: GOTO 140 130 LETR8=B/H 200
140 IF R9=0 THEN LETR9=1E4 145 LETN=2*#PI*F0!LETM=2*#PI*F1 158 LETR0=R9*&*aAR3*C*N>+B*C4*N-4Hl*M/N>/Q> 160 LETBl=<2*#PI*Fl>/<2*#Pr*F0> 170 LETX=G*<a+R0/R9>~2>*<SQR<R5*C3/R6/C>+SQR<B*C2/R7.Cl>VHl/Bl 180 LETK=<1+R8/R9)/-H1 190 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 260 PRINTR5=R5sPRINTR6=R6!PRINTR7=R7sPRINTR8=R3 218 PRINTR10=R0sPRINTK=K:PRINTny4=X 229 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 230 PRINTT<S)=K«(32+UZ-2)/<S"2+<WP/Q>*S+UP2> 240 END
метры Пример А (ВЧ-Д). Вводимые пара-гры: Fz=l,9-103, Fp = 2,3-103, Q = 5, С, = Программа 7.49. 01 PRINTРАСЧЕТ ФИЛЬТРА НЧ ВЫСОКОДОБРОТНОГО 02 PRINT ----------------------------------------------------------03 PRINT ! Cl
04 PRINT 05 PRINT 0$ PRINT 07 PRINT 08 PRINT 09 PRINT 10 PRINT 11 PRINT 12 PRINT 13 PRINT 14 PRINT 15 PRINT 16 PRINT
17 PRINT
! !! *--!!-------ж-----------------------------! !! ! ОУ ! ОУ ! Rl !--------R3 ! -------*-!====!-*-!- I !-!====!_*-----i_ j ! ! !-* i !-*_> !-!====!-*v!+ ! ! и !-!+ I R2 ! !----! !--!!-----*-! !----! !I ! R6 ! ! C4 ! ! R7 ! ! j j !
-----
!
18 PRINT <--------------------------------------------30 INPUTFP=F:INPUT QP= Q: INPUT C= С 40 LETR0=1/42*#PI*F*C> 50 PRINTR0=R0
55 PRINTВВЕДИТЕ R8 НОМИНАЛЬНОЕ ЗНАЧЕНИЕ R0 60 INPUTR8=R8 78 LETC1=C!LETC4=Cs LETR2=R8s LETR3=R8s LETR6=R8 80 LETR1=Q*R0!LETR7=<R0~2VR8
90 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 100 PRINTRl=Rl:PRINTCl=Cl:PRINTR2=R2 110 PRINTR3=R3sPRINTC4=C4:PRINTR6=R6 120 PRINTR7=R7 130 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 140 PRINTTCS>=K*<b)P"2)^<S"2+<WP/Q)!isS+liilP"2>> 150 END = 68-10~9, C2=15-10-9, Сз = 33-1(Г9, С4 = = 5,1 10~9, #9 = 6,8-103. Результаты расчета: #5 = 2,3252708-103, Re = 7,4408665 1 б3, ./?? = = 704,38495 Rs = 9,0974377 103, Rl0 = = 2,5549489-103, /( = 972,24578-10"3, ПУЧ = = 14,722532. Пример В (НЧ-Д). Вводимые параметры: fz = 2,5-103, Fp = 2,3-103, Q = 12, С, = 18- Ю~9 С2 = 4,7-10-9, Сз=18-10~9, С4 = 4,7-10~9, Rl = 0. Результаты расчета: /?5 = 3,5367765-103, Ле= 17,081878-10, R7 = = 2,3234298-103, /?8 = 22,563531 103, Яю = = 8,3494916-103, /( = 811,52543-10"3, ПУЧ = = 48,989492. Если значение /?э = 0, программа присваивает /?9 значение 1-Ю4 Ом. Настройка: (1) fz резистором R5, Re и R7 (итеративно), (2) fp резистором Re, (3) qP резистором Rio-Высокодобротные фильтры. 2 16. Низкочастотный. Т (s)=K4/ [S + (Щ/ЯР) S + <4\ ,K= 1 + (R2/Re), ? Пример А, Вводимые параметры: / = 2,5-103, Q = 30, С,=68-10-9, #2=Ы03. Результаты расчета: R, =28,086166-103, /?з = = Г-103, С4 = 68-10-9, й=Ы01, /?6 = = 876,48083. Пример В. Вводимые параметры: F = 2,5-103, Q = 30, C,=2,2-10-s, /?2 = = 2,7-103. Результаты расчета: R\ = = 86,811787, /?з = 2,7-103, С4 = 22-10-9, /?6 = = 2,7-103, #7 = 3,1013524-103. Настройка: (1) fp резистором /??, (2) qP резистором Ri. Примечание. Для фильтров 16—22 /?о представляет собой оптимальное значение резистора для низкого значения ПУЧ, a Rd является его номинальным значением, которое выбирается как можно ближе к Ro. 17. Полосно-пропуекающий. Т (s)=K (vp/q,) s/ [s2+(<ap/qp) s+a2p], K=l+R2/Rfi, Wp = V^2//?i#4/?6C3C8, C 201 Программа 7.50. 01 PRINTРйСЧЕТ ФИЛЬТРА ПОЛОСНО-ПРОПУСКАЮЩЕГО 02 PRINTВЫСОКОДОБРОТНОГО 03 PRINT ---------------------------------------04 PRINT ! ----------------! 05 PRINT ! ! ОУ СЗ ! ОУ ! 06 PRINT ! R1 !----! ! ! -----! 0? PRINT *-!====!-*-!- ! !---!!---*------i- ! ! 88 PRINT ! ! !-* !! ! !-*-> 89 PRINT !-!====!-*-!+ ! ! !-!+ ! 10 PRINT R2 ! !---! !-!====!-*---ж-1 !---! 11 PRINT R4 ! ! 12 PRINT R6 ! ! ! 13 PRINT ! ! R7 ! ! === C8 14 PRINT ! ! 15 PRINT ! ! 16 PRINT --! --17 PRINT <------------------------30 INPUTFP=F:INPUTQP=Q: INPUTC^C 40 LETR0=1/<2*#PI*F*C> 50 PRINTR0=R0 60 PRINTВВЕДИТЕ R8 НОМИНАЛЬНОЕ ЗНАЧЕНИЕ R0 70 INPUTR8=R8 80 LETC3=C:LETC8=C!LETRl=R8sLETR2=R8sLETR6=R8 90 LETR7=Q*R0sLETR4=<R0"2>/R8 180 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 110 PR INTRl*RlsPRINTR2=R2sPRINTC3=C3
120 130 140 150 160
PR INTR4=R4!PRINTR6=R6sPRINTR7=R7 PRINTC8=C8 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД PRINTТ<5>=К*<1л1Р/(3)*3/"<8л2+<ЫР/£1>*6+ЫР"г> END
Пример А. Вводимые параметры: /= = 2,2-10, Q = 25, /?, =3.3- Ю3, Сз = 22- 10 "Л Результаты расчета: /?2 = 3,3-103, #4 = = 3,276691810 , «6 = 3,3-103, R7 = = 82,208132-10-, C8 = 22-10~9. Пример. В. Вводимые параметры: /Г = 2,2-103, Q = 60, /?, =2,7-103, С3 = 27-10"9. Результаты расчета: /?2 = 2,7-103, /?4 = = 2,6589098-103, Я6 = 2,7-103, R7 = = 160,76257-103, С8 = 2,7-10~9. Настройка: (1) fp резистором R4, (2) qp зезистором R7. 18. Высокочастотный. [ r(s)=Ks2/[s2+ (up/qP) s + a>2p],K=l+R2/R6, *р = л1 Ж7~к~Жк1Х^Ст~, qP = h>PReC7. Программа 7.51. J
01 62 S3 04 95 96 07 08 89 10 11 12 13
PRINTРАСЧЕТ ФИЛЬТРА ВЧ ВЫСОКОДОБРОТНОГО PRINT ---------------------------------------PRINT ! ----------------! PRINT1 ! ! ОУ СЗ ! ОУ ! PRINT ! R1 !----! ! ! -----! PRINT «-!====!-*-!- ! !---jj---ж-------!- ! i PRINT ! !!-*!! ! !-*—> PRINT !-!====!-*-!+ ! ! !-!+ ! PRINT R2 ! !---! !-!====!-*---*-! !---! PRINT R4 ! ! PRINT R6 ! ! ! PRINT ! ! C7 === ! ! R8 PRINT ! ! !
14 PRINT
!
!
-
15 PRINT --! ! 16 PRINT <------------------------- --20 INPUTFP=F:INPUTQP=Q:INPUTC=С 30 LETR0=1/42*#PI*F*C> 40 PRIHTR0=R0 50 PRINTВВЕДИТЕ R9 НОМИНАЛЬНОЕ ЗНАЧЕНИЕ R0 60 INPUTR9=R9 70 LETC3=C:LETC7=C:LETR1=R9:LETR2=R9:LETR6=R9 80 LETR8=Q*R0!LETR4=<R0"2>/R9 90 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 100 PRINTRl=RlsPRINTR2=R2sPRINTC3=C3 1.10 PRINTR4=R4:PRINTR6=R6sPRINTC7=C7 120 PRINTR8=R8 130 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 140 PRINTT<S)=K*CS"2)/<S~2+<l«)P/Q)i«S+l.)P"2) 150 END Пример А. Вводимые параметры: /г=1,9-103, Q = 20, #, = 1,5-103, С3 = 68-10~9. Результаты расчета: #2=1,5-103, #4 = = 1,0116353-10% #6=1,5-103, С7 = 68-10~9, #8 = 24,636988-103. Настройка: (1) fp резистором #4, (2) qp резистором Re,19. Всепропускающий. Т (S),= [s2- (u>p/qp) s + a>l] / [s2 + (ap/qp) s + + «?], ШР = -Ж/ЖЯЖС^, qp = (x>pC7Rs, #2 = #5.
= 1,1412511-103, #5=l,2-103,, C7 = 68-10^9, #8 = 29,256423-103. Пример В. Вводимые параметры: f = 2-103, Q = 25, #,=4,7-103, C3=18-10-g. Результаты расчета: #2 = 4,7-103, #4 = = 4,1585067-103, #5 = 4,7-103, C7=18-10-9, #8= 110,52427-103. 2 2 Настройка: (1) fp резистором #4, (2) qp резистором #8. 20. Полосно-заграждающий. T(s) = (s + al)/ [s + (щ/др)
s + a2},
Программа 7.52.
01 02 03 04 05 06 0? 03 09 10 11 12 13 14 15 16 20 30
PRINTРАСЧЕТ ФИЛЬТРА ВСЕПР0ПУСКАНШ1ЕГ0 ВЫСОКОДОБРОТНОГО PRINT1--------------------------------------PRINT ! ----------------! PRINT ! ! 0У C3 ! 0У ! PRINT ! Rl !----! ! ! __;.-- \ > PRINT *-!====!-*-!- t !---и---ж------!- ! ! PRINT ! !!-*!! ! !-*—> PRINT !-!====!-*-!+ ! ! !-!+ ! PRINT R2 ! !---!!-!====!-*---ж-! !---! PRINT . . R4 ! ! PRINT R5 ! ! ! PRINT ! ! C7 === ! ! R8 PRINT ! ! ! PRINT ! ! PRINT ! ! I PRINT <-------ж---------------- --INPUTFP=F:INPUTQP=Q!INPUTC=C LETR0=1-42*#PI*F*C>
48 PRINTR9=R0 50 PRINTВВЕДИТЕ R9 НОМИНАЛЬНОЕ ЗНАЧЕНИЕ R0 60 INPUTR9=R9 70 LETC3=C!LETC7=C:LETR1=R9:LETR2=R9!LETR5=R9 80 LETR8=Q«R0sLETR4=<R0"2)/-R9 98 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 100 PRINTRl=Rl:PRINTR2=R2sPRINTC3=C3 110 PR INTR4=R4sPRINTR5=R5:PRINTC7=C7 12Э PRINTR8=R8 130 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 140 PRINTT<S>=<S-2-<yP/8>*S+WP~2>.<S2-KUKVG>*S+WP~2> 150 €MD Пример А. Вводимые параметры: /r = 2-103, Q = 25, #i = l,2-103, C3 = 68-10-9. Результаты <о„ = л/#2/#1#4#5С3С7, qp = d>pC7 [#7#8/ (#7 + #8) ] , #2#7 = #5#8. Программа 7.53.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 30 40 50 60
расчета:
#2=1,2-103,
#4 =
PRINTPAC4ET ФИЛЬТРА ПОЛОСНО-ЗАГРАМДАЮШЕГО PRINTВЫСОКОДОБРОТНОГО PRINT--------------------------------------------PRINT ! ----------------! PRINT ! ! ОУ СЗ ! ОУ ! PRINT ! Rl !----! ! ! *----! PRINT *-!====!-*-!- ! !---!!---ж-------------!- ! ! PRINT ! ! !-* И ! !-*—> PRINT !-!====!-*-!+ ! ! !-!+ ! PRINT R2 ! !---! !-!=«=!-*---ж------ж-! !---! PRINT R4 ! ! ! PRINT R5 ! ! I PRINT ! ! C7 === ! ! R7 ! ! R8 PRINT ! I ! ! ! PRINT ! ! PRINT ! ! ! ! PRINT <-------ж---------------ж---! INPUTFP=FiINPUTQP=Q:INPUTC=C 1_ЕТР0=1/<2ж#Р1жржС> PRINTR0=R0 PRINTВВЕДИТЕ НОМИНАЛЬНОЕ ЗНАЧЕНИЕ R0
70 INPUTR9=R9 88 LETC3=C3!LETC7=C7sl_ETRt=R9s LETR2=R9: LETR5=R9 98 LETR7=2*Q*R8 s LETR8«2*a«R8LETR4* < R8"2 >/R9
188 118 128 130
PR I NT.РЕЗУЛЬТАТЫ РАСЧЕТА PRINTR1=R1!PRINTR2=R2«PRINTC3=C3 PRINTR4=R4!PRINTR5=R5!PRINTR?=R7 PRINTC7=C7tPRINTR8=R8
148 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 158 PRINTT<S>=<S42+WP~2>/<S~2+<UP/Q>*SH)P"2> 168 END
Пример А. Вводимые параметры: F = 2,2-103, Q = 20, ^,=2,2-103, C3 = 33-10~9. Результаты расчета: /?2 = 2,2 -103, «4 = 2,1844612- 1О3, «5 = 2,2-103, «7 = 87,688674-103, С7 = 33-КГ9, «8 = 87,688674103.
Программа 7.54. 81 PRINTРАСЧЕТ ФИЛЬТРА НЧ И ВЧ С НУЛЕЙ ПЕРЕДАЧИ @2 PRINTВЫСОКО ДОБРОТНОГО-1 93 PRINT ----------------------------------------04 PRINT ! -----------------! 85 PRINT ! ! ОУ ! -----! 86 PRINT ! Rl !--------!====!-*-------1- i i > 07 PRINT «-!====!-»-!- ! ! R3 ! !-*-> 08 PRINT ! !! ! !-* !-!+ ! 09 PRINT !---!!---*-!+ ! ! ! !—! 10 PRINT !! ! !---! ж- ! ====! -*-г-ж- ! ОУ 11 PRINT C2 ! R4 ! ! 12 PRINT ! ! R5 <-! ! 13 PRINT ! ! C7 === ! ! R8 14 PRINT ! ! ! 15 PRINT ! ! 16 PRINT ! ! !
17 PRINT <--------ж----------------! --38 INPUTFZ=F@:INPUTFP=F1: INPUTQP=Q 48 INPUTC=С 58 LETR0=1-<2*#P^F1«C> 60 PRINTR8=R0 70 PRIHTBBEflHTE НОМИНАЛЬНОЕ ЗНАЧЕНИЕ R8 88 INPUTR9=R9 90 LETRl=R9:l_ETR3=R9 100 LETC2=C:LETC7=C:LETR8=Q«R0 118 IF F0OF1 THEN 138 120 PRINTriOflQCA ЗАДЕРЖИВАНИЯ ОТСУТСТВУЕТ:GOTO 39 130 IF <<F0~2>/<F1"2>-1>>8 THEN 168 140 1_ЕТР4=Р8ж<1-<<Р8"г:>--ЧР1-2>>> 150 PRINTB4-fl!60T0 180 160 LETR4=RЗж<.:;F02:>/ЧFl~2>:>-l> 178 PRINTH4-A 180 LETR5=<R0"2)/R4 190 PR INTРЕЗУЛЬТАТЫ РАСЧЕТА 208 PR INTRl = RlsPRINTC2=C2:PRINTR3=R3 218 PRINTR4=R4sPRINTR5=R5:PRINTC7=C7 220 PRINTR8=R8 230 PRINTПЕРЕДАТОЧНАЯ ФУНКЦИЯ ИМЕЕТ ВИД 240 PRINTT<S> = <S"2+W2~2V<S~2+<UH:VQ>*S+li)P~2> 258 END
Пример В. Вводимые параметры: F = 2,2-103, Q = 20, «i = 15-103, C3 = 4,7-10~9. Результаты расчета: /?2 = 15 103, «4= 15,794574-103, «5=15-103, «7 = 615,68643-103, C7 = 4,7-10-9, «8 = 615,68643-103. Настройка: (1) fp резистором «4, (2) \T(fp)\=O и qp резистором «7 и «8 (итеративно). Пример А. Вводимые параметры: F, = 2,2-103, Fp = 2,5-W3, Q=15, «,=2,7-103, C2 = 22-10^9. Результаты расчета: «з = = 2,7-103, «4 = 9,7923696-103, «5 = 855,12005, С7 = 22-Ю-9, «8 = 43,405894-103. Пример В (НЧ-Д). Вводимые пара-, метры: Fz = 2,5-103, Fp = 2,2-103, Q = 15, «i=3,3-103, C2 = 22-10"9. Результаты расчета: «3 = 3,3-103, «4= 14,369438-103, «5 = = 752,50564, C7 = 22 10"9, «8 = 49,324879 103. Настройка:
(1)
fz резистором Rt,
(2)
fp резистором R5, (3) qp резистором Rg.
=/(B4(s7U2+ (to,/?,) s + co2] }, /CB4=(l+«4//?3)/(«l//?2+l),
22. Универсальный. Схема 1. Гвч (s)
7"„„ (s) = —/Спп {(<йр/<7р) s/ [s2+ (со,/?,,) s + + ">?]), _ Кпп — Rz/Ri, 2
Tm (s) = АГнч{оа|/ [s + К/?,) s +ш?) }, Л„ч=(/?з//?4+1)/(Л,/Л2+1),
о„=[(1+/?2//?,)/(1+/?4//?з)] л/^Ж-
Пример В. Вводимые параметры: F=l,5-103, Q = 25, #,=4,7-103, Св = 22-10^9. Результаты расчета: #2 = 230,378^7 103, R3 — = 4,7-103, Rt = 4,4635581-103, /?5 = 4,7-103, /?7 = 4,7-103, С8 = 22-10-9, КВЧ = 1,9107123, КПП = 49,016652, КНЧ = 2,0119259. Настройка: (1) fp резистором /?4, (2) qp резистором ^223. Универсальный. Схема 2. TUn (s) = — Knn{{ap/qp) s/[s2+ (aip/qp) s +
+ w?)}, Ann — Д4/Д11
Программа 7.55.
. 01 PRINTФИЛЬТР УНИВЕРСАЛЬНЫЙ.СХЕМА 1 02 PRINT R3 93 PRINT —!====!----------------------94 PRINT ! R4 !! C6 ! 05 PRINT *-!====!— ---и.---I 06 PRINT ! 0У ! !!!!! 07 PRINT !----- ! ! 0У ! ! 08 PRINT !-!- ! ! R5 !-----! ! 09 PRINT Rl ! !--*-.!====!-*-!- ! ! ! . 10 PRINT <-!====!-*-!+ ! !-ж— ! 11 PRINT ! !---! ! —!+!!!! 12 PRINT !-> ! !---! ! ! ! 13 PRINT ! ! R2 ! ! ! ! 14 PRINT ! ! --! ! ! 15 PRINT ! ! ! 16 PRINT ! ! ! ! 17 PRINT ---------J~-------------*-----> sINPUT"X 18 PRINT --------------------------! ! 19 PRINT ! C8 ------------! 20 PRINT ! ! ! ! 21 PRINT ! ----!!—ж 22 PRINT ! ! ! ! ! 23 PRINT ! ! 0У ! 24 PRINT ! !----!
I
!
25 PRINT !_!====!-*-!- i i 26 PRINT R7 ! !-*—> 27 PRINT —!+ ! 28 PRINT ! !---! 29 PRINT ! 38 PRINT --40 INPUTFP=FsINPUTQP=QiINPUTC=C 58 LETR0=1/<2*#PI*F*C> 60 PRINTR0=R0 70 PRINTВВЕДИТЕ НОМИНАЛЬНОЕ ЗНАЧЕНИЕ R0 80 INPUTR9=R9 90 LETR1=R9:LETR3=R9:LETR5=R9:LETR7=R9 100 LETC6=CiLETC8=C 110 LETR4=R9*<(R9/R0>~2:> 120 LETR2=R9*<Q!*C<1+R4^R9>/SQR<R4/R9)>-1)
>
130 LETK1=<1+R4/-R9:>/CR9/R2+1>
140 LETK2=R2/R9iLETK3=Kl*R9/R4 150 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 160 PRINTRl=RlsPRINTR2=R2:PRINTR3=R3 170 PRINTR4=R4iPRINTR5=R5:PRINTC6=C6 180 PRINTR7=R7:PRINTC8=C8:PRINTKB4=K1 190 PRIHT.Knn=K2:PRINTKH4=K3 200 PR INTПЕРЕДАТОЧНЫЕ ФУНКЦИИ ИМЕЮТ ВИД 210 PRINTTB4<S>=KB4«<S"2-<S"2+<:WP/Q>:«S+WP-2)) 220 PRINTTnn<S>=-Knn*<<WP-Q>*S/<S~2+<UP/Q>*S+WP"2:>> 238 PRINTTH4<S>=KH4*(WP"2/<S"2+aiP-Q>*S+WP"2)) 240 END Пример А. Вводимые параметры: F=l,5-103, Q = 6, i?, = 1,8-Ю3, С6 = 68-10-9. Результаты расчета: ^2 = 20,020858 103, #з=1,8-103, #4 = 2,3953975-103, #5=1,8-103, #7=1,8-103, Св = 68-10~-9, КВЧ = 2,1385109, КПП = 11,122699, КНЧ= 1,6069649.
Программа 7.56. 81 PRINT1 РАСЧЕТ ФИЛЬТРА УНИВЕРСАЛЬНОГО 82 PRINT СХЕМА 2 83 PRINT R2 04 PRINT —!====!-------------------85 PRINT ! !! СЗ ! 86 PRINT ж—-! !---! 87 PRINT ! !! ! Сб ! 08 PRINT !! ! 89 PRINT ж-!====!-ж —|!----- i > 10 PRINT ! ОУ ! ! !! ! ! 11 PRINT Rl !----- ! ! ОУ ! ! 12 PRINT <-!====!-*-!- ! ! R5 ! ----- ! ! 13 PRINT ! !—*-!====!-*-!- \ \ \ 14 PRINT --!+!! ! !-ж---> 15 PRINT ! !---! !— > --!+ ! ! ! 16 PRINT ! ! !---! ! ! 17 PRINT --! ! ! 18 PRINT --! ! 19 PRINT ----------------! ! s INPUT" X 20 PRINT ! R8 ! 21 PRINT ! —!====!—* 22 PRINT ! ! ОУ ! 23 PRINT ! R7 !----! 24 PRINT !-!====!-*-!- \ \ 25 PRINT ! !---*-> 26 PRINT —!+ ! 27 PRINT ! !---! 28 PRINT ! 29 PRINT --38 INPUTFP=F!INPUTQP=Q:INPUTC=C:INPUTK=K 40 LETR8=1/<2*#PI*F*C) 58 PRINTR8=R0 55 PRINTВВЕДИТЕ НОМИНАЛЬНОЕ ЗНАЧЕНИЕ R0 60 INPUTR9=R9 78 LETR2=R9:LETR7=R9!LETR8=R9
!
R4
!
80 LETC3=C!LETC6=C 90 LETR5=<R0"2)/R9:LETR4=Q»iRe 180 PRINTВАРИАНТ А 118 LETR1=R4/-K:LETK1=K 120 LETK2=R2/R1!LETK3=R2/R1 121 PRINTРЕЗУЛЬТАТЫ РАСЧЕТА 122 PRINTRl=RliPRINTR2=R2:PRINTC3=C3 123 PR INTR4=R4:PRINTR5=R5:PRINTC6=C6 124 PR INTR7=R7sPRINTR8=R8iPRINTКПП=К1 125 PRINTKH41=K2:PRINTKH42=K3:INPUTX 126 PRINTВАРИАНТ В 138 LETRl=R2/KsLETKl=R4/Rl 148 LETK2=K:LETK3=K 158 PR INTРЕЗУЛЬТАТЫ РАСЧЕТА 168 PRINTRl=Ri:PRINTR2=R2sPRINTC3=C3 178 PR INTR4=R4sPRINTR5=R5:PRINTC6=C6 188 PRINTR7=R7:PRINTR8=R8:PRINTКПП=К1 190 PRINTKH41=K2:PRINTKH42=K3 280 PRINTПЕРЕДАТОЧНЫЕ Ч>УНКЦИИ ИМЕ»Т ВИД 210 PRINTTnn<S:>=-Knn*miP-Q>*S/4S"2+;UP/"-G>*S+WP~2)> 228 PRINTTH4US>=KH41«(UP"2^;3"2+<WP/8)»S+WP"2>) 238 PRINTTH42<S)=-KH42«<;WP"2/4S"2+CWP/Q)«S+UP"2))
Пример А. Вводимые параметры: F = 2,5-103, Q = 9, «, = M03, /?2= 1,5-103, Сз = 47-10~9. Результаты расчета: RA — = 12,190591-103, #5= 1,2231318-103, C6 = = 47-10-9, /?7 = 1,5-103, «8=l,5-103, КПП = = 12,190591, КНЧ=1,5. Пример В. Вводимые параметры: F = 2,5-103, Q = 9, «2=1,5-103, С3 = 47-10~9. Результаты расчета: Rt = 8,1270609-103, Rt = = 12,190591 -103, /?5 = 1,2231318-103 С6 = = 47-10-9, /?7 = 1,5-103, /?8= 1,5-103, КПП = = 1,5, КНЧ= 184,56857-10~3. Настройка: (1) fp резистором R5, (2) qp резистором Rt, (3) К резистором У?,. Если нет необходимости в выдаче на экран дисплея (или в распечатке принтером)принципиальных схем фильтров, программы могут быть существенно сокращены.
§ 7.7 Расчет нелинейных и ключевых электронных устройств В отличие от расчета линейных электронных устройств, базирующегося в основном на использовании аналитических методов, расчет нелинейных устройств обычно требует применения различных численных методов. Например, семейство выходных вольт-амперных характеристик мощного МДП-тран-зистора с горизонтальным каналом хорошо аппроксимируется выражением [10]
где р и Ь — параметры аппроксимации. Однако из этого выражения нельзя найти напряжение на затворе С/зи, при котором h(UCi,o, £Лио) = /со и {Уси = ^сио. Эта задача решается численным методом решения нелинейного уравнения /со — Ic(Ucll0, изя) = 0 или, после простых преобразований, находится из уравнения
В таком виде уравнение может решаться методом простых -итераций. Процедуру рас- чета t/зио целесообразно объединить с нахождением малосигнальной крутизны S = = д!с/диш и выходного сопротивления Ri = = dUcr,/dIc- Для этого току /со придается малое приращение А/с и находится новое значение U3ll0. Тогда S~AIc/(U3»o-Umo). Далее, задав frao малое приращение AUCU, из формулы для /с(£/Си, t/зио) находим приращение тока стока Л/с и /?,:~ Д£/си/Л/е. Программа 7.57. 18 PRINTРАСЧЕТ ПАРАМЕТРОВ МОЩНОГО МДП-ТРАНЗИСТОРА. 20 ШРиТВВЕДИТЕ IC0>UC0,S8I0,U0,S0
30 INPUTВВЕДИТЕ ПРИРАЩЕНИЯ IC>UCX,Y 40 INPUTВВЕДИТЕ ПОСТОЯННЫЕ Р,ВР,В 50 INPUTВВЕДИТЕ ТОЧНОСТЬ РАСЧЕТА НН 60 LET Il = I0sLET Ul=Il/S0:e.OSUB ПЭ 65 LET A2=A!LET A3=A1 ?0 PRINTU3H0=U2iLET U3=U2:LET I1=I0+X:6OSUB 110 80 LET S1=X/<U2-U3>:PRINTS=SI 90 LET F=<U0+Y>*P/A2:LET X1=S0*A2«(EXP<F>-EXP<A3)> 100 LET R=V/XlsPRINTR=RiEND 115 LETA=B*U1"2-U1:LETA1=P*U0/A 120 LET E=S0«<1-EXP<A1>>:LET U2=I1-E+B*U1"2 130 LET K=<U1-U2)~2-H"2:LET U1=U2 140 IF K>0 THEN 115 150 RETURN:END
Рис. 7.16. Однотактовый трансформаторный каскад усиления мощности на мощном £/-МДП-тран-зисторе
Рис. 7.17. Графические построения к расчету трансформаторного каскада
када на мощном (7-МДП-транзисторе (рис. 7.16). Семейство выходных вольт-амперных характеристик последнего (рис. 7.17) Для транзистора КП905, имеющего So = = 0,03 А/В, р=1 и 6 = 0,02 1/В при /со = = 0,1 А, (/сио=10 В, Д(Ус = 1 В и А/с = 0,01 А при погрешности Я = 0,001, находим (7 3ио = = 3,839 В, S= 18,625-10 3 А/В и #,= = 643,3 Ом. Более сложной является задача моделирования работы нелинейных усилителей при усилении ими синусоидального сигнала, например, трансформаторного однотактного касаппроксимируется выражением
где Us и /s — координаты точки перегиба передаточной характеристики (рис. 7.18), К — коэффициент аппроксимации.
Рис. 7.18. Передаточная характеристика мощного У-МДП-транзистора
Алгоритм моделирования каскада, изображенного на рис. 7.16. 1. Вводим исходные данные: параметры транзистора /s, Us, S и D = K, сопротивления первичной R\ и вторичной #2 обмоток трансформатора, коэффициент трансформации N,. сопротивление нагрузки RH, напряжение пи. тания стока £с, напряжение смещения затвора Е3, амплитуду входного синусоидального сигнала А. 2. Задав Um = E3, R = R\, Е{=ЕС и обращаясь к подпрограмме решения нелинейного уравнения F(Um, £/M)=£i —Ус. —Л;/с(£/,„, Уси) = 0, (7.20) находим напряжение £/с„о и ток /со = /сз (см. рис. 7.17) в точке покоя. 3. Находим приведенное в первичную цепь трансформатора сопротивление динамической нагрузки (прямая В на рис. 7.17) Л = /?1+(/?2 + #н)/Л/2 и напряжение £i = = Ec + RIcq. 4. Находим остальные четыре точки пересечения прямой динамической нагрузки и линий выходных вольтамперных характеристик. Для этого задаем четыре значения мгновенного напряжения на затворе: Umi=E3 + A, изи2 = Е3-\-А/2, U3Ui = E3 — A/2 и <У3»5 = = Е3 — А. Для этих значений £/3„, обращаясь к подпрограмме решения уравнения (7.20), находим значения Umt, £Л-и2, Ucn4 И (7с„5.
5. Методом пяти ординат находим амплитуды первых четырех гармоник спектра переменного напряжения на стоке, коэффициент нелинейных искажений
выходную мощность (полную) Pz = PN = = (t/?»i + t/?»2+ <Л2„з+ ULi)/2R, мощность в нагрузке PX = P2P«/{RN2), потребляемую каскадом мощность Ро = = /ео£с,
рассеиваемую транзистором мощность Р Т = РО-Я2, коэффициент полезного действия к. п. д. = = P2/Po, коэффициент усиления каскада по первой гармонике #„=£/„„ i/A = UCM tRH/(ANR). Проводя расчеты для разных А, можно построить зависимости основных параметров каскада (Кг, Р», Ро, к. п. д. и др.) от амплитуды напряжения возбуждения. Решение (7.20) в приведенной ниже программе выполняется комбинированным методом секущих — хорд при погрешности Я=1-10~4. Программа 7.58.
18 PRINT МОДЕЛИРОВАНИЕ ТРАНСФОРМАТОРНОГО ОДНОТАКТНОГО1 28 PRINT УСИЛИТЕЛЯ МОЩНОСТИ НА U-МДП-ТРАНЗИСТОРЕ 30 INPUT ВВЕДИТЕ ПАРАМЕТРЫ ТРАНЗИСТОРА IS,US;S П.- Ub S 40 INPUT ВВЕДИТЕ СОПРОТИВЛЕНИЯ ОБМОТОК ТРАНСФОРМАТОРА R1/R2 RbR2 50 INPUT ВВЕДИТЕ КОЭФФИЦИЕНТ ТРАНСФОРМАЦИИ N=N 60 INPUT ВВЕДИТЕ СОПРОТИВЛЕНИЕ НАГРУЗКИ RH=R3 70 INPUT ВВЕДИТЕ НАПРЯЖЕНИЕ ПИТАНИЯ СТОКА ЕС=Е 80 INPUT ВВЕДИТЕ НАПРЯЖЕНИЕ СМЕЩЕНИЯ ЗАТВОРА ЕЗ=ЕЗ 90 INPUT ВВЕДИТЕ АМПЛИТУДУ ВХОДНОГО СИГНАЛА А=А 100 LET U=E3 : LET R=R1 t LET E1=E : 60SUB 290 110 LET 12=1 : LET V3=X1: LET R=<Rl + <R£+R3>-<N"2))sLET E1=X1 + I*R 120 LET U=E3+A s 60SUB 298 130 LET V1=X1 : LET U=E3+A/2 : 60SUB 298 148 LET V2=X1 : LET U=E3-A/2 s 60SUB 290 150 LET V4=X1 s LET U=E3-A : 60SUB 298 168 LET V5=X1 s REM МЕТОД ПЯТИ ОРДИНАТ 170 LETM8=<Vl+V5+2*<V2+V4)>/6sLETMl = <Vl-V5+V2-V4>-3 188 LETM2=<Vl+V5-2*V3)/-4:LETM3=<Vl-V5-2«<V2-V4)>/6 210 LET M4=<<V1+V5>-4*<V2+V4)+6*V3V12
228 230 248 258 268 278 275 288 2S5 298 388 318 320 ЗЗе 349 350 369 370
LETK=<SQR<<M2"2) + <M342H<M4-2))>/ABS<Mn LET P1=(<M1S2><2*R>)«<R3/R>!LET P0=I2*E PRINTКОЭФФИЦИЕНТ ГАРМОНИК КГ=К:PR INTМОЩНОСТИ PRINTВ НАГРУЗКЕ РН=Pi:PRINTПОТРЕБЛЯЕМАЯ Р8=Р0 PRINTРАССЕИВАЕМАЯ ТРАНЗИСТОРОМ- РТ=Р8-Р1 PRINT КОЭФФИЦИЕНТ ПОЛЕЗНОГО ДЕЙСТВИЯ К.П.Д. = Р1-Р8 LETU=ABS<M1)*R3/A/N/R!PRINTКОЭФФИЦИЕНТ УСИЛЕНИЯ KU=U PRINT:60T0 98 REMКОМБИНИРОВАННЫЙ МЕТОД СЕКУЩИХ-ХОРД LET Х0=8 : LET Xl=l : LET Н=1Е-4 LET X=X8 s 60SUB 358 LET C=F : LET X=X1 : 60SUB 358 LET B=F : LET У=Х8-Сж<Х1-Х8>^<В-С> LET X0=X1 s LET X1=V IF ABS<X1-X0>>H THEN 398
RETURN LET Z=<Il*<l+HTN<Sitf<U-UlVIl)>> LET I=Z*C1-EXP<<-0.7*S*XVZ)> LETF=E1-X-I*R:RETURN!END
Пример. Для /s = 2 A, f/s = 10 B, S = = 1 A/B, £> = 0,7, /?,==/?2 = 0,l Ом, 7V = 2, «„=15 Ом, £c = 40 B, £3=10 В и А=3 В получим Kr = 0,1192, Л» = 31,521 Вт, Я„ = = 80 Вт, Рт = 48,48 Вт, к. п. д. = 0,394 и Ки = = 5,125. Нелинейный режим работы т-фазного выпрямителя (см., например, рис. 7.19) (т = 2) обусловлен как резкой нелинейностью диодов, так и отпиранием их в течение небольшой части периода входного синусоидального напряжения. Расчет выпрямителя проводится по следующему алгоритму. 1. Вводим исходные данные: сопротивление нагрузки /?„, внутреннее сопротивление (диодов и обмоток трансформатора, пересчитанных в цепь вторичной обмотки) г, частоту переменного напряжения питающей сети f, число фаз выпрямителя т, коэффициент пульсаций выходного напряжения /(„, (постоянная составляющая Uo), выходной ток /о. 2. Из решения трансцедентного уравнения tg9 — в==А, где A = nr/mRH, находится угол отсечки 6, характеризующий ту часть периода, в течение которой отпираются диоды. 3. Вычисляются коэффициенты: К(9) = = sin6 — ecos9, В (6) = [(cos9) л/2]~,
4. Находим напряжение вторичной обмотки U2 = UoB (6), пиковое значение тока вентилей (диодов) ItM = I0F(e)/m, действующее значение тока вентилей /в = /)(в)/0/т, ток вторичной обмотки /2=У27В и емкость конденсатора фильтра С=(1/т + е/л)/2/С„в/Л„. Программа 7.59.
18 PRINT РАСЧЕТ ВЫПРЯМИТЕЛЯ 28 INPUT ВВЕДИТЕ СОПРОТИВЛЕНИЕ НАГРУЗКИ RN=Ri
30 INPUT ВВЕДИТЕ ВНУТРЕННЕЕ СОПРОТИВЛЕНИЕ R=R2 48 INPUT ВВЕДИТЕ ЧАСТОТУ F=F 50 INPUT ВВЕДИТЕ ЧИСЛО ФАЗ М=М 68 INPUT ВВЕДИТЕ КОЭФФИЦИЕНТ ПУЛЬСАЦИЙ ВЫХОДНОГО НАПРЯЖЕНИЯ К=К 78 INPUT ВВЕДИТЕ НАПРЯЖЕНИЕ U0=U0 80 INPUT ВВЕДИТЕ ТОК 10=10 Э0 INPUT ВВЕДИТЕ ТОЧНОСТЬ РЕЗУЛЬТАТА Е=Е 100 LET Q=0 S LET H=l 110 IF ABS<HXE THEN 156 120 LET Q=6+H : bOSUB 160 130 IF V/H<=0 THEN 120 140 LET H=-H/10 8 60T0 110 158 PRINT УГОЛ ОТСЕЧКИ ДИОДОВ Q=Q : 60T0 189 160 LETV=TAN<Q>-Q-#PI*R2/M/R1!RETURN 180 LET A=SIN(Q:>-G!*COS<Q> 190 LET N=#PI*<1-COS<G>VA
200 210 220 260 290 300 310 320 330 340
LET B=l/<SQR<2>*C0S<Q>> LET B=SGR<#PI*<Q*<l+<C0S<2*Q>>.2>-3*SIN<2*a>>4>VA LETU=U0*B:LETI=I0*N/M!LETI1=I0*D/M:LETI2=SGR<2>*I1 LET C=<<1/M)+<Q/#PI)>/(2*K*F*R1) PRINT НАПРЯЖЕНИЕ ВТОРИЧНОЙ ОБМОТКИ U2=U PRINT ПИКОВОЕ ЗНАЧЕНИЕ ТОКА ВЕНТИЛЯ 1=I PRINT ДЕйСТВУЮТЕЕ ЗНАЧЕНИЕ ТОКА ВЕНТИЛЯ 11=II PRINT ТОК ВТОРИЧНОЙ ОБМОТКИ 12=12 PRINT ЕМКОСТЬ С=С 6ОТО 20 : END
Рис. 7.19. Схема двухфазного (мостового) выпрямителя
Пример. Для #„ = #1 = 1000 Ом, г = = /?2 = 100Ом, /п = 2, / = 50 Гц, К„в = Л: = 0,1, t/o=150 В, /о = 0,15 А и погрешности вычислений е=£=Ь10~4 получим 0=0,7201 рад, /С(в) = АГ = 0,1181, В(в) = В = 0,9406, F(9) = = N = 6,602, D(9) = 0 = 2,294, U2= 141,094 В, /„„=0,4952 А, /2 = 0,2433 А и C = 7,292-10"s Ф. Работу ключевых устройств иногда удается разбить на отдельные стадии и анализировать переходные процессы в них поэтапным методом. Такую возможность рассмотрим на примере инженерного расчета ключа на мощном МДПтранзисторе (см. рис. 7.20, а) (временные диаграммы работы ключа приведены на рис. 7.20, б). Расчет производится по следующему алгоритму. 1. Вводим исходные данные: входную емкость транзистора С3„, проходную емкость
Рис. 7.20, K-iioi на мощном (У-МД1Г -транзисторе (а) и временные диаграммы его работы (б) С3с, крутизну So, сопротивление сток исток во включенном состоянии Лс„ вкл, пороговое напряжение отпирания Uo, напряжение питания Ес, сопротивление нагрузки в цепи стока Rc, сопротивление генератора управляющих импульсов R, и их амплитуду U3M. 2. Находим ток стока во включенном состоянии ключа /,.,, -HC/(RC:-f- Rcll ,„,) и остаточное напряжение на стоке включенного транзистора UM~r-~-lKjReM в|ш. Л. Считая, что рабочий участок передаточной характеристики линейный, находим среднее напряжение на лнтворе в стадии 1 Ко-U„с включения t/1Ho-~ fo+T-i —5~с----- и КРИ™ческое напряжение на затворе, обеспечивающее включение транзистора f/3BKp=t/o + RcSu 4. Находим время задержки включения 7ЗВКл = т„ЛЗ In (U3H/(Um~ U и)), где тВхз = = Rr (СЗИ--\-Сж) Это время определяется зарядом входной емкости (С,„ -f Сж) закрытого транзистора до напряжения отпирания U и.
5. На стадии включения основным фактором, определяющим время включения, оказывается отрицательная обратная связь, осуществляемая через проходную емкость С,с. Она ведет к увеличению действующей входной емкости до значения Свх ,фф = С3„+ + Сж( 1 + SORC) ~ Сзс( I + SoRc), так как SORC > 1 и Сж (1 +S0Rc) >СЗИ. Возрастание Свх ведет к появлению характерного участка медленного изменения напряжения на затворе — оно устанавливается на уровне, близком к иш0. Полагая емкость Сп линейной, время включения можно найти из выражения (BKJ1~0,8C3C—j-j------j-—-. Здесь множитель (7зм — Ьзио
0,8 учитывает, что в технических расчетах время включения оценивается на уровнях 0,1 и 0,9 от полного перепада напряжения на стоке (£с—£/„„). 6. Находим время задержки выключения ti выкл=твх 3\п(изя/изя кр). Это время определяется экспоненциальным спадом напряжения на затворе от значения £/3„ г,у 11Ш кр. 7. На стадии выключения вновь действует отрицательная обратная связь через проходную емкость С„, что ведет к увеличению С,,,, и медленному изменению напряжения на затворе Um (t) ~ Umo. Время выключения икл^0,8Сзс R<(E^U°"\ Введение множителя 0,8 обосновано в п. 5 алгоритма. Программа 7.60.
18 PRINTРАСЧЕТ КЛЮЧА НА МОЩНОМ U-МДП-ТРАНЗИСТОРЕ 20 МРиТВВЕДИТЕ ПАРАМЕТРЫ ClbCi2/S0>R ВКЛ>и@ 38 INPUTВВЕДИТЕ ПАРАМЕТРЫ ECjRCRr ErWrZ
A/B/SJR/U
48 INPUTВВЕДИТЕ АМПЛИТУДУ U BXM=U:PRINT!F1.4! " 50 LETI=E/<W+R>!LETD=I*R!PRINTTOK СТОКА 1С ВКЛ=I 60 PRINTНАПРЯЖЕНИЕ U СИВКЛ=И 70 LETL=<E-D)/(J/SSLETF=U+L!LETL=U+U^2 80 L.ETM=Z*<A+B>:LETC=A+B*a+S*W> 90 PRINTЭЛЕКТИВНАЯ ВХОДНАЯ ЕМКОСТЬ С ВХЭФ*=С 100 LETN=C»ZsPRINTR Г*С BX>*"?=N 110 LETP=M«LOG<U/(U-U)> 120 PRINTВРЕМЯ ЗАДЕРШКИ ВКЛЮЧЕНИЯ Т ЗВКЛ=Р 130 LETV=.8*B»2*<E-D)/<U-L) 140 PRINTВРЕМЯ ВКЛЮЧЕНИЯ Т BKfl=VsLETX=M«LO6<U/F) 150 PRINTВРЕМЯ ЗАДЕРйКИ ВЫКЛЮЧЕНИЯ Т ЗВЫКЛ=Х 160 LETT=.8*B*Z*<E-B>/-L 170 PRINTВРЕМЯ ВЫКЛЮЧЕНИЯ Т ВЫКЛ=Т:60Т0 40!END Пример. Для С„ = 1-10-9 Ф, Сзс = = 30-10 "|2 Ф, S0=l,5 А/В, «с„вкЛ = 1,5 Ом, U 0 = 6 В (типовые параметры высоковольтного ключевого С-МДП-транзистора КП701), Ес = 400 В, Яс = 82 Ом, /?г = 50 Ом, (/3м = 20 В находим: /СО = 4,79 А, ^/сивкл = = 7,186 В, Свхэфф = 4,72-10"9 Ф, г3вкЛ = = 18,37-10~9 с, ^«л = 38-10-9 с, (,,„„ = = 40,03-10"9 с и <вь,кл = 62,05-10-9 с. Расхождение вычисленных времен задержки и переключения с экспериментальными данными не превышает 15—20 %. Существенно более высокую точность дает моделирование ключевых устройств методом переменных состояния. Под
последними подразумевается электрические величины, не способные где
меняться
мгновенно
(напряжение
«вх (0— Ыш h=ii~h («зи, "си) -(2-
Входная емкость Си у мощных С-МДП-транзисторов слабо зависит от напряжения Озч, поэтому можно положить Cn=const. Однако емкости Си; и С22 сильно зависят от напряжения (Уси. В связи в этим данные
Рис. 7.21. Эквивалентная схема ключа на мощном С-МДП-транзисторе
на емкости, ток в цепи индуктивности и др.). Алгоритм реализации метода переменных состояния заключается в составлении и решении системы нелинейных дифференциальных уравнений состояния, описывающих работу моделируемой схемы. Например, моделирование ключа (рис. 7.20, а) может выполняться на основе эквивалентной схемы (рис. 7.21). На ней Си — входная, С22 — выходная и Ciz — проходная емкости транзистора, /С((/Зи, £/™)— источник тока, описываемый выражениями ( Л8) и (7.19). Система дифференциальных уравнении для схемы, изображенной на рис. 7.21, имеет вид du3, ~~dT dt
C2
dk dt зависимости аппроксимируются следующими выражениями: Сп = С\г**п + Ае~ ви™ и С22 = = С22мии + Се" ™, где величины CI2MH,,, А, В, Сггмин, С и D определяются с помощью экспоненциальной регрессии по известным экспериментальным зависимостям С12 и С;г от напряжения UmРешение данной системы дифференциальных уравнений выполняется методом Рунге — Кутта — Мерсона с автоматическим выбором шага при заданных начальных условиях £/3и(о), UcJJo), U(ta) и ^0, а также заданной временной зависимости Ucf(t). В приведенной ниже программе Свх(0 задается в виде импульса с экспоненциальным нарастанием и спадом l-e-/x")
при
"ри где С„
вх
- амплитуда,
/„длительность
и т„х — постоянная времени нарастания и спада входного импульса.
Программа 7.61. 10 PRINTМОДЕЛИРОВАНИЕ КЛЮЧИ НИ МОЩНОМ U-МДП-ТРАНЗИСТОРЕ 15 DIM V<3>>U<3>>A<3>>C<3>/D<3>>E<3)>F<3> 28 IHPUTВВЕДИТЕ ПАРАМЕТРЫ ISrtlS/S,K I/U>S,P 30 INPUTBBEAHTE ПАРАМЕТРЫ СИ>С12 МИН>АдВ ОА9/В9/С9 40 INPUTВВЕДИТЕ ПАРАМЕТРЫ С22 МИН/CD D9,E9,F9 50 INPUTВВЕДИТЕ ПАРАМЕТРЫ EC>RC»Rr>L E>Z»G>A 68 INPUTВВЕДИТЕ ПАРАМЕТРЫ U MBX»T BX»T И U»T»F 78 ШРиТВВЕДИТЕ ПАРАМЕТРЫ H0/EPS/T0 H/EbX:LETN=3 98 LETV<l)=0!LETU<l)=0!LETV<2)=E:LETU<2)=EtLETV<3>=0»LETUI<3)= 110 LETE3=0:&OSUB 430:LETD=0!FOR J=l TO N 120 LETA<J)=F<J)*H:LETV<J)=l«l<J)+A<J>/3sNEXT J 130 LETX=X+H3!G0SUB 400:FOR J=l TO N
211 148 LETV<J>=W<J)+<A(J)+F<J)*H>/-e!NEXT J 150 GOSUB 4808FOR J=l TO N:LETC<J>=F<J>*H 160 LETV<J)=UI<:.J>+A<J>/8+.375*C<J>:NEXT J 170 LETX=X+H/6:&0SUB 400:FOR J=l TO N 1S0 LETD<J)=F<J)!«H:LETV<J)=liKJ)+ft<J)/2-1.5«C<J)+2*D<J) 1Э0 NEXT J:LETX=X+H/-2:60SUB 480 208 FOR J=l TO №LETE<J)=F<J>*H 210 LETV<J>=bKJ>+<A<J>+4*D<J>+E<J>>6 220 LETE2=ABS<-2«ft<J)+9«C<J>-8*D<J>+E<J))>30 230 IF E2<=E1 THEN 250 240 LETE3=i:60T0 260 250 IF E2<El/-20 THEN LETD=D+1 260 NEXT JsIF E3=0 THEN 290 270 LETX=X-H!FOR J=l TO №LETV<J)=W<J):NEXT J 280 LETH=H/2:60T0 110 290 IF D=N THEN UETH=H+H 300 PRINT!F1.2!T=X,U BX=A7»U 3-V<l)»U C=V<2> 310 FOR J=l TO N»LETb)<J)=V(J)!NEXT J:GOTO 110 400 IF X<=F THEN LETB7=U*<1-EXP<-X/T>> 410 LETA7=B7SIF X>F THEN LETA7=B7*EXP<-<X-F)/T> 420 LETD8=A9+B9*EXP<-C9*V < 2)):LETE8=D9+E9*EXP <-F9*V< 2)> 440 LETF8=I«<1+HTN<S«(V<1>-U>/I)) 450 LETV=F3*< 1-EXP<-P*S«V<2)F8) ): LETA8=<A?-Y< 1)VG 470 LETB8=<<V<3)-V)/E8-ft8^CV<l-C+l/D8+l/E8) 480 LETC8=V<3>-V-B8:LETF<1>=<A8+B8>/C:LETF<2>=C8.E8 490 LETF<3)=<E-V<3)*Z-V<2))/A! RETURN:END
Пример. Для /s=ll A, t/s=12,6 B, S = 2,72 A/B, # = 0,7, Cn=3,5-10"10 Ф, С,2м„„ = 8-10-12 Ф, Л=3,5-10-" Ф, В = = 0,088 1/В, С22 мин =1,3-10~10 Ф, С = = 6,59- Ю"10 Ф, £> = 0,33 1/В (параметры КП913А) £ 45 В # 5 Ом, 9 с, <и=14-10^9 с, /io=l-10~9 с (начальный шаг), Q=l-10^3 (погрешность вычислений) и ^о = 0 получаем следующие данные: двух дифференциальных уравнений di E — iR — и du i — / (и) dt L
du dt С 9 6,59 Ю Ф, £ 0,33 1/В (р транзистора КП913А), £ с = 45 В, #с = 1=1-10- Ф, {/„„ = 20 В, твх = 3-10 9 где I(U) — зависимость тока нелинейного двухполюсника от приложенного напряжения U. Отметим, что часть общей емкости С отражает инерционность двухполюсника. 0,5 1, 2, 3 3, 4 4 , 5 5, 6 t Н С 5 5 5 5 5 . 1 , 1 , 1 , 3,07 7, 11 12 13 16 17,3 и. В х (/), 4 7 5 5 6 2 ,8 87 ,3 ,6 ,8 , 5 , 5 , 6 , 0,139 1, 2, 3, 4, 7, 8,31 и в 1 96 79 57 07 53 37 23 . « 4 , 4 3 , 44,9 4 44 43 43 35 31,8 и с в 2 4 1 8 9 ,9 4,6 ,2 ,9 ,3 (0> Зависимости uBX(t), u3H(t) и uCK(t), рассчитанные по программе 7.61, показаны на рис. 7.22, причем на графике зависимости Um(t) отмечены точки — результаты вычислений. Из расположения этих точек отчетливо виден характер автоматического изменения шага интегрирования дифференциальных уравнений — на крутых участках Um(t) шаг автоматически уменьшается, а на пологих — возрастает. В общей сложности для построения этих кривых понадобилось 72 цикла вычислений. Если бы использовался обычный метод Рунге— Кутта с шагом /г = 0,25-10~9 с (такой шаг нужен для получения погрешности Q^J1-1O~3), то при общем временном интервале 30-10"9 с потребовалось бы 120 циклов вычислений. При увеличении протяженности пологих участков зависимости £/Си(0 выигрыш от применения метода Рунге — Кутта — Мерсона становится еще заметнее. Моделирование нелинейной автоколебательной цепи (рис. 7.23) с двухполюсником, имеющим jV-образную вольтамперную характеристику, сводится к решению системы из Допустим, что yV-образная вольт-амперная характеристика двухполюсника (в нашем случае туннельного диода ЗИ202К) задана графически (рис. 7.24). Аналитически ее можно представить полиномом 5-й степени, записанным по
схеме Горнера (7.21) Для нахождения коэффициентов а0—as полинома составим таблицу значений и и /: и,
0
В
0, 2
/,
0
0, 4
52
0, 6
23
0, 8
2
1, 0
4
13
мА
Используя любую из описанных ранее программ для полиномиальной интерполяции и аппроксимации при п — 5 и /г = Д[/ = 0,2 В, находим: ао = О, а\ =746,333, а2=—3420,833, а3 = 5734,375, а4=—4166,667 и а5= 1119,792. Кривая, построенная по формуле (7.21), практически точно совпадает с исходным 212
Рис. 7.22. Расчетные зависимости «„((), и,„(1) и исн(<) для ключа на мощном С-МДП-транзисторе, полученные при его моделировании
Рис. 7.23. Нелинейная характеристику
автоколебательная
схема с
двухполюсником,
имеющим
yV-образную
вычислительную
гис. /.Z4. фазовый портрет автоколеоании, построенный в плоскости вольт-амперной характеристики графиком зависимости 1(и), что свидетельствует о высокой точности аппроксимации. Для решения приведенной выше системы воспользуемся методом Рунге — Кутта — М.ерсона, дополнительно организовав ввод исходных данных и подпрограмму для вычисления /(u), di/dt = FO и du/dt = F\ при 1 = Л0 и и = А\.
Программа 7.62. 10 PRINTМОДЕЛИРОВАНИЕ РЕЛАКСАЦИОННОГО ГЕНЕРАТОРА 20 PRINTНА ПРИБОРЕ С N-ОБРАЗНОй В.А.Х. 25 LETN=2:BIM V<N>,b.KN:>/А<Ю>С<Ю..В<Н>>Е<Ю>Р<:Ю 3@ PRINTВВЕДИТЕ КОЭФФИЦИЕНТЫ АППРОКСИМАЦИИ В.А.Х. 40 INPUTA8>AbA2/A3,ft4,A5Q0,QbG2/Q3/Q4,Q5 50 INPUTВВЕДИТЕ ПАРАМЕТРЫ СХЕМЫ E/R/C*LE,Z,C/L 60 INPUTЗАДАЙТЕ НАЧАЛЬНЫЙ ШАГ Н0=Н 70 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ EPS=E1 90 LETV<l)=0!LETU<l)=0:LETV<2)=esLETW<2)*8:LETX=0 110 LETE3=0S6OSUB 400sLETD=0iFOR J=l TO N 128 LETA<J)=FCJ)s«H:LETV<.J>=W<J)+A<J>^3:NEXT J 130 L.ETX=X+H/3:GOSUB 400:FOR J=l TO N 148 LETV<J>=W<J) + <A<J)+F<J)*H)>6sHEXT J 158 GOSUB 400:FOR J=l TO N:LETC<J>=F<J>*H 160 LETV<J>=U<J>+A<JV8+.375*C<J>!NEXT J 170 LETX=X+H/-6:60SUB 480! FOR J=l TO N 180 LETD<J)=F<J)«H!LETV<J>=W<J)+A<J)^2-1.5ii!C<d)+2*D<:j) 190 NEXT J:LETX=X+H/2:G0SUB 400 200 FOR J=l TO NSLETE<J)=F<J)*H 210 LETV<J)=W<J) + <A<J)+4*D<J)+E<J)>/6 220 LETE2=ABS < -2*A < J > +9*C < J > -8*B (. J ) +E < J) > -30 230 IF E2<=E1 THEN 250 248 l_ETE3=l:60T0 260 250 IF E2<El/-28 THEN LETD=D+1 ,268 NEXT J:IF E3=0 THEN 296 270 LETX=K-H:FOR J=l TO H!LETV<.J>=WCJ):NEXT J 280 LETH=H/-2:G0T0 118 2Э8 IF D=N THEN LETH=H+H 380 PRINT!F1.2!T=X/U=V<2)/IR=Va>*lE3 . 318 LE™<1)=V<1):LETW<2;I=V<2>:80T0 110 488 410 428 LETF<2)=<V<l)-I^lE3)^CsRETURN:END
28 t,Hc Рис. 7.25. Расчетные временные зависимости u(t) и i(t) для автоколебательной схемы на туннельном диоде
Пример. Для указанных значений На рис. 7.24 показана фазовая траектория а0—ai, £ = 0,5 В, /? = 5 Ом, С=100-10~12 Ф, автоколебаний при нулевых начальных услоД = 50-10~9 Гн, /г0 = 1 - Ю 9 с (начальный виях, а на рис. 7.25 — форма импульсов шаг), Q=!-10~3 (погрешность вычисле- напряжения и (t) и тока i(t). Аналогичные ний) и to = 0 будем получать следующие ре- расчетным данные получены при эксперизультаты: ментальном исследовании данной схемы. (ХЮ"", с
0,25
0,5
1
1,5
2
3
3,5
4
5
«, В
0,00
0,00
0,01
0,0
0,02
0,03
0,04
0,0
0,0638
29,
35,9
31,
36,7
179 /, мА
488 1,53
13 3,59
18 8,3
46 12,
65 16,5
44 24,7
51 26,5
4 (, мА
2,47
4,86
9,42
9 13,
17,7
7
214
§ 7.8. Расчеты в механике и термодинамике
24,9
28,2 2
Рассмотрим некоторые примеры расчета параметров движущихся тел [21]. При частично упругом соударении (центральном лобовом) двух тел с массами. т.\ и /Иг и скоростями v\ и V2 скорости после соударения i—(v\ — v-i) m-ik i — 02)
/П\-\-ГП2
и энергия, теряемая при соударении, т>т2 (У,-У2)2(1-*2), где К — коэффициент восстановления. Программа 7.63. Пример. Для Dd=130 м/с, a = Q = = 25°, G = g = 9,8 м/с получаем //, = = ТНМАКС = 5,606 с, /5M=TSMAKC" = = 11,212 с, /г„ = Н(М) =308,005 м, s,= = S(M) = 1321,036 м. Далее, задав / = Т = = 0,5 с, получим S (Т) =58,91 м, Н (Т) = = 26,245 м и U (Т) =28,006 м/с. В приведенном выше примере не учитывалось сопротивление воздуха, существенное при больших скоростях. При учете сопротивления воздуха полет тела описывается системой из двух нелинейных дифференциальных уравнений, решаемых методом Рунге — Кутта или другим методом (см. § 4.10). Период колебаний реального тела (физического маятника) с распределенной массой га и моментом инерции 1А, подвешенного или подвижно закрепленного в точке А, не совпадающей с положением центра масс (точка 0), определяется выражением Т = = 2л -\JlA/mgs , где s — расстояние от точки 0 до точки А. Соответственно, зная период 18 PRINTPACHET СКОРОСТЕЙ И ПОТЕРИ ЭНЕРГИИ ПРИ 20 PRINT СТОЛКНОВЕНИИ ДВУХ ТЕЛ 30 INPUT ВВЕДИТЕ МАССЫ ТЕЛ МЬМ2 А, В 40 INPUTВВЕДИТЕ СКОРОСТИ ТЕЛ ДО СОУДАРЕНИЯ UbU2 56 INPUTВВЕДИТЕ КОЭФФИЦИЕНТ ВОССТАНОВЛЕНИЯ К=К 68 LETE=A»C+B*D:LETM=A+BSLETU=<C-IO*K 78 LETU1 = <E-U«B)/M!LETU2=<E+U*B)/M
75 1_ЕТЫ=АжВ*<С-Ю~2*а-К*К>/2/М 8S PRINTСКОРОСТЬ Ul ПОСЛЕ СОУДАРЕНИЯ =U1 90 PRINTСКОРОСТЬ U2 ПОСЛЕ СОУДАРЕНИЯ = U2 100 PR INTПОТЕРЯ ЭНЕРГИИ ПОСЛЕ УДАРА W=Ids END Г., D
Пример. Для rai = l кГ, тг=1 кГ, V\=2 м/с, 02=1 м/с, & = 5/9 получим ui = = 1,222 м/с, У2=1,778 м/с и Г = 0,1728 Дж. Тело массой га, брошенное вверх под углом к горизонту а с начальной скоростью vn, поднимается на максимальную высоту й„ за время <*„= («о sin a) /g при общем времени движения (до падения) tSK = 2thM. При этом максимальная высота подъема йм= (vl sin2 a)/2g, а дальность полета sM = = (vo sin 2a) Ig. В заданный момент времени t расстояние s и высота h определяются параметрически заданными уравнениями s = = o0<cos a, h = vot sin a — gr/2, где g — ускорение свободного падения. Скорость тела при этом v = ^Jvl — 2gh. Программа 7.64. колебаний физического маятника, можно найти его момент инерции относительно точки /o = ms ~—s). Программа 7.65 V 4л / обеспечивает расчет Т или /0 (искомой величине при вводе задается значение 0). Программа 7.65. Пример. Для га = 0,5 кГ, s = 0,5 м, g = 9,8 м/с и /А = 2 КГ/М, задав 7" = 0, получим Г = 5,67690758 с. Задав 7" = 5си/ = 0 получим /0=1,426480625 кГ/м2. Атмосферное давление Р (в килопаскалях) и плотность воздуха R (кГ/м3) на высоте Н (км) определяется формулами р= 101,3 (1 - G.5///288)5 255, /?= 1,2255 (1-6,5Я/288)4255.
05 PRINTРАСЧЕТ ПАРАМЕТРОВ ДВИЖЕНИЯ ТЕЛА» БРОШЕННОГО ПОД IS PRINTУГЛОМ Q К ГОРИЗОНТУ С НАЧАЛЬНОЙ СКОРОСТЬ» U8, 15 PRINT БЕЗ УЧЕТА СОПРОТИВЛЕНИЯ ВОЗДУХА 20 INPUTВВЕДИТЕ НАЧАЛЬНУЮ СКОРОСТЬ U0=U 30 INPUTВВЕДИТЕ УГОЛ < В ГРАДУСАХ ) Q=Q 40 INPUTВВЕДИТЕ УСКОРЕНИЕ СВОБОДНОГО ПАДЕНИЯ 6=6 50 LETQ=RAD<Q>iLETT=U*SIN<Q>/6 60 PRINTВРЕМЯ ДВИЖЕНИЯ ДО МАКСИМАЛЬНОЙ ВЫСОТЫ Т МАКС=Т 70 PRINTОБЩЕЕ ВРЕМЯ ДВИЖЕНИЯ Т SM=2*T 80 PR INTМАКСИМАЛЬНАЯ ВЫСОТА H=U«U*SIN<Q)"-2/-6 98 PRINTДАЛЬНОСТЬ ПОЛЕТА S M=U«U*SIN<2*Q>-& 160 INPUTВВЕДИТЕ ВРЕМЯ Т=Т 110 PRINTРАССТОЯНИЕ S<T>=U*T*COS<Q> 120 LETH=U*T*SIN<Q>-G*T*OV2sPRINTBblC0TA H<T> = H 130 PR INTСКОРОСТЬ Ua> = SGR<U*U-2*6*H>
140 60Т0 100!END 215
Программа 7.65. 10 PRINTРАСЧЕТ ПАРАМЕТРОВ ФИЗИЧЕСКОГО МАЯТНИКА 20 PRINTНЕИЗВЕСТНОМУ ЗНАЧЕНИИ I ИЛИ Т ЗАДАЙТЕ ЗНАЧЕНИЕ 8 30 INPUTВВЕДИТЕ МАССУ М=М 35 INPUTВВЕДИТЕ УСКОРЕНИЕ СВОБОДНОГО ПАДЕНИЯ G=S 40 INPUTРАССТОЯНИЕ ОТ ЦЕНТРА ТЯКЕСТИ ДО ТОЧКИ ПОДВЕСА R=S 50 INPUTЗАДАЙТЕ МОМЕНТ ИНЕРЦИИ <ИЯИ 0) 1 = I 60 INPUTЗАДАЙТЕ ПЕРИОД КОЛЕБАНИЙ <ИЛИ 0) Т=Т . 70 IF 1=0 THEN 98 80 PRINTПЕРИОД КОЛЕБАНИЙ МАЯТНИКА T=2»#PI*SQRCI^M/S-6>:S0T0 50 90 PRINTMOMEHT ИНЕРЦИИ I0=M*S*<6*T*T-4/#PI-2-S>!6OTO 50:END Давление . Р, выраженное в миллиметрах Максимальное число слоев при реализа-
ртутного столба, получаем умножением Р ции этого алгоритма определяется максина 7,5. мальным номером индекса i для одномерПрограмма 7.66. ного массива, отведенного под L/K IS PRINTАТМОСФЕРНОЕ ДАВЛЕНИЕ И ПЛОТНОСТЬ ВОЗДУХА 20 INPUTВВЕДИТЕ ВЫСОТУ Н<КМ)=Н 30 LETP=101. Зж< 1 -б.5ЖН.--288>"5. 255 40 PRINT!F3.4!ДАВЛЕНИЕ Р=Р КИЛОПАСКАЛЬ 59 PRINTIF3.4!ДАВЛЕНИЕ Р= рз*7 „ 5 ИИ РТУТНОГО СТОЛБА 60 LETR=1.2255:«U-6.5*H/-288)"4.255 70 PRINT!F1.5!ПЛОТНОСТЬ ВОЗДУХА R=R КГ/1ТЗ 80 60Т0 20SEND 90 PRINTСКОРОСТЬ U2 ПОСЛЕ СОУДАРЕНИЯ =U2 100 PR INTПОТЕРЯ ЭНЕРГИИ ПОСЛЕ УДАРА Ы=Ы:ЕгШ
Пример. Для Н=\ км получаем Я = = 89,84852 кПа, Р = 673,86387 мм рт. столба и R= 1,11206 кГ/м3. Распределение температуры в стационарных условиях в многослойном стержне (рис. 7.26) может вычисляться по следующему алгоритму. 1. Вводим исходные данные (число слоев N, температуру свободной поверхности первого слоя Го и последнего Г„, площадь поперечного сечения стержня s, толщину слоев L\—Ln и коэффициенты термической проводимости К\— Кп)- По мере ввода L,, Ki вычисляем и запоминаем значения Li/Kt2. Вычисляем величину Q=(7*o — i=N
— 7"„)/ ]Г {Li/Ki)/s, организовав с помощью «=1 цикла вызов значений Li/Ki при /= 1, 2,. . ., п. 3. С помощью рекуррентного соотношения 7", = 7",_i — Q (Li/Ki)/s находим температуру каждого слоя. Программа 7.67.
Рис. 7.26. К расчету стационарного распределения температуры по длине многослойного стержня Пример. Для трехслойного стержня, имеющего n = 3, s = \ м2, Z.i=0,25 м, /Ci = l,2 (Ki измеряется в ккал/м-час-К°), L2 = = 0,12 м, /(2 = 0,25, /.3 = 0,15, Л:3 = 0,75, Го = 900 °С и Гз = 100° получим Г, = 712,383 °С и Г2 = 280,113°С. 10 PRINTРАСЧЕТ СТАЦИОНАРНОГО РАСПРЕДЕЛЕНИЯ ТЕМПЕРАТУРЫ 20 PRINT ПО ДЛИНЕ МНОГОСЛОЙНОГО СТЕРЖНЯ 30 INPUTВВЕДИТЕ ЧИСЛО СЛОЕВ N=N:DIM P<N) 40 INPUTВВЕДИТЕ ТЕМПЕРАТУРУ В НАЧАЛЕ СТЕРШНЯ Т0=Т 50 INPUTВВЕДИТЕ ТЕМПЕРАТУРУ В КОНЦЕ СТЕРЖНЯ TN=W 60 INPUTВВЕДИТЕ ПЛОЩАДЬ ПОПЕРЕЧНОГО СЕЧЕНИЯ СТЕРМНЯ S=S 70 PRINTВВЕДИТЕ ДЛИНУ СЛОЕВ И ИХ ТЕРМИЧЕСКУЮ ПРОВОДИМОСТЬ 80 LETR=0:FOR 1=1 ТО N
Э0 PRINT!3.0!L<r^K<I):lNPUT"L/K 100 LETPm=LyK:LETR=R+P<I>:NEXT I
US LETQ=CT-y>«S^R:PRINT!F1.9!Q=Q 12Э LETH=T:FOR 1=1 TO N:LETH=H-Qi«P<I>-S 130 PRINTI3.0!ТЕМПЕРАТУРА T1=!4.6!H:NEXT UEND
216
§ 7.9. Финансово-экономические расчеты Сумма s, получаемая при Р % годовых начислений и первоначальном единовременном вкладе so за период N, определяется по формуле сложных процентов s = s0 {l+P/\00)N. Из этой формулы получаем следующие выражения: N= o = s/(l+P/100r, — lgs0
lg (l+P/100) P=100 A/N
-1]. Зная три заданных параметра, по этим формулам находится четвертый — неизвестный параметр. В программе 7.75 для нахождения искомого параметра при его вводе задаем ему нулевое значение. Программа 7.68. Пример С. Через сколько лет начальный вклад so = 20 000 руб. увеличится до суммы s = 30 000 руб., если процент годовых начислений Р = 3 %? Вводим s = 30 000, so = = 20 000, JV = O, P = 3, получаем Л/=13,72 года (примерно 14 лет). Пример D. Какой процент годовых начислений Р должен обеспечить банк, чтобы первоначальный вклад so=15OOO руб. увеличился вдвое за время iV=18 лет? Вводим s = 2-15 000 = 30 000, so=15OOO, Л/= 18, Р = = 0, получаем Р = 3,926 %. Если в каждый из Л/ периодов (лет или месяцев) вкладывается (или погашается) сумма si при Р % годовых начислений, то общая сумма вклада (погашения) составит величину где
= Р/100. 19 PRINTВЫЧИСЛЕНИЯ СО СПОРНЫМИ ПРОЦЕНТАМИ
28 PRINTИСКОМОЙ ВЕЛИЧИНЕ ЗАДАЙТЕ НУЛЕВОЕ ЗНАЧЕНИЕ 38 INPUTBBEAHTE КОНЕЧНУЮ ВЕЛИЧИНУ S=S 48 INPUTВВЕДИТЕ НАЧАЛЬНУЮ ВЕЛИЧИНУ S8=2 58 INPUTВВЕДИТЕ ПРОЦЕНТ Р=Р 69 INPUTВВЕДИТЕ ЧИСЛО ПЕРИОДОВ N=N
?в PRIHT16.2! !LETA=1+P/168 86 IF S=0 THEN PRINTS=2:«A"N 98 IF Z=0 THEN PRINTSS=S.A"N 109 IF N=8 THEN PRINTN=L0G<S.2>.-L0e<A> 118 IF P=8 THEN PRINTP=<<:S/2>4<1/N>-1)*100 128 END
Пример А. Пользователь сберегательной кассой внес в нее вклад So = 5000 руб. До какой суммы s он возрастет через Л? = 5 лет, если процент годовых начислений Р = 3 %. Вводим s = 0, so = 5000, /V = 5, P = 3, получаем s = 5796,37 руб. Пример В. Вскоре после рождения сына родители решили внести в сберкассу вклад so с тем, чтобы через 22 года (предполагаемое время его женитьбы) вклад вырос до суммы s = 30 000 руб., достаточной для приобретения дома. Каков должен быть вклад so, если процент годовых начислений Р = 3%? Вводим s = 30 000, so = 0, JV = 22, Р = 3, получаем so=15 656 руб. (т. е. почти вдвое меньше s). Из этой формулы получим In (si/si 4-1) и s,=sl
ln (1+/)
(1+/Г-1 Однако относительно / или Р явного выражения получить не удается. Поэтому нахождение Р = /-100 осуществляется численным методом поразрядного приближения из решения нелинейного уравнения F (/)=s//[(l+/)/V-l]-s,=o. Выбор неизвестного параметра (s, N, s, или Р) обеспечивается заданием ему нулевого значения при вводе. Программа 7.69. 18 PRINTРАСЧЕТЫ ВКЛАДА <ПОГАШЕНИЯ) ПРИ ПЕРИОДИЧЕСКИХ 28 PRINT РАВНЫХ ВЗНОСАХ 30 PRINTИСКОМОЙ ВЕЛИЧИНЕ ЗАДАЙТЕ НУЛЕВОЕ ЗНАЧЕНИЕ 40 INPIJTBBEAHTE КОНЕЧНУЮ ВЕЛИЧИНУ S=S 58 INPUTВВЕДИТЕ СУММУ КАЖДОГО ВКЛАДА 31=Z 68 INPUTВВЕДИТЕ ПРОЦЕНТ Р=Р 78 INPUTВВЕДИТЕ ЧИСЛО ВКЛАДОВ N=N
30 PRINT!8.2!":LETI=P/108 Эв IF S=@ THEN PRINTS=2*<<1+I>"N-1VI 188 IF N=9 THEN PRINT N=L06<S*I/Z+l>-L06<: 1 + 1) 110 IF 2=0 THEN PRINTSl = S*I/4<l + I>"H-i:> 115 IF PO0 THEN STOP 128 LETI=0:LETH=.81 138 LETI=I+H!&OSUB 170 148 IF F/H>=0 THEN 130 158 LETH=-H/4sIF ABS<H)>2.5E-4 THEN 138 160 PRIHTP=188*1 *:3T0P
178 UETF=S*I/<a + I)"N-l>-Z:RETURN:END 217 Пример А. Вкладчик сберегательной кассы решил ежегодно вносить вклад xi = = 1000 руб. в течение JV=10 лет. Сколько денег он сможет получить, если процент годовых начислений Р = 3 %? Вводим s = 0, А-, = 1000, Р = 3, iV=10, получаем s = = 11463,88 руб. Пример В. Семья решила накопить для покупки дома сумму s = 30 000 руб., Сортировка заключается в вычислении общей суммы данных, сумм по категориям и процентов (от общей суммы) по категориям. Алгоритм сортировки сводится к указанию номера элемента одномерного массива N и выполнению на каждом цикле ввода операций s^-s-\-X (вычисление общей суммы) и A (N) *- A (N) + Х (вычисление суммы по /V-й категории). Программа 7.70. 18 PRINTСОРТИРОВКА ДАННЫХ ПО КАТЕГОРИЯМ 26 PRINTДЛЯ ВЫДАЧИ РЕЗУЛЬТАТОВ ЗАДАЙТЕ Ы=Х=в 38 INPUTВВЕДИТЕ N MAKC=M:DI!1 A<M>sLETS=8 40 FOR 1=0 TO M:LETA<I)=0:NEXT I 50 INPUTВВЕДИТЕ N.. X N,X 68 IF N=8 THEN S8 78 LETA<N:>=A<N>+X:LETS=S+XS60T0 58 86 FOR 1=1 TO M 98 PRINT!3.8!S(I) 108 PRINT!2.2!P(V;) = 118 PRINT!8.2!ОБЩАЯ СУММА S8=SsENB вкладывая в сберкассу ежегодно сумму Si = = 1000 руб. Сколько лет N на это потребуется, если процент годовых начислений р = 3%? Вводим 5 = 30 000, si = 1000, Я = 3, Л/ = 0, получаем /V = 21,71. Пример С. Какую сумму s\ должен ежегодно вносить вкладчик, чтобы через N = 20 лет накопить сумму ,s = 30 000 руб. при проценте годовых Я = 3 %? Вводим s = 30 000, л-, = 0, Р = 3 и Л/= 20, получаем Si = 11 16,47 руб. П р и м е р D. Какой должен быть процент годовых начислений Р, чтобы при ежегодном вкладе si = I000 руб. накопить сумму А-= 30 000 руб. за N = 20 лет? Вводим s = = 30 000, X, = 1000, Р = 0, N — 20, получаем Р = 4,13%. К распространенным финансово-экономическим расчетам относится сортировка данных по категориям. Например, данные могут быть представлены в виде месячной заработной платы рабочих со специальностями различных разрядов (категорий) в виде следующей таблицы: Пример. Введя Л„акс = 6 и данные приведенной выше таблицы (значения N и X), по окончании ввода указываем /V = 0 и Х = 0. Получаем результат сортировки: Катег N 1 2 3 ория
S(N) Р(%)
153 6,75
175 7,72
397 17,51
4
5
6
Итого
457 20,16
700 30,88
385 19,68
2267 100
Максимальное число категорий yVuaKc определяется максимальным номером индекса у одномерных массивов. Ограничений на Ломаке нет.
Часто возникает необходимость в суммировании табличных данных по горизонталям или вертикалям таблицы. Если данные вводятся построчно, то при М столбцах и N строках для такой обработки необходим одномерный массив из М суммирующих регистров. С его помощью производится суммирование по столбцам. Рабочий Иван Петр Сидо Козл Волк Петр Серо Василенк (фамилия) ов ов ров ов ов ов в о Категори
2
5
6
1
3
3
5
1
85
175
190
75
135
130
170
78
я (разряд) Месячны й заработок (руб.)
Рабочий Карп Хохл Иван Голу Птиц (фамилия ов ов енко бев ын в
Звере
Прос таков
Левашов
) Категори я (разряд)
4
6
5
4
3
4
2
5
Месячны й заработок (руб.)
150
195
175
155
132
152
90
180
218
Программа 7.71. 16 PRINTСУММИРОВАНИЕ ДАННЫХ ТАБЛИЦЫ ПО ГОРИЗОНТАЛЯМ И ВЕРТИКАЛЯМ 2й INPUT-ВВЕДИТЕ ЧИСЛО СТРОК И СТОЛБЦОВ И.-Н MJHJDIM A<N> 30 FOR X=l TO N!LETA<X)=e-.NEKT X:LETT=0 48 FOR NJ=1 TO M:L€TS=e:FOR X=l TO N с .й PR I NT ! 3.0 ! ВВЕДИТЕ V V, X X: IHPUT D 6й LETS=S+D:LETT=T+I)!LETA<X)=A<X)+D!NEXT X 7й PRI NT!3.0!СУММА V V!8.2!=SNEXT V 88 FOR X=l ТП M:PRINT!3.@!СУММА XX!8.2!=A<X>fNEXT X 96 PRINTОБЩАЯ СУММА S=T:EHD Работу этой программы можно проверить и N = 5: выражения.
где Int — операция выделения целой части с помощью таблицы, имеющей /И = 4
Х{
./2
y-i
Х\
Хч
Хз
Xi
£х,
25 28 12 87 22
47 15 74 51 18
36 10 68 34 11
54 14 35 14 56
162 67 189 186 107
174
205
159
173
711
В финансово-экономических расчетах нередко возникает необходимость в определении дня недели по дате числа, а также вычисления количества дней /V, прошедших между двумя датами. При отсчете дат с 1582 года эта задача решается с помощью следующего алгоритма (взят из описания библиотеки программ программируемого микрокалькулятора TI-58C). 1. Вводим число (день) D, месяц М и год Y.
3. День недели D,, вычисляется по формуле -Int (/77)). причем Д, = 0— суббота, 1 ---воскресенье, 2 — понедельник, . . ., 6 — пятница. 4. Для нахождения /V выполняем п. 1—3 для обеих дат и вычисляем /V = ABS {F, — F-2), где ABS — операция выделения абсолютного значения, Ft — фактор для первого и Ii — для второго числа. Программа 7.72. 16 PRINTВЫЧИСЛЕНИЕ ПО ДАТЕ ДНЯ НЕДЕЛИ И ЧИСЛА ДНЕЙ 20 PRINT ДВУМЯ ДАТАМИ* НАЧИНАЯ С 1582 ГОДА 30 INPUT ВВЕДИТЕ ЧИСЛО.- МЕСЯЦ.. ГОД D»М> V 50 60SUB 80:LETR=F
60 INPUTВВЕДИТЕ- ДЕНЬ? МЕСЯЦ.» ГОД В,М.Л ?0 GOSUB 86:PRINT!Э,0!ЧИСЛО ДНЕЙ N= ABS^F-R) ; STOP 86 LETF=365*Y+B+31*<M-1> 98 IF M<=2 THEN 120 100 LETF=F-IHT< . 4:«M+2. 3> + INT< V,4:> 116 LETF=F-1 NT С 3.--4»: < I NT < V. 100) +1 >): GOT 0 136
120 LETF=F+INTC Or-l >.-4>-INT <3*< INT< <V-1 VI00+1) >4) 1 <& LETW=F+(- INT . F/? > m? ): PRINT ДЕНЬ НЕДЕЛИ 146 IF l.ii=l THEN PR I NTВОСКРЕСЕНЬЕ 156 IF W=2 THEN PRINTПОНЕДЕЛЬНИК 160 IF Ы=3 THEN PRINTВТОРНИК 170 IF W=4 THEN PRINTСРЕДА 130 IF i...i=5 THEN PR I NTЧЕТВЕРГ 196 IF 1д!=6 THEN PR I NTПЯТНИЦА1 200 IF Ui=0 THEN PRINTСУББОТА 210 RETURN:END 2. Вычисляем фактор F для января февраля (М=1, 2) по формуле F = 365K+/) + 31 (M— 1) + 1п1. ((У—1 -Int (3/4 (Int (((У-а для остальных месяцев —- по формуле ^ = 365^ + 0 + 31 (УИ-1)—Int (0,4,M + 2,3) + -flnt (У/4)—Int (3/4 (Int (У/100) Ч- 1)), Пример А. Для 01.05.86 получим день недели — четверг. Пример В. День начала Великой Отечественной войны — 22.06.41 (воскресенье), окончания — 09.05.45 (среда), число дней между этими датами 1417. В [8| описаны алгоритмы для перевода дат из одного вида календаря в другой и примеры вычислений такого рода.
Приложение 1 ПОДГОТОВКА К РАБОТЕ СИСТЕМЫ ПОДГОТОВКИ ПРОГРАММ НА БАЗЕ МИКРОЭВМ ЭЛЕКТРОНИКА-ДЗ-28 1. Включение системы в сеть производится с помощью тумблеров, установленных на микро-ЭВМ, дисплее и принтере. После включения на клавишном пульте дисплея нужно нажать клавиши ДУП, ЛИН и РЕД (см. рис. 1.6). 2. В отсек магнитофона микроЭВМ вставляется кассета с магнитной лентой, содержащей программу-интерпретатор. Нажатием клавиш пульта микроЭВМ Р (работа — установка микроЭВМ в рабочее состояние), С (сброс) и СЛ (считывание с ленты) осуществляется пуск магнитофона и запись программы-интерпретатора в ОЗУ. Если загорается индикатор сбоя записи, на-жав Клавиши С и СЛ, повторяем запись. 3. Проверяем сумму кодов программы-интерпретатора, нажав клавишу КП (контроль программы) на пульте микроЭВМ. Сумма кодов должна соответствовать указанной на кассете с программой-интерпретатором (она индицируется индикатором микроЭВМ). 4. Запускаем программу-интерпретатор, нажав клавишу s (старт) микроЭВМ. На экране дисплея появляется запись (начальный диалог): БЕЙСИК ДЗ-28, ВАРИАНТ ЗА СНИМИТЕ КАССЕТУ Во избежание ошибочной записи кассета с программой-интерпретатором снимается. Начиная с этого момента управление работой системы производится с пульта дисплея. Нажав клавишу пульта дисплея ПС, получим запрос В КОМПЛЕКС ВХОДИТ ПЕЧАТАЮЩЕЕ УСТРОЙСТВО (О —НЕТ, 1 —ДА)? На этот запрос надо ввести код 0 или 1. Допустим, ввели код 1 и нажали клавишу ПС. Получим новый запрос: ВВЕДИТЕ ТИП ПЕЧАТАЮЩЕГО УСТРОЙСТВА (О —ТПУ, 1 — УВВПЧ-30-0004, 2 —CONSUL, 3—ROBOTRON)? Теперь нужно набрать код подключенного к микроЭВМ печатающего устройства (принтера) и нажать клавишу ПС. Получаем еще один запрос: НОМЕРА ВНЕШНИХ ПОДПРОГРАММ? 220 Если пользователь намерен использовать внешние подпрограммы, нужно указать их номера. В данной книге внешние подпрограммы не использованы, поэтому достаточно нажать клавишу ПС еще раз. Начальный диалог заканчивается выдачей надписи. ГОТОВ 5. После двоеточия пользователь может вводить программу. По завершении ввода каждой строки нажимается клавиша ПС и на следующей строке появляется знак : (двоеточие). Таким образом, никакой специальной команды для набора программы с пульта не требуется. 6. Если нужно ввести программу с магнитной ленты, кассета с ней вставляется в отсек магнитофона и лента перематывается так, чтобы нужная программа заведомо была в правой части кассеты. На пульте задается команда LOAD ИМЯ, где имя — код программы, и нажимается клавиша ПС. МикроЭВМ обеспечивает поиск и считывание нужной программы. Если код (имя) программы не указаны, будет считана первая из программ на ленте. 7. Запись программ на магнитную ленту производится командой SAVE ИМЯ. 8. Если нужно считать или записать не все строки программы, а только от номера НС1 до номера НС2 (или только одну НС), соответствующие номера (разделенные запятой) указываются после команд считывания и записи. 9. Листинг программы можно вывести на экран дисплея, дав команду LIST#O (или при первом включении LIST) и нажав клавишу ПС. Команда LIST#1 обеспечивает распечатку листинга программы принтером. Команды LIST#0 НС и LIST#1 НС обеспечивают вывод (и распечатку) одной строки НС, а команды LIST#0 НС1, НС2 и LIST#1 HC1, НС2 —вывод (и распечатку) листинга, начиная со строки НС1 и кончая строкой НС2. .10. Пуск программы с начала обеспечивается вводом команды RUN, а со строки НС — вводом команды GOTO НС. После этого нажимается клавиша ПС. 11. Если в ходе ввода и выполнения программы выявляется ошибка, на экран дисплея выводится сообщение ОШИБКА (номер) В СТРОКЕ (номер НС) Содержание ошибок и их номера даны в Приложении 2. После устранения ошибки можно начинать вычисления, начиная со строки НС (см. п. 10). 12. Основы программирования, правила редактирования и отладки программ описаны в гл. 2. Отметим, что для распечатки результатов вычислений принтером после команд PRINT должен стоять знак #1 (это указание запоминается и может в дальнейшем не повторяться, если в программе далее не указывался знак вывода данных на экран дисплея #0). Ошибку в строке устраняют ее повторным вводом.
Приложенке 2 НОМЕРА ОШИБОК И ИХ СОДЕРЖАНИЕ ДЛЯ СИСТЕМ ПОДГОТОВКИ ПРОГРАММ НА БАЗЕ МИКРОЭВМ ЭЛЕКТРОНИКА ДЗ-28 Номер ошибки Содержание ошибки
0 1 2 3 4 5 6 7 10 11 12 13 14 15 20 21 22 23 24 25 26 27 30 31 32 33 34 35 36 37 38 40 41 42 43 44 50 52 53 54 55 59 Переполнение памяти, отведенной пользователю ч Недопустимый оператор Переполнение строки ввода
Недопустимый ограничитель в строке Недопустимый номер строки НС Несоответствие кавычек в предложении Отсутствие открывающей скобки перед аргументом функции Недопустимый оператор LET Неправильная запись индексов Неправильная размерность индекса, не определен массив Несоответствие скобок в выражении Недопустимый элемент выражения Не определена функция пользователя Неправильное имя переменной Неправильная операция отношения Недопустимый оператор IF Неправильные операторы DIM, COM Недостаточно места для массива Неправильный оператор DEF Нет данных для оператора READ Недопустимый оператор DATA Неправильный формат команд в операторе CMD Неправильный формат оператора FOR — NEXT Нет оператора NEXT Не было FOR Переполнение стека FOR — NEXT Нулевой шаг FOR Неправильный формат PRINT Неправильно задан формат печати Недопустимое выражение в TAB Отсутствие открывающей записи в буфере магнитной ленты Номер следующей строки меньше номера предыдущей Превышение уровня вложения подпрограмм RETURN без GOSUB Нет строки для перехода по GOSUB или GOTO Нет внешней программы с указанным номером Неправильное предложение с операторами обслуживания магнитной ленты и перфоленты Сбой структуры файла Отсутствие в ЗУ массива при приеме магнитной ленты или перфоленты Не считан очередной блок данных с магнитной ленты Считанный с магнитной ленты блок не умещается в ОЗУ При загрузке или записи программы с магнитной ленты указан только один номер строки 221
Продолжение прилож. Номер ошибки 60
61 62 121 122 123 124 128 Содержание ошибки Нет ответа печатающего устройства
Нет ответа считывателя Нет ответа перфоратора Недопустимые знаки при вводе по INPUT Недостаточно данных для INPUT Несуществующая переменная Слишком много данных для INPUT Некорректная операция (ОП) в процессе вычисления
Приложение 3 ПОДГОТОВКА ПЭВМ FX-702P К РАБОТЕ 1. Включение ПЭВМ производится переводом включателя питания в положение ON. Если выключение ПЭВМ осуществлялось автоматически, то нажимается клавиша j AC [уК. На индикаторе появляется надпись READY P0. 2. Для записи программ необходимо перевести ПЭВМ и режим записи, нажав клавиши MODE и 1. В общем случае при этом индицируется надпись вида MODE 0 F, SAC F, .DEFM 0 EXE VAC EXE ROM 0 EXE AC Подчеркнутые команды вводятся побуквенно. После выполнения этих команд в режиме MODE 1 на дисплее появляются следующие надписи (см. внизу полосы).
WRT
Ш&
279
REAUY Р0 -------2 3*5-7*9 Это означает: режим записи WRT, установка градусной меры измерения углов DEG, установка программной области Р0 (READY P0): заняты программные области 0, 1,6 (на их месте прочерки), заняты закодированными программами программные области 4 и 8 (на их месте знак *), свободны программные области 2, 3, 5, 7 и 9, число свободных программных шагов 279 (цифры в правом верхнем углу индикатора). Пользователь может ввести программу в любую из свободных программных областей, если число свободных шагон достаточно. Для этого нужно дать команду Fi Ргг, где п -- номер свободной области. При этом вместо надписи Р0 появится надпись Р/1, и можно начать ввод программы. Ввод каждой строки фиксируется нажатием клавиши ЕХЕ.
3. Если необходимо стереть какую-либо одну программную область (кроме содержащих закодированные программы), следует ввести команды Fi Р„ Cl.R FXF. Полное стирание, например, после смены источников питания, выполняется набором следующих команд: MODE I CLR All. HXE Они означают, что в распоряжении пользователя 26 переменных (variables) и 1680 шагов программы. Если задать после оператора DEFM другое число (до 20), будет указано перераспределение памяти. Например, если дать команду DEEM 5 ЕХЕ, получим следующее сообщение VAR : 76 PRG 1280 (т. е. число переменных возрастает до 76 (на 5X10 = 50), а число шагов программы сокращается до 1280. 4. После ввода программы нужно перейти в режим вычислений, дав команды MODE 0 и Рп. Дальнейшие правила работы задаются заложенным в программу диалогом. 5. Редактирование программ проводится в режиме их записи MODE 1. Вызов любой строки с номером НС задается нажатием клавиш АС (общее стирание дисплея), LIST и НС (номер, строки). При команде LIST выводится первая строка (с наименьшим номером). Если операторы строки не помещаются в формате дисплея (20 знакомест), то, нажав клавишу перевода маркера вправо [--► |, можно сдвинуть строку влево. Исправить любой знак в строке можно, расположив
маркер под ним и введя нужный
222 знак. Маркер передвигается с помощью клавиш LjzJ и 1~*" 1 Если держа гь клавиши нажатыми свыше 2 с, ускоренное перемещение маркера с одной позиции на другую будет происходить автоматически. Команда Fi HOME смещает маркер в нулевую позицию. Стереть ошибочный оператор можно, установив маркер в позицию после него и нажав клавишу С. Для включения нового оператора в текст программы в нужное место подводят маркер и нажимают клавиши F, INS столько раз, сколько знакомест требует оператор. После-этого вводится сам оператор. 6. Просмотр листинга программ возможен в режиме MODE 0 при подаче команд LIST (просмотр со строки с наименьшим номером) и LIST НС (просмотр со строки с номером НС). При этом дисплей работает в бегущем режиме, т. е. строки автоматически меняются, а если строка не умещается в формате дисплея, она автоматически продвигается влево. Скорость бега индикации такова, что прочесть строку удается при определенном навыке. Остановку индикации в любой момент можно провести, нажав клавишу STOP (нажатие клавиши CONT возобновляет бегущий режим индикации). В режиме MODE 1 также возможен просмотр листинга построчно (вводом команды LIST или LIST НС). Однако смена строк при этом производится вручную, нажатием клавиши ЕХЕ. Пооперационный просмотр трассы программы проводится в режиме TRACE ON, вводимом нажатием клавиш MODE и 2. При этом, нажимая клавиши STOP1 и END, будем получать индикацию номера каждой строки и листинг каждого предложения (отдельно). Выключить режим трассировки можно, нажав клавиши MODE и 3 (TRACE OFF). 7. Правила записи и считывания программ (с применением кассетного магнитофона), а также использования принтера описаны в § 2.2.
Приложение 4 НОМЕРА ОШИБОК И ИХ СОДЕРЖАНИЕ ДЛЯ ПЭВМ FX-702P Номер ошибки Содержание ошибки
Переполнение памяти данных или программ Синтаксическая ошибка (неправильная запись операторов, неверное задание формата и т. д.) Некорректная математическая операция, результат выходит за предел 10 10" Нет строки, к которой задано обращение операторами GOTO и GSB Неверно задается аргумент, заданы несуществующие индексы для одномерных или двумерных массивов Заданная переменная не определена оператором DEFM Ошибки в организации циклов и подпрограмм (нет оператора RET в подпрограмме; есть оператор RET, но нет подпрограммы; число подпрограмм, вложенных друг в друга, больше 10; неверное вложение циклов; число вложенных друг в друга циклов больше 8; оператор NEXT используется без оператора FOR и наоборот) При вызове листинга или стирании закодированной программы не указано ее имя (код) Нет ответа от периферийных устройств (отключены адаптер FA-2 или принтер)
Приложениеб ПРОГРАММНАЯ РЕАЛИЗАЦИЯ НЕКОТОРЫХ ЧАСТНОГО ПРИМЕНЕНИЯ ЧИСЛЕННЫХ МЕТОДОВ
§
П5.1. Построение
полинома по его действительным корням
я Пусть многочлен Р„= |J^(x — jc,) с действи (=1 тельными корнями х, нужно представить в виде полинома Р„ (х) =а„х" + 1п ix""-(- ... -\-a\x-\-+ а», имеющего а„ —\. Для этого ищем коэффициенты полинома в другой форме: аох"-\-+ а\х""+
...
-
\-ап-\х-\-ап, где ао=1. Они вычисляются по рекуррентным формулам п /1„- (-- 1)" П X;, / А„ ,=-- — к = I где (=1, 2, 3, ..
Е(4У. 1=1
и—1. Преобразование А==а< Заданную форму производится переиндексацией, т. е. вместо индекса i в цикле вывода А, на индикацию выводится индекс N — i. 223 Программа П5.1.
10 PRINTВЫЧИСЛЕНИЕ КОЭФФИЦИЕНТОВ ПОЛИНОМА ПО 15 PRINT ЕГО ДЕЙСТВИТЕЛЬНЫМ КОРНЯМ 20 INPUTЗАДАЙТЕ СТЕПЕНЬ ПОЛИНОМА N=NsDIM A<N+N>
25 38 40 45 50 60 65 70 75
FOR 1=1 ТО NiPRINT!2.0!ВВЕДИТЕ КОРЕНЬ Xl INPUT ft<I)iNEXT I LETR=l:FOR 1=1 TO N:LETR=R*A<I>sNEXT I LETE=i:lF N--2-INT<N/2)<>0 THEN LETE=-1 LETA<N+N>=E*R:FOR L=l TO N-l LETS=0SFOR K=l TO LiLETP=0:FOR 1=1 TO N LETE=-1/A<I)!IF К/2-1НТ<К.2)=0 THEN LETE=ABS<E> LETP=P+EiNEXT I / LETE--1MF <K+l>--2-INT<:<K+lV2>=0 THEN LETE=1
80 LETS=S+<E*A<N+N+K-L>*P>sNEXT К 90 LETA<N+N-L)=S/-LiNEXT L 100 FOR 1=1 TO №PRINT!2.0!AN-I!F1.9! = Aa+N> 110 NEXT I SPRINTВЫЧИСЛЕНИЯ ОКОНЧЕНЫSEND П р и м е р. Пусть N = 4, x\ = 1, л — 1, x3 = — 1 Пример. Пусть надо решить две системы и *4= —1. Получаем оз = 0, а2=—2, а\—0 и линейных уравнений: ао=1, т. е. Р (х)=х"-2х2 + 1. ~ Г 4 8 ОТ Г у 1 Г41 Г4 8 0"! |*i "I Г 121 4
§ П5.2. Обращение матрицы, вычисление определителя и решение систем линейных
и
вв8 :£Ы 6 L 2 о ij |_*sJ L J
8 8 8
2
32
ГГ Н x 4 L °иll L J 2
уравнений С раЗНЫМИ ВеКТОраМИ Введя JV = 3 И элементы матрицы А, получим СВОбОДНЫХ ЧЛеНОВ обращенную матрицу Модифицированным методом Гаусса — Жор_ t__ I 0,08333 -0,08333 0,666666 дана матрица А обращается, что дает матрицу ~ I 0,08333 0,041666 0,33333 I 1 А . Одновременно вычисляется определитель D [^—0,166666 0,16666 0,33333 J матрицы А. Если задана система уравнений АХ/ = В/, то ее неизвестные находятся по фори определитель D = 96 матрицы А. Введя стол-муле Х/ = А~ {}/. При этом матрица А~ выбец свободных членов первого уравнения, полу-числяется один раз и можно решать ряд систем чим х\=4, хг= — 1,5 и Астолбец свободных членов второго уравнения, :1=—2. Далее, введя уравнений с одинаковой матрицей А. Программа П5.2. получим х\ — 1, ^2= I и хз — 2. 05 PRINTОБРАЩЕНИЕ МАТРИЦЫ/ ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ И РЕШЕНИЕ 10 PRINTСИСТЕМЫ ЛИНЕЙНЫХ УРАВНЕНИЙ С РАЗНЫМИ ВЕКТОРАМИ В<1? 15 PRINT МОДИФИЦИРОВАННЫМ МЕТОДОМ ГАУССА-WOPДАНА 20 INPUTВВЕДИТЕ ПОРЯДОК МАТРИЦЫ N=N:DIM A<N,N>/B<W>/S<N> 30 FOR 1=1 ТО NsFOR J=l TO №PRINT!2.0!ВВЕДИТЕ AI/J 40 INPUT A<bJ):NEXT JsNEXT I
50 LETD=lsLETR=lsFOR 1=1 TO NsFOR J=I TO N 80 IF A<J>I><>0 THEN 110 90 NEXT J 100 PR INTМАТРИЦА ВЫРОЖДЕННАЯS60T0 308 110 GOSUB 190SLETA<I/I> = 1/AU/I>:6QSUB 210 120 FOR J=l TO N8 IF J=I THEN 140 130 LETB=-A<J,I)8LETA<J/I)=0!6OSUB 230 140 NEXT j:LETrj=D/A<bI):NEXT I:FOR I=N TO 1 STEP -1 150 IF A(I.-0)=I THEN 180 160 LETR=-RsFOR K=l TO N:LETB=A<K>I) 170 LETACK/I>=A<K/A<b0)>sLETA(K/A<b0>>=B:NEXT К
180 NEXT U60T0 240 190 FOR K=l TO NsLETB=A<bK)!LETA<bK)=A<J/K) 200 LETA<J/K>=B:NEXT KsLETA<b0)=Js RETURN
210 FOR K=l TO N:IF K=I THEN 225 220 LETA<bK>=A<bI)*A<bK>!NEXT KsRETURN
225 NEXT KsRETURN 230 FOR K=l TO №LETA<J/K>=A<J/K)+B*A<bK>sNEXT KsRETURN 240 PRINT3flEMEHTH ОБРАЩЕННОЙ МАТРИЦЫ й-KbJ) 250 FOR 1 = 1 TO №FOR J=l TO N 260 PRINT!2.0!A"-KI/J) = !F1.9!A<bJ>sHEXT JsNEXT I
265 LETD=B*R:PRINTОПРЕДЕЛИТЕЛЬ ИСХОДНОЙ МАТРИЦЫ D=D 270 FOR 1=1 TO NsPRINT!2.0!ВВЕДИТЕ BI=slNPUT B<I)sNEXT I 275 FOR 1=1 TO NsLETS<I>=0sFOR J=l TO N 280 lrETS<I)=S<I>+B<J)*A<bJ)sNEXT J 290 PRINTKOPEHb X!2.0!I = !F1.9!Sa>sNEXT IS60T0 278 300 END 224 § П5.3. Решение СИСТеМЫ П р и м е р. Для системы (N = 3)
линейных уравнений методом отражения
3
Метод отражения реализован следующим алгоритмом прямого хода:
л= X a?*, B=A+Akks, s = (signAtt)^lA, <=* с= £ ли,*, P=(C+4*/S)/B, t = ft, ..., п, „ д_ £ B(A(t, j—k
E=(D + SBk)/B,
получим х, =0,1, хг= -0,6 и х3= 1,7.
§ П5.4. Решение системы линейных уравнений методом простых итераций
При начальных приближениях хт (<=1, 2, ... ..... Л/) вычисляем последовательные приближения по формуле простых итераций [18]
F = F + S, если i — k,
F = Aik, х
n
^ _ х______LV V a-hXk -Ь-
аи \ L_i Bi = Bi — FE, i = k, ..., и, k=\ и k — n, /t —1, ..., 1, n = N. тт * до тех пор, пока x,(, + n— *,vn> £, где (/) — к u К v Неизвестные получаются при обратном ходе: " " г г номер итерации, е — заданная погрешность выi у л в □ числений. Итерационный процесс сходится, если ^- "и°" Xk = t>i,= (at — L)/Akk, величина модуля каждого диагонального элемента матрицы А больше суммы модулей осталь— п, п 1, ..., 1. Необходимо задать начальные ных элементов Программа П5.3. приближения в виде вектора [*,<>].
10 PRINTРЕШЕНИЕ СИСТЕМЫ ИЗ N ЛИНЕЙНЫХ УРАВНЕНИЙ 15 PRINT МЕТОДОМ ОТРАЖЕНИЯ 28 INPUTВВЕДИТЕ ЧИСЛО УРАВНЕНИЙ N=N:DIM A<N»N) 38 FOR 1*1 ТО NsFOR J=l TO N 40 PRINTI2.8!ВВЕДИТЕ АV,J:INPUT fi(I»J) 50 IF J=N THEN PRINTBBEflHTE BI: INPUT А<Ь8) 60 NEXT JtNEXT I 78 FOR K=l TO N!tETA=8sF0R I=*K TO N 88 LETA=A+A<bK)"2sNEXT lsLETS=S6N<A<K>IO>»SQR<A> 98 LETB=A+A<K/K)!«SsFOR I=K TO N 188 LETC=0SFOR J=K TO N 110 LETC«C+A<J,I>*A<J>K>!NEXT J
120 130 148 158 160 170 180
UETA<8jtI)>!<C+SiKA<:K»I))/B:NEXT I:LETD=8 FOR J=K TO NsLETD*D+A<J/0>*A<J,K)sNEXT J LETE=<D+S*A<K*8))/BsF0R I=K TO N LETF=A<bK):IF I=K THEN LETF=F+S FOR J*K T0N!LETA<bJ)=A<bJ)-A<8/J)i«!FsNEXT 0 LETA<I/0>=A<b0)-F*E:NEXT I.NEXT K FOR K=N TO 1 STEP -l:LETL=8>F0R I=K+1 TO N
190 LETL=L+A<K>I>*A<be>:NEXT I 200 LETA<K>0>=<A<K>0)-L>/A<K>IO:NEXT К
210 PRINTРЕЗУЛЬТАТЫ РЕШЕНИЯ:FOR 1=1 TO N 220 PRINT!2.0!XI!F1.9!=A<I,0)!NEXT I:END Программа П5.4.
10 PRINTРЕШЕНИЕ СИСТЕМЫ ИЗ N ЛИНЕЙНЫХ УРАВНЕНИЙ 28 PRINT МЕТОДОМ ПРОСТЫХ ИТЕРАЦИЙ 30 INPUT3AflAMTE ЧИСЛО УРАВНЕНИЙ H=№DIM A<N»N>>B<N>>X<N>*Z<N> 40 INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЯ Е=Е 50 FOR 1=1 ТО N! FOR J=l TO N 60 PRINT12.0! ВВЕДИТЕ А V , J: INPUT A<bJ) 70 IF J=N THEN PRINT-ВВЕДИТЕ ВI:INPUT B<I> 80 NEXT J:NEXT I 90 LETS=0:FOR 1=1 TO N:PRINTЗАДАЙТЕ XI<0):INPUT 2<I>:NEXT I 100 L.ETK=0sFOR 1 = 1 TO NsLETX<I)=-B<I> 110 FOR J=l TO №LETX<I)=X<I>+A<I/J)*2<J> 120 NEXT JsiF ABS<X<I)/A<bI))>=E THEN LETK=1 138 LETX<I)=Z<I>-X<I)/A<bI>sNEXT I 140 FOR 1=1 TO NsLET2<I)=X<I)!NEXT I 158 LETS=S+18IF K=l THEN 180 168 PRINTРЕЗУЛЬТАТЫ РЕШЕНИЯ 170 FOR 1=1 TO N!PRINT!2.0!XI=!F1.9!X<I>!NEXT I 180 PRINT!4.0!ЧИСЛО ИТЕРАЦИЙ S=3:END 225 Пример. Для системы (/V = 3) 4х, + 0,24x2 — 0,()8х.1 = 8, 0,09х,+ Зл:2-0,15л:3 = 9, 0.04х,-0,08х2+ 4х:, = 20, задав в == /Т = 1 - Ю~ 4 и начальные приближения Хю =- Х20 = Х:н| — 1 ,
ПОЛуЧИМ:
X, — 1,9091.
Л2 —
-—3,1949; хз —5,0448 (пятый и последующие знаки после запятой отброшены, так как при е= 1 10~ 4 они недостоверны) итераций).
и jVKTep = 5
(число
§ П5.5. Решение системы линейных уравнений методом Зейделя При методе Зейделя итерационный процесс подобен описанному для метода простых итераций, однако уточненные значения х,{1^\) сразу подставляются в последующие уравнения. Формула итерационного процесса имеет вид [18] и m>n (т. е. в общем случае число уравнений в системе больше, чем число неизвестных). Система может быть несовместной. Ее решением считается вектор неизвестных, при котором скаляр {АХ —В) (АХ — Н) принимает наименьшее значение. Решение сводится к решению системы [АА] [X] = [АВ], где А — транспонированная матрица А. Для этого используется метод квадратных корней. Решение системы АХ = В (в нашем случае А +-АА и В -<-АВ) методом квадратных корней реализуется по следующим формулам прямого хода:
W./a,1,.
/ = !. 2, 3.....я,
а(,!>=-\/ац- X а1*". <= 1, 2, 3, . . .. я, k — 1 k=\
I/
!," = ( а,7- I
<4.Va(". \
*
|
Условия сходимости те же, что и для метода простых итераций. Обычно метод Зейделя сходится быстрее, чем метод простых итераций, но не исклю-чена и обратная ситуация. I, Программа П5.5.
10 20 30 40 50
PRINTРЕШЕНИЕ СИСТЕМЫ ИЗ N ЛИНЕЙНЫХ УРАВНЕНИЙ PRINT ИТЕРАЦИОННЫМ МЕТОДОМ ЗЕЙДЕЛЯ INPUTЗАДАЙТЕ ЧИСЛО УРАВНЕНИЙ H=H:BIM A<N/N>»B<N>,X<N:>,Z<N> INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ ВЫЧИСЛЕНИЯ Е=Е FOR 1=1 ТО № FOR J=l TO N
68 PRINT12.8!ВВЕДИТЕ А I/ Л INPUT A<bJ)
70 IF J=N THEN PRINTBBEflHTE Bl:INPUT B<I) 88 NEXT JtHEXT I 98 LETS=0:FOR 1=1 TO NiPRINTЗАДАЙТЕ XГ<0>iINPUT Z<I>:NEXT I 100 LETK=e!FOR 1=1 TO N!LETX<I)=-B<I) 118 FOR J=l TO N:LETX<I)=X<I)+A(bJ>*Z<J) 128 NEXT J:IF ABS<X<IVA<bI>>>=E THEN LETK=1 130 LETX<I)=Z(I>-Xa)^A<bn:LETZ(I)=X<I)iHEXT I
150 168 170 180
LETS=S+lsIF K=l THEN 180 PRINTРЕЗУЛЬТАТЫ РЕШЕНИЯ FOR 1=1 TO N:PRINT!2.8!XI=!F1.9!X<I>*NEXT I PRINT!4.0!ЧИСЛО ИТЕРАЦИЙ S=S:ENB
Пример. Для системы уравнений (Л — З 10xi+ X2+ хл=Н2, 2xi + Н>х2 f Xi—13, 2л-1 + 2J-V -f l)x;1= 14 :
кри *-.------1 1 0 и Xi a --= л :!> - *.,и- -0 получим \[ -=-0,99(19. л-.. = -0,9999 и хл~:\ при /V,,,,.,,--5.
§ П5.6. Решение системы линейных уравнений с переопределенной матрицей 1ешается система АХ -ft, где п.„, а..,- ... а,„„Л
J Затем проводится обратный ход:
*=4/1"-
V
X
*=/+!
"ч-и) /a)!1, i = n, п — 1..... 1.
//
При т = п этим методом возможно решение обычных систем линейных уравнений. Программа П5.6. Пример. Для системы уравнений (п = N = 0,41 х, — 0,35x2 + 0,1 6*3 = 0,22, 0,23л-, + 0,2х-2 + 0,41 х:1 = 0,84, 0,46л-, — О, I Зх2 + 0,4 8х3 — 0,81, 0,1/х, -1-0,45x2- 0,25*3 = 0,37, 0,83*| + 0,27*2 -- 0,51 хз = 0,59, 0,27*| + 0,82х, — 0,14хз = 0.95 ПОЛуЧИМ X] = 1, Х:!= 1 И *:,= 1 При /г « 15 С. »:;«
Программа П5.6. 10 PRINTРЕШЕНИЕ ПЕРЕОПРЕДЕЛЕННОЙ СИСТЕМЫ ЛИНЕЙНЫХ УРАВНЕНИЙ 15 PRINT МЕТОДОМ КВАДРАТНЫХ КОРНЕЙiPRINT 28 INPUTВВЕДИТЕ ЧИСЛО НЕИЗВЕСТНЫХ N=NsBIM C<N> 38 INPUTBBEflHTE ЧИСЛО УРАВНЕНИЙ М=" Ми ВIM А<М>Ю,ВО1> 48 FOR 1=1 ТО M:FOR J=l TO N
58 PRINT!2.0!ВВЕДИТЕ А I, Js INPUT A<bJ> 60 IF J=N THEN PRINTВВЕДИТЕ ВI:INPUT B(I) 70 NEXT J:NEXT I 80 FOR J=l TO N;FOR K=J TO N:LETS=0:FOR 1=1 TO M 98 LETS=S+A<I,J>*A<bK>:NEXT l:LETC<K>=SsNEXT К 190 LETC=8:FQR 1 = 1 TO H:LETC=C+A<I/J)*B<:i)sHEXT I 118 FOR I«J TO N«LETA<bJ>=C<I)sNEXT lsl_ETC<J)=CiNEXT J 120 LETA<bl>=SQR<A<bl>>sFOR J=2 TO N 130 LETA<bJ)=A<J»O/A<bl)sNEXT JsFOR 1=2 TO N 140 LETS=0:FOR K=l TO I-HLETS=S+A<:K> I>«A<K, I>sNEXT К 156 LETA(bI)=SOR<A<bI>-S>:FOR J=I + l TO N 160 LETS=0SFOR K=l TO I-l:LETS=S+A<K/I)*A<K-J):NEXT К 170 LETA(bJ> = <A<J, I>-SVft<bI>sNEXT JsNEXT I 180 LETC<l)=C<l)/A<bl)sFOR 1=2 TO N
190 LETS=8:F0R K=l TO I-l:LETS=S+A<K,I>*C<K>:NEXT К 200 LETC<I> = <Ca>-SVA<bI>!NEXT I 218 LETC<N>=C<N)>A<N;N)!FOR I=H-1 TO 1 STEP -1 328 LETS=0:FOR K=I+1 TO N:LETS=S+A<bK)«C<K)!NEXT К 238 LETC(I)=<:C<I>-S)/A(bI):NEXT I
248 PR INTРЕШЕНИЕ СИСТЕМЫ:FOR 1 = 1 TO N 258 PRINT!2.0!XI=!F1.9!C<I):NEXT I SEND § П5.7. Приближенное ВЫЧИСЛеНИе
Для решении вычисдяеТся
нормального решения системы линейных уравнений
a = 05 За
С ВЫрОЖДеННОЙ Матрицей г
параметр .
V7
неизвестные принимаются компонент,- век-
тора л„, получаемого ре!иением <:пстем|>1 следую-
щего ви,л,а Система уравнений CX = D, где С -- вырож-
\(ЛА+aF.)\ \Х,.\ = [АВ]
денная матрица, приближенно решается, если предположить, что Си и d, заданы с некоторым методом квадратных корней (см. описание к про/-приближением. Тогда чту систему можно свести грамме П5.6). к решению системы АХ —В, так чго lC,,-a,:i</, \b, -,/,!</, ()<к<;0.П()1. Программа П5.7.
IS 15 20 25 38 40 50 68 78 80 90
PRINTПРИБЛИЖЕННОЕ ВЫЧИСЛЕНИЕ НОРМАЛЬНОГО РЕШЕНИЯ СИСТЕМЫ PRINTЛИНЕЙНЫХ УРАВНЕНИЙ С ВЫРОЖДЕННОЙ МАТРИЦЕЙ МЕТОДОМ PRINT КВАДРАТНЫХ КОРНЕЙ:PRINT INPUTЗАДАЙТЕ ПАРАМЕТР ПРИБЛИЖЕНИЯ Т=Т 1НР1ЛЗАДАйТЕ ЧИСЛО УРАВНЕНИЙ H=N:DIM Ь<.Н>Ю, BCN>/C<N) FOR 1=1 ТО N:FOR J=l TON PRINT!2.0!ВВЕДИТЕ AISJ: INPUT A<LJ> IF J=N THEN РК1ИТВВЕДИТЕ ВI:INPUT B<I> NEXT J:NEXT I FOR J=l TO N:FOR K=J TO N:LETS=8:F0R 1=1 TO N LETS=S+A<IfJ)*ft<I..K>!NEXT l!LETC<K)=9:NEXT К
180 LETC=8sF0R 1=1 TO N:LETC=C+A<bJ>*B<I>sNEXT I 110 FOR I=J TO NsLETft<bJ)-C<I)!NEXT I:LETCCJ>=C!NEXT J 120 LETP=SQR<T*HV2iF0R 1 = 1 TO N 138 LETA<bO=A<bI>+PiNEXT IsLETA<bl)=SQR<A<l-1 >) 140 FOR J=2 TO №LETA<l»J>=A<J>lVAe:bl>!NEXT J 158 FOR 1=2 TO NsLETS=8sF0R K=l TO 1-1 168 LETS=S+A<Kf I>iKA<KjI)!NEXT К 178 LETA<bI)=SQRCA<bI)-S>:FOR J=I + 1 TO N
188 LETS=8!F0R K=1TO I-1:LETS=S+A<K,I)*A<K/J)SNEXT К 198 LETAU»J)=<A<J,I)-S)/A<bI):NEXT J:NEXT I 288 LETC<15=C(l>/-A(bl)*.FOR 1=2 TO N
210 LETS=0«FOR K=l TO I-l!LETS=S+A<K»1)жС<К):НЕХТ К 220 LETC<n=<C(I)-S)/A<:bI):NEXT I 230 LETC(N)=C<N)/A<N,N>:FOR I=N-1 TO 1 STEP -1 248 LETS=0:FOR K=I+1 TO NsLETS=S+A<bK>*C<K>:NEXT К 250 LETC<I) = <C<I>-S)/A<bI>:NEXT I
268 PRINTРЕШЕНИЕ СИСТЕМЫ:FOR 1=1 TO N 278 PR1NT!2.0!XI=!F1.91C<I)sHEXT I:ENB - 227 Пример.
2х,—
При n = N = решения системы
*2+ V2*3
Зх,+ 2х2~ 3*з 3*,+ -J2~x2----1^-х3-i = 7=l-10" т/2,
получаем в виде л:, =0,979013, х2= —4,226840 и х3 = 6,160861. При ^ = 0 по этой программе можно решать обычные системы линейных уравнений.
§ П5.8. Решение системы нелинейных уравнений методом простых итераций Описание метода дано в § 4.4. Подпрограмма вычисления F, (xi) записывается в виде фрагмента основной программы в строках от 50 до 200 без оператора RETURN. Программа П5.8. v лов разбиения периода N и число гармоник спектра. 2. Разделив период х (t) T на N частей At=T/N (берем Г=1), находим t; — Ati и х,- = лго + Хи cos (2я() при 1 = 0, 1, 2, . . ., N. 3. Обращаясь к подпрограмме вычисления передаточной характеристики у (х), находим значения у, —у (xi). 4. Считая изменения у, (t) на каждом малом отрезке времени At линейными, вычисляем постоянную N
1
v^
;=l
составляющую реакции Ло = sin Z ZlN
I и
коэффициенты
,—(,,_,) sin (Z (2i-l
Ак =
= nk/N и ft=l, 5. Находим 2.....Af. г коэффициент . +А ~/А,. гармоник
18 15 20 25
PRINTРЕШЕНИЕ СИСТЕМЫ НЕЛИНЕЙНЫХ УРАВНЕНИЙ PRINT МЕТОДОМ ПРОСТЫХ ИТЕРАЦИЙ INPUTЗАДАЙТЕ ЧИСЛО УРАВНЕНИЙ N=N:HIM INPUTЗАДАЙТЕ ПОГРЕШНОСТЬ РЕШЕНИЯ Е=Е
38 PRINTВВЕДИТЕ НАЧАЛЬНЫЕ ПРИБЛИЖЕНИЯ 35 FOR 1=1 ТО N!PRINT!2.0!XI= 40 INPUT X<I>:NEXT I 45 REMПОДПРОГРАММА ВЫЧИСЛЕНИЯ F(I)=X(I)+F(I) 5@ LETF<1>=X<1)+X<l)"2+X<2)"2-Xa)+.171875 68 LETF<2>=X<;2)+X<l>!i!X<2>-X<2)+.09375 200 LETS=0sFOR 1=1 TO N 210 IF ABS<Fa)-X<I>>>E THEN LETS=1
228 230 240 250
LETX<I)=F<I>:NEXT I IF S=l THEN 45 FOR 1=1 TO N:PRINT!2.0!XI=!1.9!F<I> NEXT I SEND
Пример. В тексте программы (строки 50 и 60) задано решение системы уравнений F,=xi + xl~-x, 4-0,171875 = 0, F2 = х, хг — х2 + 0,09375 = 0. Задав N = 2, е = £= 1 Ю"3, х,0 = 0,171875 и х20 = 0,09375, получим л;, = 0,2491442164 и х2 = = 0,124686572 (верны 3 знака после запятой). Время счета контрольного примера около 5 с.
§ П5.9. Вычисление спектра реакции нелинейной системы с аналитически заданной передаточной характеристикой на гармоническое воздействие Пусть реакция системы на воздействие х (I) описывается нелинейной передаточной характеристикой у (х). Если х (t) — гармоническое воздействие вида х (t) =XQ-\-XU COS a>t,
то спектр реакции у (t) будет содержать только косинусоидальные члены вследствие четности функций х (t) ay (t). Спектр у (t) вычисляется по следующему алгоритму (см. § 5.1). 1. Задаем постоянную составляющую х0 и амплитуду Хм воздействия, число интерва228 Выражения для Ао и Ак получаются в результате аналитического интегрирования (5.5) при кусочно-линейной аппроксимации у (t). Программа П5.9. Пример. Вычисление у = / (х) задается подпрограммой, записываемой со строки 240 и завершаемой операторами RETURN и END. В тексте программы П5.7 задана квадратичная зависимость у = х2. При JV = 20, М = 5, ХО= — 1 и *„ = 1 получим: Л0=1,5; А, = — 1,98360468, Л2 = = 0,4837056046; А3= —2,3725-10"; А4 = = —2,1711-10-"; Аъ=— 2,99625-10-" и К,= = 0,2438820645. Знак «минус» у At указывает на поворот фазы гармоники на угол л рад (или 180°).
§ П5.10. Регрессия для 16 видов парных зависимостей у (х) Если вид эмпирической зависимости у (х), приближающей парную зависимость, заданную совокупностью значений х, и yt, не известен заранее, желательно с помощью одной программы провести регрессию для ряда у (х). Приведенная ниже программа обеспечивает запоминание до 255 пар х-,, и у, и выполняет регрессию для одной или нескольких видов зависимостей у (х). Предусмотрена возможность выбора любых у (х) из 16 зависимостей, отмеченных в табл. 5.1. Порядок работы с программой следующий. Программа П5.9. . 18 PRINTАНАЛИЗ СПЕКТРА РЕАКЦИИ НЕЛИНЕЙНОЙ СИСТЕМЫ С ЗАДАННОЙ 20 PRINTАНАЛИТИЧЕСКИ ПЕРЕДАТОЧНОЙ ХАРАКТЕРИСТИКОЙ Y<X) ПРИ 30 PRINT ГАРМОНИЧЕСКОМ ВОЗДЕЙСТВИИ X<T)=X0+XM*COS<W*T) 40 INPUTЗАДАЙТЕ ЧИСЛО ИНТЕРВАЛОВ РАЗБИЕНИЯ ПЕРИОДА N=N0 56 INPUTУКАЖИТЕ ТРЕБУЕМОЕ ЧИСЛО ГАРМОНИК М=М:ШМ A<M)>F<M> 60 INPUTЗАДАЙТЕ ПОСТОЯННУЮ СОСТАВЛЯЮЩУЮ Х0=Х0 70 INPUTЗАДАЙТЕ АМПЛИТУДУ ВОЗДЕЙСТВИЯ ХМ=Х1 30 FOR K=0 TO M:LETACK>=0sNEXT К Э0 LETX=X0+Xl:6OSUB 240!LETY8=Y:FQR 1=1 ТО N0 100 LETX=X8+X1*COS<2*#PI*I.N0):6OSUB 240:LETV1=V 110 FOR K=l TO M:LETZ=#PI*K>N0!LETD=Z*<2*I-1) 120 LETC=<V1-V0)«SIN<2)/<Z*2/N0)!LETA<K)=A<K)-C*SIN<D)!NEXT К 130 !_ETA<0>=A<0> + <:V0+Y1V2/N0:LETV0=V1:NEXT I 140 PR INTСПЕКТР У<Т)=М0+СУММА МК*С05<К*Ы1) 150 PRINTПОСТОЯННАЯ СОСТАВЛЯЮЩАЯ РЕАКЦИИ М0=А<8) 160 PRINTАМПЛИТУДЫ ГАРМОНИК РЕАКЦИИ 170 LET3=0sFOR K=l TO MsLETS=S+A<K)*A<K> 180 PRINTS.0! AK!F1.5!=A<K) 190 NEXT К!IF A<1)=0 THEN 210 200 PRINTКОЭФФИЦИЕНТ ГАРМОНИК Kr=SQR<S-A<l)"2)/ABS<A<l)> 210 60Т0 70 220 REMCO СТРОКИ 240 ЗАПИСЫВАЕТСЯ ПОДПРОГРАММА ВЫЧИСЛЕНИЯ V<X) 240 LETV=X*X s RETURN:END 1. Вводятся значения х-„ {/, и С. Постоянная С дится на основе линеаризующих преобразований, задается равной 1, если ввод -с, и у, будет сводящих нелинейную зависимость у (х) к линей-продолжен. При вводе последней пары х, и yt ной y=W+Vx с последующим преобразованием надо задать С = 0, что обеспечит автоматический W и V в А и В. переход к исполнению последующей части про3. После проведения регрессии задается знаграммы. чение х и код (С=1, если будут вычисляться 2. Регрессия с заданной зависимостью у (х) значения у (х) по заданным х, и С = 0, если проводится после указания кода k в виде в этом нет нужды). В последнем случае вычис-номера соответствующей зависимости. При задаления повторяются с п. 2. нии к = 0 на индикацию выводится перечень кодов Для выбора нужных преобразований и завии формул для соответствующих у (х). Резульсимостей у (х) применяется оператор ON (a), татами регрессии являются ее параметры А и В обеспечивающий безусловный переход на строку (А = Ьо, В — Ь\, где 6о и Ь\—обозначения этих с номером а, где а — арифметическое вырапараметров в табл. 5.1), а также коэффижение, значение которого задается кодом k. циент парной корреляции R. Регрессия провоПрограмма П5.10.
10 PRINTРЕГРЕССИЯ ДЛЯ РАЗЛИЧНЫХ ПАРНЫХ ЗАВИСИМОСТЕЙ V=F<X> 20 LETM=255sDIM X<M>,V<M> 30 PRINTВВЕДИТЕ X>V>C <C=1 ПРИ ВВОДЕ» С=0 ПО ОКОНЧАНИИ ВВОДА) 40 LETJ=J+U INPUT X<J)/V<J)/C:IF CO0 THEN 38
50 PRINTЗАДАЙТЕ КОД К НУШНОГО ВИДА РЕГРЕССИИ* К=0>ЕСЛИ НУМНО 60 INPUT ВЫЗВАТЬ ТАБЛИЦУ КОДОВ И V=F<X) K=K 65 LETX1=0:LETX2=08LETV1=0:LETV2=0:LETP=0!IF K=0 THEN 980 78 IF K=16 THEN INPUTВВЕДИТЕ N=N 75 FOR 1=1 TO J!LETX=X<I>:LETV=V<I):ON<200+10*K) 80 LETA=W:LETB=U:ON<500+10*K> 90 PRINT!F1.9!ПАРАМЕТРЫ А=А B=B 95 PRINTКОЭФФИЦИЕНТ КОРРЕЛЯЦИИ R=R 180 INPUTВВЕДИТЕ Х/С<С=1 ИЛИ 8 ПРИ ОКОНЧАНИИ) Х/С 118 IF C=0 THEN 50 120 ON<788+10*K) 138 PRINT!F1.9!ЗНАЧЕНИЕ Y(X)=Vs60T0 180 200 REMЛИНЕАРИЗИРУЮЩИЕ ПРЕОБРАЗОВАНИЯ 218 GOTO 408 228 UETV=1^V!6OTO 408 230 LETX=l/Xs60T0 400 240 LETV=X/-V!60T0 488 258 LETY=L6T<Y).GOTO 400 268 LETY=L0G<Y):60T0 400 270 UETY=L6T(Y)!60T0 400 288 LETX=EXP<-X):LETY=l/Y:60T0 488 290 LETX=L6T<X>:LETY=LGT<Y):60T0 488 388 LETX=L6T(X)i60T0 488 318 LETX=L06<X)s60TO 400 328 LETY=l/-Y:60T0 400 229 330 LETX=l/X:LETV=l/V!60T0 408 340 LETX=l/XJLETY=L06<V):60T0 408 358 LETX=l^XiLETY=L6T<Y>sG0T0 400 360 LETX=X"NsGOTO 408 390 REMЛИНЕЙНАЯ РЕГРЕССИЯ 400 LETXl=Xl+XaLETVl=Vl+YiLETX2*X2+X*X 410 LETY2*Y2+Y»Y:LETP=P+X^Y:NEXT I 428 LETU=<X1*Y1-J*PV<X1*X1-J*X2> 430 440 450 60T0 80 508 REMСВЕДЕНИЕ ЛИНЕЙНОЙ РЕГРЕССИИ К НЕЛИНЕЙНОЙ 510 6ОТО 90 528 60Т0 90 538 GOTO 90 540 60Т0 98 550 LETft=10~W:LETB=10~U8 6OTO 90 560 LETA=EXP<bl)iGOTO 90 570 LETA=10"W!6OTO 90 588 60T0 90 590 GOTO 570 600 GOTO 90 610 GOTO 90 628 1_ЕТА=1Л):1_ЕТВ=ЫА<!&0Т0 90 630 LETA=l/W:LETB=U/Us60T0 98 648 GOTO 560 650 GOTO 578 668 GOTO 90 708 REMВЫЧИСЛЕНИЕ V<X> ПО ЗАДАННОМУ Х 710 LETY=A+B*X:GOTO 138 728 LETY=l/<A+B*X>sGQTO 138 730 LETY=A+BYX»GOTO 130 740 LETY=X^<A+B*X)!60T0 138 750 LETY=A*B~X:60T0 138 768 LETV=A*EXP<B*X>s6QT0 138 770 LETY=A*18~i:U*X>sG0T0 138 780 LETY=1/-<A+B*EXP<-X>:>!GOTO 138 798 LETY=A*X"B«60T0 138 888 LETY=A+B*L6T<X>!G0T0 130 818 LETY=A+B*L06<X>sG0T0 138 820 LETY=A/4B+X)!GOTO 130 838 1-ETY=A*X/<B+X>SGOTO 138 848 LETV=A*EXP<B/X)s60T0 138 850 LETY=A*10"<B/X)!6OTO 138 868 LETY=A+B*X-N:60TQ 130 908 PRINTТАБЛИЦА КОДОВ И ЭМПИРИЧЕСКИХ ФУНКЦИЙ Y<X> 1/<A+B 9 PR 1 Y=A+B*X 2 *X> 10 INT . .
v
=
9
PR 20 INT . 9 PR INT
3 Y=A+B/X
4 .
5 Y=A*B~X
Y X/= <A+B*X) 6 Y A*EXP< B*X>
30
. 9
PR 48 INT . 9 PR 58 INT .
. 7 Y=A*104B*X)
= 8
, 9 Y=A*X~B
1 8.
9
PR 1 .Y=A+B*LOG< 1 60 INT 1 X> 2. 9 PR 1 ,Y=A*X/<B+X 1 70 INT 3 ) 4. 9 PR 1 У=А*18ЛСВ/Х) 1 88 INT 5 6.
=
1/<А+В жЕХР Y A+B«LG T<X)
Y A= <B+X) V A*EXP( = B/X) Y А+ВЖСХ Л Ы) —
998 INPUTЗАДАЙТЕ КОД РЕГРЕССИИ К=К 1888 GOTO 65SEND Контрольные примеры (везде JCI = 1, х2 = 2, л:3 = 3,5, xt — 5, номер совпадает с кодом к, а результат дан в скобках). 1. i/i=0,i/2 = 0,9,i/3 = 2,5,i/4 = 4,2 (А= 1,13537, 5=1,0558, «==0,99908, у (2) =0,97619, 1/(4) = = 3,0878). 2. у, =0,1, 1/2 = 0,05, 1/з = 0,027, у4 = 0,02 (А = = 0,11086, В= 10,13857, /? = 0,99845, у (3) = = 0,032758, у (1,5) =0,06528). 3. 1/1 = 10,3, 1/2 = 5, 1/з = 3, 1/4 = 2,4 (А = = 0,20763, В= 10,0062, R = 0,99880, 1/(1) = = 10,21384, у (3) =3,543034). 4. у, = 0,17, 1/2 = 0,18, уз = 0,19, 1/4 = 0,192 (Л=0,93817, В = 5,01769, R = 0,99993, 1/(1) = = 0,16790, у (3) =0,18760).
230 5. у, =2, уг = 4, 1/з=11, 1/4 = 31 (Л = 1,0117, В= 1,98157, « = 0,99999, у (2) =3,97262, у (4) = = 15,59902). 6. у, =7,4, у2 = 53, уз =1040, у4 = 20300 (А = = 1,0168, 5=1,9800, « = 0,999999, у (2) = = 53,34312, у (4) =2798,46803). 7. у, =3, 1/2 = 5, .(/з=К), (/4 = 20 (/4 = 1,90498, В = 0,20501, « = 0,99979, у (1) =3,05418, у (3) = = 7,85066). 8. (/,=2,1 = 0,099793, ,3 (А = у (2) = у2 = 4,2, уз = 7,7, у4 = 9 5=1,02288, « = 0,099999, = 4,19771, у (4) =8,43686). 9. i/i = l, 1/2 = 4, 1/з=12, (/4 = 25 (Л = 0,99935, В = 1,99493, « = 0,99998, у (2) =3,98338, у (4) = = 15,87764). 10.1/1 = 1, 1/2=1,6, 1/3 = 2,1, 1/4 = 2,4 (-4 = = 0,99924, й = 2,00965, « = 0,99996, у (2) = = 1,60421, у(4) =2,20917). ll.i/i = l. У2 = 2,4, уз = 3,5, 1/4 = 4,2 (Л = = 1,00831, В = 1,98764, R = 0,99997, у (2) = 2,38604, 1/ (4) =3,76377). 12. i/i=3,3, у2 = 2,5, (/.,= 1,8, 1/4 =1,4 (Л = = 9,70274, В= 1,91056, « = 0,99986, у (2) = = 2,48116, у (4) = 1,64159). 13. у, = 3,33, </2 = 5, 1/з = 6,36, 1/4 = 7,14 (Л = = 10,00373, 5 = 2,00375, /? = 0,999999, у (2) = = 4,99719, у (4) =6,66499). 14. i/i=74, у2 = 27, |/з = 17, 1/4=15 (Л = = 9,80145, В = 2,01995, « = 0,99963, у (2) = = 26,91020, у (4) = 16,24066). 15. у, =500, 1/2 = 50, 1/з=19, 1/4=13 (Л = = 5,16152, В = 1,98393, « = 0,99998, у (2) = = 50,66928, у (4) = 16,1719). 16. у, = 2,1, i/2 = 2,28, 1/3 = 2,65, 1/4 = 3,12 (Л = = 1,99742, В = 0,10022, « = 0,99998, у (2) = = 2,28001, у (4) =2,79915). В этих примерах результаты указаны с точностью до 5—6 знаков после запятой. Время выполнения каждого контрольного примера составляет несколько секунд (при четырех парах xi, yi). С ростом числа пар х/, у, оно пропорционально растет.
§ П5.11. Сплайн-аппроксимация, интерполяция и экстраполяция Полиномиальная интерполяция и аппроксимация не обеспечивает непрерывность производных функции у (х) и может давать значительные погрешности в промежутках между узлами. Кроме того, она плохо приспособлена для экстраполяции и, как правило, не обеспечивает правильное асимптотическое поведение у (х) при изменении аргумента х за пределами интервала интерполяции. Нередко с увеличением числа узлов погрешность такой интерполяции не только не уменьшается, но и начинает расти. От этих недостатков свободна аппроксимация и интерполяция с помощью сплайн-функций. Сплайн (splain) в переводе с английского языка означает «гибкая линейка». Сплайн-функцию можно наглядно трактовать как линию, которую образует гибкая линейка, будучи закрепленной в ряде точек — узлах интерполяции. Математически сплайн — специальный многочлен, принимающий в узлах значения у (х) =у, = у (xi) и обеспечивающий непрерывность в них производных. Обычно достаточно обеспечить непрерывность первой и второй производных, для чего достаточно использовать сплайн-многочлены третьего порядка (кубические сплайны) [18, 24, 42]. Для каждого отрезка \xi, Xi + \\ изменения х кубическая сплайн-функция записывается в виде f, (х)=
+(x-x,)3] (Xi+I—X) + где ft,- = jr,4-i—*,-, fi(x)=y(x), nii = f" (x,) и 1 = 1, 2,..., n (я — число узлов). При известных Xi, yi и т., эта формула задает сплайнаппроксимацию. Если потребовать выполнения условия f, (x) = = у,, то приведенное выше выражение для кубических полиномов-сплайнов приводит к системе линейных уравнений, из которых находятся от,-: Aim,-+ 2 =6 У, А- 2 — 1/i+l
Однако эта система не полностью определяет /п,. Чтобы полностью определить все т,-, нужно задать дополнительные граничные условия. Если они заданы в виде т,=0 и т„ = 0, получаем нормальные сплайн-функции; при т„ = т| и mn4-i = m2 имеем периодические сплайн-функции и т. д. Приведенная ниже программа для n — N значений х, и у, вычисляет по данному алгоритму коэффициенты т,-~\" (х,) нормального кубического сплайна и при х<^ \х.\, хп] обеспечивает интерполяцию с помощью описанной выше сплайн-функции. Если x<xt, то выполняется линейная экстраполяция по формуле ! (х)=У\ — ((х1 — х,) т2/6+ (y2~yi)/(xn — -.-,)) (х-а,), а при х> ха — экстраполяция по формуле / (х)=у„+{(х„ — х„-,) /л„_|/6 + + (l/л- I/»-, )/(*„ — *„_,))
(* — *„).
При экстраполяции предполагается, что наклон линейного участка / (л) ранен первой производной сплайн-функции в точке (.ti, y<) при экстраполяции для x<.xi и к точке (х„, у„) при х> х„. Программа П5.11.
910 820 030 040 050 060 070
PRINTСПЛАЙН-АППРОКСИМАЦИЯ/ИНТЕРПОЛЯЦИЯ И ЭКСТРАПОЛЯЦИЯ INPUTЗАДАЙТЕ ЧИСЛО УЗЛОВ W=N DIM X(N)/V<N);L<:N),M<N)fR<N>,S<N) FOR 1=1 TO NsPRINT!2.0!ДЛЯ I=I INPUTBBEAHTE X*VX<I)>V<I)!NEXT I LETD=X<2>-X<1)8LETE=<V(2)-V<1))/D FOR K=2 TO N-lsLETH=DsLETD=X<K+l)-X<K)
080 090 190 110 120 130 140 231 159 160 180 190 280 219
LETF=EsLETE=<V<K+l>-V<K>>/B:LETL<K>=B/<B+H> LETR(K)=1-L<K)8LETS<K)=6*<E-F>^<H+B>! NEXT К FOR K=2 TO N-l:LETP=l/<R<K>*t_<K-l>+2>:LETL<IO=-L<IO*P LETS<K)=<:S<K)-R<K)*S(K-l))iiiP: NEXT К LETM<N)=0sLETU<:N-l)=S<N-l>!LETr1<N-l)=L<N-l> FOR K=N-2 TO 1 STEP-1 LETL<K)=L<K)*L<K+1)+S<K)8LETM<K)=L(K):NEXT К FOR K=l TO N:PRINT!2.0!MK!F1.9!=M<K)!HEXT К INPUTВВЕДИТЕ АРГУМЕНТ X=X:LETI=0sIFX>X<N> THEN 230 1?0 IF «=X(D THEN 250 LETI=I+1!IF X>X<I> THEN 180 LETJ=I-i:LETD=X<I)-X<J)!LETH=X-X(J):LETR=X<I)-X LETP=D*B/6:LETV=<M<J>*R-3+t1<i;>*H-3>/6/B LETV=V+C<V<J>-M<J)*P>*R+CV<n-M<:i)*P)»H>/D
229 PRINTЗНАЧЕНИЕ VCX)=Vs&OTO 160 230 LETD=X<N>-X<N-l)!LETV=D*M<N-l)/6+<Y<N)-Vi:N-l))/D 240 LETY=Y*<X-X<N>>+V<N)!GOTO 220 250 LETD=XC2>-X< 1 >:l_ETY=-D*M<2 V6+<Y<2>-Y< 1> VD 260 LETY=Y*<X-X<l>>+Ya>:60T0 220:END Контрольный пример. Пусть надо провести сплайн-аппроксимацию для интеграла Френеля С (*), заданного таблицей из /V = 7 пар X/ и </,:
инвертирование матрицы 3X3 (если индексация массивов идет с 1) или 4X4 (если индексация идет с 0). х, = 0 0,3 0,5 0,8 1 1,3 1,5 у, = 0 0,299401 0,4923442 0,7228442 0,7798934 0,6385505 0,4452612 Введя N, х, и у,, получим: mi=0, тэ — = - 0,08877862525, т3 = — 0,5547268737, т, = = -2,019378004, тъ= -3,563639669, т6 = = — 1,902729099, т? = 0. Далее, задавая х, можно провести интерполяцию и экстраполяцию: у (0,2) =0,2000938813 (0,1999211), у (0,48) = = 0,4737408625 (0,473751), у (1,6) =0,3422741197 и т. д. (в скобках после результата даны точные значения). В приведенных ниже программах индексация массивов идет с 0, операторы DIM задают точные размеры матриц (с учетом принятой индексации), в операторах МАТ матрицы задаются лишь именами массивов. Даны ссылки на программы, обеспечивающие те же вычисления без использования матричных операторов и сравнение программ. Программа П5.12/1. 1У РЕМ-ТРАНСПОНИРОВАНИЕ МАТРИЦЫ А в INPUTЗАДАЙТЕ N=H: N=N-l:DIM A<N/N>..B<N/H> 30 DATA Ь2- 3.-4,5.6.->..8r9 46 HAT READ A:MAT B=TRN<A) 50 PRINT!F1.5!МАССИВ ТРАНСПОНИРОВАННОЙ МАТРИЦЫ ПОСТРОЧНО 69 MAT PRINT 8:END Хотя сплайн-интерполяция осуществима при переменном шаге /z, = x, + i—х<, значительное изменение hi (Л/,,акс/Л/«ин> 4) нецелесообразно, поскольку в этом случае преимущества сплайн-интерполяции теряются и погрешность ее заметно возрастает. С применением сплайн-интерполяции возможно численное интегрирование, спектральный анализ и другие математические операции.
§ П5.12. Пакет программ с матричными операторами Применение матричных операторов (см. § 2.2) сокращает текст программ, содержащих операции с матрицами, и позволяет в 5—20 раз (в зависимости от типа ПЭВМ) уменьшить время вычислений. Сокращение времени вычислений обусловлено тем, что основные матричные операции при этом выполняются на машинно-ориентированном языке ЭВМ. Перед использованием матричных операторов с помощью операторов DIM задаются размеры массивов (основных и служебных). Далее с помощью операторов DATA, MAT READ, INPUT или MAT INPUT вводятся элементы исходных матриц. В некоторых версиях бейсика размеры матриц до 10ХЮ можно не задавать, а размеры больших матриц задавать с запасом. При этом точные размеры матриц указываются в операторе, например, MAT INV А (3, 3) означает 232
Пример. Эта программа обеспечивает транспонирование матрицы, взятой из примера к программе 3.48. После задания размерности N квадратной матрицы А, уменьшения N на 1 и задания размерности массивов A (N, N) и В (N, N) в строке 20 с помощью оператора DATA (строка 30) построчно вводятся элементы исходной матрицы А. В строке 40 оператор MAT READ A обеспечивает формирование матрицы А, а оператор МАТ В = TRN (A) —транспонирование матрицы А. После комментария в строке 50 массив транспонированной матрицы В выводится построчно на индикацию с помощью оператора MAT PRINT В (строка 60). Отметим, что в состав последнего в данной версии бейсика нельзя включать знаки изменения формата. Поэтому эти знаки (1/4.5!) даны после оператора PRINT в предшествующей строке 50. Результат получается в виде чисел 1, 4, 7, 2, 5, 8, 3, 6 и 9 (соответствует матрице АТ для контрольного примера к программе 3.48). Программа П5.12/2. Эта программа обеспечивает инвертирование матрицы А. Она примерно в 5 раз короче программы 3.56 и обеспечивает уменьшение времени обращения примерно в 20 раз. Значения элементов исходной матрицы и результаты вычислений соответствуют результатам, приведенным для контрольного примера к программе 3.55.
Программа П5.12/2. 10 20 38 48 50 60
REMОБРАЩЕНИЕ ПАТРИЦЫ А INPUTЗАДАЙТЕ Ы=Н: N=N-1:DIM АСН/Ю/В^/И^/СЧН/Ю ПАТА 4.- 8/ 0/ 8/ 8/ 8- 2.- 0/ 1 NAT READ A: MAT А= IHU < В/С > PRINTIF1.5!ОПРЕДЕЛИТЕЛЬ МАТРИЦЫ A D=B<@> PRINTМАССИВ ОБРАЩЕННОЙ МАТРИЦЫ ПОСТРОЧНО
79 MAT PRINT ft:END
Программа П5.12/3. 18 REMУМНОЖЕНИЕ МАТРИЦ 20 DIM A<3f4>^BC4.-2>/C<3/2:»
30 DATA 1/2/3/4/5/6/7/8/9/1/2/3/4/5/6/7/8/9/1/2 40 MAT READ A
58 DATA 1/2/3/ 1/2/3.. 1/2/3/ 1/ 2/ 3/ 1.. 2.-3 60 MAT READ В 70 MAT C=A*B 80 PRINT !F1.5!ВЫВОД ПОСТРОЧНО ЭЛЕМЕНТОВ МАТРИЦЫ С 90 MAT PRINT CsEHD
Программа иллюстрирует
умножение
двух
в 10 раз. Программу П5.12/4 можно проверить
матриц Л и В с применением оператора МАТС= по контрольному примеру, приведенному к про= А*В. Числовые значения элементов матриц А грамме П5.2. и В соответствуют контрольному примеру к проРешение системы уравнений АХ = В с приме-грамме 3.58. Следует отметить, что в этом нением формулы Х = А~В практикуется редко, примере размеры всех матриц различны. Элетак как другие методы (например, Гаусса) мейты результата — матрицы С — выводятся пообеспечивают в 2—3 раза меньшее время вы-строчно: 15, 30, 45, 31, 62, 93, 20, 40, 60, 27, числений—ifpn условии одинаковой реализации. 54 и 81. Однако резкое уменьшение времени обращения Программа П5.12/4. матриц с помощью специального матричного 10 PRINTОБРАЩЕНИЕ МАТРИЦЫ А/ ВЫЧИСЛЕНИЕ ЕЕ ОПРЕДЕЛИТЕЛЯ 20 PRINTИ РЕШЕНИЕ СИСТЕМЫ УРАВНЕНИЙ А*Х=В ПРИ РАЗНЫХ В 30 INPUTЗАДАЙТЕ ЧИСЛО УРАВНЕНИЙ N=N: N=N-1 40 DIM A<H/N)/B<N)/CCH/N)/D(N/N)/Xi:N> 50 FOR 1=0 TO N:FOR J=@ TO NsPRINT!2.8!ВВЕДИТЕ Al+l/J+l 60 INPUT A<I/J):NEXT J:NEXT I:MAT A=INU<C/D> 70 PRINT!F1.5!ВЫВОД ЭЛЕМЕНТОВ ОБРАЩЕННОЙ МАТРИЦЫ 80 MAT PRINT A:PRINTОПРЕДЕЛИТЕЛЬ МАТРИЦЫ A II=C<0> 90 INPUTБУДЕТ ЛИ РЕШАТЬСЯ СИСТЕМА УРАВНЕНИЙ? ДА 1/НЕТ 0 К 108 IF К=8 THEN PRINTВЫЧИСЛЕНИЯ ОКОНЧЕНЫ:END 110 FOR 1=0 ТО NsPRINT!2.0!ВВЕДИТЕ В1+1 120 INPUT В<1)!НЕХТ UMAT Х=А*В 130 PRINT!F1.5!МАССИВ НЕИЗВЕСТНЫХ СИСТЕМЫ 140 MAT PRINT X:PRINTКОНЕЦ!GOTO 90:END Эта программа обеспечивает ввод с пульта оператора MAT 1NV и оператора умножения элементов квадратной матрицы А размером NXN, матриц в конечном счете обеспечивает сущестобращение матрицы А, вычисление ее определивенное уменьшение времени вычислений. Этот теля, ввод вектора с числом компонентов N и решепример наглядно показывает, что наличие спение системы линейных уравнений АХ = В для циальных операторов в некоторых версиях разных В методом обращения матрицы, т. е. бейсика может существенно влиять на целесовычисление X = А~[В. Программа аналогична образность применения того или иного численного программе П5.2, но вдвое короче ее и обеспеметода. чивает уменьшение времени вычислений примерно Программа П5.12/5.
10 PRINTРЕШЕНИЕ СИСТЕМЫ НЕЛИНЕЙНЫХ УРАВНЕНИЙ 29 PRINTМОДИФИЦИРОВАННЫМ МЕТОДОМ НЬЮТОНА.ВАР.2 30 INPUTЗАДАЙТЕ ЧИСЛО УРАВНЕНИЙ X<N)/B<N)/FCN),A<N/N)/K<:N/N>/L;N»N)
N=N:
N=N-1
50 INPUTЗАДАЙТЕ МАКСИМАЛЬНОЕ ЧИСЛО ИТЕРАЦИЙ М=М 60 INPUTЗАДАЙТЕ ОТНОСИТЕЛЬНУЮ ПОГРЕШНОСТЬ Е=Е: S=0 78 FOR 1=0 ТО NrPRINT!2.8(ВВЕДИТЕ Xl<8)Ч INPUT X<I)sNEXT I 80 GOSUB 180 : MAT B=F 90 FOR J=8 TO N: V=X<J>: H=E*ABS<Y> 100 X<J)=V+H:GOSUB 180:FOR 1=0 TO N 110 ACI/J)=<F(I)-B<I))/HsNEXT I: X<J)=VsNEXT J 120 S=S+l:IF S=M+1 THEN PRINTHHCnO ИТЕРАЦИЙ S=M:END 130 MAT A=INU<K/L>iMAT B=A*F:MAT X=X-B 140 R=0JFOR 1=0 TO N:IF ABS(B<I)/X<I))>E THEN R=l 233
158 160 170 180 190 200 210
NEXT is IF R=l THEN 80 PRINT!F1.9!МАССИВ НЕИЗВЕСТНЫХ СИСТЕМЫ МЙТ PRINT X«PRINT!2.0! ЧИСЛО ИТЕРАЦИЙ S=SiEND REMПОДПРОГРАММА ВЫЧИСЛЕНИЯ F<I>=F<X<0)/X<1>,...»X<N-1>) F<0>=X<0>+3*L6T<X<0))-X<1)KX(1) F<l)=2»X<0>«X<0)-X<0)*X<l)-5*X<e)-H RETURN:END
Эта программа обеспечивает решение систем Программа обеспечивает полиномиальную апнелинейных уравнений модифицированным метопроксимацию (и интерполяцию) функции у:(х,), дом Ньютона (Ньютона — Рафсона). Программа заданной «отсчетами (начиная с 1) по методу аналогична программе 4.20 и может быть пронаименьших квадратов. Программа аналогична верена по контрольному примеру к последней. программе 5.25 и может быть проверена по Программа П5.12/6. контрольному примеру для программы 5.24. 18 PRINTПОЛИНОМИАЛЬНАЯ АППРОКСИМАЦИЯ И ИНТЕРПОЛЯЦИЯ 20 INPUTЗАДАЙТЕ ЧИСЛО ОТСЧЕТОВ N=N: M=N-1 30 DIM A<M/M>,C<M,M>,D<M>M>>B<M>,X<M>
48 FOR 1=0 TO MSPRIHT!2.8(ВВЕДИТЕ XI>VI 50 INPUT 2/В<1>! А<Ь8) = 1! R=lsFOR J=l TO M 60 R=R*Zs A<bJ>=RsNEXT JsNEXT I 70 MAT A=INU<C/P):MAT X=A*B 38 PRINT!F1.9(КОЭФФИЦИЕНТЫ №>ftb.../AMsMAT PRINT X 98 INPUTВВЕДИТЕ X=Z: V=2*X<M> 180 FOR I=M-1 TO 1 STEP-ls V=<V+X<m*ZsNEXT I 118 V=V+X<0>:PRINTV<X)=V!6OTO 98:END Программа П5.12/6 обеспечивает аппроксима, „ цию таблично заданной п значениями х, и у-, § 115.1 о. НрИОЛИЖвНИе фуНКЦИИ функции у, (А-,) С ПОМОЩЬЮ полинома . ПО ЧвбыШвВу, , 2i i m Среди многочленов, с помощью которых можно и = аю + а\х-\~а2Х 4- ... -\-атх , , ,, . , г приближенно задать функцию f (х), особое место где от = н—1. Вычисление коэффициентов этого занимают многочлены Чебышева Т, (х) (см. §3.4).
40
DIM
полинома осуществляется решением системы Многочлены 7", (х) формируются с помощью линейных (относительно коэффициентов а0, ai, ... рекуррентного соотношения Т1+\ (А-) =2л-Г, (х)— . . ., ат) уравнений —Т,~ i (А:) , при 7"ц (х) = 1, 7"i (x) =х. Таким образом ao-\-atx» + a-,xi+ ... +a,,,x!i = y0, - получаем: Т2 (х) = 2х2 — 1; Т3 (х) =4х3~3х; fl,,-)-aiJti + агх{ + ... +а„х" = у1, Т, (х) —8х* — 8х2 + 1 и т. д. Значения х должны быть в пределах [ — 1, 1]. , , 2 , I m В технике приближения функций используflO + aiJfm + 02Xm+
+ OmXm = j/m-
,
,
^
„ ,
ется линейная комбинация многочленов ЧебыПрограмма позволяет также находить у (х) по шева, которая записывается в виде составного заданному х, т. е. обеспечивает интерполяцию. многочлена Т (х)=аоТо (x)+ai7"i (x) + Данный метод обычно сложнее и требует ... -\-а„Тп (х), где ПО, оь . .., ап — коэффициенты больших затрат времени, чем аппроксимация Чебышева. и интерполяция методами Ньютона или Лагранжа Приближение функции / (л:) с помощью мно(§ 4.2). Однако из-за высокой скорости решения гочлена Т (х) обеспечивает минимальную посистем линейных уравнений с помощью матричгрешность отклонения Т (х) от f (x) (в сравнении ных операторов программа П5.12/6 обеспечивает с другими интерполяционными многочленами), в несколько раз меньшее время вычисления Это достигается за счет оптимального выбора коэффициентов аи, о......, ат и имеет вдвое узлов интерполяции в заданном промежутке меньшую длину листинга, чем программа 4.7. [ — 1, 1] изменения аргумента х. Многочлен Т (х) Программу П5.12/6 можно проверить по конможет быть представлен в форме обычного стетрольному примеру к программе 4.7. пенного многочлена (полинома) Р (х)—ао-{Программа П5.12/7. -f-aiA- + aaA-2+ ... -\-апхп.
10 PRINTПОЛИНОМИАЛЬНАЯ АППРОКСИМАЦИЯ И ИНТЕРПОЛЯЦИЯ 29 PRINT МЕТОДОМ НАИМЕНЬШИХ КВАДРАТОВ 38 INPUTBBEflHTE СТЕПЕНЬ ПОЛИНОМА M=N: P=2*<N+1) 48 DIM А<Н,Н>>В<Ю>С<Р:>>О<Н/Ю>Е<Н,Ю>Х<Ю 58 INPUTЗАДАЙТЕ ЧИСЛО ПАР X»V N=H 69 FOR 1=9 ТО Н-1^ШТ!3.8!ДЛЯ 1 = Is INPUTВВЕДИТЕ X,V X»V 78 F=l:F0R J=0 TO P:IF J>N THEN 98 80 B<J>=B<J>+Vi V=V*X 90 C<J)=C<J)+F: F=F»X:NEXT JsNEXT I 180 FOR 1=0 TON: K=i:FOR J=8 TO N 110 A(I,J)=CCK): K=K+l:NEXT JsNEXT I 120 MAT A=INU<DrE)sMAT X=A*B 130 PRINT!F1.9!КОЭФФИЦИЕНТЫ ПОЛИНОМА:МАТ PRINT X 140 PRINTS INPUTВВЕДИТЕ X=Zs S=8:F0R I=N TO 1 STEP -1 150 S=<S+Xa>>*Z:NEXT Is S=S+X<8) 168 PRINTЗНАЧЕНИЕ V<X)=S:60T0 148:END 234 Алгоритм преобразования линейной комбинации многочленов Чебышева в обычный степенной многочлен. 1. Вводим коэффициенты оо, Oi, ..., а„ многочлена 7" (х) и образуем массив а ((). 2. Делим а0 на 2: а0 = ао/2. 3. Для / = 2, 3, ..., я и /г = я, я—1, ___ j проводим преобразования коэффициентов по формулам 2. Для / = 0, 1, ..., п на отрезке [—1,1] формируем сетку оптимальных значений аргумента в узлах чебышевской интерполяции х[ = 2е+1 лЛ , —) , приводим х\ в отрезок 2/
я+1 xi и вычисляем значе[а, ft] *, 3. Для 4 = 0, 1, ..., л и f = 0, 1, ..., л вычисляем л+1 Е В результате получаем коэффициенты a0, ai,... ..., а„ многочлена 7" (л"), приближающего функцию / (х), т. е. аппроксимируем f (л:) многочленом Т (х). Вычисление значений Т (х) выполняется по следующему алгоритму. 1. Считая заданным массив ак, задаем память под массив из (я+ 2) вспомогательных коэффициентов Ък. Полагаем Ьп + 2 — () и 6,(+1—0. В результате получаем коэффициенты а, степенного полинома Р (х). Алгоритм преобразования коэффициентов степенного полинома в коэффициенты линейной комбинации многочленов Чебышева. 1. Вводим коэффициенты степенного полинома а,-. 2. Для j = n, я—1.....2 и k = j, /+1, ..., я выполняем преобразования коэффициентов по формулам ак = ак/2; at_2 = a*._2 + a*. 3. Умножаем а0 на 2: ao = 2ao. В результате получаем коэффициенты Чебышева для Т (х). Программа П5.13/1. 18 PRINTПРЕОБРАЗОВАНИЕ КОЭФФИЦИЕНТОВ МНОГОЧЛЕНОВ Т(Х> И 28 INPUTВВЕДИТЕ СТЕПЕНЬ МНОГОЧЛЕНА N=N:DIM A<N) 25 FOR 1=8 ТО NiPRINT"2.8!ВВЕДИТЕ AI:INPUT A<I>sNEXT I 30 PRINTBBEflHTE КОД ИСХОДНОГО МНОГОЧЛЕНА 48 INPUT8-ДЛЯ T«> И 1-ДЛЯ Р<Х) Ss IF S=l THEN 88 58 LETA<8>=A<0>/2:FOR J=2 TO N:FOR K=N TO J STEP-1 68 1_ЕТА<К-2>=А<К-2>-А<К>:1_ЕТА<:Ю=2*А<:Ю 78 NEXT К:NEXT J:6OTO 138 88 FOR J=N TO 2 STEP-1tFOR K=J TO N 98 LETA<K)=A<K)/2SLETA<K-2)=A<K-2>+A<;K) 188 NEXT KsNEXT .J:LETA<8)=A<8)«2 110 IF K=l THEN PRINTКОЭФФИЦИЕНТЫ МНОГОЧЛЕНА P<X):6DT0 138 120 PRINTКОЭФФИЦИЕНТЫ МНОГОЧЛЕНА ТОО 130 FOR 1=0 TO NsPRINT!2.8!AI=!F1.9!A<I> 148 NEXT l:END Работу программы можно проверить с помощью взаимного преобразования многочленов (« = = N = 4): Т (х) =8,757-,, (х) +5Г, (А:) +4Г2 (Х) + 1 Т3 (х) + + 0,625Г4 (х), р (л:) = 1+2л: + 3*2 + 4л-3 + 5.<:4. Алгоритм приближения функции по Чебышеву. 1. Задаем степень я многочлена Т (х) и пределы a, b области изменения аргумента х функции [ {х).
2. Задаем значение х на отрезке [а, Ь] и переводим его в отрезок [ — 1,1] с помощью пре-
, (х-(Ь + а)/2) 2 образования х =----------------——-—. (ft—a) 3. Для & = я, я—1, ..., 1 вычисляем Ьк = = ак — bk + 4-\-2bt+\x. 4. Находим Т (х1) =ао/2 — Ь2 + Ь,х. Приведенная ниже программа обеспечивает приближение f (x) многочленом 7 (х) заданной степени я, вычисление ao, ai, ..., ап многочлена Т (х1) или Р (х) (задается кодом 0 или 1) и вычисление значения Т (х) или Р (х). Программа П5.13/2. 10 PRINTПРИБЛИЖЕНИЕ ФУНКЦИИ ПО ЧЕБЫШЕВУ. 20 INPUTВВЕДИТЕ СТЕПЕНЬ МНОГОЧЛЕНА N=№DIM V<N>,A<N>..B(N+2) 30 ШР1ЛВВЕДИТЕ ПРЕДЕЛЫ ИЗМЕНЕНИЯ X А..В АЬВ1 48 LETQ=N+l!LETM=#PI/2/Q:LETC=<Bl+Al)-2!LETD=<Bl-Al)/2 58 FOR 1=0 ТО N:LETX1=COS<<2*I+1>*M>:LETX=C+D*X1 60 &OSUB 300!LETV<I>=F-.NEXT I 78 FOR K=8 TO NsFOR 1=8 TO N 88 LETA<K)=A<K)+V<I>«C0S<K*<2«I+l)*M):NEXT I 90 LETA<K)=A(K)*2/Q:NEXT К 180 PRINTЗАДАЙТЕ ВВОДОМ КОДА ВИД МНОГОЧЛЕНА 110 INPUT0-T<X>>1-PCX) S:IF S=1 THEN 150 128 PR INTКОЭФФИЦИЕНТЫ МНОГОЧЛЕНА TW 130 FOR 1=8 TO N:PRINT!2.0!AI=!F1.9!A<I) 140 NEXT isGOTO 190 235 158 LETA<8>=A<8)/2:F0R J=2 TO H:FOR K=N TO J STEP-1 168 L£TA<K-2>=A<K-2>-A<K>:LETA<l<>=2*ft<IO!NEXT КsNEXT J 170 PRINTКОЭФФИЦИЕНТЫ МНОГОЧЛЕНА P<XV 188 FOR 1=8 TO N!PRINT!2.0!AI = !F1.9!A<I>:t1EXT I 19Э INPUTВВЕДИТЕ X=X1:LETP=8:LETX=<X1-CVD 200 IF S=0 THEN 248 210 FOR I=N TO 1 STEP-1 :LETP=<P+A< I >;i*X ,220 NEXT I:LETP=P+A<0> 230 PRINTPCX>=P:60T0 198 240 LETB<N+2)=0:LETB<N+1)=0:FOR K=N TO 1 STEP-1 250 1_ЕТВ<Ю=А<Ю-е<К+2>+2*В<К+1)*Х:НЕХТ К. 268 LETT=A<0V2-B<2>+Ba>*X . 270 PRINTT<X)=T:60T0 198 308 REMПОДПРОГРАММА ВЫЧИСЛЕНИЯ F=F<XV 318 LETF=L06a.5+X/2>sRETURN:END Вычисление f (x) — F оформляется подпрограммой, записанной со строки 300. Контрольный пример дан для функции f=ln (1,5 + ^/2). Задав п = Ы = 3, а = А = 0 и й = В = 3, получим (код 0) следующие значения коэффициентов Чебышева: о 0= 1,563836218, а, =0,3431444714, а4= -0,02942874414 и а3 = 0,003307617869. Для х=\ / (1) =0,6932432419, а для х = 2 f (2) = = 0,916371022 (при точных значениях /(1) = = 0,6931471806 и / (2) =0,9162907319). Повторив вычисления при коде 1, получим коэффициенты степенного многочлена Р (х): ао = 0,81 13468529, а, =0,3332216178, а2=—0,05885748827 и а3 = = 0,01323047147. Значения / (1) =Р (1) и f (2) = = Р (2) при этом совпадают с указанными выше. С увеличением п предшествующие значения ai многочлена Т (х) сохраняются (точнее, из-за погрешности вычислений они слабо меняются). Из-за неравномерного и труднопредсказуемого расположения узлов на [а, Ь] метод Чебышева обычно не применяется для интерполяции табличных данных. Он очень удобен при задании f (х) в аналитической форме, но может быть применен и для аппроксимации графически заданных функций. В последнем случае подпрограмму записывают в виде 310 PRINT ДЛЯХ = Х 320 INPUT ВВЕДИТЕ ЗНАЧЕНИЕ F(X) F; RETURN: END По подсказанным программой значениям х вводятся снятые с графика значения / (л;).
СПИСОК ЛИТЕРАТУРЫ 1. А н г о А. Математика для электро- и радиоинженеров.— М.: Наука, 1965. 2. Бал. И. Дж., Гарт Р. Простые и точные формулы для несимметричной полосковой линии с конечной толщиной полоски / / ТИИЭР, 1977, 65, № 11, с. 104. 3. Б а т и щ е в Д. И. Методы оптимального проектирования.— М.: Радио и связь, 1984. 4. Б а х в а л о в Н. С. Численные методы.— М.: Наука, 1975. 5. Бронштейн И. Н., СемендяевК-А. Справочник по математике для инженеров и учащихся втузов.— М.: Наука, 1986. 6. В о л к о в Е. А. Численные методы.— М.: Наука, 1982. 7. ГоринштейнА. М. Практика решения инженерных задач на ЭВМ.— М.: Радио и связь, 1984. 8. Даффет-СмитП. Практическая астрономия с калькулятором/ Пер. с англ.; Под ред. Г. А. Лей-кина,— М.: Мир, 1982. 9. Дьяконов В. П. Расчет нелинейных и импульсных устройств на программируемых микрокалькуляторах.— М.: Радио и связь, 1984. 10. Д ь я к о н о в В. П. Справочник по расчетам на микрокалькуляторах.— М.: Наука, 1985. 11. Дьяконов В. П. Персональные ЭВМ в аппаратуре и технике эксперимента//Приборы и техника эксперимента, № 1, 1986, с. 7. 12. И в а н о в В. И., И в а н о в Е. А., М у р е н к о Л. П. Малогабаритные вычислительные комплексы индивидуального пользования//Радиотехника, 1983, № 1, с. 24. 13. Иоссель Ю. Я., Кочанов Э. С, Стру некий М. Г. Расчет электрической емкости.— Л.: Энергоиздат, 1981. 14. И о ф ф е А. Ф. Массовые персональные ЭВМ серии «Агат»//Микропроцессорные средства и системы, 1984, № 1, с. 56. 15. КалантаровП. Л., Цейтлин Л. А. Расчет индуктивностей.— Л.: Энергия, 1970. 16. Кет ко в Ю. Л. Программирование на бейсике.— М.: Статистика, 1978. 17. Клингман Э. Проектирование микропроцессорных систем/Пер, с англ.; Под ред. С. Д. Паш-кеева.—М.: Мир, 1980. 18. Корн Г., Корн Т. Справочник по математике для научных работников и инженеров.— М.: Наука, 1984. 19. К о с е н к о в С. М., ПолоскинА. Н., СчепицкийЗ.А., ДябинМ. И., ПоловянюкА. И. Бытовая персональная микроЭВМ «Электроника БК-0010»//Микропроцессорные средства и системы, № 1, 1985, с. 22. 20. Кузнецов Е. Ю., Острецов Б. В., Минкин Л. К-, Егорова Ю. И. Микрокалькуляторы.— М.: Радио и связь, 1984. 21. Кухлинг X. Справочник по физике/Пер, с нем.; Под ред. Е. М. Лейкина.— М.: Мир, 1982. 22. Мейнке X., Гундлах Ф. Радиотехнический справочник. Т. 1.— М.: Госэнергоиздат, 1961. 23. М о ш и ц Г., X о р н П. Проектирование активных фильтров/Пер: с англ.; Под ред. И. Н. Теплюка.— М.: Мир, 1984. 24. Набор программ для ЭЦВМ «Мир». Т. 1—2.— Киев: Наукова думка, 1973. _ 25. Персональные ЭВМ//ТИИЭР, 1984, 72, № 3. 26. Погорелый С. Д., Слободянюк Т. Ф. Программное обеспечение микропроцессорных систем: Справочник.— Киев: Техника, 1985. 27. П о п о в А. А., Хохлов М. М., Глухман В. Л. Диалоговые вычислительные комплексы «Электроника НЦ-8020»//Микропроцессорные средства и системы, 1984, № 4, с. 61. 28. Программирование на языке бейсик-плюс для СМ-4/В. П. Семик, Б. Р. Монцибович, Д. П. Непочатых и др.— М.: Финансы и
статистика, 1982. 29. Проектирование спускаемых автоматических космических аппаратов: Опыт разработки диалоговых процедур/Под ред. В. М. Ковтуненко.— М.: Машиностроение, 1985. 30. Прудников А. П., Б р ы ч к о в Ю. А., М а р и ч е в О. И. Интегралы и ряды.— М.: Наука, 1981. 31. Расчет электрических цепей и электромагнитных полей, на ЭВМ/Под ред. Л. В. Данилова и Е. С. Филиппова.— М.: Радио и связь, 1983. 32. С а м а р с к и й А. А. Введение в численные методы.— М.: Наука, 1982. 33. Сергеева Т. О. НР-85 — настольная ЭВМ индивидуального пользования//3арубежная радиоэлектроника, 1981, № 10, с. 86. 237 34 С и г о р с к и й В. П., 11 е г р е н к о А. И. Основы теории электронных схем.— Киев: Вита школа, 197!. 35. Справочник по расчету и проектированию ARC-ехем/Букашкин С. А., Власов В. П., Змий Б. Ф. к др.; Под ред. А. Л. Ланиэ.- М.: Радио и связь, 1984. 36. Справочник но социальным функциям/Пер, с англ.: Под ред. М. Абрамовица и И, Стиган. М. Наука, 1979, 37. Т р о х и vj е н к о Я. К., /1 ю б и ч Ф. Д. Радиотехнические расчеты на микрокалькуляторах. -- М.: Радио и связь, 1983. 38. Трохи мен ко Я- К., Л ю б и ч Ф. Д. Инженерные расчетына программируемых микрокалькуляторах.— Киев: Техника, 1985. 39. Уорт Т. Программирование на языке бейсик.-- М.: Машиностроение, 1981. 40. Усилители с палевыми транзисторами/В. М. Немчинов, В. Г. Никитаев, М. А. Ожогин, В. В. Ля-ховмч; Под ред. И. П. Степаненко.— М.: Сов. радио, 1980. 41. Щуп Т. Решение инженерных задач на ЭВМ.— М.: Мир, 1982. 42. Я н к ( Е., Эмде Ф., Леш Ф. Специальные функции: Формулы, графики, таблицы.— М.: Наука, 1977. 43. CASK) FX-702P. Instruction Manual. BM Mark for high quality & Reliability. Casio.
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ Алгебраические операции 41 — уравнения 93 Алгоритм 43 Алфавит бейсика 21 Амплитудно-частотная характеристика (АЧХ) 132 Ангера функция 155 Аппроксимация полиномиальная 82, 234 — методом наименьших квадратов 142 — — — — с заданной погрешностью 143 Асимметрии коэффициент 134 Атмосферное давление 216 Аттенюаторов расчет 164 Бейсик 21 Бесселя функции 151 — — модифицированные 151 — — сферические 152 Быстрое преобразование Фурье 125 Вебера функция 156 Векторный анализ 71 Вероятности интеграл 157 — функции распределения 3 58 Версии бейсика 27 Вклада вычисление 217 Вращения метод 75 Время счета 46 Волновое сопротивление линий 174 Вычислительные микросистемы 16 Гамма-функцчя 149 — неполная ,150 Гармоник коэффициент 128 Гармонический синтез 116 Гармоническое среднее 135 Гаусса метод 75, 106 Геометрическое среднее 135 Гиперболическая регрессия 140, 228 Гиперболические функции 27, 59 Гипергеометрическая функция 156 Гистограмма 135 Горнера схема 61 Графиков вывод 49 Данилевского метод 118 Двойных интегралов вычисление 108 Деление комплексных чисел 56 — многочленов 62 — отрезка в заданном отношении 73 — с произвольной точностью 55 Деления пополам метод 88, 97 Делитель согласующий 163 День недели 219 Диалог 48 Дилогарифм 156 Диск магнитный 20 Дисковый накопитель 10, 20 Дисперсия 134 Дисплей 10 Дифференциальные уравнения 111 Дифференциальных уравнений системы 111 — — —, решение методом Рунге — Кутта 112 — — — — — Рунге — Кутта — Мерсона 114 — , —. .- Рунге— Кутта — Фельберга 115 — -......., --- — трапеций 111 Дифференцирование численное 100 Дихотомии метод 88, 97 Дробно-рациональная функция 62 Дробь цепная 51 Дроссель фильтра 170 Емкость между шарами 173 — пленочных конденсаторов 172 — проводников 172 Запоминающее устройство 10 — — оперативное (ОЗУ) 10 — — постоянное (ПЗУ) 10 Звезда — треугольник 162 Зейделя метод 91, 226 Зиверта функция 157 Золотого сечения метод 97 Индуктивность катушек 166 Интеграл вероятности 157 Интегральные показательные функции 147 Интегральный косинус 149 Интегральный синус 148 Интегрирование численное 104 — — методом Бодэ 105 _. _ —Гаусса 106 — — — Ньютона — Котеса 106 — — — Симпсона 105 — — — Чебышева 106 _-------Уэддля 106 — — разрывных функцлй 109 Интерполяция 79 — функций двух переменных 84 Интерпретатор бейсика 21 Касательных метод 86 Каскад усилительный 180 — — на биполярных транзисторах 181
— — на полевых транзисторах 182 Квадратичная интерполяция 85 — — при минимизации функций 96, 99 — — при решении нелинейных уравнений 90 Квадратное уравнение 93 Кельвина функции 157 Ключ на мощном МДП-транзисторе 209 Комбинаторика 70 Комплексных чисел функции 56 Контур резонансный 165 Координат преобразование 42, 71 Координатного спуска метод 99 Корни алгебраических уравнений 93 — нелинейных уравнений 86 — полинома 93 — — с комплексными коэффициентами 73 — системы нелинейных уравнений 91 Котельникова ряд 117 Коэффициент ранговый корреляции 138 — чувствительности 101 Коши задача 111 Кубическое уравнение 98 Лагранжа формулы интерполяции 80 Линейная регрессия 138 Линейных уравнений системы 75 Линии искусственные 179 239 Линии коаксиальные 174 — полосковые 177 — проводные 176 — спиральные 176
Логарифмическая производная гамма-функции 150 — регрессия 142 Массивы данных 35 Матрицы 65 Матричные операции 40, 65, 232 Моделирование ключа на мощном МДП-транзи-сторе 209 — релаксационного генератора 212 — статистическое 136 — трансформаторного усилителя мощности 207 Моменты начальные 133 Монте-Карло метод 136 Наибольший общий делитель 55 Наименьших квадратов метод 138, 228 Нелинейная регрессия 139 Нелинейных уравнений корни 86 Ньютона метод модифицированный 87 — — обобщенный 93 Обратной интерполяции — экстраполяции метод 90 Обращение матриц 68, 233 Операторы бейсика 21 Определителей вычисление 66 Ортогональные многочлены 63 Отладка программ 52 Отрезка длина 72 Параметры плоскости 73 — прямой 72 Парной корреляции коэффициент 137 Перевод программ 51 Переменные бейсика 21 Переходы безусловные 25 — с косвенной адресацией 27, 30 — условные 25 Периферийное оборудование 19 Персональные ЭВМ 9 Подпрограмма 45 Полинома значения 61 — корни 94 Поразрядного приближения метод 89, 91 Преобразование чисел по основанию 54 — обыкновенной дроби в цепную 54 — цепной дроби в обыкновенную 54 Приоритет операций 22, 35 Программирование на бейсике 43, 48 Программы линейные 43 — разветвляющиеся 44 — циклические 44 Производных вычисление 100 Простых итераций метод 87, 225, 228 Разложение функций в ряд 45, 147 — числа на простые множители 55 Регрессионный анализ 138 Редактирование программ 52 Рыбакова метод 88 Сглаживание данных эксперимента 144 Секущих метод 89 Секущих — хорд метод 89 Случайные числа 136 Собственные значения и векторы матриц 117 Сортировка данных 218 Сочетания 70 Спектральный анализ методом Берга 133 — — — двенадцати ординат 130 — — — степенного полинома 129 — — — пяти ординат 128 — — — семи ординат 128 — — параллельный 124 — — последовательный 123 — — при аналитически заданной функции 229 *— — разрывных функций 131 — — финитных функций 123 Специальные функции 147 Сплайн-интерполяция 83, 231 Среднее арифметическое и геометрическое 135 Стандартное отклонение 134 Статистические расчеты 133 Струве функции 155 Суммирование данных таблицы 219 Температуры распределение 216 Трансцендентных уравнений решение 86 Трапеций метод 104, 114 Угол между векторами 73 — — вектором и осями координат 72 Умножение многочленов 63 Устойчивость многочлена 61 Фазо-частотная характеристика (ФЧХ) 62, Факториал 70 Физические параметры транзистора 180 Фильтры активные 186 — — с большой добротностью 201 — — с малой добротностью 189 ------ со средней добротностью 194 Френеля интегралы 153 Функции комплексного переменного 56 Функция NW 70 Хорд метод 89 Циклы 44 Частные производные 102 Числа Фибоначчи 56 Шина адресов и данных 9. Эйлера — Коши метод 111
— — — с итерациями 111 — метод модифицированный 111 Эйри функции 153 Эйткена метод интерполяции 80 Эйткена — Стеффенсона метод 90 Экстремумов поиск 96 Эксцесса коэффициент 134 Эллиптические интегралы 154 Якоби метод 121 МОСКВА «НАУКА» ГЛАВНАЯ РЕДАКЦИЯ ФИЗИКО-МАТЕМАТИЧЕСКОЙ ЛИТЕРАТУРЫ 1987
ББК 22.18 Д93 УДК 519.6(083) Дьякриов В. П. Справочник по алгоритмам и программам на языке бейсик для персональных ЭВМ: Справочник.— М.: Наука. Гл. ред. физ.-мат. лит., 1987.—240 с. Даны краткие сведения о современных отечественных и зарубежных микроЭВМ индивидуального пользования. Описаны основные версии бейсика, наиболее распространенного языка программирования персональных ЭВМ (ПЭВМ), отечественных микро- и миниЭВМ (Электроника-60, Электроника-ДЗ-28, Искра-226, диалоговых вычислительных комплексов ДВК-1, ДВК-2 и др.). Изложены основы программирования на бейсике. Основное внимание уделено общему математическому, алгоритмическому и программному обеспечению расчетов на ПЭВМ. В справочник включена обширная библиотека прикладных программ на бейсике (более 300 программ), обеспечивающих реализацию основных численных методов, вычисление большинства специальных функций и решение ряда практических задач в различных областях науки и техники. Для инженеров, научно-технических работников и студентов втузов. Библиогр. 43 назв. .. Рецензент доктор технических наук С. В. Черепных
Владимир Павлович Дьяконов СПРАВОЧНИК ПО АЛГОРИТМАМ И ПРОГРАММАМ НА ЯЗЫКЕ БЕЙСИК ДЛЯ ПЕРСОНАЛЬНЫХ ЭВМ Редактор Л. Г. Силкова Художественный редактор Г. М. Коровина Технический редактор С. Я. Шкляр. Корректоры Е. Ю. Рычагова, М. Л. Медведская ИБ № 32350 Сдано в набор 19.03.86. Подписано к печати 20.05.87. Т-12131. Формат 70X 100/16. Бумага офсетная № 2. Печать офсетная. Усл. печ. л. 19,5. Усл. кр.-отт. 39,33. Уч.-изд. л. 25,16. Тираж 300 000 экз. (1-й завод 1 — 100 000 экз.). Заказ 153. Цена 1 р. 40 к. Ордена Трудового Красного Знамени издательство «Наука». Главная редакция физико-математической литературы. 117071, Москва В-71, Ленинский проспект, 15. Ленинградская типография № 2 головное предприятие ордена Трудового Красного Знамени Ленинградского объединения «Техническая книга» им. Евгении Соколовой Союзполиграфпрома при Государственном комитете СССР но делам издательств, полиграфии и книжной торговли. 198052.Ленинград,Л-52, Измайловский проспект, 29. Д 1702070000—126 053(02)-87 48-87 © Издательство «Наука». Главная редакция физико-математической литературы, 1987