기본 콘텐츠로 건너뛰기

11월, 2018의 게시물 표시

[ML] 결정트리(Decision Tree) 모델

가역행렬에 대한 정의

가역행렬의 정의 n × n 차원의 정방행렬 A가 가역행렬(invertible matrix)일 경우 다음은 모두 동치입니다. 1. A의 행렬식은 0이 아닙니다. (det A ≠ 0) numpy.linalg.det() 함수에 의해 계산됩니다. import numpy as np import numpy.linalg as la import sympy as sp A=np.array([[2,3],[6, 8]]); A array([[2, 3], [6, 8]]) round(la.det(A), 4) -2.0 2. 역행렬이 존재합니다. numpy.linalg.inv() 함수에 의해 계산됩니다. Ainv=la.inv(A); Ainv array([[-4. , 1.5], [ 3. , -1. ]]) np.dot(A, Ainv) array([[1., 0.], [0., 1.]]) 3. 가역행렬 A의 전치행렬 A T 역시 가역행렬입니다. 이 두행렬의 행렬식은 같습니다. det(A) = det(A T ) AT=A.T; AT array([[2, 6], [3, 8]]) la.inv(AT) array([[-4. , 3. ], [ 1.5, -1. ]]) round(la.det(AT), 4)==round(la.det(A), 4) True round(la.det(AT), 4) -2.0 4. 행렬방정식 Ax=c에 대해 유일한 해를 가집니다. 식의 해를 계산하기 위해 numpy.linalg.solve() 함수를 적용합니다. 식의 c즉 상수항이 다음 코드의 const라면 A가 가역행렬이므로 변수 x의 해를 계산할 수 있습니다. const=np.array([2,1]).reshape(2,1);const array([[2], [1]]) sol=la.solve(A, const); s

원자(Atom) 모형

