|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[54] Мнимые А iA Действительные Рис. 2.20: Комплексные числа как точки на плоскости «действительной» и «мнимой» (см. рис. 2.20). С этой точки зрения комплексное число z = x + iy (где i2 = -1) можно представить как точку на плоскости, действительная координата которой равна x, а мнимая у. В этом представлении сложение комплексных чисел сводится к сложению координат: Действительная-часть! + z2) = = Действительная-частьх) + Действительная-часть2) Мнимая-часть! + z2) = Мнимая-часть) + Мнимая-часть2) При умножении комплексных чисел естественней думать об их представлении в полярной форме, в виде модуля и аргумента (r и A на рис. 2.20). Произведение двух комплексных чисел есть вектор, получаемый путем растягивания одного комплексного числа на модуль другого и поворота на его же аргумент: Модуль! • z2) = Модуль!) • Модуль(z2) Аргумент(zl • z2) = Аргумент(z!) + Аргумент) Таким образом, есть два различных представления для комплексных чисел, и каждое из них удобнее для какого-то набора операций. Однако с точки зрения человека, который пишет программу с использованием комплексных чисел, принцип абстракции данных утверждает, что все операции, работающие с комплексными числами, должны работать независимо от того, какую интерпретацию использует компьютер. Например, часто бывает нужно получить модуль комплексного числа, представленного в декартовых координатах. Подобным образом, часто полезно уметь определять действительную часть комплексного числа, представленного в полярных координатах. При разработке такой системы мы можем следовать той самой стратегии абстракции данных, которую мы использовали в пакете работы с рациональными числами в разделе 2.1.1. Предположим, что операции над комплексными числами реализованы в терминах четырех селекторов: real-part, imag-part, magnitude и angle. Предположим еще, что у нас есть две процедуры для построения комплексных чисел: make-from-real-imag возвращает комплексное число с указанными действительной и мнимой частями, а make-from-mag-ang возвращает комплексное число с указанными модулем и аргументом. Эти процедуры обладают такими свойствами, что для любого комплексного числа z (make-from-real-imag (real-part z) (imag-part z)) и (make-from-mag-ang (magnitude z) (angle z)) порождают комплексные числа, равные z. Используя такие конструкторы и селекторы, мы можем реализовать арифметику комплексных чисел через «абстрактные данные», определяемые этими конструкторами и селекторами, в точности как мы это делали для рациональных чисел в разделе 2.1.1. Как показывают вышеуказанные формулы, можно складывать и вычитать комплексные числа в терминах действительной и мнимой части, а умножать и делить в терминах модуля и аргумента: (define (add-complex zl z2) (make-from-real-imag (+ (real-part zl) (real-part z2)) (+ (imag-part zl) (imag-part z2)))) (define (sub-complex zl z2) (make-from-real-imag (- (real-part zl) (real-part z2)) (- (imag-part zl) (imag-part z2)))) (define (mul-complex zl z2) (make-from-mag-ang (* (magnitude zl) (magnitude z2)) (+ (angle zl) (angle z2)))) (define (div-complex zl z2) (make-from-mag-ang (/ (magnitude zl) (magnitude z2)) (- (angle zl) (angle z2)))) Для того, чтобы придать пакету работы с комплексными числами окончательный вид, нам осталось выбрать представление и реализовать конструкторы и селекторы в терминах элементарных чисел и элементарной списковой структуры. Есть два очевидных способа это сделать: можно представлять комплексное число как пару в «декартовой форме» (действительная часть, мнимая часть) либо в «полярной форме» (модуль, аргумент). Какой вариант мы выберем? Чтобы говорить о конкретных вариантах, предположим, что двое программистов, Бен Битобор и Лиза П. Хакер, независимо друг от друга разрабатывают представления для системы, работающей с комплексными числами. Бен решает представлять комплексные числа в декартовой форме. При таком решении доступ к действительной и мнимой частям комплексного числа, а также построение его из действительной и мнимой частей реализуются прямолинейно. Чтобы найти модуль и аргумент, а также чтобы построить комплексное число с заданными модулем и аргументом, он использует тригонометрические соотношения x = r cos A y = r sin A; \Jx2 + у1 A = arctg(y, x) r= которые связывают действительную и мнимую части (x, у) с модулем и аргументом (r, A).44 Таким образом, реализация Бена определяется следующими селекторами и конструкторами: (define (real-part z) (car z)) (define (imag-part z) (cdr z)) (define (magnitude z) (sqrt (+ (square (real-part z)) (square (imag-part z))))) (define (angle z) (atan (imag-part z) (real-part z))) (define (make-from-real-imag x y) (cons x y)) (define (make-from-mag-ang r a) (cons (* r (cos a)) (* r (sin a)))) Напротив, Лиза решает представить комплексные числа в полярной форме. Для нее доступ к модулю и аргументу тривиален, но для получения действительной и мнимой части ей приходится использовать тригонометрические тождества. Вот представление Лизы: (define (real-part z) (* (magnitude z) (cos (angle z)))) (define (imag-part z) (* (magnitude z) (sin (angle z)))) (define (magnitude z) (car z)) (define (angle z) (cdr z)) (define (make-from-real-imag x y) (cons (sqrt (+ (square x) (square y))) (atan y x))) (define (make-from-mag-ang r a) (cons r a)) Дисциплина абстракции данных обеспечивает то, что одни и те же реализации процедур add-complex, sub-complex, mul-complex и div-complex будут работать как с Беновым представлением, так и с Лизиным. 2.4.2 Помеченные данные Можно рассматривать абстракцию данных как применение принципа «наименьших обязательств». Реализуя систему обработки комплексных чисел в разделе 2.4.1, мы можем использовать либо декартово представление от Бена, либо полярное от Лизы. Барьер абстракции, который образуют селекторы и 44Функция взятия арктангенса, которая здесь используется, вычисляется процедурой Scheme atan. Она берет два аргумента y и x и возвращает угол, тангенс которого равен y/x. Знаки аргументов определяют, в каком квадранте находится угол. |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||