운동시뮬레이션 제2주 A First Numerical Problem 컴퓨터시뮬레이션학과 2014년 봄학기 담당교수 : 이형원

Slides:



Advertisements
Similar presentations
비즈쿨 - 정 성 욱 - - 금오공고 비즈쿨 - 정 성 욱 1. 나는 각 단원들의 활동들에 성실하게 참여 하겠습니다. 우리의 다짐 2. 나는 나와 전체의 발전을 위해 각 멘토들의 지도에 순종하겠습니다. 3. 나는 각 단원들을 숙지함으로써 비즈니스 마인드를 함양하고 자신의.
Advertisements

글로벌 인턴십 (Global Internship) 인하공업전문대학
2015 Product design 산업디자인과 Kim Dong Hyun.
단국대에서의 6 시그마 추진에 대한 제언 : Back to the Past 단국대학교 경상대학 경영학부 : 양 종곤.
다음 목차 이전 1 인문학부 철학과 교양강좌 담당교수 : 김 영 수 서양의 지혜 Introduction to the Western Philosophy 2003 년.
온 도 관 리 예 방 시 스 템 www. 은성냉동산업.com 1 중부대학교 & ㈜은성냉동산업 공동개발 중부대학교 Capstone Design 경진대회 대상 수상.
운동시뮬레이션 제10주 실습 Random systems.
단체교섭 보고 ※ 본교섭 ※ 실무교섭 구 분 날 짜 비 고 상견례 1월19일 단협 시작 본교섭
전남행복수업 design 독서ㆍ토론 수업 지원 자료 활용 목포유달초등학교 김미향.
전남행복수업 design, 독서·토론수업 연구의 개요를 말씀드리겠습니다..
Chapter 10 사람들을 괴롭히지 않는 법 게임소프트웨어공학 김정한 김연진.
Vision System Lab, Sang-Hun Han
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
제 1 장 서 론.
9장 부프로그램(2) 순천향대학교 컴퓨터공학부 하 상 호.
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 1 강원대학교 컴퓨터과학전공 문양세.
TDD Junit TDD & Spring Framework 참고자료
Internet Control Message Protocol (ICMP)
Part 08 함수 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
Numerical Analysis - preliminaries -
프로그램 개발과 언어 Chapter 05 컴퓨터의 이해
Introduction.
CHAPTER 21 UNIVARIATE STATISTICS
☞ 기업혁신과 통합정보시스템 도입을 동시 수행하는 전사적 활동인 ERP에 대한 개념과 구축방법의 실무 습득
(PROJECT명: Web Server관리)
Program Management - Program and Project Definition -
Realistic Projectile Motion
수치해석 2011 Homework Part.1 환경공학과 정수교.
5. 비제약 최적설계의 수치해법 (Numerical Methods for Unconstrained Optimum Design)
진동운동과 카오스 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
성탄절을 향한 길에서.
GPU Gems 3 Chapter 13. Volumetric Light Scattering as a Post-Process
2장 수학적 기초 2.1 서 론 2.2 복소변수의 개념 2.3 미분방정식 2.4 라플라스변환
Data Mining Final Project
2015. 인문소양교육.
사회복지프로그램 기획 및 평가 -로직모델을 중심으로 김유심(가양4종합사회복지관장) 프로그램의 개발과 평가의 개념
수학과 학술강연회 (2011년도 1학기) 기초과학연구소 3월 18일(금) 채동호 (성균관대학교)
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 년 봄학기
칼빈의 생애와 개혁자로의 변모 사학과 김종식.
국제의료관광 관련 법, 제도.
2d game pRogramming 1차 발표 이재남.
치유정원 화훼디자인계열 가드닝전공 오현경.
문자열 처리하기 working with Strings
과학적 관리론 과 목 명 : 유아교육기관운영관리 교 수 명 : 홍성훈 교수님 학 과 : 유아교육과 학 번 :
기업회생 절차.
2. 윤리학의 원리와 적용 가. 상대주의와 절대주의.
9장 부프로그램(2) 순천향대학교 컴퓨터공학부 하 상 호.
남아메리카 선교 김수정, 이하정 전희진, 장성경.
체크포인트 가정 내 일어나는 사고에 대해 알아보고 사고예방을 위해 주의한다. | 예방법 장소별 사고 – 방과 거실 1 2 높은 곳 에 물건 두지 않기! 날카로운 모서리는 천으로 씌우기!
중등교원 전보시스템 로그인 오류시 해결 해결방안 * 작성일 2016 년 12 월 15일 * 작성자 광주광역시교육청.
CHAPTER 9-1 한국의 사회복지정책 - 사회보험제도 -
(제작자: 임현수)모둠:임현수,유시연,유한민
천국 가는 길 천국 가는 길 ♧ 천국 가는 길 ♧ 1. 죄와 사망(지옥) 1) 사람의 3가지 공통점 - 죄인, 죽음, 심판
The general form of 0-1 programming problem based on DNA computing
자원봉사론 제 8 장. 자원봉사 프로그램 개발.
첫 번째 수치 문제 컴퓨터시뮬레이션학과 담당교수 : 이형원 E304호,
Cubeways 3D Printing Daily Report
김진승 한국물리학회 교육위원장, 전북대학교 물리학과
가설검정의 기본원리 Introduction to Hypothesis Testing
자료구조 강의소개 정성훈 연락처 : 이메일 : 연구실 : 연219호 연락처 : 이메일 : 홈페이지: 정성훈.
제 8 장 상미분 방정식과 편미분 방정식.
C.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
장기 UW 프로세스 이해하기 UW센터
7주차 실습 FPGA 보드 사용법.
Chapter 2 직선운동.
경찰학 세미나 제 5 강 경찰관직무집행법 2조 5호의 의미 신라대학교 법경찰학부 김순석.
제3장 선교 구역.반장학교 제1단계.
흐름도FLOWCHART 프로그래밍 과정 전단부 처리 단계 문제 분석 논리 설계
실습#5 인터랙티브 프로토타입 2011년 2학기 숙명여자대학교 임순범.
Presentation transcript:

운동시뮬레이션 제2주 A First Numerical Problem 컴퓨터시뮬레이션학과 2014년 봄학기 담당교수 : 이형원 E304호, hwlee@inje.ac.kr

Chapter 1 A first numerical problem Radioactive decay A Numerical approach Design and construction of a working program: codes and pseudocodes Testing your program Numerical considerations Programming guidelines and philosophy

Introduction 물리학의 많은 문제는 미분방정식을 포함하고 있다. 일차 미분 방정식의 풀이 물리학의 많은 문제는 미분방정식을 포함하고 있다. 포사체운동, 단진동 운동, 행성운동 일차 미분 방정식의 풀이 미분 방정식을 푸는 기술 습득 프로그램을 작성하는 과정 습득 수치적인 문제를 해결하는 프로그램작성 법 습득

Radioactive Decay 많은 핵은 불안정하다는 것이 알려져 있 다. 핵붕괴는 무작위(無作爲)과정이다. 동위원소 235 𝑈 (143중성자, 92양성자)는 확률이 작기는 하지만 두 개의 대충 반 크기의 핵과 양성자, 중성자, 전자, 알파입자로 붕괴한다. 핵붕괴는 무작위(無作爲)과정이다. 한 우라늄핵이 정확히 언제 붕괴할지 모른다. 붕괴할 확률을 줄 수 있다. 붕괴하는 데 걸리는 평균 시간을 줄 수 있다. 우라늄의 경우 수명이 1.0× 10 9 년이다.