우리 주변에 존재하는 다양한 물질들은 무엇으로 구성되어 있을까요? 그리고 한 물질이 다른 물질과 다른 이유는 무엇일까요? 이를 이해하기 위해서는 물질을 형성하는 단위 블럭 즉, 원자를 면밀히 관찰해야합니다. 원자는 우주의 모든 구조와 유기체를 형성하는 기본입니다. 행성, 태양, 풀과 나무, 우리가 숨 쉬는 공기, 사람들은 모두 원자의 다른 조합으로 구성됩니다. 원자모형  원자(atom)은 그리스어로 "더이상 분해되지 않은 (indivisble)"의 의미로서 그리스 철학자 Democritus(BC 5세기)에 의해 최초로 창안되었습니다. 현재는 원자가 양전하인 핵을 중심으로 음전하인 전자들에 의해 둘러쌓인 구조라고 알려져 있습니다. 현재의 이러한 원자의 구성이 밝혀지기 전까지는 원자에 대한 다른 모형이 존재해 왔습니다. (전하(electric charge)전기현상을 일으키는 주체적인 원인으로, 어떤물질이 갖고 있는 전기의 양 전자(electron): 음전하를 띠고 있는 기본입자 전기(electricity): 전하를 가지는 물질의 존재 및 흐름에 관계된 모든 물리현상) 정의: 모형(Model) 실제 환경에서 어떤 시스템을 표현합니다. 모형은 시스템들과 그들의 특성을 이해하는데 도움을 줍니다. 예를들어 원자 모형은 우리가 알고있는 원자의 특성들을 기반으로 그 구조를 나타냅니다. 현재 우리가 가지고 있는 지식을 기반을 하기 때문에 원자의 실제의 완전한 모습을 나타낸다고 할 수는 없습니다. 1. Plum pudding model J.J. Thomson (1897)에 전자(electron)를 발견한 후에 사람들은 원자가 이전에 생각해온 것 보다 더 작은 입자들로 구성되어있다는 것을 알게 되었습니다. 그러나 원자핵은 아직 발견되지 않았지요. 그런 상태에서 원자모형으로 plum pudding model(1904)이 창안되었습니다. 이 모형은 다음그림과 같이 양전하(positive charge)의 수프에 음전자(negative elec

윈도우 엣지 글꼴 변경

윈도우 엣지의 글꼴은 레지스트리 편집기를 사용하여 변경합니다.  1. window + r을 실행창을 열고 regedit를 작성하여 레지스트리 편집기를 실행합니다.  2. 레지스트리 편집기에서 다음의 경로에서 기본값을 활성 후에 원하는 값 글꼴 프로그램을 입력합니다.  " 컴퓨터\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"

About Aanaconda

1. 삭제방법 파이썬 아나콘다 사용시 삭제할 필요가 있습니다. 윈도우의 경우 제어판의 프로그램 추가/삭제에서 이 명령을 시행할 수 없기 때문에 설치한 디렉토리로 이동하여 uninstall.exe를 직접 시행하여야 합니다. 일반적으로 이 프로그램은 다음 경로에 존재합니다. "C://사용자/컴퓨터 이름/ Anaconda3/ " : just me 버전으로 설치할 경우의 경로 "C://ProgramData/Anaconda3/": all user 버전으로 설치할 경우의 경로. ProgramData 디렉토리는 숨김폴더 이므로 메뉴에서 보기-숨김항목 표시를 체크 한후 찾을 수 있습니다. 이 디렉토리내에 존재하는 Uninstall_Anaconda3.exe를 실행하여 삭제합니다. 2. spyder upgrade 윈도의 CMD에서 우분투의 터미널에서 다음을 실행 합니다. conda install -c anaconda spyder in unbuntu conda update conda conda update anaconda conda update spyder 3. 우분투에서 anaconda 설치 1) anaconda 홈에서 적합한 설치파일을 다운 2) 터미널에서 anaconda를 다운 받은 디렉토리로 진입 cd home/---/문서 3) 설치 # sha256sum Anaconda3-5.3.1-Linux-x86_64.sh 위 명령은 다운로드 받은 파일의 해시태그를 나타냅니다. 결과인 해시태그가 맞는지 아래의 사이트로 이동하여 확인합니다. http://docs.anaconda.com/anaconda/insstall/hashes/lin-3-64 맞으면 다음과 같이설치합니다. #bash  Anaconda3-5.3.1-Linux-x86_64.sh 4. Jupyter notebook browser 설정 .jupter 폴더 내에 존재하는 jupyter_notebook_config.py 이동 이

turtle로 정오각형 그리기

정오각형 그리기  오각형을 그리는 것 역시 정사각형 , 정삼각형 을 그리는 것과 유사한 과정을 거칩니다. 단지 각 꼭지점의 각도만이 다르지요. 그러면 정오각형의 각 모서리의 각도는 어떻게 될까요? 이를 생각하기에 앞서 각 도형의 내각을 먼저 생각해보죠. 우리는 삼각형의 내각의 합을 알고 있습니다. 이를 이용하면 각 도형에서 삼각형이 몇개가 존재하는지를 알아보고 "삼각형의 갯수×180"로 그 도형의 내각의 합을 구할 수 있을 것입니다. 다음 그림을 볼까요? 위 그림의 사각형은 1개의 대각선으로 2개의 삼각형으로 구성됩니다. 오각형의 경우 2개의 대각선으로 3개의 삼각형으로 구성됩니다. 즉, 다음의 관계를 보이지요. 사각형의 내각 : 삼각형 2개 2×180=360 한각의 값  360/4=90 오각형의 내각 : 삼각형 3개 3×180=540 한각의 값  540/5=108 육각형의 내각 : 삼각형 4개 4×180=720 한각의 값  720/6=120 ... 위 그림에서 내각과 외각의 관계를 보면 위 그림의 검은색은 각 모서리의 내각이고 빨간색은 외각을 나타냅니다. 외각은 내각을 이루는 하나의 선을 연장했을 경우 상대되는 각도이라고 했습니다. 그러므로 오각형의 경우 내각 108도에 대한 외각은 72도입니다. 특이할 사항은 사각형이나 오각형이나 외각의 합은 360입니다. 즉, 모든 도형의 외각의 합은 360도입니다. (삼각형의 외각의 합을 구해보세요.) 그러므로 모든 정다각형에서 하나의 외각은 다음과 같이 계산될 수 있겠지요. 360/변수의 수=다각형에서 하나의 외각 위에서 회전을 할 경우 내각이 아닌 외각을 사용해야 함을 알았습니다. 그러므로 오각형을 그리는 계획은 다음과 같이 작성할 수 있겠죠. 1) 지정한 길이만큼 앞으로 이동합니다. 2) 오른쪽 또는 왼쪽으로 72도를 회전합니다. 3) 앞으로 동일한 길이만큼 이동합니다. 4) 오른쪽 또는 왼쪽으로 72도 만큼 이동합니다. 5)1번부터 4번 두변을 그리는 명

