Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을...

23
Python 과 함께 배우는 신호 해석 박섭형 복수소의 대수 연산 1N 승근 Python 에서 복소수 다루기 Python과 함께 배우는 신호 해석 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 (2 장. 복소수 기초) 박섭형 한림대학교 전자공학과 한림대학교 박섭형 Python과 함께 배우는 신호 해석 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 1

Transcript of Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을...

Page 1: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

Python과 함께배우는 신호해석

박섭형

복수소의대수 연산

1의 N 승근

Python에서 복소수다루기

Python과 함께 배우는 신호 해석

제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산

(제 2 장. 복소수 기초)

박섭형

한림대학교 전자공학과

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 1

Page 2: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

Python과 함께배우는 신호해석

박섭형

복수소의대수 연산

1의 N 승근

Python에서 복소수다루기

배울 내용

복소수의 기본 개념

복소수의 표현

오일러 (Euler) 공식

복소수의 대수 연산

1의 N 승근

Python에서 복소수 다루기

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 2

Page 3: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 4: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 5: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 6: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 7: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 8: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 9: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 10: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 11: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 12: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 13: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 14: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 15: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 16: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 17: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 18: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 19: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 20: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

Python과 함께배우는 신호해석

박섭형

복수소의대수 연산

1의 N 승근

Python에서 복소수다루기

cmath 모듈 이용하기

cmath 모듈은 복소수와 관련된 함수와 π와 e 상수를 제공하는 모듈이다.

polar() 함수: 직각좌표 형식의 복수소를 극좌표 형식의 복소수로 바꾸어실수부와 허수부를 리스트로 반환하는 함수

rect(,) 함수: 두 개의 매개 변수를 각각 크기와 위상으로 받아들여직각좌표 형식의 복소수로 반환해 주는 함수

phase 함수: 직각좌표 형식의 복소수의 위상을 계산하는 함수

이 세함수에 사용되는 매개 변수와 반환값은 모두 radians

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 20

Page 21: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 22: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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

Page 23: Python과 함께 배우는 신호 해석 - 제 5 강. 복소수 연산 및 Python을 ...contents.kocw.net/.../2014/Hallym/parkseophyeng/03.pdf · 2016. 9. 9. · Python 과함께

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