Radioactive Decay 수많은 핵자가 모여있는 것을 가정하 면 핵자의 수는 다음 미분 방정식을 만족 한다. 𝑑 𝑁 𝑈 𝑑𝑡 =− 𝑁 𝑈 𝜏 식(1.1) 직접 대입을 통하여 다음이 해인 것을 알 수 있다. 𝑁 𝑈 = 𝑁 𝑈 (0) 𝑒 −𝑡/𝜏 식(1.2), 𝜏는 평균 수명

Numerical Approach 위 미분 방정식은 해석적으로 해를 구 할 수 있음. 수치적으로 해를 구하는 방법을 적용 할 것임. 풀이의 목적은 𝑁 𝑈 를 임의시간에서의 값을 구하는 것임. 특별한 시간(보통은 0)에서 주어진 값을 안 후 이후의 시간에서의 값을 구함. 이렇게 해를 구하는 것을 초기값문제(initial value problem) 이라고 함.

Numerical Approach 해석적인 방법은 부록 A에 있음. 수치적인 해를 위하여 테일러(Taylor) 전 개를 사용함. 𝑁 𝑈 ∆𝑡 = 𝑁 𝑈 0 + 𝑑 𝑁 𝑈 𝑑𝑡 ∆𝑡+ 1 2 𝑑 2 𝑁 𝑈 𝑑 𝑡 2 ∆𝑡 2 +⋯식(1.3) 위 식은 ∆𝑡에서의 핵자의 수는 0에서의 핵자의 수와 핵자 수의 미분을 알면 구 할 수 있음을 보여준다.

Numerical Approach ∆𝑡가 매우 작은 경우 2차항 이상을 무 시할 수 있다. 𝑁 𝑈 ∆𝑡 ≈ 𝑁 𝑈 0 + 𝑑 𝑁 𝑈 𝑑𝑡 ∆𝑡 식(1.4) 위 결과는 미분의 정의 𝑑 𝑁 𝑈 𝑑𝑡 ≡ lim ∆𝑡→0 𝑁 𝑈 𝑡+∆𝑡 − 𝑁 𝑈 (𝑡) ∆𝑡 ≈ 𝑁 𝑈 𝑡+∆𝑡 − 𝑁 𝑈 (𝑡) ∆𝑡 식(1.5) 식을 정리하면 𝑁 𝑈 𝑡+∆𝑡 ≈ 𝑁 𝑈 𝑡 + 𝑑 𝑁 𝑈 𝑑𝑡 ∆𝑡 식(1.6)

Numerical Approach 오차는 ∆𝑡 2 임 대부분의 경우 ∆𝑡를 줄이면 오차는 무시할 수 있다 오차는 ∆𝑡 2 임 대부분의 경우 ∆𝑡를 줄이면 오차는 무시할 수 있다 어떤 경우에는 무시한 오차가 문제를 일으 키는 경우가 있다 수치적인 문제를 다룰 때 항상 오차분석에 주의해야 한다. 오차에 대한 자세한 내용은 부록 A에 있음.

Numerical Approach 핵붕괴 미분방정식에 적용하면 𝑁 𝑈 𝑡+∆𝑡 ≈ 𝑁 𝑈 𝑡 − 𝑁 𝑈 𝜏 ∆𝑡 식(1.7) 𝑁 𝑈 𝑡+∆𝑡 ≈ 𝑁 𝑈 𝑡 − 𝑁 𝑈 𝜏 ∆𝑡 식(1.7) 해를 수치적으로 구하는 과정은 𝑡=0에서의 초기조건을 준다. 𝑡=∆𝑡에서의 값을 위 식으로 계산한다. 𝑡=2∆𝑡에서의 값을 같은 식을 사용하되 모 든 값에 𝑡=∆𝑡에서의 값을 적용하여 구한 다. 원하는 시간까지 위 계산을 반복한다.

