Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
Python과 함께 배우는 신호 해석
제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 (제 2 장. 복소수 기초)
박섭형
한림대학교 전자공학과
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 1
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
배울 내용
복소수의 기본 개념 복소수의 표현 오일러 (Euler) 공식 복소수의 대수 연산 1의 N 승근
Python에서 복소수 다루기
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 2
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
복소수의 4칙 연산
복소수의 덧셈과 뺄셈에는 직각좌표계 표현을 사용하고, 곱셈과 나눗셈에는 극좌표 표현을 사용하는 것이 편리하다.
두 복소수 z1= a + jb = r1ejθ1와 z2= c + jd = r2ejθ2에 대한 사칙 연산은 다음과 같다.
(1) 덧셈 : z1+ z2= a + jb + c + jd = (a + c) + j(b + d)
z1+ z2는 벡터 z1과 z2를 두 변으로 갖는 평행사변형의 대각선에 해당한다.
ℜe{z}
ℑm{z}
z1=a + jb z2=c + jd
0
z = z1+z2
a
c a + c
b d b + d
그림 2.1:두 복소수의 덧셈을 설명하는 그림.
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 3
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
복소수의 4칙 연산
(2) 뺄셈 : z1− z2= a + jb− (c + jd) = (a − c) + j(b − d) z1− z2는 z1과−z2의 덧셈으로 이해할 수 있다.
ℜe{z}
ℑm{z}
z1=a + jb z2=c + jd
−z2=−c − jd 0
z = z1− z2
a
−c ac− c
b d
−d b− d
그림 2.2:두 복소수의 뺄셈을 설명하는 그림.
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 4
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
복소수의 4칙 연산
(3) 곱셈 :
직각좌표계 표현을 사용하여 두 복소수의 곱셈을 계산하면 다음과 같다.
z1z2 = (a + jb)(c + jd)
= ac + jad + jbc− bd
= (ac− bd) + j(ad + bc)
극좌표계 표현을 사용하여 두 복소수의 곱셈을 계산하면 다음과 같다.
z1z2 = r1ejθ1r2ejθ2= r1r2ej(θ1+θ2)
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 5
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
복소수의 4칙 연산
ℜe{z}
ℑm{z}
z1= r1ejθ1
r1 z2= r2ejθ2
r2
θ1 θ2
θ = θ1+ θ2 r = r1r2
0
z = z1· z2= r1r2ej(θ1+θ2)
그림 2.3:두 복소수의 곱셈을 설명하는 그림.
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 6
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
복소수의 4칙 연산
(4) 나눗셈 :
직각좌표계 표현을 사용하여 두 복소수의 나눗셈을 계산하면 다음과 같다.
z1
z2
= z1
z2
z∗2 z∗2
= a + jb c + jd·c− jd
c− jd
= (a + jb)(c− jd)
(c + jd)(c− jd) (2.31)
= (ac + bd) + j(bc− da) c2+ d2
= ac + bd
c2+ d2 + jbc− da c2+ d2
극좌표계 표현을 사용하여 두 복소수의 나눗셈을 계산하면 다음과 같다.
z1
z2
= r1ejθ1 r2ejθ2 =r1
r2
ej(θ1−θ2)
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 7
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
복소수의 4칙 연산
ℜe{z}
ℑm{z}
z1= r1ejθ1 r1
z2= r2ejθ2 r2
θ1 θ2
θ = θ1− θ2
r =r1 r2 0
z =z1 z2=r1
r2ej(θ1−θ2)
그림 2.4:두 복소수의 나눗셈을 설명하는 그림.
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 8
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
켤레 (Conjugate) 복소수
z = a + jb = rejθ일 때, z 의 켤레 복소수를 z∗라 하며, z∗= a− jb = re−jθ이다.
또한 (z∗)∗= z이다. 다음 그림은 복소수 z 와 z 의 켤레 복소수 z∗를 설명하는 그림이다.
ℜe{z}
ℑm{z} z = a + jb = rejθ r
z∗=a− jb = re−jθ r
θ
−θ 0
그림 2.5:복소수 z 와 z 의 켤레 복소수 z∗를 설명하는 그림.
복소수 z 의 켤레 복소수는 실수축을 중심으로 z 와 대칭 위치에 있다. 즉, 서로 켤레인 두 복소수는 크기가 같고 각도만 부호가 반대이다.
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 9
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
복수소의 제곱
허수 j 의 거듭 제곱은 다음과 같다.
j0= 1. (2.32)
j1= j. (2.33)
j2 =−1. (2.34)
j3= j2· j = −j. (2.35)
j4= j3· j = −j · j = −(−1) = 1. (2.36) 즉, 임의의 정수 k 에 대해서 다음 관계식이 성립한다.
j4k= 1. (2.37)
j4k+1= j. (2.38)
j4k+2=−1. (2.39)
j4k+3=−j. (2.40)
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 10
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
복수소의 제곱
ℜe{z}
ℑm{z}
0
j4k= 1 j4k+1= j
j4k+2=−1
j4k+3=−j
그림 2.6:j 의 정수 제곱의 그래프.
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 11
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
복수소의 제곱
복소수 z = rejθ와 정수 k 에 대해서 zk은 다음과 같이 표현된다.
zk= (
rejθ)k
= rkejkθ. (2.41)
ℜe{z}
ℑm{z}
0
z0= 1 z1 z2 z3 z4
z5
z6
z7 z8 z9
θ θ θ θ θ θ
θ θ θ
(a) z = 0.95eπ5일 때.
ℜe{z}
ℑm{z}
0
z0= 1 z1 z2 z3
z4
z5
z6
z7 z8
z9 θ
θ θ θ θ θ
θ θ θ
(b) z = 1.05eπ5일 때.
그림 2.7:복소수의 거듭 제곱의 그래프.
그림 2.7 (a) 의 경우에는 복소수 z 의 크기가 1보다 작기 때문에 k 가 증가할수록 zk의 크기가 감소하고, (b) 의 경우에는 복소수 z 의 크기가 1보다 크기 때문에 k 가 증가할수록 zk의 크기가 증가하는 것을 볼 수 있다.
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 12
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
복수소의 제곱
z1 = 0.95ejπ5, z2= 1.05ejπ5라 하고, x1[n] = zn1, x2[n] = zn2이라고 하자. x1[n]과 x2[n]의 그래프를 3 차원 공간에서 그려보면 다음과 같다.
(a) x1[n] = (
0.95eπ5
)n (b) x2[n] = (
1.05eπ5 )n
그림 2.8:복소수의 거듭 제곱 시퀀스의 그래프.
이 그림을 n 축을 정면으로 오게 해서 복소수 평면으로 투영을 하면 그림 2.7과 같다.한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 13
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
1의 N 승근
다음과 같은 복소 방정식의 해를 구해보자.
zN= 1, (2.42)
여기에서 N 은 정수이다.
이 방정식의 해를 구하기 전에 다음의 관계식을 이해해야 한다.
1 = ej2πn, (2.43) 여기에서 n 은 정수이다.
식 (2.12) 의 해는 다음과 같은 방법으로 구할 수 있다.
z = rejθ라고 하면, zN= (rejθ)N
= rNejNθ이 되므로, 식 (2.12)는 다음과 같이 쓸 수 있다.
rNejNθ= ej2πn. (2.44)
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 14
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
1의 N 승근
이 식이 성립하기 위해서는 rN= 1과 Nθ = 2πn 이 되어야 하므로, 다음 두 식이 성립한다.
r = 1, (2.45)
θ = 2π
Nn, (2.46)
여기에서 n = 0, 1,· · · , N − 1이다.
따라서 식 (2.12) 의 해는 다음과 같은 N 개의 복소수이다.
z = ej2πNn= (
ej2πN)n
, n = 0, 1,· · · , N − 1. (2.47)
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 15
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
1의 N 승근
예제 2.1
다음 z 에 대한 방정식의 해를 극좌표형식으로 구하라.
z5= 1. (2.48)
이 방정식의 해는 모두 5 개로, zn= ej2πNn, n = 0, 1, 2, 3, 4이다.
ℜe{z}
ℑm{z}
0
z1= ej2π5
z21= ej4π5
z31= ej6π5
z14= ej8π5 z51= 1
(a) z1= e2π5 .
ℜe{z}
ℑm{z}
0 z2= ej4π5
z22= ej8π5
z23= ej12π5
z42= ej16π5
z52= 1
(b) z2 = e4π5 .
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 16
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
1의 N 승근
ℜe{z}
ℑm{z}
0
z3= ej4π5
z32= ej8π5
z33= ej12π5
z43= ej16π5
z35= 1
(c) z2= e6π5.
ℜe{z}
ℑm{z}
0
z4= ej4π5
z24= ej8π5
z34= ej12π5
z44= ej16π5
z54= 1
(d) z4 = e8π5 .
그림 2.9:z5= 1의 해 중에서 z0= 1을 제외한 나머지 네 개의 거듭 제곱의 그림.
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 17
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
Python에서 복소수 다루기 예
>>> z1 = 1 + 1j; z2 = 2 - 1j
>>> z1+z2 (3+0j)
>>> z1-z2 (-1+2j)
>>> z1*z2 (3+1j)
>>> z1/z2 (0.2+0.6j)
>>> z1.conjugate() (1-1j)
>>> z2.real 2.0
>>> z2.imag -1.0
>>> abs(z1) 1.4142135623730951
>>>
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 18
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
complex() 함수
complex() 함수는 실수를 복소수로 변환하는 함수이다.
>>> complex(3) (3+0j)
>>> complex(3,4) (3+4j)
>>> a=3
>>> b=4
>>> complex(3) (3+0j)
>>> complex(a) (3+0j)
>>> complex(a,b) (3+4j)
>>>
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 19
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
cmath 모듈 이용하기
cmath 모듈은 복소수와 관련된 함수와 π 와 e 상수를 제공하는 모듈이다.
polar() 함수 : 직각좌표 형식의 복수소를 극좌표 형식의 복소수로 바꾸어 실수부와 허수부를 리스트로 반환하는 함수
rect(,) 함수 : 두 개의 매개 변수를 각각 크기와 위상으로 받아들여 직각좌표 형식의 복소수로 반환해 주는 함수
phase 함수 : 직각좌표 형식의 복소수의 위상을 계산하는 함수 이 세함수에 사용되는 매개 변수와 반환값은 모두 radians
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 20
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
cmath 모듈 이용 예
>>> import cmath
>>> z1 = 1 + 1j
>>> z2 = 2 - 1j
>>> z3 = cmath.polar(z1)
>>> z3
(1.4142135623730951, 0.7853981633974483)
>>> z4 = cmath.rect(1., cmath.pi/2)
>>> z4
(6.123233995736766e-17+1j)
>>> cmath.phase(z4) 1.5707963267948966
>>>
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 21
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
각의 단위 변환
각도에서 degree와 radian을 서로 변환할 때는 math 모듈의 degrees()와 radians() 함수를 사용한다. 참고로 상수 π 는 cmath는 물론이고 math 모듈에도 포함되어 있다.
>>> import math
>>> math.degrees(math.pi) 180.0
>>> math.radians(90) 1.5707963267948966
>>>
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 22
Python 과 함께 배우는 신호
해석 박섭형
복수소의 대수 연산 1의 N 승근 Python 에서 복소수 다루기
Sympy를 이용한 방정식의 해 구하기 예
Sympy 모듈의 solve() 함수를 사용하여 z3= 1, z4= 1, z5= 1의 해를 구하는 예이다.
>>> import sympy
>>> z = sympy.Symbol('z')
>>> sympy.solve(z**4-1,z)
[-1, 1, -I, I]
>>> sympy.solve(z**5-1,z) [1,
-1/4 + sqrt(5)/4 - I*sqrt(sqrt(5)/8 + 5/8),
-1/4 + sqrt(5)/4 + I*sqrt(sqrt(5)/8 + 5/8),
-sqrt(5)/4 - 1/4 - I*sqrt(-sqrt(5)/8 + 5/8),
-sqrt(5)/4 - 1/4 + I*sqrt(-sqrt(5)/8 + 5/8)]
>>> sympy.solve(z**3-1,z)
[1, -1/2 - sqrt(3)*I/2, -1/2 + sqrt(3)*I/2]
>>>
Sympy에서 복소수의 기본단위인 j 를 나타내는 심볼은 I이다.
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 23