본문 바로가기

컴퓨터/수학이랑25

수치해석학은 무엇을 배우는 과목인가 수치해석학은 컴퓨터를 이용하여 수학적인 문제를 해결하기 위한 방법에 관한 학문이다. 알고리즘과는 다음과 같은 관점에서 다르다. 알고리즘은 일반적으로 특정한 조건을 만족하는 해를 찾아 내기 위한 명확한 절차를 의미하며, 많은 경우 보다 적은 연산을 이용하여 문제의 해를 찾고자 한다. 예를 들면 2차원 평면 상에 N개의 점이 뿌려져 있을 때 N개의 점을 모두 포함하는 가장 작은 다각형을 그린다고 할 때 그 도형의 모서리에 있게 되는 점을 찾는 convex hull 문제와 같은 것. 혹은 보다 일반적으로는 정렬 문제. 그러나 수치해석학은 일반적으로 '수식'이 관여하는 문제의 '해'를 찾아 내기 위한 것이다. 예를 들면 ln(x) + x = K 이 때 K 가 임의의 실수라고 할 때 x 를 찾는 것. x를 양의 .. 2010. 6. 30.
배열의 모든 요소가 같은 부호를 갖고 있는지 판단하기 해결해야 하는 문제는 배열(container)에 있는 모든 요소(실수 형)가 같은 부호를 갖고 있는지를 판단하는 것이다. 가장 직관적인 방법은 아마도 다음과 같을 것이다. bool all_value_have_same_sign(const std::vector& value) { if(value.empty() == true) return false; if(value.size() == 1) return true; bool is_negative = (value[0] 0); std::vector::const_iterator pos = value.begin() + 1; for(; pos != value.end(); pos++){ is_negative &= (*pos 0); if(is_negative == false .. 2010. 6. 9.
미분방정식에 대한 수치해석학적 해(Runge-Kutta) - 구현 참고: 소스 코드는 이 글에 있는 것을 그냥 이용하면 됩니다. 만약 아래의 코드를 보았음에도 불구하고 어떻게 이용해야 하는지 모른다면 아직 C++ 에 익숙하지 않다는 것을 의미합니다. 이 경우 저에게 코드를 요청하셔도 별로 의미가 없습니다. 왜냐 하면, 이 경우 제가 소스를 드려도 제대로 이해하기 어려울 것이기 때문입니다. 그리고 제가 보내는 소스가 이 글에 나와 있는 것과 별반 다르지 않기 때문이기도 합니다. 이전 글에서 보았던 미분방정식에 대한 해를 수치해석학적으로 구하는 Runge-Kutta of Order Four 알고리즘을 구현해 보자. 단, 약간 일반화시켜서 구현한다. 알고리즘은 Richard L. Burden; J. Douglas Faires, Numerical Analysis, 8th ed.. 2010. 5. 23.
미분방정식에 대한 수치해석학적 해(Runge-Kutta) - 원리 이 방법은 원리는 조금 어려운데 알고리즘의 구현은 어렵지 않다. 따라서 원리보다는 알고리즘이 문제가 된다면 우선 알고리즘만 보면 된다. 또한, C++의 가상함수를 사용하여 조금 일반화시켰다. 만약 수천수만번 미방을 풀어야 한다면 이렇게 일반화된 방법은 좀 많이 느리므로 직접 코드를 구현해 사용할 것을 추천한다. 글이 너무 길어서 두 부분으로 나눈다. 구현 부분은 따로 뺀다. 풀어야 할 문제는 주어진 함수의 미분된 식을 알고 있을 때, 미분되지 않은 식을 찾아 내는 것이다. 즉, dy/dt = f(t, y(t)) 로 y의 t 에 대한 미분식이 주어져 있을 때 y(t) 를 찾아 내는 것이 목표이다. 예를 들면 이렇다. y' = t - 1 일 때, y는 무엇일까? 이것은 매우 간단하다. 양변을 t 로 적분하고.. 2010. 5. 23.