Контрольная работа комплексные числа: Контрольная работа “Комплексные числа”

Содержание

Контрольная работа на тему: формы комплексных чисел

Задание: Действия над комплексными числами в алгебраической форме. Решение квадратных уравнений.

Целы формирование умения выполнять операции над комплексными числами в алгебраической форме, решать квадратные уравнения с отрицательным дискриминантом.

Задание для самостоятельной внеаудиторной работы:

51.1. Повторите, что называют мнимой единицей. Какой вид имеет алгебраическая форма комплексного числа? Какова геометрическая интерпретация комплексных чисел? Разберите, как выполнить сложение, вычитание, умножение и деление комплексных чисел в алгебраической форме. Какова техника решения квадратных уравнений с отрицательным дискриминантом?

51.2. Закончите высказывания:

а) — мнимая единица — число, …. = ….

б) Алгебраическая форма комплексного числа имеет вид: = …, где … — действительная часть, … -мнимая часть комплексного числа.

в) Множество комплексных чисел обозначают ….

г) Сопряжённым данному комплексному числу называют число, ….

д) Операции над комплексными числами в алгебраической форме аналогичны операциям с ….

При делении комплексных чисел в алгебраической форме необходимо домножить числитель и знаменатель дроби на число, … знаменателю.

е) Комплексное число = … можно изобразить в виде … или ….

ж) При решении квадратного уравнения с отрицательным дискриминантом получают два … корня.

51.3. Выполните действия над комплексными числами в алгебраической форме, заполнив цифрами пустые ячейки:

Откуда берут своё начало комплексные числа? В XVI веке в связи с изучением кубических уравнений оказалось необходимым извлекать квадратные корни из отрицательных чисел. В формуле для решения кубических уравнений вида корни находят по формуле:

Она безотказно действует в случае, когда уравнение имеет один корень, а если оно имеет три действительных корня (), то под знаком квадратного корня оказывается отрицательное число. Получалось, что путь к этим корням ведет через невозможную операцию извлечения квадратного корня из отрицательного числа.

Тогда итальянский алгебраист Джероламо Кардано в 1545 г. предложил ввести числа новой природы. Кардано называл такие величины “чисто отрицательными» и даже “софистически отрицательными”, считал их бесполезными и старался не употреблять. В самом деле, с помощью таких чисел нельзя выразить ни результат измерения какой-нибудь величины, ни изменение какой-нибудь величины.

Но уже в 1572 году вышла книга итальянского алгебраиста Р. Бомбелли, в которой были установлены первые правила арифметических операций над такими числами, вплоть до извлечения из них кубических корней. Название “мнимые числа» ввел в 1637 году французский математик и философ Рене Декарт. Осталось ввести обозначение мнимых чисел. Именно тогда был придуман символ . Учёные полагают, что — первая буква латинского — воображаемый, мнимый.

Выполнив задание 51.3, впишите цифры из заштрихованных ячеек в соответствующие ячейки таблицы. Вы узнаете, в каком году впервые для обозначения мнимой единицы был использован символ .

Год введения символа:

51.4. Решите квадратное уравнение:

51.5. Изобразите комплексные числа в виде точек на комплексной плоскости и, используя таблицу «Операции над векторами», найдите расстояние между ними:

51.6. Вычислите:

Методические указания по выполнению работы:

Мнимой единицей будем называть такое число, квадрат которого равен — 1.

Числа вида , где и — действительные числа (), a — мнимая единица, называются комплексными числами.

— деиствительная часть комплексного числа;

— мнимая часть комплексного числа ( — коэффициент при мнимой части).

Запись комплексного числа в виде называется алгебраической формой комплексного числа.

Множество комплексных чисел принято обозначать буквой .

В алгебраической форме над комплексными числами удобно выполнять операции: сложение, вычитание, умножение и деление.

Сложение, вычитание и умножение комплексных чисел производят по правилам соответствующих действий над многочленами.

Пример 1.

Для комплексных чисел и найдите: .

Решение:

Действительную часть комплексного числа будем складывать с действительной частью, мнимую — с мнимой: .

При сложении двух комплексных чисел в алгебраической форме получили комплексное число также в алгебраической форме.

— комплексное число в алгебраической форме.

— комплексное число в алгебраической форме.

Ответ: .

Для того чтобы ввести операцию деления для комплексных чисел, заданных в алгебраической форме, используем понятие сопряженных чисел.

Два комплексных числа называются сопряженными, если они отличаются друг от друга только знаками перед мнимой частью.

Например, числа и — сопряженные, и — также сопряженные.

Чтобы выполнить деление комплексных чисел в алгебраической форме, необходимо домножить числитель и знаменатель дроби на число, сопряженное знаменателю.

Пример 2.

Для комплексных чисел и найдите .

Решение. . Домножим числитель и знаменатель дроби на число , сопряженное знаменателю: — комплексное число в алгебраической форме.

Ответ: .

На множестве комплексных чисел возможно решение квадратных уравнений с отрицательным дискриминантом.

Пример 3.

Решите уравнение: .

Решение:

Найдем дискриминант: .

Тогда .

Ответ: .

Геометрически комплексное число можно представлять как

  • точку на комплексной плоскости с координатами ;
  • вектор на комплексной плоскости с началом в начале координат и концом в точке .

Действительную часть комплексного числа будем откладывать на оси , коэффициент при мнимой части — на оси (рис. 1). Ось называется действительной осью, а ось — мнимой осью комплексной плоскости.

Плоскость, точкам которой сопоставлены комплексные числа, называется комплексной плоскостью.

На этой странице вы сможете посмотреть все остальные темы готовых контрольных работ по высшей математике:

Готовые контрольные работы по высшей математике

Обратите внимание на похожие контрольные работы возможно они вам будут полезны:

Комплексные числа worksheet

Advanced search

Content:

Language: AfarAbkhazAvestanAfrikaansAkanAmharicAragoneseArabicAssameseAsturianuAthabascanAvaricAymaraAzerbaijaniBashkirBelarusianBulgarianBihariBislamaBambaraBengali, BanglaTibetan Standard, Tibetan, CentralBretonBosnianCatalanChechenChamorroCorsicanCreeCzechOld Church Slavonic, Church Slavonic,Old BulgarianChuvashWelshDanishGermanDivehi, Dhivehi, MaldivianDzongkhaEweGreek (modern)EnglishEsperantoSpanishEstonianBasquePersian (Farsi)Fula, Fulah, Pulaar, PularFinnishFijianFaroeseFrenchWestern FrisianIrishScottish Gaelic, GaelicGalicianGuaraníGujaratiManxHausaHebrew (modern)HindiHiri MotuCroatianHaitian, Haitian CreoleHungarianArmenianHereroInterlinguaIndonesianInterlingueIgboNuosuInupiaqIdoIcelandicItalianInuktitutJapaneseJavaneseGeorgianKarakalpakKongoKikuyu, GikuyuKwanyama, KuanyamaKazakhKalaallisut, GreenlandicKhmerKannadaKoreanKanuriKashmiriKurdishKomiCornishKyrgyzLatinLuxembourgish, LetzeburgeschGandaLimburgish, Limburgan, LimburgerLingalaLaoLithuanianLuba-KatangaLatvianMalagasyMarshalleseMāoriMacedonianMalayalamMongolianMarathi (Marāṭhī)MalayMalteseBurmeseNauruanNorwegian BokmålNorthern NdebeleNepaliNdongaDutchNorwegian NynorskNorwegianSouthern NdebeleNavajo, NavahoChichewa, Chewa, NyanjaOccitanOjibwe, OjibwaOromoOriyaOssetian, OsseticEastern Punjabi, Eastern PanjabiPāliPolishPashto, PushtoPortugueseQuechuaRomanshKirundiRomanianRussianKinyarwandaSanskrit (Saṁskṛta)SardinianSindhiNorthern SamiSangoSinhalese, SinhalaSlovakSloveneSamoanShonaSomaliAlbanianSerbianSwatiSouthern SothoSundaneseSwedishSwahiliTamilTeluguTajikThaiTigrinyaTurkmenTagalogTswanaTonga (Tonga Islands)TurkishTsongaTatarTwiTahitianUyghurUkrainianUrduUzbekValencianVendaVietnameseVolapükWalloonWolofXhosaYiddishYorubaZhuang, ChuangChineseZulu    Subject:   

Grade/level:    Age: 3456789101112131415161718+

Search: All worksheetsOnly my followed usersOnly my favourite worksheetsOnly my own worksheets

Комплексные числа – Контрольная работа

Контрольная работа №1

Задание 1.

Даны три комплексных числа [pic 1] [pic 2] и [pic 3]

1) выполните действия над ними в алгебраической, тригонометрической и показательной формах;

2) найдите расстояние между точками [pic 4] и [pic 5] на комплексной плоскости.

 [pic 6]                [pic 7]                [pic 8]                [pic 9]

Решение.

1.1.1.В алгебраической форме:

[pic 10][pic 11] 

[pic 12]

[pic 13]

[pic 14]

1.1.2.В тригонометрической форме:

[pic 15]

[pic 16]

[pic 17]

[pic 18]

[pic 19][pic 20] 

[pic 21]

 


1.1.3.В показательной форме:

[pic 22][pic 23];         [pic 24][pic 25];        [pic 26][pic 27];  

[pic 28][pic 29];             [pic 30][pic 31]

[pic 32][pic 33] 

1.2.Расстояние между точками [pic 34] и [pic 35] :

[pic 36]


Задание 2.

Решить уравнение z2 – 4z + 5 = 0 [pic 37]на множестве комплексных чисел.

z2 – 4z + 5 = 0

(z – 2)2 + 1 = 0

(z – 2)2 = -1

z – 2 = i, –i

Таким образом, корнями являются числа
z1 = 2 + i; z2 = 2 – i


Задание 3

Решите систему уравнений:

1) методом Крамера;

2) методом Гаусса.

[pic 38]

Решение

  1. Метод Крамера

Запишем систему в виде:

    BT = (-6,6,-4)

Найдем главный определитель:

∆ = 2 х (-1 х 1-(-1 х (-2)))-3 х (-2 х 1-(-1 х 1))+1 х (-2 х (-2)-(-1 х 1)) = 2 = 2

Заменим 1-ый столбец матрицы А на вектор результата В.

Найдем определитель полученной матрицы.

∆1 = -6 х (-1 х 1-(-1 х (-2)))-6 х (-2 х 1-(-1 х 1))+(-4 х (-2 х (-2)-(-1 х 1))) = 4

Заменим 2-ый столбец матрицы А на вектор результата В.

Найдем определитель полученной матрицы.

∆2 = 2 х (6 х 1-(-4 х (-2)))-3 х (-6 х 1-(-4 х 1))+1 х (-6 х (-2)-6 х 1) = 8

Заменим 3-ый столбец матрицы А на вектор результата В.

Найдем определитель полученной матрицы.

∆3 = 2 х (-1 х (-4)-(-1 х 6))-3 х (-2 х (-4)-(-1 х (-6)))+1 х (-2 х 6-(-1 х (-6))) = -4

Ответ: найденные переменные: ; ; .

2) методом Гаусса.

Запишем систему в виде расширенной матрицы:

Умножим 1-ую строку на (3). Умножим 2-ую строку на (-2). Добавим 2-ую строку к 1-ой:

Умножим 3-ую строку на (-3). Добавим 3-ую строку к 2-ой:

Умножим 2-ую строку на (2). Добавим 2-ую строку к 1-ой:

Теперь исходную систему можно записать как:

x3 = 6/(-3)

x2 = [18 – ( – 5×3)]/2

x1 = [-4 – ( – x2 + x3)]/1

Из 1-ой строки выражаем x3

Из 2-ой строки выражаем x2

Из 3-ой строки выражаем x1

Ответ: найденные переменные: x1=2; x2=4; x3=-2


Задание 4

Даны три вектора [pic 39] [pic 40] и [pic 41] Докажите, что векторы [pic 42] образуют базис, и определите, какая это тройка векторов: правая или левая.

