Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을...
Transcript of Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을...
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
ac 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
ac−c a− 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) 나눗셈:직각좌표계 표현을 사용하여 두 복소수의 나눗셈을 계산하면 다음과 같다.
z1z2
=z1z2
z∗2z∗2
=a + jbc + jd · c − jd
c − jd
=(a + jb)(c − jd)(c + jd)(c − jd) (2.31)
=(ac + bd) + j(bc − da)
c2 + d2
=ac + bdc2 + d2
+ j bc − dac2 + d2
극좌표계 표현을 사용하여 두 복소수의 나눗셈을 계산하면 다음과 같다.
z1z2
=r1ejθ1
r2ejθ2=
r1r2
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 z
8
z9
θ
θθ
θ
θ
θ
θθ
θ
(a) z = 0.95eπ5 일 때.
ℜe{z}
ℑm{z}
0
z0= 1
z1
z2z
3
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] = zn
2이라고 하자. 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π
N n, (2.46)
여기에서 n = 0, 1, · · · ,N − 1이다.따라서 식 (2.12)의 해는 다음과 같은 N 개의 복소수이다.
z = ej 2πN n =(
ej 2π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 = ej 2πN n, n = 0, 1, 2, 3, 4이다.
ℜe{z}
ℑm{z}
0
z1 = ej 2π
5
z2
1= e
j 4π
5
z3
1= e
j 6π
5
z4
1= e
j 8π
5
z5
1= 1
(a) z1 = e 2π5 .
ℜe{z}
ℑm{z}
0
z2 = ej 4π
5
z2
2= e
j 8π
5
z3
2= e
j 12π
5
z4
2= e
j 16π
5
z5
2= 1
(b) z2 = e 4π5 .
한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 16
Python과 함께배우는 신호해석
박섭형
복수소의대수 연산
1의 N 승근
Python에서 복소수다루기
1의 N 승근
ℜe{z}
ℑm{z}
0
z3 = ej 4π
5
z2
3= e
j 8π
5
z3
3= e
j 12π
5
z4
3= e
j 16π
5
z5
3= 1
(c) z2 = e 6π5 .
ℜe{z}
ℑm{z}
0
z4 = ej 4π
5
z2
4= e
j 8π
5
z3
4= e
j 12π
5
z4
4= e
j 16π
5
z5
4= 1
(d) z4 = e 8π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.real2.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