Numerical Approach 위 과정으로 구한 해는 정확한 해가 아 니고 근사해라는 것을 항상명심해야 한다. 위 과정으로 구한 해는 정확한 해가 아 니고 근사해라는 것을 항상명심해야 한다. 수치적인 해를 구하는 것에 있어서의 또 다른 목적은 수치적으로 구한 근사 해와 정확한 해 사이의 차이를 무시할 수 있도록 하는 방법을 찾는 것이다. 이 방법은 문제에 따라 달라진다.

Numerical Approach 식(1.6)과 식(1.7)을 통하여 해를 구하는 방법을 오일러(Euler) 방법이라고 한다. 이방법과 이와 유사한 방법을 계속하 여 사용할 것이다. 수치 해를 구하는 다른 방법에 대해서 는 부록 A에서 자세히 다룬다. 수치 해를 구하는 방법은 풀려는 문제 에 따라 유리할 수도 있고 불리할 수도 있다.

Design and construction of a working program: codes and pseudocodes 앞 절에서 유도한 오일러방법을 프로 그램화하는 방법을 배운다. 여러 가지 프로그램언어로 작성할 수 있지만 슈도코드(pseudocode)라는 언 어를 이용하여 일반적인 방법으로 프 로그램을 기술할 수 있다. 슈도코드로된 프로그램은 다른 언어로 바로 변환될 수 있다. 슈도코드는 프로그램의 중요한 부분을 일반언어로 표현한다.

Design and construction of a working program: codes and pseudocodes 프로그램은 모두 슈도코드롤 기술할 것이다. 이 장에서만 Java로 기술해 준다. 프로그램하는 것은 글쓰기와 같이 개 인에 따라 매우 다를 수 있다. 프로그램할 때는 일반적으로 따라야 하는 룰이 있다. 결국에는 내가 작성한 프로그램을 다 른 사람 또는 내가 이해할 수 있어야 한 다.

Design and construction of a working program: codes and pseudocodes 제안하는 올바른 프로그램 방법은 다음과 같다. 제일 먼저 해야 할 일은 프로그램 하기 전에 생각부터 해야 한다. 문제를 어떻게 풀 것인가에 대한 개요 어떤 변수나 매개변수가 필요한지 결정 프로그램의 기본 구조 필요한 변수 선언 변수와 매개변수 초기화 계산 결과 저장

Design and construction of a working program: codes and pseudocodes 핵 붕괴 프로그램의 슈도 코드 프로그램을 설명하는 주석 필요한 변수와 배열 선언 변수를 초기화(Initialize) 실제 값을 계산(Calculate) 결과를 저장(Store)

Java Program

프로그램 설명 1번 줄 : 패키지명 3번~8번 줄 : 프로그램에 필요한 라이브 러리 포함 10번 ~ 59번 줄 : 응용프로그램 클래스 Decay 선언 12번~14번 : 필요한 변수 선언 배정도 실수형 변수 배열 두 개(Nu, t) 배정도 실수형 변수 세 개(tau, dt, time) 정수형 변수 한 개(n)

프로그램 설명 18번~24번 : main 함수 정의 20번 줄 : 클래스 인스턴스 생성 21번 줄 : 초기화 함수 호출 22번 줄 : 계산한 수 호출 23번 줄 : 결과 저장함수 호출 25번 ~ 45번 줄 : 필요한 함수 정의

Initialiaze 함수 슈도 코드 필요한 배열 생성 입력 스트림 생성 필요한 변수 입력하여 저장 배열의 크기 계산

Initialize 함수

Initialize 함수 설명 26번 ~ 27번 줄 : 최대 크기로 배열 생성 28번 줄 : 입력 스트림 생성 29번 줄 : 입력을 위한 메시지 출력 30번 줄 : 숫자를 입력하여 변수에 저장 31번 ~ 36번 줄 : 29,30을 해당하는 변수 에 대해서 반복 수행 37번 줄 : 배열의 크기를 설정(배열의 크기를 100과 실제 간격의 수 중에 작 은 것으로 결정한다)