[pic 43]                        [pic 44]                [pic 45]

Решение.

Найдем смежное произведение векторов

[pic 46]

= -19

Следовательно вектора некомпланарные и образуют базис, так как [pic 47][pic 48]≠-19, то тройка левая.

Разноуровневые самостоятельные работы “Комплексные числа”

§32 Комплексные числа и арифметические операции над ними.

Цели:

  • Ввести понятие комплексного числа, мнимой единицы, чисто мнимого числа, определить связь между действительными и комплексными числами, дать определение сопряженным числам.
  • Научить выполнять сложение, вычитание, умножение и деление комплексных чисел, записанных в алгебраической форме.

Тест№1

Цель: проверить знание определения комплексного числа, сопряженных чисел, умения находить действительную и мнимую части комплексного числа.

Прочитайте каждое утверждение, если вы с ним согласны то в колонке ответов поставьте «+», если же вы не согласны с данным утверждением, поставьте « – » в колонке ответов.

Вариант 1

№п/п

Утверждения:

Ответ.

1

Число является комплексным.  

2

Число а, такое что а2 = – 2 является действительным.  

3

Число а, такое что а4 = 1 является действительным.  

4

0 – комплексное число.  

5

Число 3i является чисто мнимым.  

6

Действительная и мнимая части комплексного числа 3 – 2i соответственно равны 3 и 2.  

7

Действительная и мнимая части сопряженных чисел отличаются только знаками.  

8

Сопряженным для действительного числа является само это число.  

9

Если, то действительная часть числа z равна 0.  

Вариант 2

№п/п

Утверждения:

Ответ.

1

Число 5 является комплексным.  

2

Число а, такое что а2 = 4 является действительным.  

3

Число а, такое что а8 = 1 является действительным.  

4

0 – мнимое число.  

5

Если а + bi является действительным, то b = 0  

6

Действительная и мнимая части комплексного числа – 3 + 2i соответственно равны – 3 и 2.  

7

 Мнимые части сопряженных чисел отличаются только знаками.  

8

Если, то мнимая часть числа z равна 0.  

9

.  

Самостоятельная работа №1

Цель: проверить умение применять правила сложения, вычитания, умножения и деления комплексных чисел, определения равенства комплексных чисел, записанных в алгебраической форме .

Вариант №3 рассчитан для более подготовленных детей.

§33 Комплексные числа и координатная плоскость.

 Целт:

  • Дать понятие геометрической модели комплексного числа.
  • Научить отмечать комплексные числа в комплексной плоскости, находить их сумму, разность, произведение действительного и комплексного чисел используя геометрическую интерпретацию.

Самостоятельная работа №2

Цель: проверить умение изображать комплексные числа в комплексной плоскости и производить операции над ними.

§34 Тригонометрическая форма записи комплексного числа.

Цели:

  • Ввести определение модуля и аргумента комплексного числа, рассмотреть их геометрическую интерпретацию.
  • Научить записывать комплексное число в тригонометрической форме, применять операции умножения и деления для чисел записанных в комплексной форме.

Тест №2

Цель: проверить умение применять геометрическую интерпретацию модуля.

Задание: Сопоставьте друг другу условие на комплексное число z и соответствующее ему множество точек координатной плоскости.

Вариант №1

А

1 Круг с центром (1; 0) и радиусом 3

Б

2 Часть плоскости вне круга с  центром (0; 0) и радиусом 3

В

3 Прямая х = 0

Г

4 Круг с центром (0; 0) и радиусом 3

Д

5 Круг с центром (0; 1) и радиусом 3
    6 Окружность с  центром (0; 0) и радиусом 3

Вариант №2

А

1 Часть плоскости вне круга с  центром (0;0) и радиусом 3, включая границу.

Б

2 Прямая у = – х

В

3 Окружность с центром (0; – 2) и радиусом 3

Г

4 Круг с центром (2; – 1) и радиусом 3

Д

5 Круг с центром (0;2) и радиусом 3
    6 Окружность с  центром (0; 0) и радиусом 3

Тест №3

Цель: проверить знание определения аргумента и модуля.

Прочитайте каждое утверждение, если вы с ним согласны, то в колонке ответов поставьте «+», если же вы не согласны с данным утверждением, поставьте « – » в колонке ответов.

Вариант 1

№ п/п

Утверждения:

Ответ.

1

Точки плоскости, удовлетворяющие условию , лежат на окружности радиуса 1.  

2

Два комплексных числа равны, если равны их аргументы.  

3

Точки плоскости, у которых аrg z = , лежат на открытом луче выходящим из (0; 0) и имеющим угол, равный 180оС положительным направлением действительной оси.  

4

Множество всех комплексных чисел, у которых равны модули, есть окружность.  

5

При умножении комплексных чисел модули и аргументы перемножаются.  

6

При делении комплексных чисел модули делятся, а аргументы вычитаются.  

7

У сопряженных комплексных чисел модули равны.  

 Вариант 2

№ п/п

Утверждения:

Ответ.

1

Точки плоскости, удовлетворяющие условию , лежат на окружности радиуса 2.  

2

Два комплексных числа равны, если равны их модули.  

3

Точки плоскости, у которых аrg z = –, лежат на открытом луче выходящим из (0;0) и имеющим угол, равный – 90оС положительным направлением действительной оси.  

4

Множество всех комплексных чисел, у которых равны аргументы, есть открытый числовой луч, выходящий из начала координат и наклонённый под углом к положительному направлению оси абсцисс.  

5

При умножении комплексных чисел модули перемножаются, а аргументы складываются.  

6

При делении комплексных чисел модули и аргументы делятся.  

7

У сопряженных комплексных чисел аргументы противоположны.  

Самостоятельная №3

Цель: проверить умение находить модуль комплексного числа.

Сложность варианта 2 выше, т.к. прежде чем находить модули нужно преобразовать числа в алгебраическую форму.

Самостоятельная работа №4

Цель: проверить умение находить модуль и аргумент комплексного числа, переводить из алгебраической в тригонометрическую форму

§35 Комплексные числа и квадратные уравнения

Цель: научить решать квадратные уравнения с дискриминантом меньшим нуля, извлекать квадратные корни из комплексных чисел в арифметической и тригонометрической форме.

Самостоятельная работа №5

Цель: проверить умение применять определение мнимой единицы при разложении на множители с помощью формул сокращенного умножения, атак же умения решать квадратные уравнения с действительными коэффициентами.

Мнимые числа и сложные функции

Если вы считаете, что контент, доступный с помощью Веб-сайта (как это определено в наших Условиях обслуживания), нарушает одно или более ваших авторских прав, пожалуйста, сообщите нам, предоставив письменное уведомление («Уведомление о нарушении»), содержащее в информацию, описанную ниже, назначенному агенту, указанному ниже. Если университетские наставники примут меры в ответ на ан Уведомление о нарушении, он предпримет добросовестную попытку связаться со стороной, предоставившей такой контент средства самого последнего адреса электронной почты, если таковой имеется, предоставленного такой стороной Varsity Tutors.

Ваше Уведомление о нарушении может быть направлено стороне, предоставившей контент, или третьим лицам, таким как так как ChillingEffects.org.

Обратите внимание, что вы будете нести ответственность за ущерб (включая расходы и гонорары адвокатов), если вы существенно искажать информацию о том, что продукт или деятельность нарушают ваши авторские права. Таким образом, если вы не уверены, что содержимое находится на Веб-сайте или на который ссылается Веб-сайт, нарушает ваши авторские права, вам следует сначала обратиться к адвокату.

Чтобы подать уведомление, выполните следующие действия:

Вы должны включить следующее:

Физическая или электронная подпись владельца авторских прав или лица, уполномоченного действовать от его имени; Идентификация авторских прав, которые, как утверждается, были нарушены; Описание характера и точного местонахождения контента, который, как вы утверждаете, нарушает ваши авторские права, в \ достаточно подробно, чтобы преподаватели университета могли найти и точно идентифицировать этот контент; например, мы требуем а ссылку на конкретный вопрос (а не только название вопроса), который содержит содержание и описание к какой конкретной части вопроса — изображению, ссылке, тексту и т. д. — относится ваша жалоба; Ваше имя, адрес, номер телефона и адрес электронной почты; а также Заявление от вас: (а) что вы добросовестно полагаете, что использование контента, который, как вы утверждаете, нарушает ваши авторские права не разрешены законом или владельцем авторских прав или его агентом; б) что все информация, содержащаяся в вашем Уведомлении о нарушении, является точной, и (c) под страхом наказания за лжесвидетельство вы либо владельцем авторских прав, либо лицом, уполномоченным действовать от их имени.

Отправьте жалобу нашему назначенному агенту по адресу:

Чарльз Кон Varsity Tutors LLC
101 S. Hanley Rd, Suite 300
St. Louis, MO 63105

Или заполните форму ниже:

 

Комплексные числа – практические тестовые вопросы и экзамен по главе

Страница 1

Вопрос 1 1.
Выражение (3i – 2)(i + 1) – 7 можно упростить до какого из следующих выражений?

Ответы:

вопрос 2 2. Выражение (2 + i)(2 – i) можно упростить до какого из следующих?

Ответы:

Вопрос 3 3.Выражение (1 – i)(2 + i) можно упростить до какого из следующих?

Ответы:

Вопрос 4 4. Выражение (3i + 2) – (2i – 5) + 3 можно упростить до какого из следующих выражений?

Ответы:
Вопрос 5 5.Для приведенного ниже графа решение какого из графов имеет комплексные корни?
Ответы:

Страница 2

Вопрос 6 6. Каково комплексное число на изображении ниже для пересечения красной параболы и зеленой параболы на координатной плоскости с осью x для реальной координаты и осью y для мнимой координаты?
Ответы:

Вопрос 7 7.
2 + 144 = 0, x равен какому из следующих?

Ответы:

Вопрос 9 9. Если решения уравнения равны 3i и 2i + 1, какой из следующих дискриминантов будет дискриминантом?

Ответы:

Вопрос 10 10.2 – 10x + 34 = 0, x равно какому из следующих множеств решений?

Ответы:

Страница 3

Вопрос 11 11. Какое число получится, если умножить i на себя?

Ответы:

Вопрос 12 12.Чему равен квадратный корень из -9?

Ответы:

Вопрос 13 13. Чему равен квадратный корень из -144?

Ответы:

Вопрос 14 14.
Мэри пытается найти квадратный корень из отрицательного числа.Ее ответ будет какой из следующих?

Ответы:

Вопрос 15 15. Выражение (5 + i)/(5 – i) можно упростить до какого из следующих?

Ответы:

Страница 4

Вопрос 16 16.Что из следующего является шагом в делении комплексного числа?

Ответы:

Вопрос 17 17. Какое комплексное число выглядело бы так, будто оно расположено в координатах (-2, 4), если бы оно было изображено на графике?

Ответы:

Вопрос 18 18.Какой из следующих графиков представляет комплексное число 3 + 2i на комплексной плоскости?

Ответы:
Вопрос 19 19.
Умножьте и упростите следующее выражение: Ответы:

Вопрос 20 20.Какое из перечисленных чисел является комплексным с отличной от нуля действительной и ненулевой мнимой частями?

Ответы:

Страница 5

Вопрос 21 21. При решении квадратного уравнения при каких обстоятельствах результатом будут два ответа, являющиеся мнимыми числами?

Ответы:
Вопрос 22 22.Каково упрощенное значение приведенного ниже выражения?
Ответы:
Вопрос 23 23. Каков первый шаг в делении этих комплексных чисел?
Ответы:

Вопрос 24 24.
Какие два комплексно-сопряженных числа умножаются на 13?

Ответы:
Вопрос 25 25.Какова наиболее упрощенная форма приведенного ниже выражения?
Ответы:

Страница 6

Вопрос 26 26. Решите уравнение ниже:
Ответы:
Вопрос 27 27.Какое число представлено на графике ниже?
Ответы:
Вопрос 28 28. Вычтите и упростите следующее выражение:
Ответы:

Вопрос 29 29. Какое из следующих выражений записывается как комплексное число?

Ответы:
Вопрос 30 30.
Упростите следующее выражение: Ответы:
Инструкции по экзамену главы «Комплексные числа»

Выберите ответы на вопросы и нажмите «Далее», чтобы увидеть следующий набор вопросов. Вы можете пропустить вопросы, если хотите, и прийти назад к ним позже с помощью кнопки «Перейти к первому пропущенному вопросу». Когда вы закончите пробный экзамен, появится зеленая кнопка отправки. появляться.Нажмите на нее, чтобы увидеть свои результаты. Удачи!

Мнимые и комплексные числа — Подготовка к тесту Каплана

Вы можете быть удивлены, узнав, что не все числа настоящие — некоторые из них мнимые. Нет, мнимые числа не так интересны, как вы можете себе представить. Это просто числа, придуманные математиками для обозначения четных корней отрицательных чисел. Ага, как только вы подумали, что составители тестов упаковали достаточно математического материала для стандартизированного теста, они включили целый набор чисел, которые в действительности ничему не соответствуют.
 


Мнимые числа, представленные буквой i, , представляют собой четные корни отрицательных чисел. Например, квадратный корень из -1 равен 90 150 i. Если вы никогда не изучали Алгебру 2 или проспали часть, посвященную мнимым числам, вы все еще можете думать, что квадратный корень из любого отрицательного числа математически невозможен или не определен (например, 1/0). Что ж, в мире действительных чисел это так. Вот почему кучка скучающих математиков изобрела мнимые числа.
Давайте рассмотрим пару примеров того, как работают мнимые числа. Пока вы помните, что определение i равно √(-1), все должно быть в порядке.
√(-16)=  √ (16) * √ (-1) = 4 i
Видеть? Это так просто. Просто прикрепите это маленькое i к корням отрицательных чисел.

Комплексное число — это то, что мы называем суммой действительного числа и мнимого числа. Думайте об этом как о браке реального и воображаемого, о вкусном коктейле из красных и синих пилюль, предложенных Морфеусом. 2 +10xi -3
Самое важное, что нужно помнить о мнимых числах, — это образец показателей. По большей части работа с мнимыми числами очень похожа на работу с полиномами (хотя не путайте и с другой переменной — она этого не любит). Просто подумайте о комплексных числах как о многочленах с новым набором правил, которым нужно следовать, и все будет в порядке.

Упростите комплексные числа с помощью Python — настоящий Python

Большинство языков программирования общего назначения либо не поддерживают, либо имеют ограниченную поддержку комплексных чисел .Типичными вариантами являются изучение какого-либо специализированного инструмента, такого как MATLAB, или поиск сторонней библиотеки. Python — редкое исключение, потому что в него встроены комплексные числа.

Несмотря на название, комплексные числа не сложны! Они удобны для решения практических задач, с которыми вы познакомитесь в этом руководстве. Вы изучите векторную графику и частотный анализ звука , но комплексные числа также могут помочь в построении фракталов , таких как множество Мандельброта.

Из этого руководства вы узнаете, как:

  • Определение комплексных чисел с помощью литералов в Python
  • Представление комплексных чисел в прямоугольных и полярных координатах
  • Использовать комплексные числа в арифметических выражениях
  • Воспользуйтесь преимуществами встроенного модуля cmath
  • Перевод математических формул непосредственно в код Python

Если вам нужно быстро освежить в памяти или ненавязчиво познакомиться с теорией комплексных чисел, вы можете посмотреть серию видеороликов Академии Хана.Чтобы загрузить образец кода, используемый в этом руководстве, щелкните ссылку ниже:

.

Создание комплексных чисел в Python

Создание и обработка комплексных чисел в Python мало чем отличается от других встроенных типов данных, особенно числовых типов. Это возможно, потому что язык рассматривает их как граждан первого сорта. Это означает, что вы можете выражать математические формулы, включающие комплексные числа, с небольшими накладными расходами.

Python позволяет использовать комплексные числа в арифметических выражениях и вызывать для них функции точно так же, как и для других чисел в Python.Это приводит к элегантному синтаксису, который читается почти как учебник по математике.

Литерал комплексного номера

Самый быстрый способ определить комплексное число в Python — ввести его литерал непосредственно в исходный код:

Хотя это выглядит как алгебраическая формула, выражение справа от знака равенства уже является фиксированным значением, которое не требует дальнейшего вычисления. Когда вы проверите его тип, вы убедитесь, что это действительно комплексное число:

. >>>
  >>> тип(г)
<класс 'сложный'>
  

Чем это отличается от , складывающего два числа с оператором плюс? Явная подсказка — буква j , приклеенная ко второй цифре, что полностью меняет смысл выражения. Если вы удалите букву, вместо этого вы получите знакомый целочисленный результат:

. >>>
  >>> г = 3 + 2

>>> тип(г)
<класс 'целое число'>
  

Кстати, числа с плавающей запятой можно использовать и для создания комплексных чисел:

>>>
  >>> z = 3,14 + 2,71j
>>> тип(г)
<класс 'сложный'>
  

Литералы комплексных чисел в Python имитируют математическую нотацию комплексного числа, известную также как стандартная форма , алгебраическая форма или иногда каноническая форма .В Python вы можете использовать строчные буквы j или прописные буквы J в этих литералах.

Если вы узнали о комплексных числах на уроках математики, вы, возможно, видели, как они выражаются с помощью i вместо j . Если вам интересно, почему Python использует j вместо i , вы можете развернуть сворачиваемый раздел ниже, чтобы узнать больше.

Традиционная запись комплексных чисел использует букву i вместо j , поскольку она обозначает мнимую единицу .Если у вас есть математический опыт, вы можете почувствовать небольшой дискомфорт в связи с соглашением Python. Однако есть несколько причин, которые могут оправдать спорный выбор Python:

.
  • Инженеры уже приняли это соглашение, чтобы избежать коллизии имен с электрическим током, который обозначается буквой i .
  • В вычислительной технике буква i часто используется для индексации переменной в циклах.
  • Букву i можно легко перепутать с l или 1 в исходном коде.

Этот вопрос был поднят в системе отслеживания ошибок Python более десяти лет назад, и сам создатель Python, Гвидо ван Россум, закрыл проблему следующим комментарием:

Это не будет исправлено. Во-первых, буква «i» или заглавная «I» слишком похожи на цифры. То, как числа анализируются языковым парсером (в исходном коде) или встроенными функциями (int, float, complex), не должно быть локализуемым или настраиваемым каким-либо образом; это требует огромных разочарований в будущем.Если вы хотите анализировать комплексные числа, используя «i» вместо «j», у вас уже есть множество доступных решений. (Источник)

Вот и все. Если вы не хотите начать использовать MATLAB, вам придется смириться с использованием j для обозначения ваших комплексных чисел.

Алгебраическая форма комплексного числа следует стандартным правилам алгебры, что удобно при выполнении арифметических действий. Например, у сложения есть коммутативное свойство, которое позволяет поменять местами две части литерала комплексного числа без изменения его значения:

>>>
  >>> 3 + 2j == 2j + 3
Истинный
  

Точно так же вы можете заменить вычитание сложением в литерале комплексного числа, потому что знак минус — это просто сокращенное обозначение эквивалентной формы:

>>>
  >>> 3 - 2j == 3 + (-2j)
Истинный
  

Должен ли литерал комплексного числа в Python всегда содержать два числа? Можно ли больше? Они заказаны? Чтобы ответить на эти вопросы, давайте проведем несколько экспериментов. Неудивительно, что если вы укажете только одно число без буквы j , то вы получите обычное целое число или число с плавающей запятой:

>>>
  >>> z = 3,14
>>> тип(г)
<класс 'плавающий'>
  

С другой стороны, добавление буквы j к числовому литералу немедленно превратит его в комплексное число:

>>>
  >>> z = 3,14j
>>> тип(г)
<класс 'сложный'>
  

Строго говоря, с математической точки зрения вы только что создали чистое мнимое число , но Python не может представить его как отдельный тип данных.Следовательно, без другой части это просто комплексное число.

А как насчет обратного? Чтобы создать комплексное число без мнимой части, вы можете воспользоваться нулем и добавить или вычесть его следующим образом:

>>>
  >>> z = 3,14 + 0j
>>> тип(г)
<класс 'сложный'>
  

На самом деле всегда присутствуют обе части комплексного номера. Если вы не видите единицу, это означает, что она имеет нулевое значение. Давайте проверим, что происходит, когда вы пытаетесь вставить в сумму больше терминов, чем раньше:

>>>
  >>> 2 + 3j + 4 + 5j
(6+8к)
  

На этот раз ваше выражение больше не является литералом, потому что Python преобразовал его в комплексное число, состоящее только из двух частей.Помните, что основные правила алгебры переносятся на комплексные числа, поэтому, если вы сгруппируете похожие термины и примените покомпонентное сложение, вы получите 6 + 8j .

Обратите внимание, как Python по умолчанию отображает комплексные числа. Их текстовое представление содержит заключающую пару круглых скобок, строчную букву j и не содержит пробелов. Кроме того, мнимая часть стоит на втором месте.

Комплексные числа, которые также являются чисто мнимыми числами, появляются без скобок и показывают только свою мнимую часть:

>>>
  >>> 3 + 0j
(3+0j)
>>> 0 + 3j
3j
  

Это помогает отличить мнимые числа от большинства сложных чисел, состоящих из действительных и мнимых частей.

комплекс() Заводская функция

В Python есть встроенная функция complex() , которую можно использовать в качестве альтернативы литералу комплексного числа:

.

В этом виде он напоминает кортеж или упорядоченную пару обычных чисел. Аналогия не такая уж надуманная. Комплексные числа имеют геометрическую интерпретацию в декартовой системе координат , которую вы немного изучите. Вы можете думать о комплексных числах как о двумерных.

Забавный факт: В математике комплексные числа традиционно обозначаются буквами z , так как это следующая буква в алфавите после x и y , которые обычно обозначают координаты.

Функция фабрики комплексных чисел принимает два числовых параметра. Первый представляет реальную часть , а второй представляет мнимую часть , обозначенную буквой j в литерале, который вы видели ранее:

>>>
  >>> комплекс(3, 2) == 3 + 2j
Истинный
  

Оба параметра являются необязательными, их значения по умолчанию равны нулю, что упрощает определение комплексных чисел без мнимой части или одновременно с действительной и мнимой частями:

>>>
  >>> комплекс(3) == 3 + 0j
Истинный
>>> комплекс() == 0 + 0j
Истинный
  

Версия с одним аргументом может быть полезна при приведении типов . Например, вы можете передать нечисловое значение, например строковый литерал, чтобы получить соответствующий сложный объект . Обратите внимание, что строка не может содержать пробелов:

>>>
  >>> сложный("3+2j")
(3+2к)

>>> сложный("3 + 2j")
Traceback (последний последний вызов):
  Файл "", строка 1, в 
ValueError: аргумент complex() является неверно сформированной строкой
  

Позже вы узнаете, как сделать ваши классы совместимыми с этим механизмом приведения типов.Интересно, что когда вы передаете комплексное число в complex() , вы получите тот же экземпляр обратно:

>>>
  >>> z = комплекс (3, 2)
>>> z является комплексным (z)
Истинный
  

Это согласуется с тем, как работают другие типы чисел в Python, потому что все они неизменяемые . Чтобы сделать отдельную копию комплексного числа, вы должны снова вызвать функцию с обоими аргументами или объявить другую переменную с литералом комплексного числа:

>>>
  >>> z = комплекс (3, 2)
>>> z является комплексным (3, 2)
Ложь
  

Когда вы предоставляете функции два аргумента, они всегда должны быть числами, такими как int , float или complex . В противном случае вы получите ошибку времени выполнения. С технической точки зрения, bool является подклассом int , так что он тоже будет работать:

>>>
  >>> complex(False, True) # Булевы значения, такие же, как и комплексные (0, 1)