turtle로 정삼각형 그리기

정삼각형 그리기  turtle로 그림 그리기준비 참조 정삼각형은 세변의 길이와 세 각이 모두 같은 삼각형이지요. 그러므로 다음과 같이 실행하면 되겠지요. 1) 일정 길이 만큼 앞으로 이동 2) 오른쪽(또는 왼쪽)으로 60도 회전 3) 위 1)과 2)의 과정을 3번 반복 >> for i in range(3): ...:     t.fd(100) ...:     t.left(60) 위의 결과는 예상하는 것과는 다르지요. 왜 그럴까요? 처음 시각후 회전하는 각도가 우리가 예산한 것과는 다르기 때문이지요. 분명히 왼쪽으로 60도 회전인데 결과는 이보다 훨씬 큰 각도로 회전하였습니다. 다음 그림을 봅시다. 위의 정삼각형의 내각은 각각 60도이죠. 내각의 각각의 선을 연장하면 각 내각의 반대각은 120도(=180-60)입니다. 위 그림의 빨간색으로 나타낸 것으로 이것을 각 내각에 대응하는 외각이라고 합니다. 삼각형의 내각의 합은 180도 인데 반해 외각의 합은 360도이지요. 사실 터틀을 사용해 그림을 그릴때 회전은 내각을 기준으로 하지요. 예를들어 left(60)인 경우 터틀의 회전각도는 왼쪽으로 60도이므로 실제로 그려지는 것은 120도 회전된 선이 그려지는 것입니다. 그러므로 다음을 기억해야 합니다. left(), right()에 전달하는 각도는 내각이 아니라 외각입니다. 삼각형을 그리기위해서는 위의 코드는 다음과 같이 변경되어야 합니다. >> for i in range(3): ...:     t.fd(100) ...:     t.left(180-60) 정삼각형을 그리는 함수를 작성해 보죠. 위 코드에서 정삼각형의 길이만이 변할 수 있는 수이지요. 그러므로 아래 함수에서 인수는 길이입니다. def EquitriangleS(t, length):     for i in range(3):         t.fd(length)         t.left(180-60) >>> Equit

turtle로 정사각형 그리기

정사각형 그리기   turtle로 그림 그리기준비 사각형의 각 꼭지점의 각이 90도라는 것을 사용하여 다음 순서로 그립니다.  1) 시작점에서 앞으로 이동 2) 1)의 끝점에서 펜을 오른쪽으로 90도 회전 3) 다시 앞으로 이동 4) 3)의 끝점에서 펜을 오른쪽으로 90도 회전 위의 과정은 모서리 한개를 기준으로 양쪽의 선을 만든것으로 “ㄱ”와 같은 모양입니다. 사각형이 완성이 되기 위해서는 위의 과정을 한번더 반복해야 겠지요. >>> t=Turtle() >>> t.fd(100) >>> t.right(90) >>> t.fd(100) >>> t.right(90) >>> t.fd(100) >>> t.right(90) >>> t.fd(100) >>> t.right(90) >>> t.hideturtle() 위 코드는 같은 명령이 반복되지요. 즉, 앞으로 이동하고 터틀을 90도 회전하는 명령이 4번 반복합니다. 번거롭지요. 동일한 명령을 여러번 반복하는 것은 컴퓨터가 매우 빠르고 정확하게 처리할 수 있는 일들 중의 하나입니다. 그러나 컴퓨터에 그러한 명령을 전달하기 위해서는 컴퓨터가 인식할 수 있게 전달해야 하지요. 뭐 특별한 방법이 아니라 일정한 형식을 맞추기 만하면 됩니다. 이러한 형식을 반복문 (looping)이라고 해요. 또는 회돌이라는 용어로 언급되기도 하죠.  반복문의 형식은 몇가지가 있는데 우선은 위 코드에 적합한 for 문에 대해 살펴보지요. 위 코드를 for 문으로 작성해 보면 다음과 같습니다. for i in range(4): #(1)     t.fd(100) #(2)     t.right(90) #(3) 코드를 작성할 경우 각 명령에 설명을 적을 경우 '#' 기호를 사용합니다. 일반적으로 이 기호 뒤에 첨부되는 설명을 주

