본문 바로가기

프로그래밍 언어/파이썬

파이썬 복소수, complex 타입과 활용법

파이썬 복소수, complex 타입과 활용법

복소수(Complex Number)는 실수와 허수로 이루어진 수로, 공학 및 과학 분야에서 널리 사용됩니다. 파이썬에서는 complex 타입을 기본적으로 제공하여 복소수 연산을 간편하게 수행할 수 있습니다. 이 글에서는 복소수의 개념, 파이썬에서의 표현법, 기본 연산, 활용 사례 등을 다룹니다.

 

 

목차

  1. 복소수란 무엇인가?
  2. 파이썬에서 복소수 표현
  3. 복소수 연산
  4. 복소수 관련 내장 함수 및 메서드
  5. 극좌표 변환과 응용
  6. 복소수를 다룰 때의 팁과 주의사항
  7. 복소수의 실제 활용 예제

 

1. 복소수란 무엇인가?

복소수(Complex Number)는 a + bj의 형태를 가지며, 여기서 a는 실수(real part), b는 허수(imaginary part)입니다. 수학적으로는 다음과 같은 특징이 있습니다.

  • 허수 단위 jj^2 = -1을 만족함
  • 실수와 허수 부분으로 구성됨
  • 전기공학, 신호처리, 양자역학 등 다양한 분야에서 사용됨

 

 

 

2. 파이썬에서 복소수 표현

파이썬에서는 기본적으로 복소수를 다룰 수 있도록 complex 타입을 제공합니다. 복소수는 a + bj 형태로 표현하며, 다음과 같이 생성할 수 있습니다.

# 기본적인 복소수 선언
z1 = 3 + 4j
z2 = complex(5, -2)

print(z1)  # (3+4j)
print(z2)  # (5-2j)

 

 

 

3. 복소수 연산

복소수는 일반적인 수학 연산이 가능합니다.

연산 예제 결과
덧셈 (3+4j) + (1-2j) (4+2j)
뺄셈 (5+3j) - (2+1j) (3+2j)
곱셈 (2+3j) * (1+4j) (-10+11j)
나눗셈 (6+4j) / (2+2j) (2+0j)

 

 

 

4. 복소수 관련 내장 함수 및 메서드

  • z.real: 실수부 반환
  • z.imag: 허수부 반환
  • abs(z): 절댓값(크기) 계산
  • z.conjugate(): 켤레 복소수 반환

 

 

 

5. 극좌표 변환과 응용

복소수를 극좌표로 변환하려면 cmath 모듈을 사용합니다.

import cmath

z = 1 + 1j
r, theta = cmath.polar(z)

print(r)      # 크기(절댓값)
print(theta)  # 각도(라디안)

 

 

 

6. 복소수를 다룰 때의 팁과 주의사항

  • 허수부는 j를 사용해야 하며 i가 아님
  • 복소수를 포함한 연산 시 데이터 타입을 주의
  • 실제 공학적 응용에서는 cmath 모듈 활용

 

 

 

 

7. 복소수의 실제 활용 예제

복소수는 수학적 개념을 넘어 다양한 분야에서 실용적으로 활용됩니다. 특히 공학, 신호처리, 전기회로 분석, 컴퓨터 그래픽, 금융 등에서 중요한 역할을 합니다. 이 섹션에서는 복소수의 실제 응용 사례를 코드와 함께 살펴보겠습니다.

📡 1. 신호처리에서의 활용 (푸리에 변환)

푸리에 변환은 신호를 주파수 성분으로 변환하는 강력한 도구입니다. 복소수는 주파수의 크기와 위상을 동시에 표현하는 데 사용됩니다.

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 1, 500, endpoint=False)
signal = np.sin(2 * np.pi * 50 * t) + np.sin(2 * np.pi * 120 * t)

fft_result = np.fft.fft(signal)
frequencies = np.fft.fftfreq(len(signal), d=1/500)

plt.plot(frequencies[:250], np.abs(fft_result[:250]))
plt.title("푸리에 변환 결과")
plt.xlabel("주파수 (Hz)")
plt.ylabel("진폭")
plt.show()

이 코드는 50Hz와 120Hz 신호를 합성한 후 푸리에 변환을 적용하여 주파수 성분을 분석하는 예제입니다.

⚡ 2. 전기회로 분석 (임피던스 계산)

전기회로에서 저항, 인덕터, 커패시터의 임피던스를 복소수로 표현할 수 있습니다. 이를 통해 복잡한 교류 회로를 쉽게 해석할 수 있습니다.

import cmath

R = 100  # 저항 (Ω)
L = 0.1  # 인덕터 (H)
C = 0.0001  # 커패시터 (F)
f = 50  # 주파수 (Hz)
w = 2 * cmath.pi * f  # 각주파수

Z_L = complex(0, w * L)
Z_C = complex(0, -1 / (w * C))

print(f"인덕터의 임피던스: {Z_L:.2f} Ω")
print(f"커패시터의 임피던스: {Z_C:.2f} Ω")

위 코드는 교류 회로에서 인덕터와 커패시터의 임피던스를 계산하는 예제입니다.

📊 3. 컴퓨터 그래픽 (프랙탈 생성)

복소수를 활용하면 멋진 그래픽 패턴을 만들 수 있습니다. 대표적인 예로 만델브로 집합(Fractal)을 생성하는 방법이 있습니다.

import numpy as np
import matplotlib.pyplot as plt

def mandelbrot(c, max_iter):
    z = 0 + 0j
    for i in range(max_iter):
        z = z*z + c
        if abs(z) > 2:
            return i
    return max_iter

width, height = 500, 500
image = np.zeros((height, width))

for x in range(width):
    for y in range(height):
        c = complex(-2 + (x / width) * 3, -1.5 + (y / height) * 3)
        image[y, x] = mandelbrot(c, 100)

plt.imshow(image, cmap="inferno")
plt.colorbar()
plt.title("Mandelbrot Set")
plt.show()

이 코드는 복소수 연산을 이용해 만델브로 집합을 생성하는 그래픽 예제입니다.

📈 4. 금융 및 경제 분석

금융 분석에서도 복소수가 활용됩니다. 특히 주식 시장에서 푸리에 변환을 이용해 주가 변동성을 분석하는 데 사용할 수 있습니다.

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
time = np.linspace(0, 10, 500)
stock_prices = np.sin(2 * np.pi * 0.5 * time) + 0.5 * np.random.randn(500)

fft_result = np.fft.fft(stock_prices)
frequencies = np.fft.fftfreq(len(time), d=(time[1] - time[0]))

plt.plot(frequencies[:250], np.abs(fft_result[:250]))
plt.title("주식 데이터의 주파수 분석")
plt.xlabel("주파수 (Hz)")
plt.ylabel("진폭")
plt.show()

이 코드는 시계열 데이터에 푸리에 변환을 적용하여 시장 변동성을 분석하는 예제입니다.

🎯 결론

복소수는 단순한 수학 개념을 넘어 공학, 과학, 금융 등 다양한 분야에서 유용하게 활용됩니다. 파이썬에서는 complex 타입을 활용하여 복소수 연산을 쉽게 처리할 수 있으며, 신호 분석, 전기회로 해석, 그래픽 생성, 금융 분석 등 여러 분야에서 강력한 도구로 사용됩니다.

 

이제 파이썬에서 복소수를 다루는 방법을 이해하셨나요? 😊