python과 함께 배우는 신호 해석 - 제 3 강. numpy, matplotlib,...

26
Python과 함께 배우는 신호 해석 3 강. Numpy, Matplotlib, Sympy 소개 (8장. 신호와 시스템 해석을 위한 Python 프로그래밍 기초) 박섭형 한림대학교 전자공학과

Upload: others

Post on 18-Jan-2020

7 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께 배우는 신호 해석

제 3 강. Numpy, Matplotlib, Sympy 소개

(제 8장. 신호와 시스템 해석을 위한 Python 프로그래밍 기초)

박섭형

한림대학교 전자공학과

Page 2: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

배울 내용

Numpy의 배열

Numpy를 이용한 행렬 연산

Matplotlib를 이용한 그래프 그리기

SymPy를 부호적 수학 계산

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 2

Page 3: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Python의 배열

Python에서 1 차원 벡터는 다음과 같이 리스트 변수로 표현할 수도 있다.

리스트 변수를 이용한 연산은 리스트와 리스트의 덧셈과 리스트와 숫자의곱셈이 정의되어 있으나, 연산 결과는 공학 분야에서 사용하는 벡터의연산과는 다른 결과가 나온다.

>>> a = [1, 3, 5, 3, 15]>>> 2*a[1, 3, 5, 3, 15, 1, 3, 5, 3, 15]>>> a+a[1, 3, 5, 3, 15, 1, 3, 5, 3, 15]>>>

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 3

Page 4: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Python의 배열

Python의 리스트는 숫자 뿐만 아니라 다양한 데이터 형을 수용한다. 반면에내장 array 클래스는 균일한 숫자 데이터 형만을 다룰 수 있다.

>>> import array>>> a=array.array('i',[1,2,3])>>> b=array.array('i',[4,5,6])>>> aarray('i', [1, 2, 3]) // 'i'는정수형데이터를의미>>> barray('i', [4, 5, 6])>>> a+barray('i', [1, 2, 3, 4, 5, 6])>>>

내장 array 객체에 사칙 연산을 적용한 결과도 리스트 형과 같기 때문에 벡터나행렬을 처리하기에 적합하지 않다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 4

Page 5: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Numpy의 배열

Numpy는 과학 연산을 위해서 설계된 다차원 배열 (multidimensionalarray) 처리를 위한 Python 확장 패키지이다.

숫자 연산을 할 때 리스트 형이나 내장 array 클래스의 객체를 사용하는것보다 Numpy 패키지를 사용하면 더 효율적이고 편리하게 연산을 수행할수 있다.

1 import numpynumpy 모듈의 함수나 변수를 사용할 때는 numpy.함수 또는 numpy.변수형식을 사용한다.

2 import numpy as newnamenumpy를 불러 들여 새로운 이름인 newname으로 사용한다. 즉, newname.함수또는 newname.변수 형식을 사용한다.

3 from numpy import *Numpy 모듈에 있는 모든 객체를 불러 들여서 현재에 이름 공간과 합치는방법이므로 모듈 이름 없이 함수와 변수를 바로 사용한다. Numpy 모듈의 일부객체만 사용할 때는 ∗ 대신에 객체 이름만 쓸 수도 있다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 5

Page 6: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Numpy의 배열 생성

원소가 4 개인 1 차원 배열 a와 원소가 10 개인 2 차원 배열 b를 만드는 예제

>>> import numpy as np>>> a = numpy.array([0, 1, 2, 3])>>> aarray([0, 1, 2, 3])>>> b = np.arange(10).reshape(2,5)>>> barray([[0, 1, 2, 3, 4],

[5, 6, 7, 8, 9]])>>> b.shape(2, 5)>>> b.ndim2>>> b.size10>>>

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 6

Page 7: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Numpy의 배열

array( )는 리스트를 numpy의 배열로 변환하는 함수이다

arange( )는 주어진 구간에서 균일한 간격의 숫자를 만드는 함수이다.앞 예에서 numpy.arange(10)은 0부터 9까지 1 간격의 숫자를 만드는함수이다.

NumPy의 주요 객체는 동일한 데이터 형을 갖는 원소들로 구성된 다차원배열이다.