1j

>>> комплекс(3, 2) # Целые числа
(3+2к)

>>> complex(3.14, 2.71) # Числа с плавающей запятой
(3,14+2,71к)

>>> комплекс("3", "2") # Строки
Traceback (последний последний вызов):
  Файл "", строка 1, в 
TypeError: complex() не может принимать второй аргумент, если первый является строкой
  

Все становится еще более странным, когда вы предоставляете фабричной функции complex() комплексные числа в качестве аргументов.Однако, если вы укажете только первый аргумент, он будет вести себя как прокси, как и раньше:

. >>>
  >>> комплекс(комплекс(3, 2))
(3+2к)
  

Однако, когда присутствуют два аргумента и хотя бы один из них является комплексным числом, вы получите результаты, которые на первый взгляд может быть трудно объяснить:

>>>
  >>> сложный(1, сложный(3, 2))
(-1+3j)

>>> комплекс(комплекс(3, 2), 1)
(3+3к)

>>> комплекс(комплекс(3, 2), комплекс(3, 2))
(1+5к)
  

Чтобы получить ответы, давайте заглянем в строку документации фабричной функции или в онлайн-документацию, которые объясняют, что происходит под капотом, когда вы вызываете complex(real, imag) :

.

Вернуть комплексное число со значением real + imag *1j или преобразовать строку или число в комплексное число.(Источник)

В этом объяснении real и imag являются именами аргументов функции. Второй аргумент умножается на воображаемую единицу j , и результат добавляется к первому аргументу. Не волнуйтесь, если это все еще не имеет никакого смысла. Вы можете вернуться к этой части, когда прочитаете об арифметике комплексных чисел. Правила, о которых вы узнаете, сделают это простым.

Когда вы захотите использовать фабричную функцию complex() вместо литерала? Это зависит от обстоятельств, но вызов функции может быть более удобным, например, когда вы имеете дело с динамически генерируемыми данными.

Знакомство с комплексными числами Python

В математике комплексные числа — это надмножество действительных чисел, а это означает, что каждое действительное число также является комплексным числом, мнимая часть которого равна нулю. Python моделирует эту связь с помощью концепции, называемой числовой башней , описанной в PEP 3141:

. >>>
  >>> импортные номера
>>> issubclass(числа.Вещественные, числа.Комплексные)
Истинный
  

Встроенный модуль номеров определяет иерархию числовых типов через абстрактных классов , которые можно использовать для проверки типов и классификации чисел.Например, чтобы определить, принадлежит ли значение определенному набору чисел, вы можете вызвать для него isinstance() :

>>>
  >>> isinstance(3.14, numbers.Complex)
Истинный
>>> isinstance(3.14, числа.Интеграл)
Ложь
  

Значение с плавающей запятой 3.14 — это действительное число, которое также является комплексным числом, но не целым числом. Обратите внимание, что вы не можете использовать встроенные типы напрямую в таком тесте:

>>>
  >>> isinstance(3.14, комплекс)
Ложь
  

Отличие сложных номеров от . Комплекс состоит в том, что они относятся к отдельным ветвям в дереве иерархии числовых типов, а последний является абстрактным базовым классом без какой-либо реализации:

Иерархия типов для чисел в Python

Абстрактные базовые классы, которые обозначены красным цветом на приведенной выше диаграмме, могут обходить обычный механизм проверки наследования, регистрируя несвязанные классы как их виртуальные подклассы. Вот почему значение с плавающей запятой в этом примере выглядит как экземпляр чисел.Комплекс , но не комплекс .

Доступ к реальным и мнимым частям

Чтобы получить действительную и мнимую части комплексного числа в Python, вы можете обратиться к соответствующим атрибутам .real и .imag :

>>>
  >>> z = 3 + 2j
>>> г.реал
3.0
>>> z.imag
2.0
  

Оба свойства доступны только для чтения , поскольку комплексные числа неизменяемы, поэтому попытка присвоить новое значение любому из них не удастся: >>>

  >>> с. реальный = 3,14
Traceback (последний последний вызов):
  Файл "", строка 1, в 
AttributeError: атрибут только для чтения
  

Поскольку каждое число в Python является более конкретным типом комплексного числа, атрибуты и методы, определенные в числах . Комплекс также доступен во всех числовых типах, включая int и float :

. >>>
  >>> х = 42
>>> х.реал
42
>>> x.imag
0
  

Мнимая часть таких чисел всегда равна нулю.

Вычисление сопряженного комплексного числа

Комплексные числа Python имеют только три общедоступных члена. Помимо свойств .real и .imag , они предоставляют метод .conjugate() , который меняет знак мнимой части:

>>>
  >>> z = 3 + 2j
>>> z.conjugate()
(3-2к)
  

Для чисел, у которых мнимая часть равна нулю, это не будет иметь никакого эффекта:

>>>
  >>> х = 3.14
>>> x. conjugate()
3.14
  

Эта операция обратна самой себе, поэтому, выполнив ее дважды, вы получите исходное число, с которого начали:

. >>>
  >>> z.conjugate().conjugate() == z
Истинный
  

Хотя комплексное сопряжение может показаться малоценным, оно обладает несколькими полезными арифметическими свойствами, которые, среди прочего, могут помочь вычислить деление двух комплексных чисел с помощью ручки и бумаги.

Арифметика комплексных чисел

Поскольку комплекс является родным типом данных в Python, вы можете вставлять комплексные числа в арифметические выражения и вызывать для них многие встроенные функции.Более сложные функции для комплексных чисел определены в модуле cmath , который является частью стандартной библиотеки. Вы познакомитесь с ним в более поздней части этого руководства.

На данный момент запоминание одного правила позволит вам применить свои знания арифметики начальной школы для вычисления основных операций с комплексными числами. Правило, которое следует запомнить, — это определение воображаемой единицы , которая удовлетворяет следующему уравнению:

Это выглядит неправильно, когда вы думаете о j как о реальном числе, но не паникуйте.Если вы проигнорируете это на мгновение и замените каждое вхождение j 2 на -1 , как если бы это была константа, тогда вы будете установлены. Давайте посмотрим, как это работает.

Дополнение

Сумма двух или более комплексных чисел эквивалентна сложению их действительных и мнимых частей покомпонентно:

>>>
  >>> z1 = 2 + 3j
>>> z2 = 4 + 5j
>>> z1 + z2
(6+8к)
  

Ранее вы узнали, что алгебраические выражения, состоящие из действительных и мнимых чисел, подчиняются стандартным правилам алгебры.Когда вы запишете это алгебраически, вы сможете применить распределительное свойство и упростить формулу, выделив и сгруппировав общие термины:

Python автоматически продвигает операнды к сложному типу данных , когда вы добавляете значения смешанных числовых типов:

>>>
  >>> z = 2 + 3j
>>> z + 7 # Добавляем сложное к целому
(9+3к)
  

Это похоже на неявное преобразование int в float , с которым вы, возможно, уже знакомы.

Вычитание

Вычитание комплексных чисел аналогично их сложению, а значит, вы также можете применять его поэлементно:

>>>
  >>> z1 = 2 + 3j
>>> z2 = 4 + 5j
>>> z1 - z2
(-2-2j)
  

Однако, в отличие от суммы, порядок операндов имеет значение и приводит к другим результатам, как и в случае с действительными числами:

>>>
  >>> z1 + z2 == z2 + z1
Истинный
>>> z1 - z2 == z2 - z1
Ложь
  

Вы также можете использовать унарный минус (-) , чтобы сделать отрицательное комплексное число:

>>>
  >>> z = 3 + 2j
>>> -з
(-3-2j)
  

Инвертирует как действительную, так и мнимую части комплексного числа.

Умножение

Произведение двух или более комплексных чисел становится интереснее:

>>>
  >>> z1 = 2 + 3j
>>> z2 = 4 + 5j
>>> z1 * z2
(-7+22j)
  

Как, черт возьми, вы получили отрицательное число из одних только положительных? Чтобы ответить на этот вопрос, придется вспомнить определение мнимой единицы и переписать выражение через действительную и мнимую части:

Ключевое наблюдение, которое следует сделать, заключается в том, что j умножить на j дает j 2 , которое можно заменить на -1 . Это инвертирует знак одного из слагаемых, в то время как остальные правила остаются точно такими же, как и раньше.

Подразделение

Деление комплексных чисел может показаться пугающим при первом знакомстве:

>>>
  >>> z1 = 2 + 3j
>>> z2 = 4 + 5j
>>> z1 / z2
(0,5609756097560976+0,0487804878048781j)
  

Хотите верьте, хотите нет, но вы можете получить тот же результат, используя только ручку и бумагу! (Хорошо, калькулятор может избавить вас от головной боли в будущем.) Когда оба числа выражены в их стандартных формах, хитрость состоит в том, чтобы умножить числитель и знаменатель на сопряженное число последнего:

Знаменатель становится квадратом модуля делителя. Позже вы узнаете больше о модуле комплексных чисел. Когда вы продолжите выводить формулу, вот что вы получите:

Обратите внимание, что комплексные числа не поддерживают деление на этаж, также известное как целочисленное деление:

>>>
  >>> z1 // z2
Traceback (последний последний вызов):
  Файл "", строка 1, в 
TypeError: не может взять пол комплексного числа. >>> z1 // 3.14
Traceback (последний последний вызов):
  Файл "", строка 1, в 
TypeError: не может взять пол комплексного числа.
  

Раньше это работало в Python 2.x, но позже было удалено, чтобы избежать двусмысленности.

Возведение в степень

Вы можете возводить комплексные числа в степень, используя двоичный оператор возведения в степень ( ** ) или встроенный pow() , но не тот, который определен в модуле math , который поддерживает только числа с плавающей запятой. значения:

>>>
  >>> z = 3 + 2j

>>> г**2
(5+12к)

>>> pow(z, 2)
(5+12к)

>>> импортировать математику
>>> математика.мощность (z, 2)
Traceback (последний последний вызов):
  Файл "", строка 1, в 
TypeError: невозможно преобразовать комплекс в число с плавающей запятой
  

И основание , и показатель степени могут относиться к любым числовым типам, включая целые числа, числа с плавающей запятой, мнимые или комплексные:

>>>
  >>> 2**з
(1,4676557979464138+7,864221

995j) >>> г**2 (5+12к) >>> г**0,5 (1,8173540210239707+0,5502505227003375j) >>> г**3j (-0. 130414867086-0,11115341486478239j) >>> з**з (-5,4097387939-13,410442370412747j)

Ручное возведение комплексных чисел в степень становится очень трудным, когда они представлены в стандартной форме. Гораздо удобнее переписать число в тригонометрической форме и вычислить степень, используя какую-нибудь элементарную тригонометрию. Если вам интересна математика, ознакомьтесь с формулой Де Муавра, которая позволяет вам это сделать.

Использование комплексных чисел Python в качестве двумерных векторов

Комплексные числа можно визуализировать как точек или векторов на евклидовой плоскости в декартовой или прямоугольной системе координат:

Ось X на комплексной плоскости, также известной как плоскость Гаусса или диаграмма Аргана , представляет действительную часть комплексного числа, а ось Y представляет его мнимую часть.

Этот факт приводит к одной из самых крутых особенностей сложного типа данных в Python, который воплощает в себе рудиментарную реализацию двумерного вектора бесплатно. Хотя не все операции работают одинаково в обоих из них, векторы и комплексные числа имеют много общего.

Получение координат

Бермудский треугольник — легендарный регион, известный своими паранормальными явлениями, который охватывает южную оконечность Флориды, Пуэрто-Рико и крошечный остров Бермудские острова.Его вершины примерно обозначены тремя крупными городами, географические координаты которых следующие:

.
  1. Майами: 25° 45’ 42,054” северной широты, 80° 11’ 30,438” з.д.
  2. Сан-Хуан: 18° 27’ 58,8” северной широты, 66° 6’ 20,598” з.д.
  3. Гамильтон: 32° 17’ 41,64” северной широты, 64° 46’ 58,908” западной долготы

