CSE5004 – Lecture 4 Solved

$ 29.99
Category:

Description

프로그래밍….디버깅. 의사코드
Jung-Il Choi

• 좋은프로그램이란?
 정확성: 수치적인결과를다루기때문에, 프로그램이정확한값을계산해야한다.
 성능: 대량의데이터나복잡한계산을다루기때문에, 프로그램이빠르고효율적으로처리할수있 어야한다.
 재사용성: 다양한문제에동일한알고리즘이사용되기때문에, 프로그램이모듈화되어다른문제에 서도쉽게재사용될수있어야한다.
 확장성: 문제가복잡해질수록더많은계산자원이필요하게되므로, 프로그램이대규모분산시스 템에서도동작할수있도록설계되어야한다.
 유지보수성: 복잡한수식과알고리즘이사용되기때문에, 코드의가독성과유지보수성이높아야다 른연구자나개발자가이해하고수정할수있다.
• 좋은프로그래밍방법
 프로그램에대한계획을정확히세우고작성할것
문제에대한정확한이해와알고리즘구현의구체적인계획이없으면프로그램작성이후오류를수정하는 데에더많은시간과노력이들어가게된다.
계획하는데에는해결하려는문제의개요부터시작해모듈을어떻게구성할것인가, 어떤순서로프로그램 이실행되는가를포함한다.
프로그램계획은전체적인것부터시작하고, 코드의작성은구체적인함수부터시작해전체프로그램을완 성하는것이좋다.
프로그램계획에사용되는방법에의사코드(pseudo code) 작성이있다.
의사코드(Pseudo code)
• 실제프로그래밍언어가아닌, 프로그램의구조와흐름을설명하기위한비공식적인코드표현방식.
• 실제코드작성전에프로그램의구조와흐름을설계하고검증하는데도움이된다.
• 작성할코드를더쉽게이해하고유지보수가가능하다.
• 프로그램설계과정에서발생하는오류를미리파악할수있다.
의사코드의예시) bisection method
• 좋은프로그래밍방법
 오류가있는지모듈별로확인하며작성할것
모듈마다예외까지포함해오류가있는지충분히확인하고다음모듈을작성하는것이좋다. 현재모듈이오류가생겼을때호출한모듈이오류가있다면오류를찾는것으로도많은시간을소비하게된 다.
 코드를항상보기좋게작성할것
다음은가독성을높이는몇가지예시이다.
명령어(instruction)을적게사용

• 에러의종류
 기본에러의종류로는 Syntax error, runtime error와 logical error가있다.
 Syntax error: 프로그램코드를작성하면서문법적으로잘못된부분이있는경우발생하는오류

• 에러의종류
 runtime error: 코드가실행될때발생하는에러
자주발생하는 runtime error에는다음과같은경우가있다.
1. TypeError: 변수또는인수의형(type)이올바르지않은경우
2. NameError: 정의되지않은변수를참조하려고하는경우
3. ZeroDivisionError: 0으로나누는경우
 TypeError의예시
• 에러의종류
 runtime error: 코드가실행될때발생하는에러
자주발생하는 runtime error에는다음과같은경우가있다.
1. TypeError: 변수또는인수의형(type)이올바르지않은경우
2. NameError: 정의되지않은변수를참조하려고하는경우
3. ZeroDivisionError: 0으로나누는경우
 NameError의예시
• 에러의종류
 runtime error: 코드가실행될때발생하는에러
자주발생하는 runtime error에는다음과같은경우가있다.
1. TypeError: 변수또는인수의형(type)이올바르지않은경우
2. NameError: 정의되지않은변수를참조하려고하는경우
3. ZeroDivisionError: 0으로나누는경우
 ZeroDivisionError의예시
• 에러의종류
 logical error: 프로그램의알고리즘자체가오류를포함하고있어올바르지않은결과가나타나는 오류

• Try/except
 파이썬에서예외처리를가능하게해주는구문
 예외가발생할가능성이있는코드블록을 ‘try’블록에넣고, 해당예외가발생했을때실행할코드를
‘except’블록에넣어구현한다.
 다양한오류가발생했을때예외처리를가능하게해준다.

11 / 31
• Type checking
 변수나함수의인자, 반환값등에사용되는데이터타입을검사하는과정
 파이썬은동적타이핑(Dynamic Typing) 언어로변수를선언할때데이터타입을지정하지않아도 된다. 따라서코드를작성하다보면변수나함수에서예상하지않은타입의데이터가발생할수있 다. 이러한문제를예방하고디버깅을용이하게하기위해수행하는과정이다.
 type()함수를사용하여직접확인하거나 isinstance() 함수를사용한다.
