1. 사전 계획
가. 연구 동기
수학이나 물리학 등 다양한 분야를 학습할 때마다 미분방정식이 자주 등장하게 된다. 미분방정식은 특수한 형태의 경우가 아니라면 그 해를 구하는 방법이 매우 어렵다. 그러나 미분방정식을 풀 수 없을 때 미분방정식의 개형이라도 알 수 있다면 문제 상황을 이해하는 데에 어느 정도 도움이 될 수 있을 것이다. 이러한 이유로 미분방정식이 입력되었을 때, 간단한 풀이법을 가진 미분방정식이라면 그 일반해 또는 특수해를 계산해 주고 그와 동시에 입력된 미분방정식의 방향장을 프로세싱을 통해 그려 주는 프로그램을 제작하고자 계획하였다, 만약 특수해를 구해야 하는 미분방정식이라면 선형근사를 통해서 그 개형 또한 그려 주는 프로그램을 제작할 계획을 하였다.
나. 배경이론
미분방정식은 함수와 도함수로 이루어진 방정식이다. 미분방정식은 하나의 변수를 가진 상미분방정식과 두 개 이상의 변수를 가진 편미분방정식으로 나눌 수 있다. 본 프로그램은 상미분방정식의 개형에 초점을 두어 제작될 예정이다. 미분방정식은 변화를 이용해서 미래의 상태를 예측하는 데에 사용될 수 있기 때문에 그 중요성이 매우 크다.
방향장은 미분방정식의 평면의 격자점에서의 접선을 짧게 그려 준 그림이다. 방향장을 이용하면 미분방정식의 특수해의 대략적인 개형을 판단 가능하다. 본 프로그래밍은 방향장의 표현 및 출력을 중심으로 제작되었다.
선형근사법은 초기해를 구하는 미분방정식 문제를 주어진 초깃값 근처에서 방정식을 선형 방정식으로 근사시킨 후 이를 연속적으로 이어 나가며 미분방정식의 개형을 파악하는 방법이다. 이를 통해 얻어지는 함수를 조각적 선형함수라고 한다.
2. 배경적 지식 구체화
가. 수학적 배경지식
1). 미분방정식의 형태
미분방정식의 형태는 매우 다양하다. 대표적인 미분방정식만 하더라도 변수분리형 미분방정식, 1차선형미분방정식, 2차선형미분방정식, 코시-오일러 방정식 등 다양한 형태가 존재한다. 이러한 다양한 미분방정식의 형태들 중 프로세싱을 통하여 방향장과 개형을 그릴 수 있는 형태들을 선별하여 프로그램을 통해 구현하였다. 방향장을 좌표평면에 그리기 쉬운 미분방정식은 최대 미분 횟수가 1회인 1계 미분방정식이므로 이들 중 다항함수 미분방정식의 방향장을 제작하였다.
2). 방향장은 미분방정식의 해를 구할 때 사용되는 그래프의 일종이다. 일계 미분방정식 dy/dx=g(x,y)를 생각해 보자. 이 미분방정식을 좌변에 미분계수가 존재하며, 우변에 x, y에 대한 식이 존재하는 평범한 식이라고 생각할 수도 있지만 다르게 생각해 보면 주어진 함수의 특정 점에서의 접선의 기울기를 나타내고 있는 식이라고 생각할 수 있다. 따라서 주어진 dy/dx=g(x,y) 형태의 미분방정식에서 x, y 좌표를 안다면 이를 통해 주어진 점에서의 접선의 기울기를 구할 수 있다. 이를 평면의 각 격자점마다 격자점에서의 접선 방향으로 짧게 화살표를 그려 준 것이 방향장(Direction Field) 이다. 방향장은 시각적으로 미분방정식의 해곡선의 개형을 국소적으로 알 수 있게 해 준다. 따라서 미분방정식의 초깃값 문제에서 초깃값을 하나 안다면 방향장을 통해 그 초깃값에서의 접선의 기울기를 찾고 이를 연속적으로 연결해 감으로써 미분방정식의 특수해의 대략적인 개형을 알 수 있게 된다.
나. 정보과학 배경지식
1). 반복문에 대한 구체적 학습
방향장의 모습과 미분방정식의 해의 대략적인 개형을 구하기 위한 방법으로, 반복문을 이용하는 방법을 생각해 볼 수 있다. 좌표평면을 x좌표와 y좌표로 일정한 간격으로 분할한 뒤 각 격자점에서의 접선의 기울기를 계산한다. 이중 반복문을 통해 해당 과정을 반복한 뒤 구해낸 접선의 기울기를 화살표를 통하여 표시해 주면 방향장을 시각적으로 표현 가능하다고 생각할 수 있다.
미분방정식의 오일러 방법을 통한 근사해를 그리는 경우는 조금 다른 방법을 통하여 구해낼 수 있다. 먼저, 미분방정식에 그려진 초깃값에서의 접선의 방정식을 구한다. 그 후 오일러의 방법대로, 적당한 크기로 구간을 분할한다. 그 후 초깃값보다 더 작은 x좌표를 가지는 구간부터 순차적으로 접선의 방정식의 각 구간의 끝점에서 새로운 접선의 방정식을 구하는 방식을 통해 미분방정식의 특수해의 개형을 그려낸다. 그 후 초깃값보다 더 큰 x좌표를 가지는 구간도 마찬가지로 같은 방법을 통해 연속적으로 접선의 방정식을 각 구간마다 조각적으로 구해 미분방정식의 특수해의 개형을 그려낸다.
2). 자료 입력 방식에 대한 구체적 학습
미분방정식은 그 형태가 매우 다양하다. 이러한 수많은 형태의 미분방정식들을 모두 그 형태에 맞추어 분류해 생성해 주는 프로그램을 제작하기는 현실적으로 무리가 있으며, 자료를 입력받기에도 힘들어진다. 따라서 이를 해결하기 위해 프로세싱을 이용하여 미분방정식을 입력받을 때 미분방정식의 형태를 하나로 통일시킨 뒤 입력받았다.
미분방정식의 변수는 x,y 2개로 지정하여 평면 위에 방향장과 미분방정식을 표현할 수 있도록 하였다. 미분방정식의 형태는 dy/dx=g(x,y) 형태로 지정하여 x,y 값에 따라 dy/dx 값을 걔선허요 방향장을 작성할 수 있도록 하였다.
3). 자료 출력 방식에 대한 구체적 학습
본 연구의 목적은 미분방정식의 방향장과 미분방정식의 근사해를 구해낸 뒤 이를 시각적으로 표현해 보여줌으로써, 초깃값이 주어졌을 때 미분방정식의 해의 대략적인 개형을 그려낼 수 있게 하는 것이다. 따라서 자료 출력 방식은 좌표평면 위에 방향장과 조각적 선형근사 방정식의 개형을 표현해 주는 것이다. 프로세싱은 기본적으로 좌표평면을 이용하여 결과물을 출력하므로 프로세싱은 해당 연구의 결과를 출력하기에 적합한 프로그램이라고 볼 수 있다.
4). 연구에 필요한 함수, 기능
본 연구에 필요한 함수나 기능들을 생각해 보자. 먼저, 프로세싱의 기본적인 좌표 시스템은 화면 왼쪽 최상단을 원점으로 하여 오른쪽이 +x 방향, 아래가 +y 방향이다. 그러나 실제 적용할 좌표평면은 화면 중앙이 원점, 오른쪽이 +x 방향, 위쪽이 +y 방향이다. 만약 좌표평면이 이와 같이 설정된 상태에서 방향장을 그리려 한다면 좌표 계산이 매우 힘들 것이며 착오가 발생할 수도 있다. 그러나 프로세싱에서는 좌표 설정을 바꿀 수 있는 기능을 제공한다. translate(x,y) 함수를 이용하면 주어진 x, y 좌표 값만큼 좌표평면 자체가 이동되게 된다. 따라서 모든 작업을 시작하기 전에 translate 함수를 이용해 좌표평면의 원점을 화면 중심으로 이동시킨 뒤 시작한다. y축의 방향의 경우, 프로세싱에서 좌표평면을 대칭변환 시켜주는 함수는 존재하지 않아, y좌표의 경우는 원래 좌표에 음수 부호를 붙인 값으로 계산하여 작업을 진행하였다.
두 번째로, 기본적인 도형 함수들이다. background(r,g,b) 함수를 통하여 배경 색을 설정 가능하다. 기본적으로 백색으로 설정해 두도록 하자. fill(r,g,b), stroke(r,g,b) 함수를 통하여 도형의 내부 색과 윤곽선 색을 설정 가능하다. line(x1,y1,x2,y2) 함수를 이용하여 선분을 그릴 수 있다. 이를 이용하여 x축과 y축을 그릴 수 있다. rect(x,y,width,height), ellipse(x,y,width,height) 함수를 이용하여 직사각형을 그릴 수 있다. 이를 통하여 제작할 프로그램의 기본적인 인터페이스를 제작할 수 있다.
세 번째로, 입력 함수이다. 프로그램의 목적은 사용자가 원하는 미분방정식의 방향장과 그 특수해를 그려 주는 것이다. 따라서 구해야 할 미분방정식의 수식과 특수해를 사용자로부터 입력받을 필요가 있다. 수식과 값을 입력받는 가장 쉬운 방법은 키보드를 이용한 방법일 것이다. 프로세싱은 키보드를 통하여 값을 입력받을 수 있는 함수를 지원한다. keypressed() 함수는 키보드를 인식해 주는 함수이다. keypressed() 함수를 통해 인식된 입력값은 key라는 변수에 저장된다. keypressed() 함수를 이용해 사용자가 입력한 함수와 초깃값을 화면에 표시함과 동시에 그 식과 초깃값을 저장하여 접선의 기울기 값 계산에 이용 가능하다.
네 번째로, 반복문이다. 방향장과 그래프 개형을 그리기 위해서는 각 좌표값에 해당하는 접선의 기울기, 각 구간에 해당하는 선형 방정식을 연속하여 그려 주어야 하므로 반복문을 필수적으로 사용해야 한다. 프로세싱의 반복문은 if문, while문이 존재한다. 이중 for문을 이용한 반복문이 방향장 생성에 제일 효과적일 것으로 생각한다.
3. 알고리즘 설계
가. 입력 데이터
입력 데이터는 기존의 초월함수들은 입력받기에 어려움이 많아 x,y에 대한 다항함수들을 입력받기로 결정하였다. 곱셈 기호는 생략하였으며 덧셈, 뺄셈, 곱셈 기호 이외의 특수기호들은 모두 예외 처리하였다. 초깃값은 x의 값과 y의 값을 입력받는다. x, y의 범위는 –3 < x, y < 3 으로 제한한다. x와 y의 값은 스크롤 버튼을 통해 소수점 둘째 자리까지 입력받는다.
나. 출력 데이터
출력되는 데이터 또한 두 가지가 존재한다. 첫 번째는 미분방정식의 방향장이며 두 번째는 초깃값에 따른 원 그래프의 개형이다. 미분방정식의 방향장과 그래프의 개형은 모두 범위가 –3 < x, y < 3인 동일한 좌표평면 위에 표시한다.
먼저 미분방정식의 방향장의 경우 방향장을 표시하는 벡터 화살표 사이 간격을 1로 매 격자점마다 그려 총 361개의 화살표로 표현한다. 각 화살표의 방향은 그 점에서의 기울기를 의미한다.
그래프의 개형은 조각적 선형함수의 구간 크기를 0.0025로 설정하여 오일러 방법을 통해 그래프의 개형을 그려 주어진 범위 –3 < x, y < 3 내에서 출력한다.
4. 알고리즘 구현
가. 인터페이스
위아래 화살표 터치를 이용하여 미분방정식의 초깃값을 조절할 수 있도록 숫자 입력 상자를 제작하였다. 숫자 입력 상자에는 위쪽 화살표 터치 시 값이 1 증가, 아래쪽 화살표 터치 시 값이 1 감소하는 기능을 넣어 사용자가 간편하게 원하는 초깃값을 설정할 수 있도록 하였다.
프로그램 실행 버튼에 마우스를 접근시키면 버튼의 색이 붉은 색으로 변하며 눌러진 듯한 텍스처로 변경되게 하는 기능을 추가하였다.
나. 기울기의 계산
사용자의 키보드로부터 수식을 입력받는 기능을 제작하였다. 미분방정식 수식에 사용될 값인 0부터 9까지의 수, 연산기호 ‘+’‘-’, 미지수 x,y를 제외한 값이 입력되었을 때 문자열에 저장하지 않도록 하여 필요한 값들만 입력될 수 있도록 하였다. SHIFT 키와 BACKSPACE 키 또한 사용자로부터의 키보드 입력으로 인식되어 깨진 글자가 출력되는 현상을 없애기 위하여 위 두 키 또한 입력받지 않도록 하였다. BACKSPACE 키를 눌렀을 때에는 입력받은 문자를 저장하는 문자열에서 한 문자를 제거할 수 있도록 제작하였다.
사용자로부터 값을 입력받을 뿐만 아니라 입력받은 수식을 화면에 표시도 하여야 사용자가 프로그램을 편의성 높게 사용할 수 있다. 이를 위하여 입력받은 수식이 프로그램 화면에 표시되도록 제작하였다. 일정 문자 수 이상의 문자가 입력되어 지정된 칸을 벗어나게 되면 자동으로 줄바꿈이 일어나게 하는 기능 또한 추가하였다.
본 프로그램의 가장 핵심적인 기능 중 하나이다. 입력받은 수식을 변환하여 이를 이용해 기울기를 계산하는 기능으로, 좌표평면 위 격자점들에 대하여 각 지점에서의 기울기를 계산하여 배열에 저장하였다. 배열의 매 칸의 이전 칸에 포함된 문자의 종류에 따른 경우를 나누어 값을 입력받았다. 그 예시로, 만약 i-1번째 칸의 문자가 ‘+’ 또는 ‘-’라면 i번째 칸에는 숫자, x, y 중 한 문자가 올 것이므로 이들의 값을 temp에 저장하도록 알고리즘을 제작하였다. 연속된 배열의 자리에 숫자가 연속해서 나타난다면 이들은 십의 자리, 백의 자리를 나타내므로 기존의 temp에 저장되어 있던 값에 10배를 한 뒤 새로운 숫자 값을 추가하는 방식으로 숫자 값을 계산하였다. 그렇게 최종적으로 주어진 범위의 모든 격자점들에 대한 기울기룰 계산한 뒤 이를 반환하였다.
다. 방항장 생성
이후 구해낸 각 격자점에서의 기울기 값을 이용해 방향장을 생성하였다. 프로세싱의 좌표 시스템은 y좌표의 방향이 반대인 점을 유의하며 각 방향장의 화살표의 길이가 15로 고정되도록 기울기를 변형하였다. 이후 모든 격자점에 대해 화살표를 생성하여 방향장을 구현하였다.
라. 그래프 개형 그리기
이후 구해낸 각 격자점에서의 기울기 값을 이용해 방향장을 생성하였다. 프로세싱의 좌표 시스템은 y좌표의 방향이 반대인 점을 유의하며 각 방향장의 화살표의 길이가 15로 고정되도록 기울기를 변형하였다. 이후 모든 격자점에 대해 화살표를 생성하여 방향장을 구현하였다.
5. 최종 결론
본 프로그램을 통하여 미분방정식의 풀이법을 모를 때 미분방정식의 개형을 간단하게 알 수 있게 되었다는 의의가 있다. 또한 초깃값이 변화할 때 미분방정식의 개형이 어떻게 변화하는지를 관찰하는 좋은 수단으로 사용될 수 있다.