После преобразования этих координат в десятичные градусы вы получите два числа с плавающей запятой для каждого города. Вы можете использовать сложный тип данных для хранения упорядоченных пар чисел.Поскольку широта — это вертикальная координата, а долгота — горизонтальная, может быть удобнее поменять их местами, чтобы следовать традиционному порядку декартовых координат:

  miami_fl = сложный (-80.1, 25.761681)
san_juan = сложный (-66.105721, 18.466333)
Гамильтон = сложный (-64,78303, 32,2949)
  

Отрицательные значения долготы представляют западное полушарие, а положительные значения широты представляют северное полушарие.

Имейте в виду, что это сферические координаты . Чтобы правильно спроецировать их на плоскую плоскость, вам нужно учитывать кривизну Земли. Одной из первых картографических проекций, используемых в картографии, была проекция Меркатора, которая помогала морякам ориентироваться на своих кораблях. Но давайте проигнорируем все это и предположим, что значения уже выражены в прямоугольной системе координат.

Когда вы нанесете числа на комплексную плоскость, вы получите грубое изображение Бермудского треугольника:

В сопутствующих материалах вы найдете интерактивную записную книжку Jupyter, в которой строится Бермудский треугольник с использованием библиотеки Matplotlib.Чтобы загрузить исходный код и материалы для этого руководства, щелкните ссылку ниже:

Если вам не нравится вызывать фабричную функцию complex() , вы можете создать псевдоним типа с более подходящим именем или использовать литеральную форму комплексного числа, чтобы сэкономить несколько нажатий клавиш:

  CityCoordinates = комплекс
miami_fl = Координаты города (-80.1, 25.761681)
miami_fl = -80,1 + 25,761681j
  

Если вам нужно упаковать больше атрибутов города, вы можете использовать именованный кортеж или класс данных или создать собственный класс.

Расчет величины

Величина , также известная как модуль или радиус комплексного числа, представляет собой длину вектора, изображающего его на комплексной плоскости:

Вы можете вычислить его по теореме Пифагора, взяв квадратный корень из суммы квадрата действительной части и квадрата мнимой части:

Вы могли бы подумать, что Python позволит вам вычислить длину такого вектора с помощью встроенной len() , но это не так. Чтобы получить величину комплексного числа, вы должны вызвать другую глобальную функцию с именем abs() , которая обычно используется для вычисления абсолютного значения числа:

>>>
  >>> длина(3 + 2j)
Traceback (последний последний вызов):
  Файл "", строка 1, в 
TypeError: объект типа «сложный» не имеет len()

>>> абс (3 + 2j)
3,605551275463989
  

Эта функция удаляет знак у целых чисел, которые вы передаете, но для комплексных чисел возвращает величину или длину вектора:

>>>
  >>> абс (-42)
42

>>> z = 3 + 2j

>>> абс(г)
3.605551275463989

>>> из математического импорта sqrt
>>> sqrt(z.real**2 + z.imag**2)
3,605551275463989
  

Возможно, вы помните из предыдущего раздела, что комплексное число, умноженное на сопряженное, дает квадрат его величины.

Нахождение расстояния между двумя точками

Найдем геометрический центр Бермудского треугольника и расстояния до него от трех городов, образующих его границы. Во-первых, вам нужно просуммировать все координаты и разделить результат на их количество, чтобы получить среднее значение:

  геометрический_центр = сумма ([майами_фл, сан_хуан, Гамильтон]) / 3
  

Это даст вам точку, расположенную в Атлантическом океане, где-то внутри треугольника:

Теперь вы можете создавать векторы, привязанные к городам и направленные к геометрическому центру треугольника.Векторы создаются путем вычитания исходной точки из целевой:

  v1 = геометрический_центр - miami_fl
v2 = геометрический_центр - сан_цзюань
v3 = геометрический_центр - Гамильтон
  

Поскольку вы вычитаете комплексные числа, каждый вектор также является комплексным числом, состоящим из двух частей. Чтобы получить расстояния, рассчитайте величину каждого вектора:

>>>
  >>> абс (v1)
9,83488994681275

>>> абс (v2)
8.226809506084367

>>> абс (v3)
8.784732429678444
  

Эти длины векторов не отражают значимых расстояний, но являются хорошим приближением для такого игрушечного примера. Чтобы представить точные результаты в материальных единицах, вам придется сначала преобразовать координаты из сферических в прямоугольные или вместо этого рассчитать расстояние, используя метод большого круга.

Перемещение, отражение, масштабирование и вращение

Возможно, вас беспокоит, что треугольник находится во втором квадранте декартовой системы координат.Давайте переместим его так, чтобы его геометрический центр совпал с началом координат. Все три вершины будут 90 206, переведенные на 90 207 на длину вектора, указанного геометрическим центром, но в противоположном направлении: 90 003.

  треугольник = miami_fl, san_juan, hamilton
смещение = -geometric_center
centered_triangle = [вершина + смещение вершины в треугольнике]
  

Обратите внимание, что вы складываете два комплексных числа вместе, что выполняет их поэлементное сложение. Это аффинное преобразование, поскольку оно не меняет форму треугольника или относительное расположение его вершин:

.

Зеркальное отражение треугольника вокруг действительной или мнимой оси требует инвертирования соответствующей компоненты в его вершинах.Например, чтобы отразить по горизонтали, вам придется использовать отрицательную часть действительной части, которая соответствует горизонтальному направлению. Чтобы перевернуть его по вертикали, вы возьмете минус мнимой части:

.
  flipped_horizontally = [complex(-v.real, v.imag) для v в centered_triangle]
flipped_vertically = [complex(v.real, -v.imag) для v в centered_triangle]
  

Последнее, по сути, то же самое, что и вычисление сопряжения комплексных чисел, поэтому вы можете позвонить по номеру .conjugate() для каждой вершины напрямую, чтобы сделать всю тяжелую работу за вас:

  flipped_vertically = [v.conjugate() для v в centered_triangle]
  

Естественно, ничто не мешает вам применить симметрию в любом направлении или в обоих направлениях одновременно. В таком случае вы можете использовать унарный оператор минус перед комплексным числом, чтобы поменять местами его действительную и мнимую части:

  flipped_in_both_directions = [-v для v в centered_triangle]
  

Поэкспериментируйте с различными комбинациями флипов, используя интерактивный блокнот Jupyter, доступный в загружаемых материалах.Вот как будет выглядеть треугольник, если его перевернуть по обеим осям:

Масштабирование аналогично перемещению, но вместо добавления смещения вы будете умножать каждую вершину на постоянный коэффициент, который должен быть реальным числом:

  scaled_triangle = [1,5*вершина для вершины в centered_triangle]
  

В результате оба компонента каждого комплексного числа умножаются на одинаковую величину. Это должно растянуть ваш Бермудский треугольник, чтобы он выглядел больше на графике:

Умножение вершин треугольника на другое комплексное число, с другой стороны, приводит к вращению вокруг начала системы координат. Это сильно отличается от того, как вы обычно умножаете векторы друг на друга. Например, скалярное произведение двух векторов даст скаляр, а их векторное произведение возвращает новый вектор в трехмерном пространстве, который перпендикулярен поверхности, которую они определяют.

Примечание: Произведение двух комплексных чисел не представляет векторное умножение. Вместо этого он определяется как матричное умножение в двумерном векторном пространстве с 1 и j в качестве стандартной основы.Умножение ( x 1 + y 1 J ) by ( x 2 + y 2 j ) соответствует следующему матрицу умножение:

Это матрица поворота слева, что делает математику очень хорошей.

Когда вы умножаете вершины на воображаемую единицу, треугольник повернется на 90° против часовой стрелки. Если вы продолжите повторять это, то в конце концов вернетесь к тому, с чего начали:

.

Как найти конкретное комплексное число, которое будет поворачивать другое комплексное число на любой желаемый угол при умножении обоих? Во-первых, взгляните на следующую таблицу, в которой суммированы последовательные повороты на 90°:

Поворот на 90° Общий угол Формула Экспонента Значение
0 з к 0 1
1 90° z × j к 1 и
2 180° z × × к 2 -1
3 270° z × × × к 3 - и
4 360° z × × × × к 4 1
5 450° z × j × j × j × j × j к 5 и
6 540° z × j × j × j × j × j × j 6 -1
7 630° z × × × × × × × 7 - и
8 720° z × × × × × × × × × 8 1

Когда вы выражаете многократное умножение на j через положительные целые показатели степени, возникает закономерность. Обратите внимание, как возведение воображаемой единицы в последующие степени заставляет ее многократно повторять одни и те же значения. Вы можете экстраполировать это на дробные показатели и ожидать, что они будут соответствовать промежуточным углам.

Например, показатель степени в середине первого поворота равен 0,5 и представляет собой угол 45°:

Итак, если вы знаете, что степень единицы представляет собой прямой угол, а все, что между ними, масштабируется пропорционально, то вы можете вывести эту общую формулу для произвольных поворотов:

  def rotate(z: комплекс, градусы: число с плавающей запятой) -> комплекс:
    вернуть z * 1j**(градусы/90)
  

Обратите внимание, что вращение становится более естественным, когда вы выражаете свои комплексные числа в полярных координатах, которые уже описывают угол.Затем вы можете воспользоваться экспоненциальной формой , чтобы сделать вычисления более простыми:

Существует два способа вращения числа с использованием полярных координат:

  импорт математики, cmath

def rotate1(z: комплекс, градусы: число с плавающей запятой) -> комплекс:
    радиус, угол = cmath. polar(z)
    вернуть cmath.rect (радиус, угол + math.radians (градусы))

def rotate2(z: комплекс, градусы: число с плавающей запятой) -> комплекс:
    вернуть z * cmath.rect(1, math.radians(степени))
  

Вы можете суммировать углы или умножать комплексное число на единичный вектор.

Подробнее о них вы узнаете в следующем разделе.

Изучение математического модуля для комплексных чисел:

cmath

Вы уже видели, что некоторые встроенные функции, такие как abs() и pow() , принимают комплексные числа, а другие нет. Например, вы не можете round() комплексное число, потому что такая операция не имеет смысла:

>>>
  >>> круглый(3 + 2j)
Traceback (последний последний вызов):
  Файл "", строка 1, в 
TypeError: сложный тип не определяет метод __round__
  

В стандартной библиотеке доступны многие расширенные математические функции, такие как тригонометрические , гиперболические или логарифмические функции . К сожалению, даже если вы знаете все о модуле Python math , это не поможет, потому что ни одна из его функций не поддерживает комплексные числа. Вам нужно будет объединить его с модулем cmath , который определяет соответствующие функции для комплексных чисел.

Модуль cmath переопределяет все константы с плавающей запятой из math , чтобы они были у вас под рукой без необходимости импортировать оба модуля:

>>>
  >>> импортировать математику, cmath
>>> для имени в "e", "pi", "tau", "nan", "inf":
... print(name, getattr(math, name) == getattr(cmath, name))
...
д Правда
Пи Истинно
тау Правда
нан Ложь
инф True
  

Обратите внимание, что nan — это специальное значение, которое никогда не равно ничему другому, включая себя самого! Вот почему вы видите единственный False в выводе выше. В дополнение к этому, cmath предоставляет два комплексных аналога для NaN (не числа) и бесконечности, причем оба имеют нулевые действительные части:

>>>
  >>> из cmath импортировать nanj, infj
>>> нанж. настоящий, нандж.имаг
(0,0, нан)
>>> infj.real, infj.imag
(0.0, инф)
  

В модуле cmath примерно вдвое меньше функций, чем в стандартном модуле math . Большинство из них имитируют исходное поведение, но некоторые из них уникальны для комплексных чисел. Они позволят вам выполнить преобразование между двумя системами координат, которые вы изучите в этом разделе.

Преобразование между прямоугольными и полярными координатами

