Сообщество Engee

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

Автор
avatar-alexevsalexevs
Notebook

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

В этом демонстрационном примере мы рассмотрим основные приемы при графическом отображении комплексных чисел в Engee.

Комплексное число - это число вида , где - вещественные числа, - мнимая единица . Число - действительная часть комплексного числа и обозначается как . Число - мнимая часть комплексного числа и носит обозначение .

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

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

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

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

In [ ]:
Pkg.add(["LinearAlgebra"])
In [ ]:
z = [
    3 + 4im,
    -4 - 3im,
    1 - 2im,
    -1 - 1im
    ];

Загрузим библиотеку и подключим бэкенд для построения графиков.

In [ ]:
import Pkg
Pkg.add("Plots")
using Plots;
plotlyjs()
   Resolving package versions...
  No Changes to `/user/.project/Project.toml`
  No Changes to `/user/.project/Manifest.toml`
Out[0]:
Plots.PlotlyJSBackend()

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

In [ ]:
scatter(
    real.(z), imag.(z),
    title="Комплексные числа",
    xlabel="Re(z)",
    ylabel="Im(z)",
    markersize=4,
    markercolor=:red,
    legend=:topleft,
    label="z"
    )
Out[0]:

При отображении комплексных чисел не обязательно извлекать действительную и мнимую части. При передаче комплексных чисел в функции scatter(z) или plot(z) их координаты на комплексной плоскости будут определены автоматически, в чём мы убедимся далее.

Корни n-ной степени из единицы на комплексной плоскости

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

, где

Определим функцию для расчета корней:

In [ ]:
nthroots(n::Integer) = [ cospi(2k/n) + sinpi(2k/n)im for k = 0:n-1 ]
Out[0]:
nthroots (generic function with 1 method)

Найдём комплексные корни многочлена степени n = 5:

In [ ]:
z = nthroots(5)
Out[0]:
5-element Vector{ComplexF64}:
                 1.0 + 0.0im
 0.30901699437494734 + 0.9510565162951536im
 -0.8090169943749475 + 0.587785252292473im
 -0.8090169943749475 - 0.587785252292473im
  0.3090169943749477 - 0.9510565162951535im

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

In [ ]:
scatter(
    z,
    title="Корни полинома",
    xlabel="Re(z)",
    ylabel="Im(z)",
    markersize=4,
    markercolor=:blue,
    legend=:topleft,
    label="z"
    )
Out[0]:

Согласно свойствам корней n-ой степени из 1, модуль комплексных корней будет равен 1. Чтобы убедиться в этом, перейдем к отображению этих корней в полярных координатах. Функции scatter() в этом случае необходимо передать массивы аргументов и модулей комплексных корней.

In [ ]:
scatter(
    angle.(z), abs.(z),
    proj=:polar,
    marker = :circle,
    m=4, #markersize
    markercolor=:green,
    legend=:topleft,
    label="z"
    )
Out[0]:

Как и следует из геометрических свойств корней 5-ой степени из 1, их модули равны 1, на комплексной плоскости они располагаются в вершинах правильного пятиугольника с центром в начале координат, а один из корней равен комплексной единице .

Параметрическая кривая на комплексной плоскости

Построим на комплексной плоскости параметрическую кривую, которая представлена выражением .
Параметр будет определен в диапазоне .
Зададим массив из 200 точек параметра в установленном диапазоне и рассчитаем массив точек параметрической кривой.

In [ ]:
t = collect(range(0, 4pi, length=200));
z = t.*exp.(t.*im);

Отобразим параметрическую кривую на комплексной плоскости в декартовой системе координат:

In [ ]:
plot(
    z,
    title="Параметрическая кривая",
    xlabel="Re(z)",
    ylabel="Im(z)",
    markersize=4,
    markercolor=:blue,
    legend=:topright,
    label="z",
    width=3
    )
Out[0]:

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

In [ ]:
plot(
    angle.(z), abs.(z),
    proj=:polar,
    legend=:topleft,
    label="z",
    width=3
    )
Out[0]:

Собственные значения матрицы на комплексной плоскости

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

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

In [ ]:
Pkg.add("LinearAlgebra")
using LinearAlgebra;
   Resolving package versions...
  No Changes to `/user/.project/Project.toml`
  No Changes to `/user/.project/Manifest.toml`

Найдем собственные значения для матрицы , сгенерированной случайным образом.

In [ ]:
z=eigen(rand(20,20));

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

In [ ]:
scatter(
    z.values,
    title="Собственные значения",
    xlabel="Re(z)",
    ylabel="Im(z)",
    markersize=4,
    markercolor=:magenta,
    legend=:topleft,
    label="z"
    )
Out[0]:

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

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

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



Определим вектор значений с шагом и рассчитаем массивы значений и .

In [ ]:
x = collect(-2:0.25:2);
z1=Complex.(x).^exp.(-x.^2);
z2=2*Complex.(x).^exp.(-x.^2);

Извлечем действительные и мнимые части чисел для обоих массивов:

In [ ]:
re_z1 = real.(z1);
im_z1 = imag.(z1);
re_z2 = real.(z2);
im_z2 = imag.(z2);

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

In [ ]:
scatter(
    re_z1, im_z1,
    title="Массивы комплексных чисел",
    xlabel="Re(z)",
    ylabel="Im(z)",
    marker=:cross,
    markersize=5,
    markercolor=:violet,
    legend=:topleft,
    label="z1"
    )
scatter!(
    re_z2, im_z2,
    marker=:xcross,
    markersize=5,
    markercolor=:orange,
    label="z2"
    )
Out[0]:

Вывод

В этом демонстрационном примере мы рассмотрели различные инструменты и приемы для графического представления комплексных чисел в Engee.