복소수의 기본 개념
양수는 항상 두 개의 실근(real root)을 가집니다. 예를 들어 x² = 25라면 x는 ±5입니다. 하지만 x² = -25일 때는 실근이 존재하지 않습니다. 음수의 제곱근은 절댓값의 제곱근에 허수 단위 j = √−1을 곱한 값으로 정의됩니다.
따라서 √−25 = √25 × √−1 = 5j가 됩니다.
복소수(complex number)는 실수부와 허수부로 구성되며, 일반적으로 x+yj 형태로 표현합니다. 여기서 x와 y는 모두 실수이고, y에 허수 단위를 곱한 부분이 복소수의 허수부가 됩니다.
복소수 예시: 3+2j, 10-5.5J, 9.55+2.3j, 5.11e-6+4j
파이썬의 내장 복소수 자료형
파이썬은 복소수를 위한 데이터 타입을 기본적으로 제공합니다. 리터럴 표기법을 사용하면 아래와 같이 간단히 복소수 객체를 만들 수 있습니다.
>>> x = 2+3j >>> type(x) <class 'complex'>
real과 imag 속성
복소수 객체는 두 가지 속성을 가집니다. real은 실수부를 반환하고, imag는 허수 단위 j를 제외한 허수부의 계수를 반환합니다.
>>> x.real 2.0 >>> x.imag 3.0
conjugate() 메서드
복소수 객체는 conjugate() 메서드도 제공합니다. 켤레복소수(conjugate)는 실수부는 같고 허수부의 부호만 반대인 복소수를 의미합니다. 따라서 2+3j의 켤레복소수는 2-3j입니다.
>>> x.conjugate() (2-3j)
complex() 함수로 복소수 만들기
파이썬은 내장 함수 complex()도 제공하며, 이 함수는 복소수 객체를 반환합니다. 함수는 실수부와 허수부에 해당하는 두 개의 매개변수를 받으며, int, float, complex 등 어떤 숫자형이든 사용할 수 있습니다.
>>> complex(9,5) (9+5j) >>> complex(-6, -2.5) (-6-2.5j) >>> complex(1.5j, 2.5j) (-2.5+1.5j)
매개변수를 하나만 전달하면 그 값은 실수부로 처리되고, 허수부는 0으로 간주됩니다.
>>> complex(15) (15+0j)
숫자 표현을 담고 있는 문자열도 인자로 사용할 수 있습니다.
>>> complex('51')
(51+0j)
>>> complex('1.5')
(1.5+0j)
복소수의 산술 연산
덧셈과 뺄셈
복소수의 덧셈과 뺄셈은 정수나 실수와 유사하게, 실수부와 허수부를 각각 더하고 빼는 방식으로 수행됩니다.
>>> a = 6+4j >>> b = 3+6j >>> a+b (9+10j) >>> a-b (3-2j)
곱셈
곱셈은 복소수를 하나의 이항식으로 보고, 첫 번째 수의 각 항을 두 번째 수의 각 항과 곱하는 방식으로 계산합니다.
a = 6+4j b = 3+2j c = a*b c = (6+4j)*(3+2j) c = (18+12j+12j+8*-1) c = 10+24j
파이썬 콘솔에서 실행하면 동일한 결과를 확인할 수 있습니다.
>>> a = 6+4j >>> b = 3+2j >>> a*b (10+24j)
나눗셈
복소수 나눗셈은 다음 과정으로 진행됩니다. 두 복소수를 a = 2+4j, b = 1-2j라고 하고 a/b를 구한다고 가정해 보겠습니다.
먼저 분모의 켤레복소수인 1+2j를 구합니다. 그다음 분자와 분모에 분모의 켤레복소수를 곱하면 나눗셈 결과를 얻을 수 있습니다.
c = a/b c = (2+4j)*(1+2j)/(1-2j)(1+2j) c = (2+4j+4j+8*-1)/(1+2j-2j-4*-1) c = (-6+8j)/5 c = -1.2+1.6j
파이썬 콘솔 세션으로 위 계산을 검증할 수 있습니다.
>>> a = 2+4j >>> b = 1-2j >>> a/b (-1.2+1.6j)
cmath 모듈
파이썬 표준 라이브러리의 math 모듈에 정의된 수학 함수는 실수(float)만 처리합니다. 복소수를 다루려면 cmath 모듈을 사용해야 합니다.
복소수 z = x+yj는 직교좌표(Cartesian) 표현입니다. 내부적으로는 크기(modulus) r과 위상각(phase angle) Φ로 구성된 극좌표(polar coordinates)로 표현됩니다. 크기 r은 내장 함수 abs()가 반환하는 값이며, 위상각 Φ는 x축과 원점에서 복소수까지의 선분이 이루는 반시계 방향의 각도(라디안 단위)입니다. 다음 그림은 복소수의 극좌표 표현을 보여줍니다.

cmath 모듈의 함수들을 사용하면 직교 표현과 극좌표 표현을 서로 변환할 수 있습니다.
polar() 함수
polar()는 직교 표기로 된 복소수의 극좌표 표현을 반환합니다. 반환값은 크기와 위상으로 이루어진 튜플입니다.
>>> import cmath >>> a = 2+4j >>> cmath.polar(a) (4.47213595499958, 1.1071487177940904)
크기는 abs() 함수로도 얻을 수 있습니다.
>>> abs(a) 4.47213595499958
phase() 함수
phase()는 x축과 원점에서 a까지의 선분이 이루는 반시계 방향 각도를 반환합니다. 각도는 라디안으로 표현되며, 그 범위는 π와 -π 사이입니다.
>>> cmath.phase(a) 1.1071487177940904
rect() 함수
rect()는 극 형식(크기와 위상)으로 표현된 복소수를 직교 표현으로 변환하여 반환합니다.
>>> cmath.rect(4.47213595499958, 1.1071487177940904) (2.0000000000000004+4j)
cmath 모듈의 삼각·지수·로그 함수
cmath 모듈에는 math 모듈에 정의된 모든 수학 함수에 대한 복소수용 대체 함수가 포함되어 있습니다. 대표적인 삼각함수와 로그 함수는 다음과 같습니다.
cmath.sin() - 라디안으로 표현된 위상각의 사인 값을 반환합니다.
>>> import cmath >>> a = 2+4j >>> p = cmath.phase(a) >>> cmath.sin(p) (0.8944271909999159+0j)
마찬가지로 cos(), tan(), asin(), acos(), atan() 같은 다른 삼각비 함수들도 cmath 모듈에 정의되어 있습니다.
cmath.exp() - math.exp()와 유사하게 ex를 반환합니다. 여기서 x는 복소수이고 e는 약 2.71828입니다.
>>> cmath.exp(a) (-1.1312043837568135+2.4717266720048188j)
cmath.log10() - 밑을 10으로 하는 복소수의 로그 값을 계산합니다.
>>> a = 1+2j >>> cmath.log10(a) (0.3494850021680094+0.480828578784234j)
cmath.sqrt() - 복소수의 제곱근을 반환합니다.
>>> cmath.sqrt(a) (1.272019649514069+0.7861513777574233j)
마무리
이번 글에서는 파이썬 복소수 자료형의 핵심 특징과 덧셈, 뺄셈, 곱셈, 나눗셈 같은 산술 연산 방법을 살펴보았습니다. 또한 cmath 모듈에 정의된 다양한 함수를 통해 극좌표 변환과 삼각·지수·로그 연산을 수행하는 방법도 함께 알아보았습니다. 과학 계산이나 신호 처리처럼 복소수 연산이 필요한 작업이라면 이 내용이 실무에 큰 도움이 될 것입니다.