각 원소의 인덱스는 음이 아닌 정수의 튜플로 표시된다.

>>> b[(1,2)]7>>> b[1,2]7>>>

Numpy에서 차원은 축(axis)이라고 부르고, 축의 개수를 rank라고 부른다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 7

Page 8: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Numpy의 배열 연산

Numpy를 이용한 행렬 연산을 살펴 보자. 예를 들어, 다음과 같은 2× 3 행렬A,B를 생각해 보자.

A =

[1 2 3

3 2 5

], B =

[−1 3 5

1 4 2

]

두 행렬의 덧셈과 뺄셈은 각각 다음과 같다.

A + B =

[1− 1 2 + 3 3 + 5

3 + 1 2 + 4 5 + 2

]=

[0 5 8

4 6 7

],

A − B =

[1− (−1) 2− 3 3− 5

3− 1 2− 4 5− 2

]=

[2 −1 −2

2 −2 3

].

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 8

Page 9: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Numpy의 배열에 대한 원소끼리의 연산

Python에서는 크기가 같은 배열에 대해서 +,−, ∗, / 등의 산술 연산을 수행할수 있다.

>>> a = np.array([1, 2, 3, 3, 2, 5]).reshape(2,3)>>> b = np.array([[-1,3,5],[1,4,2]])>>> a+barray([[0, 5, 8],

[4, 6, 7]])>>> a-barray([[ 2, -1, -2],

[ 2, -2, 3]])>>> a*barray([[-1, 6, 15],

[ 3, 8, 10]])>>> a/barray([[-1, 0, 0],

[ 3, 0, 2]])>>>한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 9

Page 10: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Numpy의 배열에 대한 원소끼리의 연산

4칙 연산 외에도 다음과 같이 다양한 연산을 numpy의 다차원 배열에 적용할 수있다.

>>> a**2array([[ 1, 4, 9],

[ 9, 4, 25]])>>> np.sqrt(a)array([[ 1. , 1.41421356, 1.73205081],

[ 1.73205081, 1.41421356, 2.23606798]])>>> np.sqrt(b)__main__:1: RuntimeWarning: invalid value encounteredin sqrtarray([[ nan, 1.73205081, 2.23606798],

[ 1. , 2. , 1.41421356]])>>>

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 10

Page 11: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Numpy의 배열을 이용한 행렬 곱셈

ABT =

[1 2 3

3 2 5

] −1 1

3 4

5 2

=

[1 · (−1) + 2 · 3 + 3 · 5 1 · 1 + 2 · 4 + 3 · 23 · (−1) + 2 · 3 + 5 · 5 3 · 1 + 2 · 4 + 5 · 2

]

=

[20 15

28 21

],

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 11

Page 12: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Numpy의 배열을 이용한 행렬 곱셈

ATB =

1 3

2 2

3 5

[−1 3 5

1 4 2

]

=

1 · (−1) + 3 · 1 1 · 3 + 3 · 4 1 · 5 + 3 · 22 · (−1) + 2 · 1 2 · 3 + 2 · 4 2 · 5 + 2 · 23 · (−1) + 5 · 1 3 · 3 + 5 · 4 3 · 5 + 5 · 2

=

2 15 11

0 14 14

2 29 25

.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 12

Page 13: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Numpy의 배열을 이용한 행렬 곱셈

이 두 연산을 Python으로는 다음과 같이 계산할 수 있다.

>>> np.dot(a, b.transpose())array([[20, 15],

[28, 21]])>>> np.dot(a.T, b)array([[ 2, 15, 11],

[ 0, 14, 14],[ 2, 29, 25]])

>>>

transpose() 함수는 행렬의 전치 행렬을 만드는 함수이고, dot() 함수는행렬의 내적을 계산하는 함수이다. a.transpose() 대신에 a.T라고 쓸수도 있다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 13

Page 14: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Matplotlib 모듈

Python의 패키지 가운데에 Matplotlib는 데이터를 시각화할 때 필화요한다양한 함수를 지원하는 패키지이다.