Геометрически комплексное число можно рассматривать двояко.С одной стороны, это точка, чьи горизонтальные и вертикальные расстояния от начала координат однозначно определяют ее местоположение. Они известны как прямоугольных координат , включающих действительную и мнимую части.

С другой стороны, эту же точку можно описать в полярных координатах , что также позволит найти ее однозначно с двумя расстояниями:

  1. Радиальное расстояние — это длина радиуса, измеренная от начала координат.
  2. Угловое расстояние — это угол, измеренный между горизонтальной осью и радиусом.

Радиус , также известный как модуль , соответствует модулю комплексного числа или длине вектора. Угол обычно называют фазой или аргументом комплексного числа. При работе с тригонометрическими функциями полезно выражать угол в радианах, а не в градусах.

Вот изображение комплексного числа в обеих системах координат:

Следовательно, точка (3, 2) в декартовой системе координат имеет радиус примерно 3.6 и угол около 33,7°, или примерно π более 5,4 радиана.

Преобразование между двумя системами координат стало возможным благодаря паре функций, скрытых в модуле cmath . В частности, чтобы получить полярные координаты комплексного числа, вы должны передать его в cmath.polar() :

. >>>
  >>> импорт cmath
>>> cmath.polar(3 + 2j)
(3,605551275463989, 0,5880026035475675)
  

Он вернет кортеж, где первый элемент — это радиус, а второй — угол в радианах. Обратите внимание, что радиус имеет то же значение, что и величина, которую вы можете рассчитать, вызвав abs() для вашего комплексного числа. И наоборот, если вас интересует только угол комплексного числа, вы можете вызвать cmath.phase() :

>>>
  >>> z = 3 + 2j

>>> abs(z) # Величина также является радиальным расстоянием
3,605551275463989

>>> импортировать cmath
>>> cmath.phase(3 + 2j)
0,5880026035475675

>>> смат.полярный (z) == (abs (z), cmath.phase (z))
Истинный
  

Угол можно получить с помощью базовой тригонометрии, поскольку действительная часть, мнимая часть и величина вместе образуют прямоугольный треугольник:

Вы можете использовать обратные тригонометрические функции, такие как арксинус , либо из math , либо из cmath , но последний будет давать комплексные значения с мнимой частью, равной нулю:

>>>
  >>> z = 3 + 2j

>>> импортировать математику
>>> математика. acos(z.real/abs(z))
0,5880026035475675
>>> math.asin(z.imag / abs(z))
0,5880026035475676
>>> math.atan(z.imag / z.real) # Предпочитает math.atan2(z.imag, z.real)
0,5880026035475675

>>> импортировать cmath
>>> cmath.acos(z.real / abs(z))
(0,5880026035475675-0j)
  

Однако при использовании функции arctangent следует соблюдать осторожность, что побудило многие языки программирования разработать альтернативную реализацию под названием atan2() .Вычисление отношения между мнимой и действительной частями иногда может привести к сингулярности из-за, например, деления на ноль. Более того, при этом теряются отдельные знаки двух значений, что делает невозможным определение угла с уверенностью:

>>>
  >>> импортировать математику

>>> мат.атан(1 / 0)
Traceback (последний последний вызов):
  Файл "", строка 1, в 
ZeroDivisionError: деление на ноль

>>> math.atan2(1, 0)
1.5707963267948966

>>> math.atan(1 / 1) == math. atan(-1 / -1)
Истинный

>>> math.atan2(1, 1) == math.atan2(-1, -1)
Ложь
  

Обратите внимание, как atan() не может распознать две разные точки, расположенные в противоположных квадрантах системы координат. С другой стороны, atan2() ожидает два аргумента вместо одного, чтобы сохранить отдельные знаки перед делением одного на другой, а также избежать других проблем.

Чтобы получить градусы вместо радианов, вы можете снова сделать необходимое преобразование, используя модуль math :

>>>
  >>> импортировать математику
>>> математика.градусы(0.5880026035475675) # радианы в градусы
33.6

525979785 >>> math.radians(180) # Градусы в радианы 3.141592653589793

Обратный процесс, то есть преобразование полярных координат в прямоугольные, зависит от другой функции. Однако вы не можете просто передать тот же кортеж, который вы получили от cmath.polar() , поскольку cmath.rect() ожидает два отдельных аргумента:

>>>
  >>> cmath. rect(cmath.polar(3 + 2j))
Traceback (последний последний вызов):
  Файл "", строка 1, в 
TypeError: rect ожидал 2 аргумента, получил 1
  

Перед выполнением задания рекомендуется сначала распаковать кортеж и дать этим элементам более описательные имена.Теперь вы можете правильно вызывать cmath.rect() :

>>>
  >>> радиус, угол = cmath.polar(3 + 2j)
>>> cmath.rect(радиус, угол)
(3+1,9999999999999996j)
  

Во время вычислений Python может столкнуться с ошибками округления. За кулисами он вызывает тригонометрические функции для получения реальной и мнимой частей:

>>>
  >>> импортировать математику
>>> радиус*(math.cos(угол) + math.грех(угол)*1j)
(3+1,9999999999999996j)

>>> импортировать cmath
>>> радиус*(cmath.cos(угол) + cmath.sin(угол)*1j)
(3+1,9999999999999996j)
  

Опять же, в данном случае не имеет значения, используете ли вы math или cmath , так как результаты будут идентичными.

Различные представления комплексных чисел

Независимо от системы координат, одно и то же комплексное число можно выразить в нескольких математически эквивалентных формах:

  • Алгебраический (стандартный)
  • Геометрический
  • Тригонометрический
  • Экспоненциальный

Этот список не является исчерпывающим, так как существует больше представлений, таких как матричное представление комплексных чисел.

Наличие выбора позволяет выбрать наиболее удобный для решения поставленной задачи. Например, вам понадобится экспоненциальная форма для вычисления дискретного преобразования Фурье в следующем разделе. Использование этой формы также подходит для умножения и деления комплексных чисел.

Вот краткое изложение отдельных форм комплексных чисел и их координат:

Форма Прямоугольный Полярный
Алгебраический z = x + y y
Геометрический z = ( х , y ) z = ( r , φ)
Тригонометрический з = | z |(cos( ​​ x /| z |) + j sin( y /| z |)) z = r (cos(φ) + j sin(φ))
Экспоненциальный з = | z |e atan2(y/x)j z = r (e j φ )

Алгебраическая форма является родной для Python, когда вы указываете комплексные числа, используя их литералы. Вы также можете рассматривать их как точки на евклидовой плоскости в декартовой или полярной системе координат. Хотя в Python нет отдельных представлений для тригонометрической или экспоненциальной формы, вы можете проверить, соблюдаются ли математические принципы.

Например, подстановка формулы Эйлера в тригонометрическую форму превратит ее в экспоненциальную. Вы можете либо вызвать exp() модуля cmath , либо возвести константу e в степень, чтобы получить тот же результат:

>>>
  >>> импорт cmath

>>> алгебраический = 3 + 2j
>>> геометрический = сложный (3, 2)
>>> радиус, угол = cmath.полярный (алгебраический)
>>> тригонометрический = радиус * (cmath.cos(угол) + 1j*cmath.sin(угол))
>>> экспонента = радиус * cmath.exp(1j*угол)

>>> для числа в алгебраическом, геометрическом, тригонометрическом, экспоненциальном:
... печать (формат (число, "g"))
...
3+2j
3+2j
3+2j
3+2j
  

Все формы действительно представляют собой разные способы кодирования одного и того же числа. Однако вы не можете сравнивать их напрямую из-за ошибок округления, которые могут возникать при этом. Используйте cmath.isclose() для безопасного сравнения или format() числа в виде строк соответственно.В следующем разделе вы узнаете, как форматировать такие строки.

Объяснение того, почему различные формы комплексного числа эквивалентны, требует исчисления и выходит далеко за рамки этого руководства. Однако, если вы интересуетесь математикой, то вы обнаружите, что связи между различными областями математики, проявляемые комплексными числами, весьма увлекательны.

Анализ комплексного числа в Python

Вы уже многое узнали о комплексных числах Python и видели предварительные примеры.Однако, прежде чем двигаться дальше, стоит затронуть некоторые заключительные темы. В этом разделе вы узнаете, как сравнивать комплексные числа, форматировать содержащие их строки и многое другое.

Проверка равенства комплексных чисел

Математически два комплексных числа равны, если они имеют одинаковые значения независимо от принятой системы координат. Однако преобразование между полярными и прямоугольными координатами обычно приводит к ошибкам округления в Python, поэтому вам нужно следить за незначительными различиями при их сравнении.

Например, если вы рассматриваете точку на единичной окружности с радиусом, равным единице, и наклоненной под углом 60°, тогда тригонометрия работает хорошо, что упрощает преобразование с ручкой и бумагой:

>>>
  >>> импортировать математику, cmath

>>> z1 = cmath.rect(1, math.radians(60))
>>> z2 = комплекс (0,5, math.sqrt (3)/2)

>>> z1 == z2
Ложь

>>> z1.реал, z2.реал
(0,5000000000000001, 0,5)
>>> z1.imag, z2.imag
(0.8660254037844386, 0,8660254037844386)
  

Даже если вы знаете, что z1 и z2 — это одна и та же точка, Python не может определить это из-за ошибок округления. К счастью, в документе PEP 485 определены функции для приблизительного равенства, которые доступны в модулях math и cmath :

>>>
  >>> math. isclose(z1.real, z2.real)
Истинный

>>> cmath.isclose(z1, z2)
Истинный
  

Всегда используйте их при сравнении комплексных чисел! Если допуск по умолчанию недостаточно хорош для ваших расчетов, вы можете изменить его, указав дополнительные аргументы.

Заказ комплексных номеров

Если вы знакомы с кортежами, то знаете, что Python может их сортировать:

>>>
  >>> планеты = [
... (6, "сатурн"),
... (4, "марс"),
... (1, "ртуть"),
... (5, "юпитер"),
... (8, "нептун"),
... (3, «земля»),
... (7, "уран"),
... (2, "венера"),
... ]
>>> из pprint импортировать pprint
>>> pprint(отсортировано(планеты))
[(1, 'ртуть'),
 (2, «венера»),
 (3, «земля»),
 (4, «марс»),
 (5, «юпитер»),
 (6, «сатурн»),
 (7, «уран»),
 (8, «Нептун»)]
  

По умолчанию отдельные кортежи сравниваются слева направо:

>>>
  >>> (6, "сатурн") < (4, "марс")
Ложь
>>> (3, "земля") < (3, "луна")
Истинный
  

В первом случае число 6 больше, чем 4 , поэтому имена планет вообще не учитываются. Однако они могут помочь разрешить ничью. Однако это не относится к комплексным числам, поскольку они не определяют естественное отношение упорядочения. Например, вы получите ошибку, если попытаетесь сравнить два комплексных числа:

. >>>
  >>> (3 + 2j) < (2 + 3j)
Traceback (последний последний вызов):
  Файл "", строка 1, в 
TypeError: «<» не поддерживается между экземплярами «complex» и «complex»
  

Должно ли мнимое измерение иметь больший вес, чем реальное? Следует ли сравнивать их величины? Это зависит от вас, и ответы будут разными.Поскольку вы не можете напрямую сравнивать комплексные числа, вам нужно сообщить Python, как их сортировать, указав пользовательскую ключевую функцию , например abs() :

. >>>
  >>> города = {
... комплекс(-64.78303, 32.2949): "Гамильтон",
... комплекс(-66.105721, 18.466333): "Сан-Хуан",
... комплекс(-80.1, 25.761681): "Майами"
... }

>>> для города в сортировке (города, ключ = абс, реверс = истина):
. .. print(abs(город), города[город])
...
84.22818453809096 Майами
72.386473473

Гамильтон 68.63651945864338 Сан-Хуан

Это отсортирует комплексные числа по их величине в порядке убывания.

Форматирование комплексных чисел в виде строк

