MATLAB을 활용한
이 산 수 학
(Discrete Mathematics with MATLAB)
저자 이준엽
머 리 말
지난 30여 년 동안, 컴퓨터 성능 향상과 대중적 보급은 수학에 새로운 가능성 을 제공하여 주고 있다. 컴퓨터의 활용은 과거에 해결하기 어려운 여러 수학적 문제에 대한 새로운 해결책을 제시하는 동시에, 우리에게 과거에는 접하지 못했던 새로운 수학 적 문제들을 던져 주고 있다. 이러한 상황에서 여러 수학 개념들을 이해하고 이를 바탕 으로 사회가 요구하는 문제들을 해결하기 위해서는, 컴퓨터의 활용이 필수 불가결하게 되었다. 따라서 예비 수학자들에게 쉽게 컴퓨터의 활용기술을 접할 수 있도록 하는 것 이 매우 중요하게 되었다. 수학을 학습하면서 자연스럽게 컴퓨터를 활용하고, 컴퓨터를 응용하는 곳곳에 숨겨진 수학적 원리들을 살펴보는 것이 이 책의 목적이다.
이러한 목적을 달성하기 위하여, 이 책은 학생들이 비교적 쉽게 컴퓨터를 활용할 수 있는 MATLAB이란 언어를 사용하여 내용을 전개하였다. MATLAB은 1980년대 학 생 교육용으로 개발되어, 지금은 전 세계 수많은 유료 사용자를 가지고 있는 가장 보편 적 과학 및 공학용 계산 도구이다. MATALB은 여러 무료 호환 프로그램이 있어 손쉽 게 구할 수 있고, 다양한 확장 프로그램을 이용하면 이공학 분야의 최신 계산 기법을 빠르고 효율적으로 적용할 수 있다. 그러나 무엇보다도 이 프로그램의 가장 큰 장점은 어렵게 프로그래밍 언어의 문법을 따로 배우지 않고도 누구나 쉽게 자신의 생각을 프 로그램화 할 수 있다는 점이다. 이 책에서는 가능한 한 프로그램 언어에 대한 부담 없 이 수학적 사고를 컴퓨터에 옮기는 훈련을 할 것이다.
이 책은 저자가 수학을 전공하려는 학생들이 컴퓨터를 보다 자유롭게 활용할 수 있도록 돕기 위해 이화여대에서 강의한 내용들을 정리한 것이다. 이 책을 통해, 컴퓨터 를 잘 활용하는 것이 순수 수학을 이해하는 데 도움이 된다는 것과, 다양한 응용문제를 컴퓨터로 해결하기 위해서는 많은 수학적 기초 지식이 필요하다는 사실을 깨닫기를 바 란다. 나아가, 이 책이 수학과 컴퓨터를 계속하여 공부하기 위한 기초를 쌓는데 조금이 나마 도움이 되기를 기원한다.
이 책은 일 년 혹은 한 학기 과정으로 강의할 수 있도록 만들어졌다. 책은 아래 도표와 같이 MALTAB 기초, 기초 응용, 심화 응용으로 구성되어 있다. 도표에서 굵은 화살표는 선후관계가 분명하여 차례로 다루는 것이 좋은 내용을, 가는 화살표는 권장되 는 강의 순서를 보여주고 있다. 총 10개 장 전체 내용은 일 년간 강의에 적절한 분량을 담고 있지만, 강의 목적에 따라 다양한 형태의 한 학기 강좌로 운영할 수 있도록 유연 한 구조를 가지고 있다. 예를 들어 MATALB 기초와 기초 응용을 위주로 1~3장, 6~7장 을 다루는 것도 가능하지만, 수학적 엄밀성 보다 다양한 수학 주제를 다루고자 한다면 여기에 4장과 8장을 추가할 수도 있다. 또한 기초 응용과 심화 응용을 모두 다루되 2, 4, 5, 7, 8, 10장의 앞부분 반 정도만을 다루는 것도 한 방법일 수 있다. 아울러 9장 그 림 그리기는 프로그래밍과 꼭 필요한 것은 아니지만 흥미 있는 내용이므로 1~3장 기초 를 배운 이후에 언제든 다루는 것이 가능하다.
이 책을 완성하기까지 도움을 준 많은 분들에게 감사드린다. 초기 자료들을 컴퓨 터로 정리하여 준 김윤희양, 교정 작업에 수고해 준 수치해석학 연구실 대학원생들에게 도 감사하는 바이다. 그러나 무엇보다도 이 책의 초고를 교재로 하여 함께 수업하였던 이화여대 수학과 학부생들 한 명 한 명과 이 책이 완성된 기쁨을 함께 하고자 한다.
아름다운 이화여대 교정에서 2017년 새해 저자 이준엽.
차 례
1. 배열과 행렬 ···1
1.1 행렬 만들기 ···1
1.2 행렬의 크기와 특수 행렬들 ···5
1.3 행렬의 방향과 전치행렬 ···9
1.4 상수와 배열, 배열과 배열의 연산 ···11
1.5 행렬의 곱셈과 나눗셈 ···15
1.6 배열의 주소할당 ···18
1.7 논리배열과 부배열 찾기 ···24
1.8 성긴 행렬 ···26
1.9 기록 파일 만들기와 그림 파일 저장하기 ···28
1.10 연습문제 ···29
2. 행렬의 응용 ···35
2.1 행렬식과 선형연립방정식 ···35
2.2 투입-생산 분석 ···43
2.3 마코프 체인(Markov chains) ···48
2.4 흡수 마코프 체인 ···53
2.5 유전학 ···58
2.6 연습문제 ···60
3. Matlab 기초 프로그래밍 ···65
3.1 관계 및 논리 연산자 ···65
3.2 NaN과 공행렬 ···68
3.3 조건분기문 : If-Else-End 명령문 ···70
3.4 간단한 For-반복문과 While-반복문 ···71
3.5 MATLAB M-화일 ···73
3.6 연습문제 ···77
4. 집합과 논리 ···79
4.1 집합과 집합의 연산 ···79
4.2 명제와 논리회로 ···84
4.3 동치명제와 논리적 추론 ···90
4.4 연습문제 ···92
5. 게임이론 ···95
5.1 행렬 경기와 경기 전략 ···95
5.2 최상의 전략과 경기값 ···99
5.3 결정된 게임과 우월 관계 ···103
5.4 n×n행렬 경기의 혼합 전략 ···109
5.5 m×2 혹은 2×m 행렬 경기의 혼합 전략 ···114
5.6 m×n 행렬 경기와 선형 계획법 ···115
5.7 연습문제 ···120
6. Matlab 응용 프로그래밍 ···123
6.1 흐름제어문 : For와 While 반복문 ···123
6.2 문자열 만들기 ···127
6.3 문자열 함수 ···131
6.4 연습문제 ···135
7. 조합론 ···137
7.1 비반복추출 ···138
7.2 반복추출 ···142
7.3 중복원소추출 ···145
7.4 연습문제 ···149
8. 정수론 ···153
8.1 잉여류 연산 ···153
8.2 약수와 최대공약수 ···155
8.3 소수와 소인수 분해 ···157
8.4 잉여류 합동 관계 ···161
8.5 페르마의 정리와 오일러 함수 ···163
8.6 연습문제 ···166
9. Matlab 그림 그리기 ···169
9.1 2차원 그래프 그리기 ···169
9.2 그래프 조작하기 ···172
9.3 2차원 그래프 그리기의 다른 방법들 ···177
9.4 3차원에 곡선과 곡면 그리기 ···183
9.5 3차원 그림 다루기 ···187
9.6 3차원 그림 그리기 도구들 ···189
9.7 요약 ···194
9.8 연습문제 ···195
10. 그래프 이론 ···199
10.1 그래프와 그래프의 표현 ···199
10.2 유향그래프 ···203
10.3 그래프에서의 거리 ···209
10.4 토너먼트 경기 그래프 ···215
10.5 군집 검출 ···219
10.6 오일러 다리 문제와 일반화 ···223
10.7 연습문제 ···227
■ 저자 약력 : 이준엽
∙ 한국과학기술원 과학기술대학 이학사 (1986~1990)
∙ New York University 수학전공 Ph. D. (1990~1994)
∙ Courant Institute Visiting member (1994~1995, 2010~2011)
∙ 이화여자대학교 수학과 교수 (1996~현재)
■ 사용되어진 프로그램
∙ MATLAB, http://www.matworks.com
∙ Octave (MATLAB 무료 대치품) http://www.octave.org
∙ 그 밖의 유용한 프로그램 : WinZip, EditPad(Text 편집기), AcrobatReader(PDF viewer), WinEdt(TeX 문서 편집기),
GnuPlot(그래프 작성기), Ghostscript, GSView(Postscript viewer)
■ 참고 자료실
∙ MATLAB을 제외한 프로그램과 프로그램 소스를 내려 받을 수 있습니다.
∙ http://math.ewha.ac.kr/~jylee/Finite
M A T LA B 을 활 용 한
이 산 수 학
본 도서의 저작권은 저자에게 있습니다.
학부 강의 교재를 제외한 용도로 본 도서를 이용하고자 하는 경우, 저자의 사전 승인을 얻어야 합니다.
2017년 1월