Matplotlib는 기본적으로 Matlab의 그래프 관련 함수들과 매우 유사하다.

plot() 함수를 사용하는 가장 기본적인 사용 형식은 다음과 같다.

plot(x, y) # plot x and y using default line style# and color

plot(x, y, 'bo')# plot x and y using blue circle markersplot(y) # plot y using x as index array 0..N-1plot(y, 'r+') # ditto, but with red plusses

stem() 함수의 사용 형식은 다음과 같다.

stem(x, y, linefmt='b-', markerfmt='bo', basefmt='r-')

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 14

Page 15: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Matplotlib: 샘플의 개수에 따른 그래프 차이

예제 8.2폐구간 [0, 3π]에서 x(t) = sin(t) 함수의 그래프를 그리시오. 단, 해당 구간을균등한 간격으로 샘플을 취한 후 plot() 함수를 사용하여 그래프를 그리시오.단, 샘플의 개수는 11, 21, 31 개

>>> from matplotlib.pylab import *>>> from numpy import *>>> t =linspace(0, 3*pi, 11) # 11 -> 21, 31>>> x = sin(t)>>> title("Example of plot(t,x): 11-points")<matplotlib.text.Text object at 0x02A7F110>>>> plot(t,x)<Container object of 3 artists>>>> show()

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 15

Page 16: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Matplotlib: 샘플의 개수에 따른 그래프 차이

이 예제에서 11을 21과 31로 바꾸어 샐행하면서 얻은 3 개의 그래프는 다음과같다.

0 2 4 6 8 101.0

0.5

0.0

0.5

1.0Example of plot(t,x): 11-points

0 2 4 6 8 101.0

0.5

0.0

0.5

1.0Example of plot(t,x): 21-points

0 2 4 6 8 101.0

0.5

0.0

0.5

1.0Example of plot(t,x): 31-points

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 16

Page 17: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Matplotlib: 정현파 신호 그래프 그리기

예제 8.3폐구간 [0, 3π]에서 x(t) = sin(t)를 균등한 간격으로 21 개의 샘플을 취한 이산신호의 그래프를 그리시오.

>>> t =linspace(0, 3*pi, 21)>>> x = sin(t)>>> title("Example of stem(t,x): 21-points")<matplotlib.text.Text object at 0x02B20F50>>>> stem(t,x)<Container object of 3 artists>>>> show()

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 17

Page 18: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Matplotlib: 정현파 신호 그래프 그리기

이 프로그램을 실행하면 다음 그래프를 얻을 수 있다.

0 2 4 6 8 101.0

0.5

0.0

0.5

1.0Example of stem(t,x): 21-points

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 18

Page 19: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

수치적 계산과 Sympy를 이용한 부호 계산의 차이

일반적인 컴퓨터 시뮬레이션은 컴퓨터의 부동 소숫점 표현을 이용해서주어진 문제의 해의 근사값을 수치적으로 계산하는 것

사람들이 수학에서 변수, 함수, 수식 등을 이용하는 것과 동일하게 수학의표현 자체를 다룰 수 있는 컴퓨터를 이용한 계산 방법을 컴퓨터 대수(computer algebra) 또는 부호적 계산 (symbolic computation), 또는대수적 계산 (algebraic computation)이라고 한다.대표적인 CAS

Mathematica: 지원하는 기능이 많고 완성도가 높은 고가의 상용 소프트웨어Maxima: 완성도가 높은 공개 소스 소프트웨어Sympy: Python 모듈로, Mathmatica나 Maxima에 비해서 완성도는 낮지만신호와 시스템 분야에서 사용할 수 있는 기능의 대부분을 제공

Sympy를 제외한 다른 CAS 소프트웨어를 사용하기 위해서는 새로운언어를 다시 배워야 하는데, SymPy는 Python의 외부 라이브러리이기때문에 새로운 언어를 배워야 하는 부담이 없는 것이 가장 큰 장점이다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 19

Page 20: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

수치적 계산과 Sympy를 이용한 부호 계산의 차이

>>> import math as m>>> a = m.sqrt(4)>>> a2.0>>> m.sqrt(12)3.4641016151377544>>> m.sqrt(12) * a5.999999999999999>>>