turtle로 그림그리기 준비

 도화지와 펜 만들기 그림을 그릴 때 펜 또는 붓, 도화지가 그리고 물감등이 반드시 필요하지요. turtle을 사용하여 그림을 그리는 경우도 같습니다. 다음 코드를 볼까요? >>> from turtle import Turtle >>> t=Turtle() 처음 코드에 의해 turtle의 Turtle 클래스의 사용을 알립니다. 두번째 코드로 그림을 그리기 위한 도화지(캔버스)를 생성하죠. 위 코드에서는 도화지의 이름을 t라고 하였습니다. 위의 코드로 다음과 같은 결과가 나타나지요. 위 결과는 turtle로 그림을 그리위한 도화지와 가운데 검은 물체가 펜입니다. 이 펜을 “터틀”이라고 합니다.  우리가 그림을 그릴 때 손 동작이 어떠한 규칙없이 사용하는 것 같지만 자세히 관찰해 보면 직선과 직선의 방향을 변경하여 어떠한 모양을 그리는 것을 알 수 있습니다. 터틀 역시 마찬가지로 직선 즉, 터틀을 방향변경없이 앞으로 이동하는 것과 방향을 변경하는 것으로 구성되지요. 다음을 볼까요. >>> t.fd(100) >>> t.right(90) >>> t.fd(100) 위 코드는 다음과 같습니다. 1) 앞으로 100만큼 이동 2) 90도 회전 3) 앞으로 100만큼 이동 이 코드의 결과는 다음 그림과 같죠. 1번 그림은 단순히 처음 어떤 점으로 부터 100만큼 이동한 것이고 2번 그림에서 터틀(펜)의 방향이 오른쪽으로 90도 회전한 것을 나타냅니다. 이 상태에서 앞으로 100만큼 이동하면 1번 선과 90도 각도로 회전한 것이 되지요. 위의 코드를 좀 자세히 살펴볼까요? forward(거리) 또는 fd(거리): 지정된 거리 만큼 앞으로 이동하기 위해 사용하는 함수(메소드)입니다. 함수란 미리 작성해 명령을 실행하는 변환기 입니다. 필요한 부분을 어떤 함수에 전달하면 그 함수는 미리 약속된 명령을 실행하여 결과를 내놓지요. 위에서 “앞으로

[Linear Analysis] 최소제곱해(Least Square solution)