a,b,c가 float형이아니면계산하고싶지않을때다
음과같이 type check를통해예외처리를할수있
다.
• 디버깅이란?
 프로그램내의오류또는버그를시스템적으로제거하는과정으로오류가발생한원인을찾아내고 수정하기위해데이터또는알고리즘을수정해야할수도있다.
 중단점설정, 코드단계별실행, 문자열출력등의다양한기법과도구를활용할수있다.
 파이썬에서는 pdb(Python Debugger), ipdb(IPython Debugger)를제공한다.
 http://docs.python.org/3/library/pdb.html

• 파이썬디버깅도구사용예제
 실행중오류가발생한후디버깅
 Magic command인 %debug로디버깅도구를활성화시킬수있다.

• 파이썬디버깅도구사용예제
 실행중오류가발생한후디버깅
 %debug로 ipdb를활성화시킨후디버깅명령어를사용해쉽게오류를찾아수정할수있다..
 h : 도움말함수목록을얻기
 p x : x의값을출력하기
 type(x) : x의타입가져오기
 p locals() : 모든로컬변수출력하기
 q : 디버거(또는프로그램) 종료하기
• 파이썬디버깅도구사용예제
 실행전디버깅도구활성화
 %pdb on 명령어를사용하면디버깅도구가활성화된다. (%pdb off로비활성화)

활성화후코드실행시오류가발생하면이전과동일한방법으로디버깅도구를사용할수있다.

• 파이썬디버깅도구사용예제
 중단점설정(Breakpoint)
 pdb 모듈의 set_trace()함수를이용해중단점을설정할수있다.
코드실행시중단점에서디버깅도구가실행되며 c(continue)를입력할때까지디버깅도구명령어를이용해 변수의값등을확인할수있다.

• 문제정의(root finding) • Bisection method
 f(x) = 0 → y = f(x) and y = 0
 기본아이디어
중간값정리(intermediate-value theorem)
• Bisection method

• Bisection method
• Newton’s method
• 기본아이디어 : 기울기
 뉴턴의방법에서는함수 f가미분가능하다는것을가정한다. 이는 f의그래프가각점에서기울기와 고유한접선을가지고있다는것을의미한다.
 함수 𝑓𝑓의그래프에서어떤점 𝑥𝑥0, 𝑓𝑓(𝑥𝑥0) 에서는그점근처의곡선을상당히잘근사하는접선이존 재한다. 수학적으로, 이는선형함수가 𝑥𝑥0 근처에서주어진함수 𝑓𝑓에근사된
다는것을의미한다. 𝑥𝑥0에서두함수 𝑙𝑙과 𝑓𝑓는일치한다. 따라서 𝑙𝑙의해를 𝑓𝑓의해로근사할수있으며 𝑙𝑙의해는다음과같이구할수있다.

• Newton’s method • 해석(테일러급수전개(Taylor series expansion))
 𝑥𝑥0가 𝑓𝑓의해라고가정을하고어느정도의보정값 ℎ를더해줘야정확하게해를구할수있을지, 즉,
𝑓𝑓 𝑥𝑥0 + ℎ = 0이될지생각해보자.
 만약 𝑓𝑓가충분히좋은함수라면, 𝑥𝑥0에서의테일러급수를다음과같이구할수있다 :

 위식에서 ℎ를구하는것은쉽지않다. ℎ를직접구하는대신 ℎ의근사값을찾아보자. 두번째항까 지남기고근사한식은다음과같다 :
 근사한식으로부터 이다.
 𝑓𝑓 𝑥𝑥0 + ℎ = 0을정확히만족하지는않지만새로운근사값을다음과같이얻을수있다 :

• Newton’s method

• Newton’s method
𝑓𝑓 = 𝑥𝑥3−2𝑥𝑥 + 2
Pseudo code의 부분을수정하면설정한 tolerance에서수렴할수있게수정할수있다.
• Newton’s method 𝑓𝑓 = 𝑥𝑥3− 3𝑥𝑥2− 1

• Newton’s method 𝑓𝑓 = 𝑥𝑥𝑒𝑒−𝑥𝑥

• Newton’s method 𝑓𝑓 = 𝑥𝑥3−2𝑥𝑥 + 2

• Newton’s method with SciPy
 SciPy 모듈의 SciPy.optimize의함수를이용하여해를쉽게구할수있다.

 https://docs.scipy.org/doc/scipy/reference/optimize.html
• Newton’s method with SciPy
𝑓𝑓 = 𝑥𝑥3−2𝑥𝑥 + 2의해를구하는경우, SciPy로같은결과를얻을수있다.

• Newton’s method (Systems of Nonlinear Equations)

Root finding

Q&A Thanks for listening

Reviews

There are no reviews yet.

Be the first to review “CSE5004 – Lecture 4 Solved”

Your email address will not be published. Required fields are marked *