>>> import sympy>>> b = sympy.sqrt(4)>>> b2>>> sympy.sqrt(12)2*sqrt(3)>>> sympy.sqrt(12) * b6>>>

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 20

Page 21: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Sympy 변수

어느 변수에 값을 지정하기 전에 별도의 선언 과정이 필요하지 않다

>>> b = sympy.sqrt(4)

SymPy에서는 symbols()이라는 메쏘드를 이용해서 변수를 정의한다.

>>> x = sympy.symbols('x')>>> y = sympy.symbols('y')>>> xx>>> yy>>> c = x + y>>> cx + y>>> (c**3).expand()x**3 + 3*x**2*y + 3*x*y**2 + y**3>>>

여기에서 x, y, c는 모두 Python의 일반변수이며, 일반 변수 x와 y에각각 Sympy의 심볼 x와 x를 대입한 것이다.

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 21

Page 22: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Sympy 변수

일반 변수와 Sympy의 심볼의 이름을 같게 사용하는 것이 일반적이지만 다음과같이 서로 다른 이름을 사용해도 된다.

>>> a = sympy.symbols('x')>>> b = sympy.symbols('y')>>> ax>>> by>>> c = a + b>>> cx + y>>> d = (c**4).expand()>>> dx**4 + 4*x**3*y + 6*x**2*y**2 + 4*x*y**3 + y**4>>> d.factor()(x + y)**4>>>한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 22

Page 23: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Sympy를 이용한 미적분 계산

Sympy 모듈에 있는 미분 함수는 diff()이고 적분 함수는 integrate()이다.

>>> from sympy import *>>> x = symbols('x')>>> expr = 2*x + sin(3*x) -exp(-3*x)>>> expr.diff()

-3*x3*cos(3*x) + 2 + 3*e>>> expr.integrate()

-3*x2 cos(3*x) ex - -------- + -----

3 3>>>

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 23

Page 24: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

Sympy를 이용한 정적분 계산

정적분을 구할 때는 다음 예와 같이 적분 변수와 구간을 함께 명시하면 된다.다음 스크립트는

∫ π

0sin(x)dx를 구하는 예이다.

>>> from sympy import *>>> x = symbols('x')>>> integrate(sin(x), (x, 0, pi))2>>>

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 24

Page 25: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

기타 기능

혹시 π,√2, e 등과 같은 무리수들의 근사값에 대해서 궁금했던 적이 있다면

다음 스크립트가 궁금증에 대한 답을 줄 수 있을 것이다. evalf() 메쏘드는수식의 값을 계산한 결과를 되돌려 준다.

>>> from sympy import *>>> pi.evalf()3.14159265358979>>> pi.evalf(20)3.1415926535897932385>>> pi.evalf(100)3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068>>> x = sqrt(3) + 1>>> x1 + sqrt(3)>>> x.evalf()2.73205080756888

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 25

Page 26: Python과 함께 배우는 신호 해석 - 제 3 강. Numpy, Matplotlib, …contents.kocw.net/KOCW/document/2014/Hallym/parkseophyeng/05.pdf · (제8장.신호와시스템해석을위한Python

Python과 함께배우는 신호해석

박섭형

Numpy를이용한 행렬연산

Matplotlib모듈을이용한그래프그리기

Sympy 라이브러리를이용한부호적 계산

과학 계산용Python참고 자료

과학 계산용 Python 참고 자료

[1] Scipy Tutorial(http://docs.scipy.org/doc/scipy/reference/tutorial/)Scipy 공식 문서. Numpy, Scipy, Matplotlib, IPython, Sympy, Pandas에관한 내용을 정리하여 제공.

[2] Python Scientific Lecture Notes (http://scipy-lectures.github.io/)Euroscipy 2011 Tutorial 자료를 지속적으로 보완하고 있는 자료.

[3] Sympy Documentation (http://docs.sympy.org/latest/index.html)Sympy의 최신 자료

한림대학교 박섭형 Python과 함께 배우는 신호 해석 제 3 강. Numpy, Matplotlib, Scipy, Sympy 소개 26