최소제곱해(Least Square solution) 행렬방정식 Ax = b의 해가 없는 모순 시스템(inconsistent system)에서 그 시스템에 가장 적합한 근사해를 찾는 방법으로 최소제곱방법을 사용합니다. 다시말하면 Ax와 b와의 거리를 최소로 하는 벡터 x를 최소제곱해(least-square solution) 라고 하며 식 1과 같이 나타낼 수 있습니다. $$\tag{식 1}||b-Ax|| ≈0$$ 실수 공간에 m×n 차원의 행렬 A와 벡터 b가 존재한다면 Ax = b의 최소제곱해는 식 2를 만족하는 $\hat{x}$가 됩니다. 이 식의 열공간의 차원은 n이므로 $\mathbb{R}^n$ 공간에 존재합니다. $$\tag{식 2}||b-A \hat{x}|| \leq ||b-Ax||$$ Ax = b가 해를 가진다는 것은 선형독립으로 A는 기저벡터들로 구성됨을 의미합니다. 그러나 이미 가정한 것과 같이 이 식은 모순된 시스템으로 해를 가질 수 없습니다. 대신에 식 3에서 나타낸 것과 같이 결정된 최소제곱해와의 선형독립의 결과인 벡터 $\hat{b}$가 존재합니다. \begin{align}\tag{식 3}Ax&\approx b\\ A\hat{x}&=\hat{b} \end{align} 식 3의 b는 식 4와 같이 $\hat{b}$와 두 벡터의 차이로 결정할 수 있습니다. \begin{align}\tag{식 4}b&=\hat{b}+(b-\hat{b})\\ &= \hat{b}+(b-A\hat{x})\end{align} 식 4가 $\mathbb{R}^2$ 차원에서 이루어진다면 다음과 같이 시각화할 수 있습니다. fig, ax=plt.subplots(figsize=(3,2)) nme=[r"b-A$\hat{x}$",r"$\hat{b}=A\hat{x}$", "b"] cod=[(0,3), (2,0), (2,3)] col=["r", "b&qu

분자들의 결합과 특성

분자내의 힘과 분자간의 힘 분자를 형성하기 위해 원자들은 화학결합(chemical bond)에 의해 함께 묶여 있습니다. 이 화학결합의 종류와 힘은 관련된 원자들에 따라 다릅니다. 이 결합은 분자 내부에 작용하는 힘이므로 분자내 힘(intramolecular force)라고 합니다. 단순히 chemical bond(화학결합)이라고 합니다. 정의: 분자내 힘(Intramolecular force) 분자를 구성하는 원자들의 힘 화학결합의 종류는 다음과 같습니다. - 공유결합(Covalent bond): 비금속 원자들 사이에 이루어 집니다. $CO_2  \leftrightarrows C^+ + O^{2-}$ - 이온결합(Ionic bond): 비금속과 금속간에 존재하는 결합. 예로 $NaCl \leftrightarrows Na^+ + Cl^-$ - 금속결합(Metallic bond):  금속결합은 금속에 고르게 퍼져있는  전자 와  이온 들 간의 전기적인 결합입니다. 분자들간의 힘은 분자들을 묶는 결합입니다. 한잔의 물은 많은 물 분자들을 포함하고 있지요. 잔 속의 물들은 각각의 물 분자들을 분자간 힘들에 의해 묶여있는 것입니다. 이 분자간 힘의 세기는 그 물질의 녹는점과 끓는점 같은 특성에 영향을 주기 때문에 중요합니다. 예를들어 분자간의 힘이 강하면 그 물질의 녹는점과 끓는 점이 높습니다. 또한 분자간의 힘이 강할 수록 그 분자의 크기기 증가합니다. 정의: 분자간 힘  분자들을 하나로 묶는 분자들 사이의 힘  다음은 물분자에 대한 분자내, 분자간 힘을 나타낸 것입니다. 위 그림은 물분자내에서 이루어지는 intramolecular force와 intermolecular force를 나타낸 것으로 이 힘들은 물질의 운동이론(Kinetic Theory of matter)으로 부터 이해 할 수 있습니다. 물질의 운동이론  물질의 운동이론은 물질들이 다른 상(고체, 액체, 기체)으로 존재하는 이유와 다른 상들로 변하는 방법을

분자의 표현

원자(Atom) 대부분의 금속은 전기 또는 열 전도체로 사용하고 대부분의 비금속은 전기 또는 열을 전달하지 않는 특성을 가집니다. 즉,  물질마다 고유한 특성을 가집니다. 이렇듯 물질이 고유한 특성을 가지기 때문에 사용되는 분야도 다르지요. 그러면 왜 물질마다 서로 다른 특성을 가질까요? 이것은 각 물질이 구성하고 있는 성분들의 차이 때문일 것입니다. 이 질문의 답은 원자(atom)라고 하는 물질의 최소단위에서 찾을 수 있습니다. 즉, 각 물질의 원자들의 종류, 구성방법들이 물질의 특성에 영향을 줍니다. 물질이 원자 형태로 발견되는 경우는 드뭅니다. 일반적으로 원자는 다른 원자에 결합되어 화합물이나 분자를 형성합니다. 원자가 개별적으로 발견되고 다른 원자와 결합하지 않는 것은 고귀한 가스 (예 : 헬륨, 네온 및 아르곤)에서만 발생합니다. 분자(Molecules) 정의: 분자  분자는 두개 이상의 원자가 상대적으로 강한 힘들에 의해 서로 묶여있는 원자그룹입니다.  우리 주위의 거의 모든 것들은 분자들로 이루어져 있습니다.  물 : $H_2O$ 두 개의 수소 원자가 하나의 산소 원자에 결합 된 분자  산소: $O_2$ 서로 합쳐진 두 개의 산소 원자로 구성된 분자 우리가 먹는 음식조차도 탄소, 수소 및 산소와 같은 원소의 원자를 포함하는 분자로 구성되어 있습니다.이 분자들은 서로 다른 방식(구조)으로 결합되어 있습니다. 이들 각각은 각 분자에 단지 몇 개의 원자가 있기 때문에 작은 분자로 알려져 있습니다. 거대한 분자는 분자 당 수백만 개의 원자로 구성될 수 있는 분자들이다. 예로 다이아몬드는 수백만 개의 탄소 원자들로 구성되며 일상에서 볼 수 있는 금속들은 수백만개의 금속 원자들이 결합된 거대분자입니다. 2.1 분자의 표현  분자의 구조는 다양한 방법으로 나타낼 수 있습니다. 때로는 여러 유형의 도형을 사용하여 분자를 나타내지만 화학식(chemical formula)이나 그 화합물의 이름을 사용하여 나타낼 수도 있습니다. 1)