Calculate 함수 슈도 코드 각 시간 간격 스텝 i(i=0 부터 시작)에 대하여 스텝 i+1에서의 핵자의 수를 계 산한다: 𝑁 𝑈 𝑡 𝑖+1 = 𝑁 𝑈 𝑡 𝑖 − 𝑁 𝑈 ( 𝑡 𝑖 )/𝜏 𝑑𝑡 (식(1.7) 사용) 𝑡 𝑖+1 = 𝑡 𝑖 +∆𝑡 𝑛−1 시간 스텝에 대하여 반복

Calculate 함수

Calculate 함수 설명 40번 ~ 43번 줄 : 원하는 시간 스텝만큼 반복하여 계산하는 for 루프 41번 줄 : 다음 스텝의 핵자 수 계산 42번 줄 : 다음 스텝의 시간 계산

Store 함수 슈도 코드 출력 스트림 생성 각 시간 간격 스텝 i(i=0 부터 시작)에 대하여 스텝 i+1에서의 시간과 핵자의 수를 저장한다: 𝑁 𝑈 𝑡 𝑖 , 𝑡 𝑖 를 저장한다. 𝑛−1 시간 스텝에 대하여 반복

Store 함수

Store 함수 설명 46번 줄 : 출력 스트림 변수 선언 47번 ~ 52번 줄 : 출력 스트림 생성 및 오류 처리 47번 ~ 52번 줄 : 출력 스트림 생성 및 오류 처리 51번 줄 : 오류가 난 경우 오류 메시지 출력 53번 ~ 56 번 줄 : 원하는 시간 스텝만큼 반복하여 출력하는 for 루프 54번 줄 : 출력 자료 형식 생성 55번 줄 : 문장을 파일에 저장

클래스 코드 전체 원본 파 일은 홈 페이지에 있음

결과 확인 결과를 이해하는 것이 무엇 보다 중요 하다. 다양한 그래프 프로그램 활용 시간에 따른 핵자의 수를 계산 계산 결과는 숫자로 파일에 저장된다. 그래프를 이용하여 확인 조건에 따라서 매우 많은 자료가 출력된다. 다양한 그래프 프로그램 활용 그래프를 그려 보는 것이 매우 중요하다. gnuplot 사용 (직접 작성할 필요 없다.)

결과 그래프

Testing Your Program 앞 절에서 동작하는 프로그램을 만든 다고 했지만 바른 결과를 준다고 보장 할 수는 없다. 단지 프로그램상의 오류가 없는 것이다. 올바른 결과를 준다는 것을 확신할 때 까지는 동작하는 것이라고 말할 수 없 다. 프로그램이 실행이 된 후에는 정상 동 작하는 지를 확인 하는 일은 쉬운 일이 아니다.

General guideline for test 1 결과가 그럴 듯 한가? 어떤 수치 계산을 하더라도 미리 결과가 대 강 어떨 것이다 하는 것은 알고 있어야 한 다. 결과가 직관과 직감에 맞는지 확인해야 한 다. 이 과정을 통하여 문제에 대한 이해를 높일 수 있다. 남에게 결과를 설명할 때 상대방이 확신을 가질 수 있도록 할 수 있어야 한다.

General guideline for test 2 결과가 아는 정확한 결과와 일치하는 가? 핵붕괴 문제는 해석적인 정확한 해를 알고 있기 때문에 결과를 비교할 수 있다. 일반적으로는 특별한 경우에만 정확한 해 를 알 수 있는 경우가 대부분이다. 해를 아는 특별한 경우에 대하여 반드시 결 과를 얻어서 정확한 것과 비교하는 것이 프 로그램이 동작한다는 것을 보여주는 필요 조건(충분조건은 아님)이다.

General guideline for test 3 항상 크기가 다른 스텝으로 계산한 결 과가 일치한다는 것을 점검해야 한다. 핵붕괴 프로그램은 시간간격 dt 가 있다. 다른 프로그램도 유사하게 스텝 또는 그리 드 크기가 있다. 올바른 프로그램은 스텝크기와 독립적으 로 같은 결과를 주어야 한다.

