기본 콘텐츠로 건너뛰기

통계관련 함수와 메서드 사전

A B C d E F G H I K L M N O P Q R S T U V W Z A statsmodels.ap.stats.anova_lm(x) statsmodels.formula.api.ols 에 의해 생성되는 모형 즉, 클래스 인스턴스(x)를 인수로 받아 anova를 실행합니다. np.argsort(x, axis=-1, kind=None) 객체 x를 정렬할 경우 각 값에 대응하는 인덱스를 반환합니다. Axis는 기준 축을 지정하기 위한 매개변수로서 정렬의 방향을 조정할 수 있음(-1은 기본값으로 마지막 축) pandas.Series.autocorr(lag=1) lag에 전달한 지연수에 따른 값들 사이의 자기상관을 계산 B scipy.stats.bernoulli(x, p) 베르누이분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 p: 단일 시행에서의 확률 scipy.stats.binom(x, n, p) 이항분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 n: 총 시행횟수 p: 단일 시행에서의 확률 C scipy.stats.chi2.pdf(x, df, loc=0, scale=1) 카이제곱분포의 확률밀도함수를 계산 $$f(x, k) =\frac{1}{2^{\frac{k}{2}−1}Γ(\frac{k}{2})}x^{k−1}\exp\left(−\frac{x^2}{2}\right)$$ x: 확률변수 df: 자유도 pd.concat(objs, axis=0, join=’outer’, …) 두 개이상의 객체를 결합한 새로운 객체를 반환. objs: Series, DataFrame 객체. Axis=0은 행단위 즉, 열 방향으로 결합, Axis=1은 열단위 즉, 행 방향으

공배수와 공약수 (Common Multiple and Factor)

공배수의 합 Sum of Common Multiple 3 또는 5의 배수 자연수 10이하의 3 또는 5의 배수는 3, 5, 6, 9. 이들의 합은 23 re=0 for n in range(1, 1001):     if n%3==0 or n%5==0:         re=re+n re 234168 위 프로그램과 같이 1000이하의 3, 5 공배수의 합? re=0 n=0 while n<=1001:     if n%3==0 or n%5==0:         re=re+n     n += 1 re 234168 최소공배수 (Least Common Multiple) 두 수의 최소공배수 def lcmS(x, y):     re=[]     n=1     while len(re)<1:         if n%x==0 and n%y==0:             re.append(n)         n+=1     return(re)     lcmS(14, 215) [3010]  2 수 이상에서의 최소공배수는 numpy 배열을 사용합니다. def lcm_arrayS(x):     re=[]     n=2     while len(re)<1:         y=np.repeat(n, len(x))         z=n%x         if all(z==0):             re.append(n)         n+=1     return(re) x=np.array([3, 5, 9]) lcm_arrayS(x) [45] 약수(Factor) def factorS(x):     re=[]     for i in range(1, x+1):         if (x % i == 0):             re.append(i)     return(re) factorS(1219) [1, 23, 53, 1219] 공약수와 최대공약수

Sympy객체의 단순화(2)

식의 단순화 simplify(x): 식 x를 간단히 정리 합니다. div> from sympy import * x, y, z=symbols("x, y, z") simplify(2*sin(x)**2+2*cos(x)**2)       2 simplify((x**3+x**2-x-1)/(x**2+2*x+1))       x - 1 위와 같이 simplify()는 기본공식이나 공통사항을 찾아 그 부분에 대한 정리를 기본으로 합니다. 그러나 아래의 결과와 같이 단일한 식의 인수분해는 실행되지 않습니다. simplify(x**3+x**2-x-1) x**3 + x**2 - x - 1 simplify(x**2+2*x+1)        x**2 + 2*x + 1 인수분해를 위해 factor()를 사용합니다. factor(x**3+x**2-x-1)       (x - 1)*(x + 1)**2 factor(x**2+2*x+1)       (x + 1)**2 simplify()는 식을 단순화 시키기 위해 거의 모든 알고리즘을 적용하므로 다른 함수들에 비해 느리다는 단점을 가집니다. 그러므로 단일한 알고리즘을 사용하는 factor(),collect() 함수 등을 사용하는 것이 유리합니다. factor()함수 등을 사용할 경우 계수가 유리수일 경우 더 이상 간단히 할 수 없는 기약분수를 계수로 하는 결과를 반환합니다. 그러나 simplify()의 경우 이러한 결과는 보장하지 못한다는 것입니다. simplify()는 대화식으로 사용할 때, 표현식을 더 간단한 형식으로 바꾸고 싶을 때 가장 좋습니다. 좀 더 정확한 결과를 얻으려면 simplify()가 반환하는 것을 확인한 후에 특정 함수를 적용하도록 선택할 수 있습니다. simplify()는 표현식이 어떤 형식인지 알지 못하는 경우 유용하며 그 식의 형식을 파악 후에는 특정한 함수가 필요할 수 있습니다. 다항식과 유리식의 단순화 expand(

삼각함수의 적분

삼각함수 경우 다음과 같이 치환을 사용하여 적분할 수 있습니다. $\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

삼각함수

내용 삼각함수 홀함수와 짝함수 삼각함수 그래프 주기적 특성 sympy를 적용한 방정식 해 결정 삼각함수 삼각함수는 0에서 360°를 반복하는 각(degree)과 무한대로 확장, 축소되는 길이의 비로서 도형의 특성을 이해하기 위한 매우 유용한 함수입니다. 이러한 함수는 기본적으로 삼각형과 원을 사용하여 설명됩니다. 예를 들어 원의 중심각 이동은 그것에 대응하는 호(arc)의 변화 또는 원위의 이동점의 변화로 표현됩니다. 또한 그림 1과 같이 원 위의 두 점을 연결하는 것으로 삼각형이 되며 각의 변화는 삼각형의 변의 길이의 변화를 일으키지요. 그림 1 특히 직각삼각형에서 각 변의 비와 각의 관계를 나타내는 sin, cos, tan 등과 같은 삼각함수를 정의할 수 있습니다. 그림 2. 그림1과 같은 직각 삼각형의 사이각으로부터 식 1의 삼각함수를 정의할 수 있습니다. $$\begin{align} \tag{1}& \sin(\theta)=\frac{B}{A}\\&\cos(\theta)=\frac{C}{A}\\&\tan(\theta)=\frac{B}{C}\end{align}$$ 식1로부터 식 2를 유도할 수 있습니다. $$\begin{align}\tag{2}&\tan(\theta)=\frac{B}{C}=\frac{\frac{B}{A}}{\frac{C}{A}}=\frac{\cos(\theta)}{\sin(\theta)}\\ &\csc(\theta)=\frac{1}{\sin(\theta)}\\&\sec(\theta)=\frac{1}{\cos(\theta)}\\&\cot(\theta)=\frac{1}{\tan(\theta)}\end{align}$$ 예 1)   다음 삼각형에서 sin(A), cos(A), than(A)? 위 삼각형 밑면의 길이는 피타고라스 정리에 의해 결정할 수 있습니다. $$\begin{align}\text{hypote

부분적분

미분의 곱 법칙과 연관 (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