Построение комплексных чисел
В этом демонстрационном примере мы рассмотрим основные приемы при графическом отображении комплексных чисел в Engee.
Комплексное число - это число вида , где - вещественные числа, - мнимая единица . Число - действительная часть комплексного числа и обозначается как . Число - мнимая часть комплексного числа и носит обозначение .
Комплексное число можно построить в декартовой системе координат, где по оси абсцисс откладывается его действительная часть , а по оси ординат - мнимая .
Также может быть построено в полярных координатах. Для этого следует обратиться к его показательной или тригонометрической записи .
Отсюда: модуль и аргумент - соответственно расстояние от начала координат и радиус-вектор с осью абсцисс для комплексного числа .
Построение вектора комплексных чисел
Зададим вектор комплексных чисел.
Pkg.add(["LinearAlgebra"])
z = [
3 + 4im,
-4 - 3im,
1 - 2im,
-1 - 1im
];
Загрузим библиотеку и подключим бэкенд для построения графиков.
import Pkg
Pkg.add("Plots")
using Plots;
plotlyjs()
Построим заданный вектор на комплексной плоскости, подставив в качестве координат поэлементно извлеченные из z
действительные и мнимые части.
scatter(
real.(z), imag.(z),
title="Комплексные числа",
xlabel="Re(z)",
ylabel="Im(z)",
markersize=4,
markercolor=:red,
legend=:topleft,
label="z"
)
При отображении комплексных чисел не обязательно извлекать действительную и мнимую части. При передаче комплексных чисел в функции scatter(z)
или plot(z)
их координаты на комплексной плоскости будут определены автоматически, в чём мы убедимся далее.
Корни n-ной степени из единицы на комплексной плоскости
Для многочлена вида , где , можно найти комплексные корни согласно формуле Муавра:
, где
Определим функцию для расчета корней:
nthroots(n::Integer) = [ cospi(2k/n) + sinpi(2k/n)im for k = 0:n-1 ]
Найдём комплексные корни многочлена степени n = 5
:
z = nthroots(5)
Отобразим найденные корни на комплексной плоскости в декартовой системе координат. В этом построении передадим функции scatter()
массив комплексных чисел, не извлекая при этом действительную и мнимую части.
scatter(
z,
title="Корни полинома",
xlabel="Re(z)",
ylabel="Im(z)",
markersize=4,
markercolor=:blue,
legend=:topleft,
label="z"
)
Согласно свойствам корней n-ой степени из 1, модуль комплексных корней будет равен 1. Чтобы убедиться в этом, перейдем к отображению этих корней в полярных координатах. Функции scatter()
в этом случае необходимо передать массивы аргументов и модулей комплексных корней.
scatter(
angle.(z), abs.(z),
proj=:polar,
marker = :circle,
m=4, #markersize
markercolor=:green,
legend=:topleft,
label="z"
)
Как и следует из геометрических свойств корней 5-ой степени из 1, их модули равны 1, на комплексной плоскости они располагаются в вершинах правильного пятиугольника с центром в начале координат, а один из корней равен комплексной единице .
Параметрическая кривая на комплексной плоскости
Построим на комплексной плоскости параметрическую кривую, которая представлена выражением .
Параметр будет определен в диапазоне .
Зададим массив из 200 точек параметра в установленном диапазоне и рассчитаем массив точек параметрической кривой.
t = collect(range(0, 4pi, length=200));
z = t.*exp.(t.*im);
Отобразим параметрическую кривую на комплексной плоскости в декартовой системе координат:
plot(
z,
title="Параметрическая кривая",
xlabel="Re(z)",
ylabel="Im(z)",
markersize=4,
markercolor=:blue,
legend=:topright,
label="z",
width=3
)
Отобразим параметрическую кривую на комплексной плоскости в полярной системе координат:
plot(
angle.(z), abs.(z),
proj=:polar,
legend=:topleft,
label="z",
width=3
)
Собственные значения матрицы на комплексной плоскости
Для квадратной матрицы существуют собственных значений, которые либо действительны, либо являются комплексно-сопряженными парами.
Убедимся в этом свойстве и отобразим собственные значения на комплексной плоскости.
Для нахождения сопряженных значений загрузим и подключим библиотеку LinearAlgebra
:
Pkg.add("LinearAlgebra")
using LinearAlgebra;
Найдем собственные значения для матрицы , сгенерированной случайным образом.
z=eigen(rand(20,20));
Построим собственные значения матрицы на комплексной плоскости.
scatter(
z.values,
title="Собственные значения",
xlabel="Re(z)",
ylabel="Im(z)",
markersize=4,
markercolor=:magenta,
legend=:topleft,
label="z"
)
Как и следует из свойств собственных значений для квадратной матрицы , на комплексной плоскости можно наблюдать 20 точек, которые либо располагаются на оси действительных значений, либо представляют собой комплексно-сопряжённые пары.
Несколько массивов комплексных чисел на плоскости
Рассмотрим представление на комплексной плоскости двух различных наборов комплексных данных. Они будут определены следующими выражениями:
Определим вектор значений с шагом и рассчитаем массивы значений и .
x = collect(-2:0.25:2);
z1=Complex.(x).^exp.(-x.^2);
z2=2*Complex.(x).^exp.(-x.^2);
Извлечем действительные и мнимые части чисел для обоих массивов:
re_z1 = real.(z1);
im_z1 = imag.(z1);
re_z2 = real.(z2);
im_z2 = imag.(z2);
Построим на одной плоскости два набора комплексных чисел:
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"
)
Вывод
В этом демонстрационном примере мы рассмотрели различные инструменты и приемы для графического представления комплексных чисел в Engee.