Для комплексных чисел нет специальных кодов формата, но вы можете форматировать их действительную и мнимую части отдельно, используя стандартные коды для чисел с плавающей запятой. Ниже вы найдете несколько техник, демонстрирующих это. Некоторые из них фактически применят ваш спецификатор формата как к реальной, так и к мнимой частям за один раз.

Примечание: Форматирование строк позволяет игнорировать ошибку представления с плавающей запятой и делать вид, что ее не существует:

>>>
  >>> импорт cmath
>>> z = abs(3 + 2j) * cmath.exp(1j*cmath.phase(3 + 2j))

>>> ул(г)
'(3+1.9999999999999996j)'

>>> формат(г, "г")
'3+2j'
  

Буква "g" в спецификаторе формата означает общий формат , который округляет ваше число до требуемой точности. Точность по умолчанию — шесть значащих цифр.

Возьмем в качестве примера следующее комплексное число и отформатируем его с двумя десятичными знаками в обеих частях:

>>>
  >>> z = pow(3 + 2j, 0,5)
>>> напечатать (г)
(1,8173540210239707+0,5502505227003375j)
  

Быстрый способ сделать это — либо вызвать format() с числовым спецификатором формата, либо создать соответствующим образом отформатированную f-строку:

>>>
  >>> формат(z, ".2ф")
'1,82+0,55j'

>>> f"{z:.2f}"
'1,82+0,55j'
  

Если вы хотите больше контроля, например, чтобы добавить дополнительный отступ вокруг оператора «плюс», тогда лучшим выбором будет f-строка:

>>>
  >>> f"{z.real:.2f} + {z.imag:.2f}j"
«1,82 + 0,55j»
  

Вы также можете вызвать .format() для строкового объекта и передать ему позиционные или аргументы ключевого слова :

>>>
  >>> "{0:. 2f} + {0:.2f}j".format(z.real, z.imag)
'1,82 + 1,82j'

>>> "{re:.2f} + {im:.2f}j".format(re=z.real, im=z.imag)
«1,82 + 0,55j»
  

Позиционные аргументы предоставляют последовательность значений, а аргументы ключевого слова позволяют ссылаться на них по имени. Точно так же вы можете использовать строковый оператор по модулю ( % ) либо с кортежем, либо со словарем:

>>>
  >>> "%.2f + %.2fj" % (z.real, z.imag)
«1,82 + 0,55j»

>>> "%(re).2f + %(im).2fj" % {"re": z.real, "im": z.imag}
«1,82 + 0,55j»
  

Однако здесь используется другой синтаксис заполнителей, и он несколько устарел.

Создание собственного сложного типа данных

Модель данных Python определяет набор специальных методов, которые можно реализовать, чтобы сделать ваши классы совместимыми с определенными встроенными типами. Допустим, вы работали с точками и векторами и хотели получить угол между двумя связанными векторами . Вы можете вычислить их скалярное произведение и провести некоторую тригонометрию. Кроме того, вы можете воспользоваться комплексными числами.

Давайте сначала определим ваши классы:

  от ввода импорта NamedTuple

класс Point (NamedTuple):
    х: плавающий
    у: плавать

вектор класса (NamedTuple):
    Начальная точка
    конец: Точка
  

Точка имеет координаты x и y , а вектор соединяет две точки. Возможно, вы помните cmath.phase() , которая вычисляет угловое расстояние комплексного числа.Теперь, если вы относитесь к своим векторам как к комплексным числам и знаете их фазы, вы можете вычесть их, чтобы получить желаемый угол.

Чтобы Python распознавал экземпляры векторов как комплексные числа, вы должны предоставить .__complex__() в теле класса:

  класс Vector (NamedTuple):
    Начальная точка
    конец: Точка

    защита __complex__(я):
        реальный = self.end.x - self.start.x
        изображение = self.end. y - self.start.y
        возвратный комплекс (реальный, имаг)
  

Внутренний код всегда должен возвращать экземпляр сложного типа данных , поэтому он обычно создает новое комплексное число из вашего объекта.Здесь вы вычитаете начальную и конечную точки, чтобы получить горизонтальное и вертикальное смещения, которые служат реальной и мнимой частями. Метод будет выполняться через делегирование , когда вы вызываете глобальный комплекс () для экземпляра вектора:

>>>
  >>> вектор = вектор (точка (-2, -1), точка (1, 1))
>>> комплекс(вектор)
(3+2к)
  

В некоторых случаях вам не нужно делать такое литье самостоятельно. Давайте рассмотрим пример на практике:

>>>
  >>> v1 = вектор (точка (-2, -1), точка (1, 1))
>>> v2 = вектор (точка (10, -4), точка (8, -1))

>>> импортировать математику, cmath
>>> математика.градусы (cmath.phase (v2) - cmath.phase (v1))
90,0
  

У вас есть два вектора, идентифицированные четырьмя различными точками. Затем вы передаете их непосредственно в cmath.phase() , который выполняет преобразование в комплексное число и возвращает фазу. Разность фаз — это угол между двумя векторами.

Разве это не прекрасно? Вы уберегли себя от ввода большого количества подверженного ошибкам кода, комбинируя комплексные числа и немного магии Python.

Вычисление дискретного преобразования Фурье с комплексными числами

Хотя для вычисления коэффициентов синуса и косинуса частот периодической функции с помощью преобразования Фурье можно использовать действительные числа, обычно удобнее иметь дело только с одним комплексным коэффициентом на частоту.Дискретное преобразование Фурье в комплексной области задается следующей формулой:

Для каждого частотного бина k измеряется корреляция сигнала и конкретной синусоидальной волны, выраженная комплексным числом в экспоненциальной форме. (Спасибо, Леонард Эйлер!) Угловую частоту волны можно рассчитать, умножив угол скругления, равный 2π радиан, на k по количеству дискретных отсчетов:

Кодирование этого на Python выглядит довольно аккуратно, если вы воспользуетесь преимуществами сложного типа данных :

  из cmath импорт pi, exp

def дискретное_преобразование Фурье (х, к):
    омега = 2 * пи * k / (N := len(x))
    вернуть сумму (x [n] * exp (-1j * omega * n) для n в диапазоне (N))
  

Эта функция представляет собой буквальную транскрипцию приведенных выше формул. Теперь вы можете запустить частотный анализ звука, который вы загружаете из аудиофайла с помощью модуля Python wave или который вы синтезируете с нуля. Один из блокнотов Jupyter Notebook, сопровождающих это руководство, позволяет вам играть с синтезом и анализом звука в интерактивном режиме.

Чтобы построить частотный спектр с помощью Matplotlib, вы должны знать частоту дискретизации, которая определяет ваше разрешение частотного бина , а также предел Найквиста:

  импортировать matplotlib.pyplot как plt

определение plot_frequency_spectrum (
    образцы,
    выборки_в_секунду,
    минимальная_частота=0,
    макс_частота = нет,
):
    num_bins = длина (образцы) // 2
    nyquist_frequency = Samples_per_second // 2

    величины = []
    для k в диапазоне (num_bins):
        величины.append (abs (discrete_fourier_transform (выборки, k)))

    # Нормализация величин
    величины = [m / max(величины) для m в величинах]

    # Вычислить бины по частоте
    bin_разрешение = выборки_в_секунду / длина (выборки)
    Frequency_bins = [k * bin_resolution для k в диапазоне (num_bins)]

    пл. xlim (минимальная_частота, максимальная_частота или частота Найквиста)
    plt.bar (частота_бинов, величины, ширина = бин_разрешение)
  

Количество бинов по частоте в спектре равно половине отсчетов, а частота Найквиста ограничивает самую высокую частоту, которую вы можете измерить. Преобразование возвращает комплексное число, величина которого соответствует амплитуде синусоидальной волны на заданной частоте, тогда как ее угол равен фазе .

Примечание: Чтобы получить правильные значения амплитуды, необходимо удвоить число и разделить полученную амплитуду на число выборок.С другой стороны, если вас интересует только гистограмма частоты, вы можете нормализовать величины по их сумме или максимальной частоте.

Вот образец частотного графика звуковой волны, состоящей из трех тонов — 440 Гц, 1,5 кГц и 5 кГц — с одинаковыми амплитудами:

График частотного спектра

Обратите внимание, что это был чисто академический пример, поскольку вычисление дискретного преобразования Фурье с вложенными итерациями имеет временную сложность O ( n 2 ), что делает его непригодным для использования на практике. Для реальных приложений вы хотите использовать алгоритм быстрого преобразования Фурье (БПФ) , лучше всего реализованный в библиотеке C, такой как БПФ в SciPy.

Заключение

Простота использования комплексных чисел в Python делает их удивительно интересным и практичным инструментом. Вы видели двумерные векторы реализованные практически бесплатно, и благодаря им вы смогли анализировать звуковых частот . Комплексные числа позволяют элегантно выражать математических формул в коде без большого количества стандартного синтаксиса, стоящего на пути.

В этом уроке вы узнали, как:

  • Определение комплексных чисел с помощью литералов в Python
  • Представление комплексных чисел в прямоугольных и полярных координатах
  • Использовать комплексные числа в арифметических выражениях
  • Воспользуйтесь преимуществами встроенного модуля cmath
  • Перевод математических формул непосредственно в код Python

Каков ваш опыт работы с комплексными числами Python? Вы когда-нибудь боялись их? Как вы думаете, какие еще интересные задачи они позволят вам решить?

Вы можете щелкнуть ссылку ниже, чтобы получить полный исходный код для этого руководства:

Экзамен TASC по математике: Работа с комплексными числами

Хотя большинство вопросов экзамена TASC по математике требуют, чтобы вы имели дело с действительными числами, вы, вероятно, столкнетесь с одной или двумя задачами, связанными с комплексными числами .

Большинство людей впервые сталкиваются с комплексными числами в алгебре, когда узнают, что можно извлечь квадратный корень из отрицательных чисел. Здесь важно помнить, что

Это означает, например, что

Комплексные числа — это не просто числа, которые получаются при извлечении квадратного корня из отрицательных чисел. К ним относятся любые числа, которые могут быть представлены в виде a + bi , где a — действительная часть, а bi — мнимая часть.Это означает, что любое действительное число является комплексным числом, когда b = 0.

Используя это определение, показанная здесь диаграмма Венна иллюстрирует, как комплексные числа представляют собой пересечение действительных чисел и мнимых чисел.

Диаграмма Венна классификаций чисел, включающая комплексные и мнимые числа.

Поскольку комплексные числа остаются числами, с ними можно выполнять арифметические операции, такие как сложение, вычитание, умножение и деление.

Когда вы складываете или вычитаете два комплексных числа, вы объединяете (складываете или вычитаете) действительные части вместе и комплексные части вместе.

Пример: (4 + 2 i ) + (5 + 8 i ) = (4 + 5) + (2 + 8) i = 9 + 10 i


2 Пример:
(9 + 5 i ) – (11 – 2 i ) = (9 – 11) + (5 – –2) i = –2 + 7 i

При умножении двух комплексных чисел относитесь к ним больше как к полиномам, чем к традиционным числам. Это означает, что вы должны сделать двойное распределение. Здесь полезен метод ящиков, потому что он держит вас в порядке и помогает предотвратить потерю терминов.Чтобы выполнить умножение с использованием метода ящика, отделите каждый член комплексного числа либо сбоку, либо сверху поля. Чтобы заполнить каждый внутри поля, умножьте заголовок столбца на заголовок строки. Наконец, вам нужно объединить одинаковые термины (два термина, в которых есть и ).

Взгляните на этот пример: (2 + 3 i )(4 – 5 i )

Метод ящика можно использовать для упрощения умножения комплексных чисел.

Таким образом, (2 + 3 i )(4 – 5 i ) = 8 + 12 i – 10 i + 15 = 23 + 2 i

Деление двух комплексных чисел будет выглядеть следующим образом:

Чтобы решить эту задачу на деление, вы умножаете верхнюю и нижнюю часть частного на комплексное сопряжение знаменателя.Комплексное сопряжение знаменателя похоже на исходный знаменатель, но с обратным знаком, поэтому исходный вопрос следует умножить на:

В результате получается рациональный знаменатель.

Попробуйте работать с этим примером:

Умножьте, как если бы они были правильными дробями:

Теперь умножьте эти два комплексных числа:

Упростите, и вы получите следующее решение: 9003 9003 9003 900 действительная числовая часть ответа —

, а мнимая часть —

Изучите термины, формулы, определения, типы, операции и полярные формы здесь

Считайте x и y любыми двумя действительными числами, затем любыми число вида x + iy называется комплексным числом, где \(i=√-1\), а комплексное число обозначается через z.
т.е. \(z=x+iy\), где \(x, y ∈ R\) и \(i = √-1.\)
Для комплексного числа, имеющего представление z=a+ib, где a объявлено действительная часть и обозначается Rez, а b описывается как мнимая часть и обозначается Imz комплексного числа z.
Например, если \(z=4+i 5\), то \(\operatorname{Re} z=4\) и \(\operatorname{lm} z=5\).
Два комплексных числа z1 = a + ib и z2 = c + id называются одинаковыми, если a = c и b = d.

Основные понятия комплексного числа

Давайте начнем обсуждение с понимания основных понятий комплексного числа.{4n+3}=i\,\где\n\ есть\ a\ целое число.\)

Действительная и мнимая части комплексного числа

Как мы узнали во введении, любое комплексное число можно интерпретировать как z = x + iy, где x, y ∈ R и i = √-1.

Равенство комплексных чисел

Рассмотрим\(\ z_1=x_1+iy_1\ и\ \ z_2=x_2+iy_{2\ }будут\ любыми\ двумя\ комплексными\ числами\)

где \(\ x_1,\ x_2,\ y_{1,\ }\ y_{2,\ }\ \in\ R\ and\ i=\sqrt{-1}\)

Тогда мы можем сказать, z1=z2, если x1=x2и y1=y2 .

Отсюда следует, что если z1=z2, то Re z1= Re z2 и Im z1= Im z2.

Точки памяти

Любое комплексное число z является чисто действительным, если его мнимая часть равна нулю, т.е. Im(z) = 0.
Любое комплексное число z является чисто мнимым, если его действительная часть равна нулю, т.е. Re(z) = 0
Комплексное число а = а + ia является одновременно чисто действительным и мнимым.

Для любых двух комплексных чисел скажем \(z_1=x_1+iy_1\ и\ \ z_2=x_2+iy_{2\ }\), но мы никогда не сможем заключить, что z1 > z2 или z2 > z1.

т.е. речь может идти только о равенстве двух комплексных чисел, но не о знаках «<» или «>» между любыми двумя комплексными числами.

Алгебраические операции над комплексными числами

Сложение комплексных чисел

Рассмотрим \(\ z_1=x_1+iy_1\ и\ \ z_2=x_2+iy_{2\ }\) любые два комплексных числа
, где \( \ x_1,\ x_2,\ y_{1,\ }\ y_{2,\ }\ \in\ R\ and\ i=\sqrt{-1}\)
тогда\(\ z_1+z_2=\left( x_1+x_2\right)+i\ \left(y_1+y_2\right)\)

Вычитание комплексных чисел

Рассмотрим\(\ z_1=x_1+iy_1\ и\ \ z_2=x_2+iy_{2 \ }\)любые два комплексных числа
, где \(\ x_1,\ x_2,\ y_{1,\ }\ y_{2,\ }\ \in\ R\ и\ i=\sqrt{-1}\ )
then\(\ z_1-z_2=\left(x_1-x_2\right)+i\ \left(y_1-y_2\right)\)

Умножение комплексных чисел

Рассмотрим\(\ z_1=x_1 +iy_1\ и\ \ z_2=x_2+iy_{2\ }\) — любые два комплексных числа
, где \(\ x_1,\ x_2,\ y_{1,\ }\ y_{2,\ }\ \in\ R\ и\ i=\sqrt{-1}\)
тогда\(\ z_1. {-1}\left(\frac{y}{x}\right)\)

На заметку

Если – π < θ ≤ π, то θ называется главным аргументом и обозначается Arg(z ). Главный аргумент комплексного числа z определяется как θ, π – θ, – π + θ, – θ, если данное комплексное число z лежит в 1-м, 2-м, 3-м и 4-м квадранте соответственно аргановой плоскости.

Эйлерова форма

Пусть z = x + iy будет любым комплексным числом с модулем r и аргументом θ, тогда эйлерова форма z задается следующим образом:
\(x+iy=r.n=\cos n\theta+i\sin n\theta\)
, где n принадлежит множеству целых чисел.

Следите за обновлениями в приложении Testbook или посетите веб-сайт Testbook, чтобы узнать больше об обновлениях по подобным темам из математики, естественных наук и многих других предметов, а также можете проверить серию тестов, доступных для проверки ваших знаний о различных экзаменах.

Часто задаваемые вопросы о комплексных числах

Q.1 Определение комплексных чисел.

Ответ 1 Любое число, которое может быть представлено в виде x + iy, называется комплексным числом, где x обозначает действительную часть, а y представляет мнимую часть.

Q.2 Каково значение i(iota)?

Ответ 2 В представлении комплексных чисел i = √-1.

Q.3 Когда утверждается, что комплексное число является чисто действительным.

Ответ 3 Комплексное число z называется чисто вещественным, если его мнимая часть равна нулю, т.е. Im(z) = 0.

воображаемый.

Ответ.4 Комплексное число, рассматриваемое как z, называется чисто мнимым, если его действительная часть равна нулю, т. е. Re(z) = 0.

Q.5 Укажите условие равенства двух комплексных чисел.

Ответ 5 Два комплексных числа называются равными, если действительная часть первого числа равна действительной части второго числа, а мнимая часть первого числа равна мнимой части второго числа. второй.

Q.6 Укажите различные операции, которые можно выполнять над комплексными числами.2}\)

В.8 Найдите сопряженное число z = x + iy?

Ответ 8 Сопряжение z = x + iy определяется выражением z = x – iy.

Создайте бесплатную учетную запись, чтобы продолжить чтение

  • Получайте мгновенные оповещения о вакансиях бесплатно!

  • Получите Daily GK и текущие события Capsule и PDF-файлы

  • Получите более 100 бесплатных пробных тестов и викторин


Подпишись бесплатно У вас уже есть аккаунт? Войти

Следующая запись

Использование комплексных чисел в R · Джон Майлс Уайт

Этот пост является продолжением моей серии, посвященной матричным операциям для обработки изображений.Моя следующая цель — продемонстрировать построение простых пространственно-частотных фильтров нижних и верхних частот в R. Достаточно просто построить простые версии этих фильтров в R с помощью быстрого преобразования Фурье (также известного как БПФ), но, поскольку БПФ — немного сложный инструмент, я собираюсь использовать его постепенно в течение нескольких постов.

Для начала я хочу рассмотреть использование комплексных чисел в R. Как всегда, если вы заинтересованы в изучении математики комплексных чисел, я бы начал с просмотра ссылок в Интернете.Учебник здесь показался мне хорошим на первый взгляд, хотя я не могу утверждать, что прочитал его полностью.

Поскольку комплексные числа реализованы в «базовом» пакете, начать работать с ними очень просто. Чтобы построить комплексное число x + iy , вы используете комплекс :

  х <- 1
у <- 1

z <- сложный (действительный = x, мнимый = y)

г
# [1] 1+1i
  

В математике принято использовать z для обозначения комплексного числа, поэтому я продолжу эту традицию.

Как всегда происходит с математическими типами данных в R, вы можете преобразовать другие объекты в класс «комплекс», используя as.complex :

  as.complex(-1)
# [1] -1+0i
  

И вы можете проверить, является ли объект сложным, используя is.complex :

  is.complex(as.complex(-1))
# [1] ИСТИНА
  

Помимо этих стандартных операций, есть пять основных математических операций, которые вы хотели бы использовать с комплексными числами.

Во-первых, вы хотите иметь возможность извлекать действительные и мнимые компоненты комплексного числа.Вы можете сделать это, используя Re и Im соответственно:

  z <- сложный (действительный = 2, мнимый = 1)

Ре (г)
# [1] 2

Я (г)
# [1] 1
  

Представление чисел (x, y) поначалу легче понять, но представление в полярных координатах часто оказывается более практичным. Вы можете получить соответствующие компоненты этого представления, найдя модуль и комплексный аргумент комплексного числа. В R вы должны использовать Mod и Arg :

.
  z <- сложный (действительный = , мнимый = 1)

Мод (г)
# [1] 1

Арг(г)
# [1] 1.570796

пи / 2
# [1] 1.570796
  

Это соответствует интуитивному предположению, что i должны быть на расстоянии 1 от начала координат и под углом pi/2 .

Наконец, вы захотите получить комплексное сопряжение комплексного числа; чтобы сделать это в R, вы можете использовать Conj :

  Conj(z)
# [1] 0-1i

Mod(z) == z * Conj(z)
# [1] ИСТИНА
  

Как видите, модуль z равен z, умноженному на сопряжение z, что и ожидалось.

Исторически так сложилось, что комплексные числа были изобретены для того, чтобы можно было найти квадратный корень из отрицательных чисел. По умолчанию sqrt не возвращает комплексное число, когда вы запрашиваете квадратный корень из отрицательного числа. Вместо этого он выдает ошибку NaN , как вы можете видеть ниже:

  кв.(-1)
# [1] NaN
# Предупреждение:
# В sqrt(-1): произведено NaN
  

Чтобы получить комплексный квадратный корень, вам нужно преобразовать отрицательное число в комплексное число, используя как.комплекс до применения sqrt :

  sqrt(as.complex(-1))

# [1] 0+1i
  

На практике комплексные числа могут использоваться для решения огромного количества задач, не последней из которых является эффективное представление БПФ входного вектора. Ради интереса я решил показать простое приложение: построение фрактала с использованием множества Мандельброта.

Цитата из Википедии,

Математически множество Мандельброта можно определить как множество комплексных значений c, для которых орбита 0 при повторении комплексного квадратичного многочлена z_n+1 = z_n^2 + c остается ограниченной. То есть комплексное число c находится в множестве Мандельброта, если при запуске с z = 0 и повторном применении итерации абсолютное значение z_n никогда не превышает определенного числа (это число зависит от c), каким бы большим ни было n.

Мы можем довольно легко перевести это определение в R, сделав определенные предположения о точности, которую мы хотим получить в наших результатах. Для моих целей я буду говорить, что число принадлежит множеству Мандельброта, если после 100 итераций алгоритма Мандельброта его модуль ни разу не превышал 1 000 000.Как вы увидите на изображении, которое я создал, это предположение работает довольно хорошо, хотя для получения результатов для наборов данных разумного размера требуется некоторая обработка реальных чисел.

  in.mandelbrot.set <- функция (c, итерации = 100, граница = 1000000) {
    г <- 0

    для (я в 1: итерации) {
        г <- г ** 2 + с
        если (Mod(z) > граница)
        {
            возврат (ЛОЖЬ)
        }
    }

    возврат (ИСТИНА)
}
  

Когда у нас есть этот алгоритм, мы можем легко сгенерировать изображение множества Мандельброта, создав матрицу комплексных чисел и изобразив их включение в множество, используя изображение :

  разрешение <- 0. 001

последовательность <- seq(-1, 1, by = разрешение)

m <- матрица (nrow = длина (последовательность), ncol = длина (последовательность))

для (x в последовательности) {
    для (y в последовательности) {
        Мандельброт <- in.mandelbrot.set (сложный (действительный = x, мнимый = y))
        m[round((x + разрешение + 1) / разрешение), round((y + разрешение + 1) / разрешение)] <- Мандельброта
    }
}

png('мандельброт.png')
изображение (м)
dev.off()
  

И вот результирующее изображение:

ОБНОВЛЕНИЕ

: спасибо Джузеппе за указание на ошибку округления в исходном коде, создав изображение с линиями в нем.

.

Оставить комментарий

Ваш адрес email не будет опубликован.