지은이 이병준 blee@catholic.ac.kr 서울대학교 수학교육과를 졸업하여, 동 대학원 수리과학부에서 석사, 박사학위를 취득했습니다. 주요 연구 분야는 수치해석, 전산 유 체역학, 수학적 최적화, 산업응용수학 등입니다. 현재는 가톨릭대학교 수학과 및 인공지능학과(겸무) 교수로 재직 중입니다. 가톨릭대 학교는 2019년에 4차 산업혁명 혁신선도대학으로 선정되었으며, 참여 학과 교원으로 활동하면서 학생들에게 데이터 과학을 위한 수학을 소개하는 데 힘쓰고 있습니다. 또한 한국산업응용수학회(KSIAM), 대한수학회(KMS), 한국전산유체공학회(KSCFE) 회원으 로 활동 중이며, 현재 한국산업응용수학회(KSIAM) 이사도 역임하고 있습니다. 데이터 과학을 위한 기초수학 with 파이썬 초판발행 2021년 1월 6일 지은이 이병준 / 펴낸이 전태호 펴낸곳 한빛아카데미(주) / 주소 서울시 서대문구 연희로2길 62 한빛아카데미(주) 2층 전화 02 – 336 – 7112 / 팩스 02 – 336 – 7199 등록 2013년 1월 14일 제25100-2017-000063호 / ISBN 979 – 11 – 5664 – 516 – 0 93000 책임편집 고지연 / 기획 박현경 / 편집 박현경, 노희준 디자인 표지 박정화, 내지 박정화 / 전산편집 한진인쇄공사 / 제작 박성우, 김정우 영업 이윤형, 길진철, 김태진, 김성삼, 이정훈, 임현기, 이성훈, 김주성 / 영업기획 김호철, 주희 이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 아래 이메일로 알려주십시오. 잘못된 책은 구입하신 서점에서 교환해 드립니다. 책값은 뒤표지에 표시되어 있습니다. 홈페이지 www.hanbit.co.kr / 이메일 question@hanbit.co.kr Published by HANBIT Academy, Inc. Printed in Korea Copyright © 2021 이병준 & HANBIT Academy, Inc. 이 책의 저작권은 이병준과 한빛아카데미(주)에 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 복제 및 무단 전재를 금합니다. 지금 하지 않으면 할 수 없는 일이 있습니다. 책으로 펴내고 싶은 아이디어나 원고를 메일(writer@hanbit.co.kr)로 보내주세요. 한빛아카데미(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다. 지은이 머리말 데이터 과학을 이해하기 위한 필수 도구:수학 음성인식 스피커, 자율주행 자동차와 같은 데이터 기반의 기술들이 생활의 일부가 되기 시작했 습니다. 이와 같이 방대한 데이터를 분석하고 다루는 ‘데이터 과학’은 하드웨어를 만드는 기술 이 급격히 발전함에 따라 빠른 속도로 발전하고 있습니다. 몇 년 전, 이세돌 9단과 인공지능 바둑기사 알파고의 대전은 한국뿐만 아니라 전 세계를 떠들 썩하게 만들었습니다. 구글 딥마인드Google DeepMind라는 회사가 개발한 알파고는 이세돌 9단을 이기기 위해 슈퍼컴퓨터를 이용해 약 5개월 동안 400만 개의 바둑기보를 학습했다고 합니다. 인간이 100만 개의 바둑기보를 학습하는 데 1000년이 걸린다는 사실을 염두에 둔다면 엄청난 학습량입니다. 데이터 과학의 핵심은 방대한 데이터를 체계적으로 분석하는 능력을 지닌 인간을 잘 모방하는 것입니다. 인간은 수많은 정보를 받아들이는 ‘인지능력’과 수집한 정보들을 바탕으로 새로운 정보를 만드는 ‘학습능력’을 갖고 있습니다. 이를 담당하는 역할을 하는 인간의 기관은 바로 뇌 입니다. 결국, 인간을 잘 모방하기 위해서는 인간의 뇌가 수행하는 인지능력과 학습능력을 이 해해야 합니다. 뇌와 관련된 수많은 연구들이 이루어지고 있지만 현재까지 정확한 뇌의 작동원 리는 밝혀지지 않은 상태입니다. 따라서 많은 사람들이 인간의 뇌를 과학적으로 모델링하여 데 이터 과학에 적용하려고 노력하고 있습니다. 이와 같은 과학적 모델링은 확률과정론, 최적화 이론 등 다양한 수학 이론에 기반을 두고 있습니다. 이 책은 데이터 과학의 기본이 되는 과학적 모델링을 이해하기 위한 기초적인 수학적 지식을 전달하는 데 목표를 두고 있습니다. 비록, 많은 사람들은 수학이라는 것을 괴로운(?) 학문이라 고 느끼지만, 데이터 과학과 관련된 여러 가지 기술들을 분석하고 이해하기 위해서는 과학적 모델링의 기본이 되는 수학 이론들을 반드시 숙지하고 있어야 합니다. 이 책에서는 데이터 과 학을 이해하기 위해 필수적인 기초 수학을 비교적 쉽고 정확하게 전달하려고 노력했습니다. 이 책을 집필하면서 다음과 같은 점들에 특히 주의를 기울였습니다. 첫째, 데이터 과학에 필요한 수학적 지식을 활용하는 능력을 기르는 것과 동시에 관련 개념을 정확히 이해할 수 있도록 다양한 연습문제 및 증명을 수록했습니다. 둘째, 일부 예제와 연습문제에 대해 Python을 활용한 풀이 방법을 제시하고 장별 마지 막에 관련 개념을 프로그래밍을 통해 확인할 수 있는 [프로그래밍 실습]을 제공함으로 써 데이터 과학에 필수적인 능력인 코딩 능력을 함양하고자 노력했습니다. 셋째, 이 책의 수학 용어는 대한수학회 용어집을 활용하여 최대한 공식적인 용어로 작 성하였고, 중요하다고 생각되는 용어는 영어 병기를 추가해 이해를 돕습니다. 넷째, 이 책에서 학습하는 수학적 내용에 대한 중요성을 확인할 수 있도록, 장별 [칼럼] 에서 데이터 과학 관련 응용 분야에 활용되는 실제 사례를 소개합니다. 다섯째, 독자들의 이해를 돕기 위하여 정확하면서도 쉽게 설명하려고 노력했습니다. 앞에서 언급한 것처럼, 이 책의 목표는 데이터 과학을 이해하는 데 필요한 기초적인 수학적 지 식을 쉽고 상세하게 소개하는 것입니다. 책에서 소개되는 대부분의 내용들은 데이터 과학과 관 련된 분야뿐 아니라 고등 과학을 이해하기 위한 기초적인 수학 내용들입니다. 따라서, 이 책의 내용들을 충분히 숙지한다면 데이터 과학으로 대변되는 4차 산업혁명 시대의 수많은 기술들을 이해할 수 있는 기초 능력을 함양할 수 있을 것으로 기대됩니다. 이 책이 나오기까지 많은 분들이 도움을 주셨습니다. 이 책의 기획에서 출간까지 수고를 아끼 지 않은 고지연 팀장님, 박현경 선생님, 그리고 한빛아카데미㈜ 관계자분들과 전태호 대표님께 감사드립니다. 그리고 집필과 관련해서 진심으로 응원해주신 부모님께 감사드립니다. 마지막으로 이 책의 구상에서 집필 과정까지 많은 도움을 준 아내이자 친구 수진이와 든든한 지원군이 되어준 예나, 태양이에게 고맙다는 말을 전합니다. 이병준 미리보기 도입글 정의/정리 해당 장의 내용을 활용한 중요한 핵심 개념과 수식을 데이터 과학의 사례를 정의하고, 다시 한 번 정리하여 소개합니다. 보여줍니다. 정의 2-7 로그함수 수학기초 1장 a>0, a+1인 실수 a, 실수 집합 R과 집합 R+에 대하여 로그함수 f : R+ → R는 다 음과 같습니다. f(x)=logax 미분과 적분 함수 로그함수 y=logax와 지수함수 y=ax은 서로 역함수 관계이므로 이 두 함수의 그래프는 직 선 y=x에 대하여 대칭입니다. 따라서, 로그함수 y=logax도 지수함수 y=ax과 마찬가지로 1.1 함수 a>1일 때 증가하고, a<1일 때 감소합니다. a>0인 실수 a에 대해 로그함수 y=logax의 그 1.2 합성함수 래프를 그려보고 성질을 정리해봅시다. 1.3 역함수 정리 2-9 벡터와 행렬 프로그래밍 함수 요약 로그함수의 그래프 연습문제 a>0, a+1을 만족하는 실수 a에 대해서, 로그함수 y=logax의 그래프는 a의 범위에 프로그래밍 실습 따라 다음과 같이 그릴 수 있습니다. y=x y=ax y 확률과 통계 y=ax y y=x y=logax 1 입력값을 일련의 과정에 따라 결괏값으로 도출하는 것을 ‘함수’라고 합니다. 그렇다면, 정보를 바탕으로 어떤 의사결정을 내리는 것도 일 1 1 x x 1 종의 함수라고 할 수 있습니다. 우리는 생활 속에서 수집한 정보를 y=logax 바탕으로 수많은 의사결정을 합니다. (a) a>1일 때 4차 산업혁명 시대인 오늘날에는 인간의 인지능력을 모방한 인공 (b) 0<a<1일 때 [그림 2-5] a의 범위에 따른 로그함수 y=logax의 그래프 지능 Artificial Intelligence, AI 도 일련의 과정에 따라 의사결정을 내릴 수 있 습니다. 인공지능에는 인간의 신경을 모방한 인공신경망 Artificial Neural Network, ANN 이 있고, 이 인공신경망에 들어온 정보를 받아들일지 여 부를 ‘헤비사이드 함수’의 근사인 ‘시그모이드 함수’로 표현합니다. 칼럼 1 (2) 신뢰도 99%의 신뢰구간 : [3x -2.58 예제 8-35 r r ] , 3x +1.96 !$N !$N r r ] , x 3 +2.58 !$N !$N 모평균의 신뢰구간 칼럼 8 미니배치 학습 2.2 지수함수와 로그함수 073 수학기초 (1) 신뢰도 95%의 신뢰구간 : [3x -1.96 인공지능을 학습시키는 것은 손실함수의 최솟값을 찾는 과정이며, [칼럼 4]에서는 오차 역 전파법을 사용해 변화율을 계산한다는 것을 살펴봤습니다. 하지만, 인공지능 학습을 위해 모든 데이터에 대해 손실함수의 변화율을 계산하는 것은 현재의 기술로써는 매우 어려운 일입니다. 을 임의로 추출하여 하루 운동시간을 조사하였더니, 평균 운동시간은 50분이었습니다. 학생들의 하루 운동시간의 모평균인 m을 신뢰도 95%로 추정하세요. 풀이 표본크기는 N=25, 표본평균 4X의 실제 값은 3x=50, 모표준편차는 r=20이므로 모평균 m의 신뢰도 미분과 적분 손글씨 이미지 데이터인 MNIST 데이터베이스는 인공지능의 성능을 살펴보는 예제로 많 한빛대학교 수학과 학생들의 하루 운동시간은 정규분포 N(m, 202)을 따릅니다. 한빛대학교 수학과 학생 중 25명 이 활용됩니다. MNIST 데이터베이스의 각 손글씨 이미지는 28_28픽셀로 이루어진 데 이터로, 60,000장의 이미지는 훈련 데이터이고, 10,000장의 이미지는 시험 데이터입 니다. 95%의 신뢰구간은 다음과 같습니다. 벡터와 행렬 [50-1.96 20 , 50+1.96 20 ]=[42.16, 57.84] 1425 1425 이로써 가장 기본적인 추정 방법 중 표본평균을 이용한 추정에 대해 살펴봤습니다. 이외에도 여러 가지 지표들을 활용한 추정이 존재하지만 기본적인 원리는 이 절에서 소개한 방법과 비슷 확률과 통계 하므로 여기서는 생략하도록 합니다. [그림 8-13] MNIST 데이터베이스 ▶ 확인문제 MNIST 데이터베이스 중 훈련 데이터 60,000장을 전부 학습시킨다고 해 봅시다. 픽셀 기 준으로 28_28_60,000=47,040,000픽셀에 해당하는 저장 공간이 필요합니다. 큰 데이 01 어느 지역에서 12월 한 달 동안 가구당 전기요금은 평균이 10만 원, 표준편차가 3만 원인 정규 터는 컴퓨터가 다루기 힘들 뿐만 아니라 학습에 필요한 오차 역전파법 계산이 불가능합 분포를 따른다고 합니다. 이 지역에서 크기가 9인 표본을 임의로 추출할 때, 가구당 전기요금 니다. 평균이 12만 원 이상일 확률을 구하세요. 미니배치(mini-batch) 학습은 이러한 문제를 해결하기 위해 전체 데이터 중 사용자가 지 정한 소량의 데이터를 임의추출해 학습시키는 방법입니다. MNIST 데이터베이스의 경우, 2 02 정규분포 N(m,40 )을 따르는 모집단에서 6400개의 표본을 임의로 추출하였을 때 표본평균 이 500이었습니다. 모평균 m을 신뢰도 99%로 추정하세요. 훈련 데이터 60,000장 중 100장의 표본을 임의추출해 이 표본에 대한 학습을 600번 반복 하는 것입니다(600_100=60,000). 복원추출 시 데이터가 중복해서 선택될 수도 있지 만, 통계적 이론인 ‘표본 평균의 평균’에 의해 100장의 표본을 600번을 추출해 학습시키 434 8장 확률과 통계 8.6 추정 435 예제/확인문제 칼럼 본문에서 다룬 개념들에 대한 장별 도입부에서 소개한 문제를 풀어 보고, 일부 예제는 데이터 과학 사례를 통해 주요 Python 코딩을 직접 해봅니다. 개념의 활용을 살펴봅니다. 연습문제 프로그래밍 함수 요약 해당 장이 끝날 때마다 해당 장에서 등장한 Python 함수의 문제를 통해 주요 내용을 사용법과 예시를 보여줍니다. 다시 한 번 정리합니다. 표시는 코딩 풀이가 있는 문제입니다. 5 장 프로그래밍 함수 요약 01 np.exp(x) f(x)=ex의 값을 출력하는 함수입니다. 결과 e= 2.718281828459045 (a) : (x3-3x+2)dx 1 (b) : {ex- }dx x (e) : sin3xdx (f) : x2logxdx #e 02 np.abs(x) f(x)=|x|의 값을 출력하는 함수입니다. (d) : (3x-1)2dx 미분과 적분 (c) : (x+1)2(x-2)dx 코딩 print("e=", np.exp(1)) 2 x 02 함수 y=f(x)의 그래프 위의 점 (x, f(x))에서의 접선의 기울기는 (x -1)e 입니다. 또한 코딩 print(" -100 =", np.abs(-100)) 결과 표시가 붙은 문제는 코딩 풀이가 있는 문제입니다. 장 연습문제 01 다음 함수의 부정적분을 구하세요. 수학기초 5 -100 = 100 함수 f(x)의 극솟값이 1일 때, 극댓값을 구하세요. 벡터와 행렬 03 sp.integrate(식, 적분하고자 하는 변수) 03 f(1)=4를 만족하는 다항함수 f(x)의 한 부정적분 F(x)가 다음을 만족할 때, 함수 f(x)를 주어진 식의 적분하고자 하는 변수에 관한 부정적분을 출력합니다. 단, 적분상수는 출력 구하세요. F(x)=xf(x)+3x4-2x3+2 하지 않습니다. 코딩x = sp.Symbol('x') fx = 3*x**2 04 다음 함수의 부정적분을 구하세요. 결과 F(x)=x**3 04 sp.factor(식) Hint [연습문제 3-10]과 주어진 식이 인수분해가 가능하면 인수분해한 결과를 출력합니다. 확률과 통계 1 (a) : x(x+1) 2x-3 (b) : 2 x -3x+2 dx print("F(x)=",sp.integrate(fx,x)) ex+f m n 을 사용하세요. = + (ax+b)(cx+d) (ax+b) (cx+d) 코딩x = sp.Symbol('x') fx = x**2+4*x+3 05 두 함수 f(x), g(x)에 대해 f '(x)+g'(x)=sinx, 2f '(x)-g'(x)=cosx일 때, 함수 print("f(x)=",sp.factor(fx)) p p f(x), g(x)를 구하세요(단, f { }=1, g{ }=0). 2 2 결과 f(x)= (x + 1)*(x + 3) 06 다음 함수의 정적분을 구하세요. (a) :)2` e2x 1 dx-:)2` t dt ex+1 e +1 (c) :!3 x!%x2+2 dx 270 장 프로그래밍 실습 ;2Ò; 7 271 장 프로그래밍 실습 수학기초 Python은 Class라는 기능을 통해 개념의 추상화를 가능하게 합니다. Class를 이용해서 3차원 [유사코드 7-3]의 가우스 소거법으로 [예제 7-14]의 선형 연립방정식을 푸는 코드를 작성하세요. 벡터를 다루는 VECTOR3D class를 구현하고 테스트하세요. 여기서, VECTOR3D class는 x, +6x +3x =10 [ 4x5x +8x +2x +5x +3x =3 3x1-3x2+2x3-3x4=2 y, z를 성분(멤버)으로 갖고 있고, 벡터의 크기, 내적 및 외적을 구하는 함수(메소드)를 갖고 있 2 3 4 1 2 3 4 미분과 적분 # Ch 6. Pragramming practice 1 3x1+2x2+3x3+4x4=1 미분과 적분 다고 가정합시다. # Ch7 Programming Practice import numpy as np import numpy as np def __init__(self,x,y,z): self.x = x self.y = y # Matrix A and b 벡터와 행렬 벡터와 행렬 class VECTOR3D: A = np.array([[1.0,-1.0,2.0,1.0], [5.0, 8.0,6.0,3.0], [3.0, 2.0,1.0,4.0]]) b = np.array([2.0, 10.0, 3.0, 1.0]) def magnitude(self): 프로그래밍 실습 살펴본 Python 명령어를 응용하여 [4.0, 2.0,5.0,3.0], self.z = z x = np.zeros((4,)) def inner_product(self,v1): 확률과 통계 확률과 통계 # (x,y,z) =(x*x+y*y+z*z) return np.(self.x*self.x+self.y*self.y+self.z*self.z) # Forward Elimination for k in range(0,3): 심화 문제를 직접 for i in range(k+1,4): # self dot v1=self.x*v1.x+self.y*v1.y+self.z*v1.z*self xmult = A[i][k]/A[k][k] return self.x*v1.x+self.y*v1.y+self.z*v1.z 실습해 봅니다. for j in range(k,4): A[i][j]=A[i][j]-xmult*A[k][j] def cross_product(self,v1): b[i]=b[i]-xmult*b[k] # self X v1=VECTOR3D(self.y*v1.z-self.z*v1.y,self.z*v1.x-self.x*v1.z, # (d) :) exsinxdx 연습문제 수학기초 6 5장 적분 (b) :_Èù|sinx|dx self.x*v1.y-self.y*v1.x) x[3] = b[3]/A[3][3] return VECTOR3D(self.y*v1.z-self.z*v1.y,self.z*v1.x-self.x*v1.z, self.x*v1.y-self.y*v1.x) # Back substitution for i in range(2,-1,-1): # Test v1 = VECTOR3D(1,2,3) # v1=(1,2,3) sum = b[i] for j in range(i+1,4): v2 = VECTOR3D(2,5,-7) # v2=(2,5,-7) sum = sum - A[i][j]*x[j] x[i] = sum/A[i][i] print(" v1 =", v1.magnitude()) print(" v2 =", v2.magnitude()) 프로그래밍 실습 323 프로그래밍 실습 379 정답 및 소스코드 다운로드 한빛출판네트워크 접속(http://www.hanbit.co.kr) → [SUPPORT] 클릭 → [자료실] 클릭 목차 지은이 소개 .................................................................................................................................... 002 지은이 머리말 ................................................................................................................................ 004 미리보기 .......................................................................................................................................... 006 파이썬 설치 방법 .......................................................................................................................... 0 1 2 1장 1.1 함수 .................................................................................................................................... 020 1.2 합성함수 . ......................................................................................................................... 030 함수 1.3 역함수 ............................................................................................................................... 036 프로그래밍 함수 요약 ................................................................................................................. 045 연습문제 .......................................................................................................................................... 048 프로그래밍 실습 ........................................................................................................................... 0 5 1 2장 2.1 다항함수 ........................................................................................................................... 054 2.2 지수함수와 로그함수 ................................................................................................... 064 여러 가지 함수 2.3 삼각함수 ........................................................................................................................... 0 7 7 프로그래밍 함수 요약 ................................................................................................................. 093 연습문제 .......................................................................................................................................... 094 프로그래밍 실습 ........................................................................................................................... 0 97 3장 3.1 수열과 점화식 ................................................................................................................ 10 0 3.2 수열의 극한 . ................................................................................................................... 1 1 6 극한과 연속 3.3 함수의 극한 ..................................................................................................................... 1 3 0 3.4 함수의 연속 ..................................................................................................................... 1 3 9 프로그래밍 함수 요약 ................................................................................................................. 1 4 7 연습문제 .......................................................................................................................................... 1 4 8 프로그래밍 실습 ........................................................................................................................... 1 5 3 4장 4.1 미분계수와 도함수 ....................................................................................................... 1 5 6 4.2 미분법 ............................................................................................................................... 1 6 2 미분 4.3 고차도함수 ...................................................................................................................... 1 7 8 4.4 합성함수와 역함수의 미분법 .................................................................................... 1 8 1 4.5 음함수와 매개변수로 표현된 함수의 미분법 ...................................................... 1 8 6 4.6 로피탈의 정리 ................................................................................................................ 1 9 0 4.7 미분의 응용 ..................................................................................................................... 1 9 6 프로그래밍 함수 요약 ................................................................................................................. 2 1 1 연습문제 .......................................................................................................................................... 2 1 3 프로그래밍 실습 ........................................................................................................................... 2 1 6 5장 적분 5.1 부정적분 ........................................................................................................................... 220 5.2 여러 가지 함수의 적분 ................................................................................................ 226 5.3 치환적분법 ...................................................................................................................... 2 3 1 5.4 부분적분법 ...................................................................................................................... 236 5.5 정적분 ............................................................................................................................... 2 4 1 5.6 적분의 응용 ..................................................................................................................... 256 프로그래밍 함수 요약 ................................................................................................................. 2 70 연습문제 .......................................................................................................................................... 2 7 1 프로그래밍 실습 ........................................................................................................................... 2 74 6장 벡터와 공간 6.1 벡터 .................................................................................................................................... 2 7 8 6.2 공간좌표 ........................................................................................................................... 288 6.3 내적과 외적 . ................................................................................................................... 293 6.4 직선의 방정식과 평면의 방정식 .............................................................................. 308 프로그래밍 함수 요약 .................................................................................................................3 1 8 연습문제 .......................................................................................................................................... 320 프로그래밍 실습 ........................................................................................................................... 323 목차 7장 행렬 7.1 행렬과 기본연산 ............................................................................................................ 326 7.2 역행렬과 행렬식 ............................................................................................................ 335 7.3 선형 연립방정식 ............................................................................................................ 346 7.4 가우스 소거법 ................................................................................................................ 352 7.5 일차변환 ........................................................................................................................... 360 프로그래밍 함수 요약 ................................................................................................................. 3 74 연습문제 .......................................................................................................................................... 3 7 6 프로그래밍 실습 ........................................................................................................................... 3 7 9 8장 확률과 통계 8.1 순열과 조합 ..................................................................................................................... 382 8.2 이항정리 ........................................................................................................................... 3 9 1 8.3 확률 ................................................................................................................................... 396 8.4 평균과 표준편차 ............................................................................................................ 407 8.5 확률분포 ........................................................................................................................... 4 1 2 8.6 추정 .................................................................................................................................... 430 프로그래밍 함수 요약 ................................................................................................................. 4 37 연습문제 .......................................................................................................................................... 438 프로그래밍 실습 ........................................................................................................................... 4 4 1 부록:표준정규분포표 ............................................................................................................... 443 찾아보기 .......................................................................................................................................... 444 칼럼 목차 칼럼 1 헤비사이드 함수 ............................................................................................................ 044 2 시그모이드 함수 ............................................................................................................ 0 9 1 3 순환신경망 ...................................................................................................................... 1 4 6 4 오차 역전파법 ................................................................................................................ 2 1 0 5 합성곱 ............................................................................................................................... 268 6 반복법 ............................................................................................................................... 3 1 7 7 디지털 영상 ..................................................................................................................... 3 7 2 8 미니배치 학습 ................................................................................................................ 435 파이썬 설치 방법 1. Python 설치 이 책에서는 프로그래밍 언어 Python을 사용합니다. 4차 산업혁명의 핵심 언어인 Python은 지속적으로 발전하고 있고, 계속해서 버전이 업데이트되고 있습니다. 여기서는 3.8.4 버전을 기준으로 설치해 봅시다. 01 먼저 Python 설치 파일을 다운로드하기 위해 Python 공식 홈페이지에 접속합니다 (https://www.python.org). 홈페이지의 Downloads 탭으로 마우스 커서를 옮기면 현재 시스템에 맞는 다운로드 링크가 나옵니다. [그림 1]의 빨간색 상자를 클릭해서 다운로드한 후 파일을 실행합시다. [그림 1] Python 공식 홈페이지 02 파일을 실행하면 [그림 2]와 같은 창이 나타납니다. ① “Add Python 3.8 to PATH” 옵션 을 체크하고 ② “Install Now” 를 클릭해서 설치합니다. [그림 2] Python 인스톨 03 Python의 설치가 완료된 후 버튼을 눌러 설치를 종료한 후, [ + ]을 눌러 실행 창을 활성화합니다. 그런 다음, cmd를 입력해 [그림 3]과 같이 Command Prompt를 엽니 다. [그림 3] Command Prompt 실행하기 파이썬 설치 방법 04 [그림 4]처럼 pip install (패키지 이름)을 통해 필요한 패키지를 설치합니다. 이 책에 서 필요한 패키지는 NumPy, matplotlib, SymPy입니다. 이 패키지를 각각 설치하기 위 해 pip install numpy, pip install matplotlib, pip install sympy를 차례로 Command Prompt에 입력합니다. [그림 4] 패키지 설치하기(NumPy) 2. Python 코드 작성 및 실행 Python 설치가 끝났으면 이제 코드를 작성하는 방법을 알아봅시다. 일반적으로 코드를 작성 할 때는 편집기(에디터)를 이용해서 작성하고 이를 실행하는 과정이 필요합니다. 다양한 편집 기 중에 Jupyter Notebook을 이용하면 간편하고 직관적으로 코드를 작성하고 실행할 수 있 습니다. Jupyter Notebook은 Python이 제공하는 편집기입니다. 이를 사용하기 위해서는 Jupyter Notebook 패키지를 먼저 설치해야 합니다. 01 Python을 설치한 후, [ + ]을 눌러 실행 창을 연 다음 cmd를 입력해 Command Prompt를 엽니다. 그런 다음, [그림 5]와 같이 pip install jupyter를 통해 Jupyter Notebook 패키지를 설치합니다. [그림 5] Jupyter Notebook 패키지 설치하기 02 컴퓨터 저장 공간 중 원하는 곳에 코드 작업을 할 폴더를 만들고, 이 폴더를 더블 클릭해 윈도우 탐색기를 열어보세요. [그림 6] 작업 폴더 만들기 파이썬 설치 방법 03 열려있는 탐색기의 주소 부분([그림 6]의 빨간색 부분)에 ‘cmd.’이라고 입력하면 작업할 폴 더에서 Command Prompt가 열립니다. 여기에 Jupyter Notebook을 입력하고 를 누릅시다. [그림 7] 작업 폴더에서 Jupyter Notebook 실행하기 (1) 04 자동으로 [그림 8]과 같은 인터넷 창을 통해 Jupyter Notebook이 실행됩니다. 혹시 인터 넷 창이 자동으로 열리지 않는다면, Command Prompt 하단의 URL을 복사해 직접 인터 넷 주소 창에 붙여 넣으면 실행됩니다. [그림 8] 작업 폴더에서 Jupyter Notebook 실행하기 (2) 05 오른쪽 위의 [New] 버튼을 눌러 [Python 3]을 클릭하면 [그림 9]와 같이 In [ ]라고 되어 있는 셀에 코드를 입력할 수 있는 화면이 나옵니다. 여기서 코드의 작성 및 실행을 모두 할 수 있습니다. 셀 단위로 코드를 실행할 때는 [ 누르면 됩니다. [그림 9] Jupyter Notebook을 이용한 코드 입력 및 실행하기 + ]를 누르거나 화면 위의 [Run]을 파이썬 설치 방법 06 코드를 저장하고자 할 때는 왼쪽 위의 File 메뉴에서 [Save as]를 통해 원하는 파일명으로 저장하면 됩니다. Jupyter Notebook은 기본적으로 “파일이름.ipynb”의 형태로 저장됩니 다. File 메뉴의 Download as를 통해 Python 코드 파일의 확장자인 .py로도 저장할 수 있습니다. [그림 10] 실행 결과 저장하기 1장 함수 1.1 함수 1.2 합성함수 1.3 역함수 프로그래밍 함수 요약 연습문제 프로그래밍 실습 입력값을 일련의 과정에 따라 결괏값으로 도출하는 것을 ‘함수’라고 합니다. 그렇다면, 정보를 바탕으로 어떤 의사결정을 내리는 것도 일 종의 함수라고 할 수 있습니다. 우리는 생활 속에서 수집한 정보를 바탕으로 수많은 의사결정을 합니다. 4차 산업혁명 시대인 오늘날에는 인간의 인지능력을 모방한 인공 지능 Artificial Intelligence, AI 도 일련의 과정에 따라 의사결정을 내릴 수 있 습니다. 인공지능에는 인간의 신경을 모방한 인공신경망 Artificial Neural Network, ANN 이 있고, 이 인공신경망에 들어온 정보를 받아들일지 여 부를 ‘헤비사이드 함수’의 근사인 ‘시그모이드 함수’로 표현합니다. 칼럼 1 1.1 함수 여러분은 라면을 좋아하나요? 라면을 끓이기 위해서는 먼저 재료인 라면, 스프, 물 등이 필요 합니다. 즉, 라면은 ‘재료’와 레시피라는 ‘규칙’을 통해 얻을 수 있는 결과물입니다. 함수(function)는 이와 같이 ‘재료’와 ‘규칙’이 존재하는 개념입니다. x1, x2, …, xn이라는 재료 를 f 라는 규칙에 적용하면, 각각에 대응하는 결과물 y1, y2, …, yn이 나옵니다. 함수의 개념을 수학적으로 정의해 봅시다. 정의 1-1 함수 집합 A에 속하는 각 원소 x를 집합 B에 속하는 오직 하나의 원소 y에 대응시키는 규칙 을 함수라고 합니다. 기호로는 f : A → B로 표기하고, x에 대응하는 y를 y=f(x)라 고 합니다. [그림 1-1]을 살펴보면 함수의 정의를 쉽게 이해할 수 있습니다. A f 1 B 1 3 2 4 3 6 f 2 f 4 3 f 3 6 [그림 1-1] 집합 A={1, 2, 3}의 원소를 B={3, 4, 6}의 원소로 대응하는 함수를 나타내는 두 가지 예 [정의 1-1]에서 등장한 기호에 대한 용어를 살펴봅시다. 집합 A를 함수 f 의 정의역(domain), B를 함수 f 의 공역(codomain), x에 대응하는 y=f(x)를 x에서의 함수 f 의 함숫값 또는 f 에 의한 x의 상(image)이라 부릅니다. 그리고 집합 A의 각 x에 대하여 함숫값 f(x) 전체의 집합을 함수 f 의 치역(range)이라 합니다([그림 1-2] 참고). 020 1장 함수 f A B 4 2 5 3 6 7 정의역 치역 미분적분학 수학기초 1 공역 8 미분과 선형대수학 적분 [그림 1-2] 함수의 정의역, 공역, 치역 주어진 대응 관계가 함수인지를 판단할 때는 정의역의 원소 x가 치역의 원소 하나에만 대응하 는지를 확인해야 합니다. 집합 A={1, 2}, B={a, b}일 때를 예로 들어봅시다. f(1)=a, f(2)=a를 만족하는 경우에 f 는 함수이지만, f(1)=a, f(1)=b, f(2)=a를 만족하는 경 우에 f 는 함수가 아닙니다. 확률과 벡터와 행렬 통계 예제 1-1 함수의 정의 집합 A={1, 2, 3}, B={a, b, c, d}에 대해서 함수 f : A → B는 f(1)=a, f(3)=c를 만족하는 함수의 개 수를 구하세요. 확률과 통계 풀이함수의 정의에 따라, 집합 A의 각 원소는 B에 속하는 오직 하나의 원소에만 대응해야 합니다. 집합 A의 원소 1, 3에 대응하는 B의 원소는 각각 a, c이므로, 이를 만족하는 함수 f의 개수는 함숫값 f(2)가 될 수 있는 B의 원소 개수와 같습니다. A B a b c d 1 2 3 f(2)=a A B a b c d 1 2 3 f(2)=b A B a b c d 1 2 3 f(2)=c A B a b c d 1 2 3 f(2)=d 즉, 위의 그림과 같이 4가지 경우가 가능합니다. 원소의 개수가 적으면 [그림 1-1]처럼 나타낼 수 있지만, 원소의 개수가 많아지면 위와 같은 그림으로 나타내는 데 한계가 있습니다. 따라서 이보다 더 효과적으로 함수를 시각화할 수 있 는 방법은 그래프(graph)로 그리는 것입니다. 함수의 그래프에 대한 정의는 다음과 같습니다. 1.1 함수 021 정의 1-2 함수의 그래프 함수 f 가 집합 A를 정의역으로 갖는 함수라고 합시다. 이때 함수 f 의 그래프는 다음과 같은 순서쌍의 집합으로 정의합니다. {(x, f(x))|x<A} 예제 1-2 함수의 그래프 다음 함수의 정의역과 치역을 구하고 그래프를 그려보세요. (a) f(x)=3x+1 풀이 (b) g(x)=15x-1 (a) 주어진 함수 f 는 모든 실수 x에 대해서 정의되고, f 에 의한 x y f(x)=3x+1 의 상인 3x+1도 모든 실수에 대해 정의할 수 있습니다. 따라 서, 함수 f 의 정의역과 치역은 실수 집합 R입니다. 함수 f 의 -1 3 그래프는 다음과 같습니다. 1 O (b) 함수 g를 정의하기 위해서는 근호의 조건에 의해 y x-1¾0 이어야 하고, 이때의 함숫값 g(x)=15x-1 코딩 x 이 취할 수 있는 범위는 0보다 크거나 같습니다. 따라 2 서, 함수 g의 정의역은 {x|x¾1}, 치역은 {y|y¾0} 1 입니다. 함수 g의 그래프는 다음과 같습니다. O g(x)=15x-1 1 2 5 # Ex 1-2 import numpy as np 수학 라이브러리 numpy를 np로 불러오기 import matplotlib.pyplot as plt 그래프 라이브러리 matplotlib.pyplot을 plt라는 이름으로 불러오기 # (a) f(x)=3x+1 022 1장 함수 x = np.linspace(-5,5,1001) x = [-5, -4.99, -4.98, ..., 4.98, 4.99, 5] fx = 3*x+1 x의 각 값에 대해 3x+1의 값을 계산해서 fx에 대입 plt.plot(x,fx) 정의역이 x, 치역이 fx인 그래프 plt.show() 위에서 만든 그래프(Object)를 화면에 직접 출력 x # (b) g(x) = sqrt(x-1) x = np.linspace(1,10,901) plt.plot(x,gx) gx에 15x-1 의 값을 대입, np.sqrt는 루트 함수 수학기초 gx = np.sqrt(x-1) plt.show() 결과 미분과 적분 벡터와 행렬 이제 어떤 함수들을 활용하여 새로운 함수를 만들어낼 때 필요한 함수의 사칙연산에 대해 알아 f 봅시다. 실수의 사칙연산과 마찬가지로 함수 f, g에 대해서 사칙연산 f+g, f-g, fg, 를 g 자연스럽게 정의할 수 있습니다. 실수와 다른 점은 사칙연산을 하고자 하는 함수의 정의역을 고려해야 한다는 점입니다. 확률과 통계 정의 1-3 함수의 사칙연산 두 함수 f, g를 각각 정의역이 집합 A, B라고 합시다. 그러면 함수의 사칙연산 f+g, f f-g, fg, g 는 정의역이 A;B인 함수로, x<A;B에 대해 다음 연산을 정의할 수 있습니다. (1) (f+g)(x)=f(x)+g(x) (2) (f-g)(x)=f(x)-g(x) (3) (fg)(x)=f(x)g(x) (4) { f f(x) (단, {x<A;B|g(x)+0}) }(x)= g g(x) 1.1 함수 023 예제 1-3 함수의 사칙연산 [예제 1-2]의 두 함수 f, g에 대하여 함수 f 를 구하고, 이 함수의 정의역을 찾으세요. g 풀이[예제 1-2]의 두 함수 f, g의 정의역은 각각 A=R과 B={x|x¾1}입니다. 따라서, 함수 은 다음과 같습니다. f 의 정의역 g {x<A;B|g(x)+0} = {x<A;B|x+1} = {x|x>1} 그러면, 함수 f 는 다음과 같습니다. g f f(x) 3x+1 = { }(x) = (x>1) g g(x) 15x-1 이렇게 함수들을 연산하면 새로운 함수가 만들어집니다. 이외에, 함수를 평행이동 또는 대칭이 동해도 새로운 함수를 만들 수 있습니다. [정의 1-2]에서는 함수 y=f(x)의 그래프를 좌표평면 위의 점 (x, f(x))=(x, y)들의 집 합으로 정의했습니다. 좌표평면 위에 한 점을 P(x, y)라고 해 봅시다. 점 P를 x축 방향으로 a만큼, y축 방향으로 b만큼 이동한 점을 P'(x', y')이라 하면 x'=x+a, y'=y+b가 성립합 니다([그림 1-3]). 이와 같이, 점 P(x, y)를 점 P'(x', y')=P'(x+a, y+b)로 옮기는 것을 점의 평행이동(translation)이라고 합니다. 예를 들면, 점 P(2, 4)를 x축 방향으로 2만큼, y축 방향으로 -4만큼 평행이동한 점은 P'(2+2, 4+(-4))=P'(4, 0)이 됩니다. y a b P(x, y) O [그림 1-3] 점 P의 평행이동 024 1장 함수 P'(x', y')=P'(x+a, x+b) b a x 다시, 점 P(x, y)가 함수 y=f(x)의 그래프 위의 한 점이라고 합시다. 점 P를 x축 방향으로 a만큼, y축 방향으로 b만큼 평행이동한 점을 P'(x', y')이라 하면 다음과 같이 정리할 수 있 수학기초 습니다. [ x'=x+a x=x'-a ⇒ [ (*) y'= y+b y= y'-b 점 P(x, y)는 함수 y=f(x)의 그래프 위의 점이므로 식 (*)를 y=f(x)에 대입하면 다음을 미분과 적분 얻을 수 있습니다. y=f(x) ⇒ y'-b=f(x'-a) 따라서, 점 P'(x', y')은 함수 y'-b=f(x'-a)의 그래프 위의 점이라는 것을 알 수 있습니 다. 이를 정리하면 다음과 같은 함수의 평행이동1이 됩니다. 벡터와 행렬 정리 1-1 함수의 평행이동 함수 y=f(x)의 그래프를 x축 방향으로 a만큼, y축 방향으로 b만큼 평행이동한 도형의 관계식을 나타내는 함수는 다음과 같습니다. 확률과 통계 y-b=f(x-a) 함수 y=f(x)를 x축 방향으로 a만큼, y축 방향으로 b만큼 평행이동한 함수는 원래의 함수 y=f(x)에 x 대신 x-a를, y 대신 y-b를 대입한 것과 같습니다! 1 일반적으로 평행이동은 ‘도형의 평행이동’을 의미하므로 ‘함수의 그래프의 평행이동’이 더 적절한 표현입니다. 편의상 ‘함수의 평행이동’을 ‘함수의 그래프의 평행이동’으로 생각합시다. 1.1 함수 025 예제 1-4 함수의 평행이동 다음의 함수의 그래프를 x축 방향으로 5만큼, y축 방향으로 -1만큼 평행이동한 그래프를 나타내는 함수를 구하세요. (a) y=x2+1 풀이 (b) y= 1 -1 x+3 (a)함수 y=f(x)=x2+1의 그래프를 x축 방향으 y 로 5만큼, y축 방향으로 -1만큼 평행이동한 그 y=x2+1 y=x2-10x+25 래프를 나타내는 함수는 다음과 같습니다. y-(-1)=f(x-5)=(x-5)2+1 1 O ⇒ y=x2-10x+25 (b) 함수 y=g(x)= 1 -1의 그래프를 x축 x+3 방향으로 5만큼, y축 방향으로 -1만큼 평행이 y= x 5 1 -1 x+3 y y= 1 -2 x-2 동한 그래프를 나타내는 함수는 다음과 같습니 다. -3 y-(-1)=g(x-5)= ⇒ y= 1 -1 (x-5)+3 2 -1 x 1 -2 x-2 이번에는 점 P(x, y)를 x축, y축, 원점에 대해 대칭이동한 점의 좌표를 알아봅시다. [그림 1-4]와 같이 점 P(x, y)를 x축에 대해 대칭이동한 점 Q의 좌표는 Q(x, -y), y축에 대해 대칭이동한 점 R의 좌표는 R(-x, y), 원점에 대해 대칭이동한 점 S의 좌표는 S(-x, -y) 입니다. 이와 같이 점 P(x, y)를 한 점 또는 한 직선에 대하여 대칭인 점으로 옮기는 것을 각각 점 또는 직선에 대한 대칭이동(reflection transposition)이라고 합니다. 예를 들어, 점 (5, -2)를 x축, y축, 원점에 대하여 대칭이동한 점의 좌표는 각각 (5, 2), (-5, -2), (-5, 2)입니다. 026 1장 함수 y R(-x, y) x O 미분과 적분 S(-x, -y) 수학기초 P(x, y) Q(x, -y) [그림 1-4] 점 P의 대칭이동 평행이동에서와 마찬가지로 점 P(x, y)가 함수 y=f(x)의 그래프 위의 점이라고 하고, 점 P 를 x축에 대해 대칭이동한 점을 P'(x', y')라 하면 다음과 같이 정리할 수 있습니다. 벡터와 행렬 [ x'=x x=x' ⇒ [ (**) y'=-y y=-y' 그런 다음, 함수 y=f(x)에 식 (**)를 대입하면 다음을 얻습니다. y=f(x) ⇒ -y'=f(x') 확률과 통계 동일한 방법으로, 함수 y=f(x)의 그래프를 y축, 원점에 대해 대칭이동한 그래프를 나타내는 함수도 구할 수 있습니다. 이를 정리하면 다음과 같습니다. 정리 1-2 함수의 대칭이동 함수 y=f(x)의 그래프를 x축, y축, 원점에 대해 대칭이동한 그래프를 나타내는 함수는 다음과 같습니다. (1) x축에 대해 대칭이동 : -y=f(x) (2) y축에 대해 대칭이동 : y=f(-x) (3) 원점에 대해 대칭이동 : -y=f(-x) 1.1 함수 027 예제 1-5 함수의 대칭이동 다음 함수의 그래프를 주어진 점 또는 직선에 대해 대칭이동한 함수를 구하고, 그래프를 그려보세요. (a) y=3x+1, 원점 풀이 (b) y=15x-1, y축 (a) 함수 y=f(x)=3x+1의 그래프를 원점에 대해 대칭이동한 그래프를 나타내는 함수는 다음과 같습니다. -y=f(-x)=3(-x)+1 ⇒ y=3x-1 y=3x+1 y 4 y=3x-1 1 x 1 -1 (b) 함수 y=g(x)=15x-1의 그래프를 y축에 대해 대칭이동한 그래프를 나타내는 함수는 다음과 같습니다. y=g(-x)=15(-x)-1 ⇒ y=15-x-1 y y=15-x-1 y=15x-1 -1 1 x 함수의 사칙연산과 평행이동, 대칭이동을 활용해 함수 f, g를 새로운 함수로 만드는 방법을 알 아봤습니다. 다음 절에서는 여러 가지 함수를 결합해서 더욱 다양한 함수를 얻을 수 있는 방법 에 대해서 살펴보고자 합니다. 028 1장 함수 ▶ 확인문제 수학기초 01 다음 중 함수인 것을 모두 고르세요. ① ffff A A A A B B B B 1111 4444 2222 3333 5555 6666 ② A A A A gggg 1111 2222 B B B B ③ hhhh A A A A B B B B ④ A A A A aaaa aaaa dd dd 3333 bbbb cccc bbbb cccc eeee ffff 6666 9999 kkkk 미분과 적분 B B B B 1111 2222 3333 4444 02 다음 함수의 정의역을 구하세요. (a) f(x)= x+5 x2-4 (b) g(x)=!%5-142x (a) y=- 1 x+1 2 (b) y= 벡터와 행렬 03 다음 함수의 그래프를 그리세요. 1 x 3 2 2 04 함수 f, g가 f(x)=x +x , g(x)=2x -3일 때, 함수 f+g, f-g, fg, f 를 구하고 각 g 각의 정의역을 찾으세요. 확률과 통계 05 다음 함수의 그래프를 각각 주어진 조건에 따라 평행이동 또는 대칭이동한 그래프를 나타내는 함수를 구하세요. (a) y=-x2+2x, x축 방향으로 1만큼, y축 방향으로 -1만큼 평행이동 (b) y=152x-3, 원점에 대한 대칭이동 1.1 함수 029 1.2 합성함수 이 절에서는 합성함수에 대해서 학습할 텐데, 그 개념을 쉽게 이해하기 위해 다음 상황을 생각 해 봅시다. 예나와 태양이는 과자를 구매하려고 합니다. 과자의 종류는 X, Y, Z이고 가격은 각각 1000원, 1500원, 1000원입니다. 예나와 태양이가 어떤 과자를 선택하는지 나타내는 함 수를 f, 과자와 가격이 대응하는 관계를 나타내는 함수를 g라 정의하면 각각의 대응 관계는 [그림 1-5]와 같습니다. A f 예나 태양 B B X X Y Y Z Z g C 1000 1500 [그림 1-5] 과자를 선택하는 경우를 나타내는 함수 f 와 과자와 가격의 대응 관계인 함수 g 과자를 구매할 때 예나와 태양이가 각각 지불해야 할 금액은 1500원, 1000원이고, 이를 함수 f 와 g의 대응 관계로 표현하면 다음과 같습니다. A 예나 f B X g C 1000 Y 태양 Z 1500 [그림 1-6] 예나와 태양이가 지불해야 할 금액을 나타내는 함수 f 와 g의 대응 관계 [그림 1-6]에서와 같이 함수 f의 정의역 A에서 함수 g의 공역 C로 대응하는 새로운 함수를 함 수 f와 g의 합성함수(composite function)라고 합니다. 합성함수의 엄밀한 정의를 살펴봅시다. 030 1장 함수 정의 1-4 합성함수 수학기초 집합 A, B, C에 대해 정의된 함수 f, g가 f : AY → B, g : B → C라고 합시다. 이때 다음을 만족하는 집합 A에서 C로의 함수 g(f(x))를 f 와 g의 합성함수라 하고 g½f 로 표기합니다. 임의의 x<A에 대해서, y=f(x)<B이고 g(y)<C인 함수 미분과 적분 [정의 1-4]에 의해, 임의의 x<A에 대해서 함수 f와 g의 합성함수 g½f는 (g½f)(x) =g(f(x))와 같이 계산합니다. 예제 1-6 합성함수 (1) 벡터와 행렬 집합 A={1, 2, 3}, B={a, b, c}, C={x, y}에 대해, 함수 f : AY → B와 g : B → C는 다음 그림과 같습니다. 이때, 두 함수 f, g의 합성함수 g½f에 대하여 (g½f)(1)과 (g½f)(3)을 구하세요. A B 1 a 2 b 3 c g C x 확률과 통계 풀이 f y 합성함수의 정의에 의해 (g½f)(1)과 (g½f)(3)은 다음과 같습니다. (g½f)(1)=g(f(1))=g(a)=x (g½f)(3)=g(f(3))=g(b)=y 예제 1-7 합성함수 (2) f(x)=x3+1, g(x)=15x+2로 정의된 함수 f, g에 대해서 (g½f)(2), (f½g)(2), (g½g)(2)를 각각 구하세요. 1.2 합성함수 031 풀이 합성함수의 정의에 의해 다음을 얻습니다. (g½f)(2) =g(f(2)) =g(9) =1411 (f½g)(2) =f(g(2)) =f(2) =9 (g½g)(2) =g(g(2)) =g(2) =2 코딩 # Ex 1-7 import numpy as np # f(x)=x^3+1 def f(x): 함수 f(x)=x^3+1을 파이썬의 ‘함수’로 구현 return x**3 + 1 정의된 함수 f(x)는 x를 대입하면 f(x)=x^3+1을 출력 **는 거듭제곱을 의미(2**3=2^3) # g(x)=sqrt(x+2) def g(x): return np.sqrt(x+2) # (g o f)(2), (f o g)(2), (g o g)(2) print("(g o f)(2) =", g(f(2))) 함수 print로 원하는 값을 출력 print("(f o g)(2) =", f(g(2))) print("(g o g)(2) =", g(g(2))) 결과 (g o f)(2) = 3.3166247903554 (f o g)(2) = 9.0 (g o g)(2) = 2.0 [예제 1-7]에서 주목해야 할 사실이 있습니다. 바로, (g½f)(2)의 값과 (f½g)(2)의 값이 다르다는 점입니다. 일반적으로 합성함수 연산자 ½에 대해 교환법칙은 성립하지 않습니다.2 그렇다면 연산자 ½에 대한 결합법칙은 어떨까요? [예제 1-8]을 통해 확인해 봅시다. 2 일반적으로 주어진 집합에서 정의된 연산 ½와 그 집합의 임의의 원소 a, b에 대하여 a½b=b½a를 만족하면 연산 ½는 교환법칙이 성 립한다고 합니다. 또한, 임의의 원소 a, b, c에 대해 (a½b)½c=a½(b½c)가 성립하면 연산 ½는 결합법칙이 성립한다고 합니다. 032 1장 함수 예제 1-8 합성함수의 결합법칙 수학기초 f(x)=x+1, g(x)=3x, h(x)=x2 에 대하여 h½(g½f)와 (h½g)½f 를 각각 구하세요. 그런 다음, 두 값이 서로 같은지 확인해 봅시다. 풀이(g½f)(x) = g(f(x)) = 3(x+1), (h½g)(x) = h(g(x)) = 9x2 이므로, 이를 대입하면 두 합성함 수를 구할 수 있습니다. 미분과 적분 (h½(g½f))(x) = h((g½f)(x)) = h(3(x+1)) = 9(x+1)2 ((h½g)½f)(x) = (h½g)(f(x)) = (h½g)(x+1) = 9(x+1)2 따라서, h½(g½f)=(h½g)½f 입니다. [예제 1-8]을 통해 합성함수에 대한 결합법칙이 성립한다는 것을 확인했습니다. 다음 정리를 정리 1-3 벡터와 행렬 통해 합성함수의 결합법칙에 관해 살펴봅시다.3 합성함수의 결합법칙 집합 A, B, C, D에 대해서 함수 f, g, h가 f : A → B, g : B → C, h : C → D라 확률과 통계 고 합시다. 이때 연산자 ½에 대하여 다음 결합법칙이 성립합니다. (h½g)½f=h½(g½f)3 증명 임의의 x<A에 대하여 ((h½g)çf)(x)와 (h½(g½f))(x)를 정리하면 다음과 같습니다. ((h½g)½f)(x) = (h½g)( f(x)) = h(g(f(x))) (h½(g½f))(x) = h((g½f)(x)) = h(g(f(x))) 따라서, 모든 x<A에 대하여 ((h½g)½f)(x)=(h½(g½f))(x)이므로 함수 f, g, h의 합성함수에 대한 결합법칙이 성립합니다. 3 합성함수의 결합법칙이 성립하므로 ‘괄호’는 생략해도 됩니다. 즉, 다음 등식이 성립합니다. (h½g)½f = h½(g½f) = h½g½f 1.2 합성함수 033 집합 A, B가 A⊆B를 만족할 때, 함수 f : A → B와 자기 자신과의 합성함수 f½f : A → A 를 생각해 봅시다. 이를 기호로는 f 2으로 표기합니다. 일반적으로, x<A 와 n¾1 에 대하여 함수 f와 자기 자신과의 합성함수는 다음과 같이 정의할 수 있습니다. n개 f (x)=( f½ y ½f )(x) n 합성함수의 결합법칙에 의해 f n+1(x)=(f n½f)(x)=(f½f n)(x)가 성립합니다. [예제 1-9]에서 직접 확인해 봅시다! 예제 1-9 자기 자신과의 합성함수 함수 f(x)=x+k에 대하여 f 4(3)=15를 만족하는 k를 구하세요. 풀이합성함수 f 4를 구하기 위해 먼저 f 2 = f½f, f 3 = f½f½f 를 구해 봅시다. f 2(x) = (f½f)(x) = f(f(x)) = f(x+k) = (x+k)+k = x+2k f 3(x) = (f 2½f)(x) = f 2(f(x)) = f 2(x+k) = (x+k)+2k = x+3k 이를 통해, f 4=f½f½f½f 를 유추할 수 있습니다. f 4(x) = f 3(f(x)) = f 3(x+k) = (x+k)+3k = x+4k 따라서, f 4(3) = 3+4k = 15를 만족하는 k의 값은 3입니다. 1.1절에서 학습한 함수의 사칙연산과 마찬가지로 합성함수는 새로운 함수를 만들거나 기존의 함수를 분석하는 데 매우 중요한 개념입니다. 특히, 함수의 합성을 나타내는 연산자 ½는 함수 전체 집합을 분석하는 데 필수적인 도구입니다. 합성함수 연산자 ½와 더불어 수학 전체에서 중요한 함수인 항등함수(identity function)를 소개하면서 이 절을 마무리하겠습니다. 참고로, 항등함수는 실수에서의 ‘1’과 같은 역할을 한다는 것을 기억하면 더욱 이해하기 쉽습니다. 034 1장 함수 정의 1-5 항등함수 수학기초 집합 A에 대한 항등함수 I : A → A는 다음과 같이 정의합니다. 임의의 x<A에 대해서, I(x)=x인 함수 미분과 적분 ▶ 확인문제 01 다음 명제에 대하여 참과 거짓을 판별하세요. 실수 전체 집합에서 정의된 임의의 두 함수 f, g에 대해 f½g=g½f가 성립합니다. 벡터와 행렬 02 집합 A={1, 4, 7}, B={a, b}, C={4, 5, 7}에 대하여 함수 f : A → B, g : B → C는 다음 그림과 같습니다. (g½f)(1)+(g½f)(7)을 구하세요. A 4 7 B B a a b b g C 4 확률과 통계 1 f 5 7 2 03 f(x)=x +4, g(x)=15x+3으로 정의된 함수 f, g에 대하여 합성함수 f½g를 구하세요. 2 2 04 함수 f(x)=2x +5에 대해서 f 을 구하세요. 05 f(x)=ax+3으로 정의된 함수 f 는 f½f=I를 만족합니다. 이때 실수 a를 구하세요. 1.2 합성함수 035 칼럼 1 헤비사이드 함수 들어온 정보를 x, 들어온 정보를 받아들이는 것을 1, 받아들이지 않는 것을 0으로 생각해 봅시다. 그러면, 인공신경망은 x, 1, 0으로 의사결정 과정을 함수로써 나타낼 수 있습니다. 헤비사이드 함수(Heaviside function) H : R → {0, 1}는 다음과 같이 정의된 함수를 말 합니다. H(x)=[ 0, x<0 1, x¾0 y 1 O y=H(x) x [그림 1-8] 헤비사이드 함수 헤비사이드 함수의 그래프는 정보를 받아들일지 여부에 따라 0과 1 중 하나의 값을 갖습 니다. 이를 그래프로 그려 살펴보면, [그림 1-8]과 같이 x=0에서 ‘점프’가 있습니다. 점 프가 존재하면 x가 0 근방에서 미세하게 변화할 때 헤비사이드 함수의 함숫값은 0에서 1 또는 1에서 0으로 급격하게 변화합니다. 이러한 현상은 일반적인 의사결정 과정과는 다소 차이가 있습니다. 따라서, 실제 인공신경망에서는 헤비사이드 함수의 부드러운 근사인 시 그모이드 함수 r를 사용합니다. 시그모이드 함수에 대해서는 2장에서 다시 살펴봅시다. 044 1장 함수 장 프로그래밍 함수 요약 수학기초 1 01 import (패키지) as (사용하고자 하는 이름) (패키지)를 (사용하고자 하는 이름)으로 로드(load)하는 함수입니다. 예를 들면, import numpy as np는 NumPy라는 라이브러리를 로드(load)해서 np라는 미분과 적분 이름으로 사용하겠다는 뜻입니다. 02 def 함수이름(input1, input2, ...) : 함수의 내용 return 결과물 벡터와 행렬 [정의 1-1]에서 살펴본 함수의 정의와 거의 동일한 역할을 하는 Python 함수입니다. 함 수의 동작을 설명하는 문장들과 함께, 보통 return 키워드를 이용해 결과물을 출력합니 다. 문법상 주의해야 할 부분은 선언의 마지막에 콜론(:)이 반드시 필요하다는 것입니다. 코딩 # f(x)=x2 함수를 Python 함수로 구현하기 def sqr(x): sqr_x = x**2 확률과 통계 return sqr_x 03 print("사용자에게 보여줄 텍스트", 출력하고자 하는 변수) 코드에 사용된 변수 중 사용자에게 출력하고자 할 때 사용되는 함수입니다. 사용자에게 정보를 주거나 코드를 디버그할 때 주로 사용합니다. 코딩 age = 35 print("My age is ", age) 결과 My age is 35 프로그래밍 함수 요약 045 1 장 프로그래밍 함수 요약 04 NumPy 수치적으로 계산할 때 필요한 미적분학, 선형대수학 등 수학 전반에 필요한 툴을 보유하 고 있는 라이브러리입니다. 주로 import numpy as np를 통해 로드(load)합니다. •np.linspace(a, b, n) 닫힌 구간 [a, b]를 n-1개의 구간으로 균등하게 분할하는 n개의 점을 오름차순 배열 로 저장하는 NumPy의 함수입니다. NumPy의 array 타입으로 저장됩니다. 코딩 x = np.linspace(0,1,11) 결과 print("x=", x) x = np.array([0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]) •np.sqrt(x) x에 대해서 1x를 출력하는 NumPy의 내장함수입니다. 코딩 x = np.sqrt(4) 결과 print('x=', x) x = 2.0 05 matplotlib.pyplot 그래프를 다루는 라이브러리입니다. 주로 import matplotlib.pyplot as plt를 통해 로드(load)합니다. • plt.plot(x, y, 'option') plt.show( ) x와 y의 관계식을 그래프로 나타내는 pyplot의 함수입니다. ‘option’을 통해 그래프의 색깔, 굵기, 모양 등을 바꿀 수 있습니다. 046 1장 함수 수학기초 •plt.legend(handles = (그래프1, 그래프2, ...), labels = ('라벨1', '라벨2', ...) 그래프에 범례를 추가하는 함수입니다. 그래프1, 그래프2 등에 해당하는 Object들을 먼저 저장한 다음, 각각의 라벨을 붙여주면 됩니다. 아래의 예에서 그래프1, 그래프2 미분과 적분 등의 Object를 저장할 때 ", =" 의 연산자를 쓰는 것에 주목합시다. 코딩# y1 = x, y2 = 2x x = np.linspace(-2,2,401) y1 = x y2 = 2*x # Graph with legend 벡터와 행렬 graph1, = plt.plot(x,y1) graph2, = plt.plot(x,y2) plt.legend(handles=(graph1,graph2), labels=('y=x','y=2x')) plt.show() 결과 확률과 통계 프로그래밍 함수 요약 047 1 장 연습문제 01 다음 중 함수의 그래프를 나타낸 것을 고르세요. ① yy yy y xx ③ yy ② x ④ yy y xx y x xx x xx x y 2 02 두 함수 f(x)=x -4x+1과 g(x)는 모든 실수 x에 대해 f(3x-5)=g(x-1)이 성립합니 다. g(1)은 얼마인가요? 3 2 03 공집합이 아닌 집합 A에서 정의된 두 함수 f(x)=x -7x +16x, g(x)=2x+8이 f=g 를 만족할 때, 집합 A를 구하세요. 04 다음 함수의 그래프를 그리세요. x+2, xÉ-1 (a) f(x)=[ 2 x , x>-1 (b) g(x)=x+|x| 048 1장 함수 표시가 붙은 문제는 코딩 풀이가 있는 문제입니다. 수학기초 05 함수 y=f(x)의 그래프가 다음과 같을 때, 주어진 함수의 그래프를 그리세요. (a) y=f(x-1)+1 (b) y=f(-x) y=f(x) 2 -1 미분과 적분 y O x 벡터와 행렬 06 함수 f, g가 f(x)=ax+2, g(x)=x-3일 때, f½g=g½f를 만족합니다. 이때 f(3)은 얼마인가요? 확률과 통계 2 07 함수 f, g가 f(x)=3x+4, g(x)=x +1일 때, 다음 조건을 만족하는 함수 h를 각각 구하 세요. (a) f½h=g (b) h½f=g 08 집합 A에서 실수 집합 R로의 함수 f가 임의의 x<A에 대하여 f(-x)=f(x)를 만족하 면 함수 f 를 짝함수(even function), f(-x)=-f(x)를 만족하면 함수 f를 홀함수(odd function)라고 합니다. 다음 물음에 답하세요. (a) 함수 g가 짝함수라면, 임의의 함수 f에 대하여 함수 h=f½g는 항상 짝함수인가요? (b) 함수 f 가 홀함수라면, f 2=f½f는 항상 홀함수인가요? (c) 짝함수와 홀함수의 예를 각각 찾고, Python으로 그래프를 그리는 코드를 작성하세요. 연습문제 049 1 표시가 붙은 문제는 코딩 풀이가 있는 문제입니다. 장 연습문제 09 집합 A, B, C에 대해서 정의된 함수 f : A → B와 g : B → C가 단사함수일 때, g½f 도 단 사함수임을 증명하세요. 그래프 중 단사함수의 그래프를 모두 고르세요. 10 다음 함수의 y y y y ① ③ y y y x x x x y y y y y y 11 함수 f가 f(x)=x+ y ② x x x x y ④ y x x x x x x x x 1 을 만족할 때, f -1(2)를 구하세요(단, x¾1). x 12 다음 함수의 역함수를 구하세요. 그리고, 역함수의 그래프를 그리는 Python 코드를 작성하세요. (a) y=3+151+2x (b) y= 1-2x 1+2x -1 -1 13 두 함수 f(x)=2x+3, g(x)=4x-1에 대하여 (f½g ) (x)=2를 만족하는 x의 값을 구하세요. 3 2 -1 14 함수 f(x)=x +3x +4x+1과 역함수 f 의 교점은 무엇인가요? 050 1장 함수 장 프로그래밍 실습 수학기초 1 구간 [-1, 5]에서 함수 f를 다음과 같이 정의합시다. [ -x2+2, -1Éx<1 f(x)= -x2-4x+3, 1ÉxÉ3 -x2+8x-14, 3<xÉ5 미분과 적분 함수 f 의 함숫값을 출력하는 Python 함수 f(x)를 작성하고, 이 함수를 이용해 구간 [-1, 5]에서 함수 f 의 그래프를 그리는 코드를 작성하세요(완성된 함수 f 의 그래프를 보면 즐거울 것입니다). 벡터와 행렬 import numpy as np import matplotlib.pyplot as plt # f(x) def f(x): if x >= -1 and x < 1: 여러 가지 조건을 추가하는 if문 return -x**2 + 2 확률과 통계 if x >= 1 and x <= 3: return x**2-4*x+3 if x > 3 and x <= 5: return -x**2+8*x-14 # x, fx 초기화 x = np.linspace(-1,5,601) fx = np.zeros_like(x) x와 사이즈가 같고 0으로 초기화된 배열 # f(x) 값 계산 for i in range(0,601): fx[i] = f(x[i]) # y=f(x)의 그래프 plt.plot(x,fx,'.') plt.show() 프로그래밍 실습 051 052 1장 함수