Python/파이썬 기초

파이썬 복소수, 허수 자료형 선언 및 연산 예제

jimmy_AI 2022. 4. 11. 22:43
반응형

Python complex type 변수 특징

파이썬에서 허수가 포함된 복소수 변수를 선언해보고, 연산의 특징을 살펴보도록 하겠습니다.

 

 

복소수 자료형 선언

$2 + 3i$와 같이 허수부가 포함된 복소수를 선언하고 싶은 경우에는

$2 + 3j$처럼 허수를 j로 표현하여 지정해주시면 됩니다.

(주의 : i가 아니라 j이며, j앞의 숫자는 생략이 불가능합니다.)

 

실수부 값이 0으로 허수부만 존재하는 복소수도 선언이 가능하며,

complex(2, 3) 형태로 $2 + 3j$와 같은 복소수를 선언할 수도 있습니다.

x = 1 + 3j
y = 1j # 참고 : y = j처럼 선언은 불가(숫자 1 생략 안됨)
z = complex(3, 5) # (3+5j)

위에서 선언한 $x = 1 + 3j$의 변수에 대하여 다양한 연산을 진행하는 예시를 살펴보겠습니다.

 

 

실수부, 허수부, 켤레 복소수 추출

복소수 형태로 선언된 변수에 대해서 실수부, 허수부켤레 복소수에 해당되는 값을

각각 real, imag 속성 및 conjugate 메소드를 통해서 얻어낼 수 있습니다.

x.real # 1.0
x.imag # 3.0
x.conjugate() # (1-3j)

 

 

덧셈, 뺄셈 연산

실수부는 실수부끼리, 허수 부분은 허수 부분끼리 덧셈 및 뺄셈이 진행되는

복소수 연산 방식에 따라서 파이썬의 복소수 자료형도 더하기, 빼기 연산이 가능합니다.

x + 3j # (1+6j)
x + (2 + 1j) # (3+4j)

x - 5 # (-4+3j)
x - (3 + 3j) # (-2+0j)
반응형

곱셈, 나눗셈 연산

복소수의 곱셈은 두 복소수의 실수부와 허수부의 전개 방식에 의하여 계산

최종 결과가 반환되는 식으로 연산이 가능합니다.

예를 들어, $(1 + 3j)(1 + 2j)$의 곱셈의 결과는 $1 + 5j + 6j^2 = -5 + 5j$가 됩니다.

 

복소수의 나눗셈은 역수를 취한 뒤, 분모의 실수화에 의하여 계산된 결과가 반환됩니다.

예시로, $\frac{1 + 3j}{1 + 2j}$의 나눗셈 결과는 $\frac{(1 + 3j)(1 - 2j)}{(1 + 2j)(1 - 2j)} = \frac{7 + j}{5}$가 됩니다.

 

단순 실수배의 곱셈, 나눗셈과 위 예시들의 복소수 연산을 진행한 코드는 아래와 같습니다.

x * 2 # (2+6j)
x * (1 + 2j) # (-5+5j)

x / 2 # (0.5+1.5j)
x / (1 + 2j) # (1.4+0.2j)

 

 

제곱 연산

complex 타입의 자료도 **로 진행되는 제곱 연산을 지원하며, 역시 전개식의 결과를 따르며,

제곱근 연산, 음수 제곱 등의 비교적 복잡한 제곱 형태도 지원하고 있습니다.

 

예를 들어, $\sqrt{1 + 3j}$의 경우에는 $\sqrt{1 + 3j} = a + bj$가 되는 a와 b를

양변에 제곱을 하여 찾은 결과가 반환되는 원리이며,

 

$\frac{1}{1 + 3j}$의 경우에는 분모의 실수화를 나눗셈의 예제처럼 진행한 결과가

반환되는 원리로 생각해주시면 됩니다.

x ** 2 # (-8+6j)
x ** (1/2) # (1.442615274452683+1.0397782600555705j)
x ** -1 # (0.09999999999999999-0.3j)

 

여담으로, 임의의 실수에 대한 제곱이나 심지어는 복소수 제곱까지의 연산 형태도 지원합니다.

다만, 이에 대한 자세한 연산 원리 설명은 내용이 너무 복잡하여 여기서는 생략하도록 하겠습니다.

x ** 0.73 # (1.4189892941460405+1.8321537454049674j)
x ** (1 - 1j) # (10.974263433510801+1.0761997832384498j)

 

 

크기(절대값) 구하기

$a + bj$의 복소수에 대하여 정의된 $\sqrt{a^2 + b^2}$라는 크기에 해당하는 값을

절댓값 연산으로 구할 수 있습니다. 파이썬에서는 abs 함수를 사용하시면 됩니다.

 

예시로, $1 + 3j$의 경우, 크기는 $\sqrt{1^2 + 3^2} = \sqrt{10}$이 됩니다.

abs(x) # 3.1622776601683795

 

 

몫, 나머지 연산

complex 타입의 자료에서는 //와 %로 정의되는 몫, 나머지 연산은 지원하지 않습니다.

 

복소수에 대하여 이들 연산을 시도할 경우, TypeError가 발생하니 참고하세요.

x // 2 # TypeError: can't take floor of complex number.
x % 2 # TypeError: can't mod complex numbers.