파이썬에서 수학식을 세우는 라이브러리인 Sympy를 가지고 식을 만드는 간단한 방법을 소개하겠습니다. 파이썬이 객체지향언어다 보니 이런 것도 할 수 있나 싶어서 놀랍습니다. 직관적으로 수학식을 표현할 수 있어서 그 동안 배운 수학을 쉽게 코딩할 수 있는 것 같습니다. 수학에서도 미지수 x처럼 변수를 지정하고 문제를 풀어나가는데 Sympy에서도 마찬가지로 움직입니다. 그래서 Symbol() 함수를 이용해 변수를 지정하고 시작을 해야 오류가 발생하지 않습니다. 분수, 파이,복소수 ,변수 표시 분수는 sy.Rational(a,b)를 이용합니다. R을 반드시 대문자로 써야합니다. sy.Rational(1,2) 파이같이 임의로 정해진 것도 쓸 수 있습니다. sy.pi 수치화하고 싶다면 sy.N()으로 합니다. 또..
파이썬으로 적분을 하는 방법입니다. 적분에 대해 간단히 소개하면 적분은 면적을 구하는 방법으로 고대부터 연구된 분야입니다. 사각형이나 삼각형은 넓이를 구하는 방법은 잘 알려져 있습니다. 그리고 이를 활용해 직선으로 이루어진 도형에 대한 넓이를 구하는 방법을 알아낼 수 있습니다. 그런데 직선이 아닌 곡선으로 이루어진 도형은 사각형의 넓이를 구하는 방식으로는 구하기가 어렵습니다. 그럼에도 곡선으로 이루어진 도형을 구하기 위해 초반에는 직사각형의 넓이를 이용해 구분구적법이라는 방법으로 사용했습니다. 직사각형의 넓이가 밑변 x 높이 인 것을 알고 있었고 구하기 쉽기 때문에 곡선이 덮고 있는 면적을 수많은 직사각형으로 잘게 쪼개서 근사하는 방식으로 접근하는 방식입니다. 당연히 오차가 발생하고 계산량은 어마무시합니..
회귀 분석에서 많이 쓰이는 최소 제곱 오차에 대한 수학적 설명입니다. 회귀 분석은 분포된 데이터 값을 한줄로 표현할 수 있는 적절한 함수를 찾아내는 것인데 최소 제곱 오차를 쓰면 괜찮은 함수를 찾아낼 수 있습니다. 가장 직관적인 접근을 적어놓겠습니다. Linear case 어떤 곡선을 넣을 것인가에 따라 방향이 달라질 수 있는데 가장 쉬운 방법인 최적의 직선을 만들어 보겠습니다. 즉, 직선은 $ y= a+bx $ 로 표현되는데 적절한 a와 b를 잘 찾아내어 최적의 함수를 구해보는 것입니다. 최적의 함수를 찾아내기 위해 최소 제곱 방법을 사용합니다. 최적의 직선을 $ y = a+bx $ 라고 합시다. 데이터 $ (x_i,f_i), \ \ i = 0,...,n $ 에 대해서, 각 데이터와 함수간의 에러를 $..
컴퓨터로 보간법을 사용한다고 할 때 코딩짜기 편한게 스플라인 보간법이 아닌가 싶습니다. 스플라인도 마찬가지로 주어진 데이터에 대한 다항식을 찾아내는 작업인데 piecewise 방법으로 접근한다는 게 다릅니다. 즉, 두점 사이의 다항식을 만들고 구한 각각을 함수가 연속되게 이어주는 작업을 하는 방법입니다. 다항식을 구하면서 동시에 다항식간 연속이 가능하도록 해야하기 때문에 수학적 지식이 조금 요구되지만 원리를 알기만 하면 됩니다. 실제로 구하는것은 컴퓨터고 워낙 유명해서 스플라인보간법에 대한 라이브러리가 이미 잘 갖추어져 있기 때문에 표준 라이브러리를 쓰면 됩니다. 물론 라이브러리가 맘에 들지 않아 커스텀하게 바꿀려고 한다면 당연히 원리를 알고 그에 맞게 코딩을 다시 짜야 할겁니다. 가장 쉬운 접근법 가장..
간격이 h로 같은 $ x_0, ..., x_n $ 인 경우의 보간법입니다. 즉 $ x_k = x_0 + kh $ 인 경우입니다. 특별한 케이스라고 볼 수 있습니다. 기존에 설명했던 여러가지 보간법에서 크게 벗어나지 않고 수학적으로 정리하고 수식 변형과 편리한 계산을 할 수 있어서 따로 정리한 경우입니다. 데이터의 시간이 일정한 경우 equispaced interpolation에 해당한다고 볼 수 있습니다. Prerequisites 내용 이해는 어렵지 않으나 일반적인 경우를 살펴보고 싶다면 아래 내용을 보시는 것을 추천드립니다. Divided difference interpolation Difference operators divided difference 와 역할이 비슷하지만 같은 간격의 데이터라는 전제..
Largrange interpolation 을 컴퓨터로 실행하게 되면 $x_i-x_j$ 를 일일히 계산해야 해서 계산량이 많아져서 비효율적입니다. 이에 대한 계산비용을 줄이고 다양한 방식을 접목하기 위해 기호를 정의해서 계산량을 개선하는 시도입니다. Divided differences 미분을 보면 다음과 같습니다. $$ \frac{df(x)}{dx} = f'(x) = \lim_{h \to 0} {\frac{f(x+h)-f(x)}{h}} $$ 이 식을 해석을 해보면 x와 x+h 사이의 기울기를 h를 줄여가면서 순간 기울기를 구하겠다는 얘기입니다. f'(x)를 그림으로 그려보면 다음과 같습니다. 즉, tangent line을 그리는 것입니다. 미적분을 공부하면 다 아는 내용이지만 다시 정리를 해보았습니다. ..
이전에 쓴 포스팅인 Polynomial interpolation 을 연결하는 내용입니다. 이번 포스팅은 Lagrange interpolation 에 대한 내용입니다. 이전 포스팅에서는 세 점의 데이터를 가지고 quadratic polynomial로 보간함수를 만드는 작업을 했었습니다. 이번에는 점이 n+1개인 경우입니다. 사실상 많은 숫자를 의미하는데 계산편의를 위해 n+1개로 하겠습니다. $ (x_0,f_0),...,(x_n,f_n) $ 의 데이터에서 보간함수 $P_n(x)$ 를 만들려고 합니다. 당연히 같은 값의 점은 하나도 없습니다. 만들어야 하는 보간함수 $P_n(x)$ 는 $P_n(x)$ 의 차수(degree)는 n보다 작았으면 좋겠고 지금 사용할 데이터 $ (x_0,f_0),...,(x_n,f..
보간(interpolation)을 할 때 누구나 생각할 수 있는 방법이 다항식을 이용한 방법입니다. 점으로 데이터를 가져올 것이라서 그걸 잇는 방법으로 직선이나 곡선으로 이을것인데 다항식은 직선이나 곡선을 만드는 식이니깐 심플하게 시도해 볼 수 있습니다. 수학적으로 어느정도까지 만들어낼 수 있는지 살펴보겠습니다. Linear interpolation 먼저 두점부터 생각해봅시다. 두 점을 잇는 건 다항식으로는 직선으로만 할 수 있습니다. 어떤 선(y=ax+b)이 두 점 $ (x_{0},f_{0}), (x_{1},f_{1}) $을 지난다고 하면 다음과 같이 쓸 수 있습니다. $$ f_{0} = a+bx_{0} $$ $$ f_{1} = a+bx_{1} $$ 목적은 직선을 생성하는것이니 적절한 a와 b를 만들어..
수학 카테고리에서는 수학내용은 코딩은 하지 않고 지식만 정리하겠습니다. 수치해석을 하려면 미적분학과 선형대수의 지식이 어느정도 알아야 하긴 하는데 일일히 다 설명하기가 어려우니 어느정도 다 안다고 가정하고 정리를 하겠습니다. 다항식 $ p_{n} $을 표현해보겠습니다. 미적분학에서는 멱급수과 테일러 급수로 다항식을 무한 차수에 대해 표현하는데 데이터는 무한으로 갈 수 없으니 유한한 차원에 대해서 설명하겠습니다. Power form 먼저 power form 부터 보면, 식이 $ 1,x,x^2,...,x^n $ 으로 이루어진 linear combination으로 나타내게 됩니다. 가장 큰 차수가 n이니 degree가 n이 되겠습니다. $$ p_{n} = a_{0} + a_{1}x + a_{2}x^{2} + ..