기본 콘텐츠로 건너뛰기

1월, 2019의 게시물 표시

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

삼각함수의 적분

삼각함수 경우 다음과 같이 치환을 사용하여 적분할 수 있습니다. $\int cos(x)sin^5(x)dx$ sin(x)=u,  cos(x)dx=du로 치환하면 $\int u^5 du = \frac{1}{6}sin^6(x)+c$ 위의 경우는 치환한 부분의 미분이 존재하는 경우입니다. 그러나 다음과 같이 그렇지 않은 경우는 삼각함수 자체를 변형하여 실행할 수 있습니다. $\int sin^5dx=\int sin(x)sin^4(x)dx=\int sin(x)(1-cos^2(x))^2\\ \because sin^2(x)+cos^2(x)=1 \rightarrow sin^2(x)=1-cos^2(x) \\ cos(x)=u, -sin(x)dx=du \\-\int (1-u^2)^2 du= -\int 1-2u^2+u^4 du=-u+\frac{2}{3}u^3-\frac{1}{5}u^5+c=-cos(x)+\frac{2}{3}cos^3(x)-\frac{1}{5}cos^5(x)+c$ >>> from sympy import * >>> x=symbols("x") >>> integrate(sin(x)**5) -cos(x)**5/5 + 2*cos(x)**3/3 - cos(x) 예) 다음 함수의 적분 $\int sin^6(x)cos^3(x) dx$ 위 함수에 cos(x)=u → -sin(x)dx=du 로 치환하면 다음과 같이 변형됩니다. $\int sin^5(x)cos^3(x)sin(x)dx=-\int sin^5(x)udu$ 위의 식에서 sin^5(x)에 대한 처리가 문제가 됩니다. 반면에  sin(x)=u,  cos(x)dx=du로 치환하면 보다 적분이 용이한 식으로 전환됩니다. $\int sin^6(x)cos^2(x)cos(x)dx=\int sin^6(x)(1-sin^2(x))cos(x)dx\\=\int u^6(1-u^2)du=\frac{1}{7}u^7-\frac{1}{9}u^9+c\\=\frac{1}

부분분수_sympy

내용 var와 symbols 분수 표현 부분분수 분해 행렬의 적용 부분분수 var와 symbols symbols(기호(문자), **args) 지정된 기호 또는 문자를 sympy객체내에서 변수로 지정. 별도의 객체화가 필요 var(기호(문자), **args) 지정된 기호 또는 문자를 sympy객체내에서 변수로 지정. sympy 내에서 var()함수의 결과가 전역변수가 되므로 별도의 객체화가 불필요 두 함수 모두 real=True와 같은 변수에 대한 조건을 부여할 수 있음 var('x') x 위의 경우 x는 기호로 적용되지만 symbols()를 사용할 경우 다음과 같이 객체로 저장해야 합니다. x=symbols("x"); x x var('a,ab,abc') (a, ab, abc) abc abc type(abc) sympy.core.symbol.Symbol real=True인자를 사용하여 기호의 범위를 한정할 수 있습니다. var('x,y', real=True) (x, y) x.is_real and y.is_real True 분수 표현 다음과 같은 분수를 나타내기 위해 다음 함수를 사용합니다. Rational(numer, denom) or Rational(유리수): 인수가 number일 경우 적용 분자, 분모가 함수일 경우는 f/g로 나타냄 numer(분수식): 분수의 분자항을 반환 denom(분수식): 분수의 분모항을 반환 x=symbols('x') f=5*x**2+10*x+3 g=2*x+2 eq=f/g; eq $\quad\color{navy}{\scriptstyle \frac{5 x^{2} + 10 x + 3}{2 x + 2}}$ numer(eq) $\quad\color{navy}{\scriptstyle

부분적분

미분의 곱 법칙과 연관 (fg)'=f'g+fg' $\int (fg)'dx=\int f'g dx+\int fg'dx \rightarrow fg=\int  f'g dx+\int fg'dx $ 위 식을 다음과 같이 다시 정렬할 수 있습니다. $\int fg' dx=fg-\int f'g dx $  Eq(1) 부분적분 위 식에서 f(x), g(x)를 각각 u, v로 치환하면 다음과 같이 정리됩니다. f(x)=u, g(x)=v → f'(x)dx=du, g'(x)dx=dv Eq(1)에 치환을 적용하면 $\int u dv=uv - \int v du$ 위 식을 지정한 구간 [a, b]의 정적분은 다음과 같이 계산됩니다. $\int^b_a u dv=uv|^b_a - \int^b_a v du$ 위 부분 적분의 절차를 프로그램 함수로 작성하면 다음과 같습니다. def partIntegralS(u, dv, Symbolvar, loup=0):     du=diff(u, Symbolvar)     v=integrate(dv, Symbolvar)     uv=u*v     vdu=integrate(v*du, Symbolvar)     if loup==0:         re=uv-vdu         return(re)     else:         re=uv-vdu         re1=re.subs(Symbolvar, loup[1])-re.subs(Symbolvar, loup[0])         return(re1) 예) 다음을 적분? 1) $\int xe^{6x}dx=x\frac{1}{6}e^{6x}-\int\frac{1}{6}e^{6x} dx\\=\frac{x}{6}e^{6x}-\frac{1}{36}e^{6x}+c\\ \because u=x, \;dv=e^{6x} \;\rightarrow\; du=dx,\; v=\frac{1}{6}e^{6x}$

