Комплексная арифметика
В этой главе – обзор того, что можно сделать на комплексной плоскости: арифметика, расчеты, специальные функции вроде J0(z) и Г(z).
Рассмотрим, что можно делать с комплексными числами. Во-первых, простое сложение-вычитание. Правила – как при сложении векторов на плоскости (ху):
- z1:=5+3*I;
- z2:=1-6*I;
- z3:=z2+z1;
Представим задачу о сложении на комплексной плоскости, определив комплексные числа как стрелки-векторы (заодно поучимся их строить). На картинке векторы, представляющие комплексные числа, изображены разными цветами: вектор L1 (аналог числа z1) – зеленым, вектор L2 (аналог числа z2) – синим, а их сумма нарисована красным (аналог числа z3).
- with(plottools):
L1:= arrow([0,0], [5,3], .2, .5, .1, color=green):
L2:= arrow([0,0], [1,-6], .2, .5, .1, color=blue):
L3 := arrow([0,0], [6,-3],.2,.5,.1,color=red): - plots[display](L1,L2,L3, axes=normal,view=[-10..10,-10..10]);
OK, но умножение и деление не похожи на операции с векторами. Комплексное умножение выполняется путем обычного алгебраического умножения Re и Im частей каждого из чисел, при этом I2 = – 1. А вот пример умножения:
(5 + 3I) * (1 – 6I) = (5 + 3I – 30I + 18) = 23 – 27I (использован дистрибутивный закон).
- z1*z2;
Деление комплексных чисел выполняется исходя из идеи комплексного сопряжения (комплексно сопряженное – это число с противоположным знаком перед мнимой частью):
- conjugate(6+4*I);
Сопряженные величины полезны из-за того, что произведение числа на сопряженное ему есть действительное число:
- conjugate(6+4*I)*(6+4*I);
- assume(x,real);assume(y,real);
- conjugate(x+y*I)*(x+y*I);
- expand(%);
А оно равно квадрату амплитуды комплексного числа, рассматриваемого как вектор. Ответ 62 + 42 = 52.
Это полезно для комплексного деления, поскольку умножение комплексной дроби на сопряженное знаменателю число делает знаменатель действительным.
Для описания операции умножения придется перейти в иное представление комплексных чисел. В комплексной плоскости декартовы координаты заменим на полярные. Тогда число представляется в виде пары (модуль числа, угол). Угол отсчитывается против часовой стрелки, а модуль вычисляется как модуль длины вектора. Например, для числа 5 + 4I амплитуда равна
- with(plottools):
L1:=arrow([0,0], [5,4], .2, .5, .1, color=green):
L2:=arc([0,0],4,0..arctan(.8),color=red): - plots[display](L1,L2, axes=normal,view=[-5..5,-5..5],
scaling=constrained);
Комплексные числа хорошо изображать в полярных координатах. Связь между декартовыми (x + iy) и полярными (r, θ) координатами простая:
x = r cos(θ) и y = r sin(θ).
Для комплексной экспоненты есть формула Эйлера:
e(iθ) = cos(θ) + isin(θ).
Тогда связь декартовой и полярной форм представления комплексных чисел:
x + iy = re(iθ).
С ее помощью перепишем заново правила умножения и деления чисел.
Для умножения: если и
, то
Умножение означает произведение амплитуд и сложение углов исходных векторов, что и нарисовано ниже (так же, как и в задаче о сложении векторов – см. выше, – векторы, соответствующие числам и
, нарисуем зелеными, а произведение – красным).
- with(plottools):
L1:= arrow([0,0], [1,2], .1, .3, .1, color=green):
L1a:= arc([0,0],1.5,0..arctan(2),color=green): - L2:= arrow([0,0], [1,.8], .1, .3, .1, color=green):
L2a:= arc([0,0],.75,0..arctan(.8),color=green): - L3:= arrow([0,0], [-.6,2.8], .1, .3, .1, color=red):
L3a:= arc([0,0],2.5,0..arctan(2.8,-.6),color=red): - plots[display](L1,L2,L3,L1a,L2a,L3a, axes=normal,
view=[-3..3,-3..3],scaling=constrained);
Деление работает аналогично, только амплитуды делятся, а углы вычитаются:
Это – простая арифметика.
В Maple есть удобные команды для ручной работы с комплексными числами:
- Re(z) извлекает действительную часть числа z,
- Im(z) – мнимую,
- abs(z) дает амплитуду,
- arctan(Im(z),Re(z)) дает угол:
- z:=5-3*I;
- Re(z);Im(z);abs(z);arctan(Im(z),Re(z));
В Maple есть команда, которая конвертирует декартову форму в полярную, но ее результат сложно использовать в последовательных расчетах:
- polar(z);
Лучше применять форму arctan.
В Maple также есть команда conjugate для получения комплексно сопряженного числа:
- conjugate(3+4*I);
Выполните операции с комплексными числами и
и представьте ответ в декартовой и полярной форме. Команда polar упрощает эти действия.
Определим z1 и z2:
- z1:=3-5*I;z2:=-2+3*I;
(a) +
,
(b) –
,
(c) ,
(d) ,
(e) покажите стрелками на графике (как выше), что поворот комплексного числа на угол θ в комплексной плоскости сопровождается умножением на множитель e(iθ). Для этого вначале определите комплексное число z1 и нарисуйте его как стрелку, умножьте z1 на e(iθ) для некоторого угла θ по вашему выбору и затем нарисуйте этот новый вектор как стрелку. Работайте внимательно и используйте в аргументах команды arrow только числа с плавающей запятой. Maple вернет ответы, содержащие квадратные корни из целых чисел, и если их просто скопировать в команду arrow, то никакая стрелка не появится. Поможет старая знакомая – команда evalf и команды Re(z), Im(z), которые вставят Re и Im части комплексного числа в команду arrow.