Testing your program 프로그램을 제대로 동작하는지를 점검 하는 것은 마지막 단계의 단순한 작업 이 아니다. 프로그램을 점검(수정)하는데 걸리는 시간이나 프로그램을 작성하는데 걸리 는 시간이 거의 같을 수 있다. 본인이 맞다고 믿지 못하는 프로그램 의 결과는 믿을 수 없다.

Numerical considerations 수치계산에서 오차를 따지는 것은 중 요한 문제이다. 오차에 관한 문제는 다음에 대한 답을 찾는 것이다. 어떤 문제에 대하여 가장 적합한 알고리즘 을 어떻게 구성하는가? 알고리즘이 주는 수치오차는 어떻게 계산 하는가?

Numerical considerations 본 과목에서는 수치적인 오차에 대한 문제를 조금만 다룰 것이다. 수치 오차 문제가 중요하지 않다는 것 이 아니라 물리문제에 더 집중하기 위 한 것이다. 수치 오차문제 알고리즘 구성문제는 특히 물리문제와 연관이 있을 때 섞어 서 같이 설명할 것이다.

Numerical considerations 핵붕괴 프로그램에서 오차는 미분방정 식을 식(1.7)로 근사 하는 데서 발생한 다. 추가로 프로그램언어의 실수표현의 한 계에 의하여 발생한다. 이 것을 반올림 (round-off) 또는 절단(truncation) 오차 라고 하면, 모든 컴퓨터에 존재한다. 이를 줄이기 위하여 실수(實數)로 double precision 을 사용할 것을 권장한 다.

Numerical considerations 어떤 문제는 반올림오차나 절단오차에 매우 민감하다. 이를 완전히 해결하는 확실한 방법은 없다. 몇 가지 이러한 문제를 안고 있는 것에 대하여 앞으로 논의할 것이다.

Discretization(이산화) 핵붕괴 문제를 풀기 위하여 우리는 시 간은 일정한 간격으로 나누었다. (discretization) 즉 연속 미분 방정식을 식(1.7)과 같이 이산 차분 방정정식으로 바꾸었다. 이를 통하여 연속의 시간에서 핵자의 수를 구하는 것이 아니고 이산시간 점 들(𝑛∆𝑡)에서만 핵자의 수를 구한다. 이러한 시간 또는 공간의 이산화는 일 반적인 방법이다.

Discretization(이산화) 이렇게 이산화 때문에 발생하는 오차 를 무시할 수 있는지를 어떻게 알 수 있 는가? 어떻게 이산화 한 변수의 스텝크기를 정할 수 있는가? 위 질문에 대한 정답은 없으며 단지 답 을 구한 방향(guideline)을 제시할 수 있 다.

Guideline for discretization 1 같은 계산을 여러 스텝크기로 해보아 야 한다. 다음 페이지의 그림은 핵붕괴 프로그램을 평균수명은 1초, 스텝크기를 0.5, 0.2, 0.05초 로 해서 각각 계산한 결과이다. 스텝크기가 작아짐에 따라 결과가 정확한 값에 빠르게 수렴함을 알 수 있다. 식 (1.6)에서 무시한 오차가 ∆𝑡 2 이므로 예 산된 결과이다. 즉 ∆𝑡를 줄이면 결과가 좋 아진다.

Guideline for discretization 1 시간이 𝑡만 큼 지난 점에서의 오차는 ∆𝑡스 텝크기로 𝑡/∆𝑡 스텝만큼 갔으므로 오차의 크기는 ~ 𝑡/∆𝑡 × ∆𝑡 2 ~∆𝑡 정도 이다. 이 오차를 전역오차(global error)라고 한다. 따라서 오일러(Euler) 방법으로 계산한 결 과와 정확한 값 사이의 오차는 ∆𝑡를 반으로 줄이면 오차가 반으로 줄어들게 될 것이다.