Newton's Method

Newton's Method 모든 방정식이 정확한 해를 가지지는 않습니다. 이러한 경우 근사해(approximate solution)을 계산할 필요가 있습니다. 이러한 근사해를 계산하는 다양한 방법들 중에 가장 많이 사용되는 방법이 뉴턴의 방법입니다.  위 그림에서 파란선의 경우 x_0에서의 접선, 초록선의 경우는 x_1에서의 접선을 나타냅니다. 이 접선이 x축과 만나는 점을 기준으로 함수f(x)와의 점에서의 접선의 기울기는 f'(x_1)이 됩니다. 함수 f(x)의 해를  x_n이라고 하면 다음과 같이 초기 임의의 점 x_0에서 시작하여 x_n까지의 근사시킬 수 있습니다.  tangent line at x_0 : y=f(x_0)+f'(x_0)(x-x_0) x_1: 0=f(x_0)+f'(x_1)(x_1-x_0) → x_1=x_0-\frac{f(x_0)}{f'(x_1)} tangent line at x_1: y=f(x_1)+f'(x1)(x-x_1) 위 식을 적용하여 x_2는 다음과 같이 계산됩니다.  0=f(x_1)+f'(x1)(x_2-x_1)→ x_2=x_1-\frac{f(x_1)}{f'(x_2)} 위 과정은 x_n을 계산할 수 있을 때까지 반복할 수 있습니다.  위 과정을 다음과 같이 일반화 할 수 있습니다.  x_n이 f(x)=0의 근사해이고 f'(x_n) ≠ 0 이 아니면 다음식이 성립됩ㄴ다.  $x_{n+1}=x_n -\frac{f(x_n)}{f'(x_n)} 근사해를 계산하기 위해 위의 식을 적용할 경우 위 과정의 반복정도를 결정해야 합니다. 이 식은 근해를 계산하는 것으로서 반복수에 대한 일반적인 기준을 설정할 수는 없지만 각 반복의 결과의 차이가 매우 작을 경우까지 반복 계산을 합니다.  예) 뉴턴방법을 적용하여 구간 [0, 2] 에서  f(x)=cos(x)-x의 근사해를 계산합니다.  >>> i

sympy 분수 표시와 자료형

내용 계산 결과를 분수로 표시하는 방법 sympy객체의 자료형 확인 계산 결과를 분수로 표시하는 방법 Rational('분수'), Rational(분자, 분모), Rational(유리수) import numpy as np from sympy import * y=x**(2/3)*(2*x-x**2);y $\quad\color{navy}{\scriptstyle x^{0.666666666666667} \left(- x^{2} + 2 x\right)}$ expand(diff(y, x)) $\quad\color{navy}{\scriptstyle 3.33333333333333 x^{0.666666666666667} - 2.66666666666667 x^{1.66666666666667}}$ 위 결과들을 분수로 나타냅니다. y=x**Rational('2/3')*(2*x-x**2);y $\quad\color{navy}{\scriptstyle x^{\frac{2}{3}} \left(- x^{2} + 2 x\right)}$ expand(diff(y, x)) $\quad\color{navy}{\scriptstyle - \frac{8 x^{\frac{5}{3}}}{3} + \frac{10 x^{\frac{2}{3}}}{3}}$ sympy객체의 자료형 확인 x=[20**(1/3)*3**(2/3)/3, -20**(1/3)*3**(2/3)/6 - 20**(1/3)*3**(1/6)*I/2, -20**(1/3)*3**(2/3)/6 + 20**(1/3)*3**(1/6)*I/2] x [1.8820720577620567, -0.941036028881028 - 1.62992221377479*I, -0.941036028881028 + 1.62992221377479*I] [type(i) for i in x] [float, sympy.core.add.Add, sympy.core.add.Add] sympy에서 정수와

latex equation, HTML symbol 정리

구글 블로그에서 latex수식을 적용하기 위해서  1) 블로그에 메인창에서 테마로 이동  2) 우측 상단의 $vdots$클릭하여 HTML 편집기로 이동 3) <head> ~</head> 사이에 다음을 입력  <script src='http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML' type='text/javascript'/> 1. 조건에 따른 여러 함수 표현 \[f(x) = \left\{   \begin{array}{lr}     x^2 & : x < 0\\     x^3 & : x \ge 0   \end{array} \right. \[f(x) = \left\{   \begin{array}{lr}     x^2 & : x < 0\\     x^3 & : x \ge 0   \end{array} \right. \] 또는 \[  u(x) =   \begin {cases}    \exp{x} & \text{if } x \geq 0 \\    1       & \text{if } x < 0   \ end {cases} \ ] \[  u(x) =   \begin{cases}    \exp{x} & \text{if } x \geq 0 \\    1       & \text{if } x < 0   \end{cases} \] 2. Arc(호) 문자 \overset{{\frown}}{{ABC}} =$\overset{{\frown}}{{ABC}}$ 3. HTML 원문자 &#9450;  = ⓪ &#9312; = ① &#9413;= ② &#9314; = ③ &#9315; = ④ &#9316; = ⑤ &#9317; = ⑥ &#93