물질의 분류

물질의 분류  우리 주변의 세계에서 볼 수있는 모든 대상은 물질로 만들어져 있습니다. 물질은 우리가 숨 쉬는 공기, 우리가 걷는 땅, 우리가 먹는 음식, 우리 주변에 사는 동물과 식물을 구성합니다. 심지어 우리 자신의 인체도 물질로 만들어졌습니다. 서로 다른 물제(object)는 서로 다른 유형의 물질(matter) 또는 재료(material)로 만들 수 있습니다. 예를 들어 찬장(cupboard, 물체)는 나무, 못, 힌지 (재료)로 만들어집니다. 재료의 속성은 객체의 속성에 영향을줍니다. 찬장의 예에서 나무와 금속의 강도는 찬장을 강하고 내구성있게 만듭니다. 마찬가지로 나쁜 날씨에 착용하는 비옷은 방수 소재로 만들어져 있습니다. 금속은 전기를 전도 할 수있는 재료이기 때문에 전선의 제료로 사용됩니다. 이와같이 재료의 특성을 이해하는 것이 중요합니다. 올바른 이해에 따라 가정, 산업 및 기타 응용 분야에서 각 물질을 적합하게 사용할 수 있습니다. 이 장에서는 다양한 유형의 재료와 그 속성을 살펴 보겠습니다. 아래 그림은 물 질들의 특성에 따라 분류해 놓은 것입니다. 물론 이외에 더 자세히 또는 다른 방법으로 물질을 분류할 수 있으며 이러한 방법들을 소개합니다. 1 혼합물(Mixtures) 우리는 일상 생활에서 항상 혼합물을 봅니다. 예를 들어, 스튜는 고기와 채소와 같은 다른 음식의 혼합물입니다. 해수는 물, 소금 및 기타 물질의 혼합물이며 공기는 이산화탄소, 산소 및 질소와 같은 가스의 혼합물입니다. 정의: 혼합물  혼합물은 하나 이상의 물질이 결합된 것으로 서로 묶여(binding)되어 있지 않습니다. 혼합물은 다음의 특성을 가집니다. - 혼합물의 각 성분의 비율은 고정되어 있지 않습니다. 물 250ml가 존재하는 비이커에 모래 20, 40, 100g의 모래를 첨가한 상태는 혼합물입니다. - 혼합물의 각 성분은 각각의 물리적 특성을 간직합니다. 물과 모래를 혼합할 경우 물, 모래의 각각의 성분은 변함이 없습니다. -