Guideline for discretization 1 ∆𝑡=0.5𝑠 ∆𝑡=0.2𝑠 ∆𝑡=0.05𝑠 Solidline exact result

Guideline for discretization 1 핵붕괴 문제는 정확한 해가 있어서 정 확도를 계산하는 것이 쉽다. 정확한 해를 모를 경우에는 어떻게 하 는가? 스텝크기를 줄였을 때 모든 점에서 한 값으 로 수렴하는지를 판단해야 한다. 스텝크기는 문제의 특성시간보다 작게 잡 아야 한다. 핵붕괴인 경우에는 평균수명 특성 시간의 수 퍼센트가 적당하다.

Guideline for discretization 1 좋은 수치 알고리즘도 어떤 특정한 경 우에는 매우 불안정한 경우가 있음. 오일러 방법은 핵붕괴에 대해서는 잘 동작하지만 3장에서 배우는 진동문제 에서는 답을 주지 못한다. 모든 문제에 다 잘 동작하는 수치 알고 리즘은 없으며, 풀고자 하는 문제에 대 한 이해와 여러분의 천재성을 발휘하 여 알고리즘을 잘 선택해야 한다.

Programming guidelines and philosophy 프로그램을 작성하는 것은 개인별로 모두 다르다. 그러나 앞에서도 언급했지만 프로그램 을 작성하는 일반적인 방향(guideline) 있다. 제시하는 방향은 결국 프로그램을 가 능한 잘 이해할 수 있도록 하는 것이다.

Programming guideline 1 프로그램 구조 중요한 일을 하는 함수를 사용하여 프로그 램을 이해하기 쉽고 읽을 수 있도록 구성하 라. 핵붕괴 프로그램의 main 함수는 실제로 프 로그램 전체의 구성을 보여 준다. 항상 이 런 형식을 유지하라. 몇 줄 이상의 코드는 함수로 만들어라. 반복되는 코드를 함수로 만들어라.

Programming guideline 2 이해 가능한 변수명을 사용하라 주어진 문제와 연관된 변수명을 선택하라. 이해 가능한 변수명은 프로그램을 이해하 기 쉽게 하고 변수명 자체가 주석역할을 한 다.

Programming guideline 3 주석을 사용하라 프로그램을 설명하는 주석을 작성하라 변수를 설명하는 주석을 사용하라

Programming guideline 4 분명하게 하기 위하여 (거의)모든 것을 희생하라 가장 중요한 부분은 간결하게 작성하면 프 로그램이 빨리 수행된다는 것은 잘못된 것 이다. 가끔 간결한 코드가 빨리 수행되기도 하지 만 이것이 프로그램의 효율을 보장하지는 않는다. 코드를 간결하고 간단하게 작성하면 읽기 가 어렵고 모호해진다.

Programming guideline 4 분명하게 하기 위하여 코드를 몇 줄 더 사용하 는 것이 좋다. 코드는 연관된 물리방정식과 유사하게 보이게 하는 것이 좋다. 후에 코드를 점검하는 시간을 줄여 준다. 시간이 오래 걸리는 프로그램인 경우(수분 또 는 수일)는 실행속도가 문제가 되지만 실행시 간을 줄이는 것은 알고리즘 수정으로 얻어지 며 코드의 이곳 저곳을 수정해서 얻어지는 것 이 아니다. 프로그램 효율을 높이는 것보다 정확하게 동 작하는 것이 우선이다.

Programming guideline 5 그래프로 정확하게 표현하는 것에 시 간을 투자하라 어떤 값을 어떻게 그래프로 그릴 것인가를 잘 생각해야 한다. 좌표축의 이름을 정확하게 표현해야 한다. 매개변수들의 값은 그래프에 직접 보이게 한다.