[sympy] Sympy객체의 표현을 위한 함수들

Sympy객체의 표현을 위한 함수들 General simplify(x): 식 x(sympy 객체)를 간단히 정리 합니다. import numpy as np from sympy import * x=symbols("x") a=sin(x)**2+cos(x)**2 a $\sin^{2}{\left(x \right)} + \cos^{2}{\left(x \right)}$ simplify(a) 1 simplify(b) $\frac{x^{3} + x^{2} - x - 1}{x^{2} + 2 x + 1}$ simplify(b) x - 1 c=gamma(x)/gamma(x-2) c $\frac{\Gamma\left(x\right)}{\Gamma\left(x - 2\right)}$ simplify(c) $\displaystyle \left(x - 2\right) \left(x - 1\right)$ 위의 예들 중 객체 c의 감마함수(gamma(x))는 확률분포 등 여러 부분에서 사용되는 표현식으로 다음과 같이 정의 됩니다. 감마함수는 음이 아닌 정수를 제외한 모든 수에서 정의됩니다. 식 1과 같이 자연수에서 감마함수는 factorial(!), 부동소수(양의 실수)인 경우 적분을 적용하여 계산합니다. $$\tag{식 1}\Gamma(n) =\begin{cases}(n-1)!& n:\text{자연수}\\\int^\infty_0x^{n-1}e^{-x}\,dx& n:\text{부동소수}\end{cases}$$ x=symbols('x') gamma(x).subs(x,4) $\displaystyle 6$ factorial 계산은 math.factorial() 함수를 사용할 수 있습니다. import math math.factorial(3) 6 a=gamma(x).subs(x,4.5) a.evalf(3) 11.6 simpilfy() 함수의 알고리즘은 식에서 공통사항을 찾아 정리하

Sympy Introduction

개요 Symbolic 계산 은 심벌로 이루어진 수학적 객체의 계산을 다룹니다 .  즉, 특정한 값이 전달되지 않은 변수들을 심벌로 표현하는 수학식을 나타낼 수 있다는 것을 의미합니다.  9 의 제곱근은 3 인 정확한 수입니다 . >>> import math >>> math.sqrt(9) 3.0 >>> 9**0.5 3.0 >>> pow(9, 0.5) 3.0 그러나 8 의 제곱근은 다음과 같이 근사값이 반환되지요 . >>> math.sqrt(8) 2.8284271247461903 이러한 경우 sympy 모듈의 함수를 사용하면 정확히 반환되는 부분외의 다른 부분은 심벌을 사용하여 나타냅니다 . 즉 , $\sqrt{8}=2 \sqrt{2}$ 의 형태로 나타냅니다 . >>> from sympy import * >>> sqrt(8) 2*sqrt(2) 보다 정확한 표현을 위해 일정한 기호 ( 심벌 ) 을 사용하는 방식으로 다양한 변수들의 표현에 사용됩니다 .  이러한 수학적 표현을 형성하기 위해서는 일반적으로 문자로 인식되는 x, y등을 문자가 아닌 수학적 심벌(기호)로 사용한다는 것을 symbols() 를 사용하여 미리 선언합니다.  from sympy import symbol >>> x, y=symbols('x y')#x,y는 문자가 아닌 심벌임을 선언  >>> x x >>> y y >>> expr=x+2*y >>> expr x + 2*y >>> type(x) <class 'sympy.core.symbol.Symbol'> 위에서 expr 객체는 심벌 x, y 를 지닌 객체이며 이 객체들과 심벌들 사