1. 데이터의 속성
가. 입력되는 데이터
본 프로그램에서는 총 두 가지 데이터를 입력받는다. 첫 번째는 사용자가 해를 구하길 원하는 미분방정식의 식이다. 두 번째는 사용자가 입력한 미분방정식의 특수해를 구하기 위한 초깃값이다. 미분방정식의 형태는 dy/dx=g(x,y) 로 제한하기로 하였다. 이때 프로그램이 인식할 수 있는 g(x,y)의 형태 또한 생각해 보아야 한다.
먼저 다항식의 입력 형태를 정하자. 다항식에 포함되는 미지수는 x, y로 제한한다. 다항식의 차수 표현은 거듭제곱 기호 ^ 를 통하여 표현한다. x, y가 모두 포함된 다항식의 경우 x, y를 곱셈 기호를 통해 연결하여 표현한다. 두 항과의 연결은 공백 없이 +, - 기호들을 이용하여 각 항을 연결해 표현한다. 다항식 앞 계수의 경우 곱셈 기호와 함께 표시한다. x, y의 순서의 경우 x가 먼저 오도록 한다. 이 모든 사항이 포함된 입력 예시는 다음과 같다.
g(x,y)=x^3+3*x^2*y-7*x*y+y^2+4
다음으로 분수식의 형태를 정하자. 분수식은 나누기 기호 /를 이용하여 분모와 분자를 각각 괄호로 묶어 나타낸다. 그 예시는 다음과 같다.
g(x,y)=(x+3)/(x^2+2*x*y+6)+3*y^3
다음으로 지수함수 식의 형태를 정하자. 지수함수는 다항함수에서 차수를 표시할 때 사용하였던 ^ 기호를 사용한다. 지수에 단순 상수가 아닌 긴 식이 들어갈 경우 괄호를 통해 묶어 준다. 예시는 다음과 같다.
g(x,y)=3^x+2*x^(2*y)-4*x^3*2^y
다음은 로그함수이다. 로그함수는 자연로그를 의미하는 것으로 한다. 로그함수는 log()의 형태를 통해 표현한다. 예시는 다음과 같다.
g(x,y)=log(2*x)+3y^2-3*log(x^2+y)
다음은 루트이다. 제곱근은 sqrt()의 형태를 통해 표현한다. 예시는 다음과 같다.
g(x,y)=sqrt(x)+3*sqrt(2*x^2*y-3)
두 번째로 입력받을 데이터는 초깃값이다. 초깃값은 x의 값과 y의 값을 입력받는다. x, y의 범위는 –10 < x, y < 10 으로 제한한다. x와 y의 값은 스크롤 버튼을 통해 소수점 첫째 자리까지 입력받는다.
나. 출력되는 데이터
출력되는 데이터 또한 두 가지가 존재한다. 첫 번째는 미분방정식의 방향장이며 두 번째는 초깃값에 따른 원 그래프의 개형이다. 미분방정식의 방향장과 그래프의 개형은 모두 범위가 –10 < x, y < 10인 동일한 좌표평면 위에 표시한다.
먼저 미분방정식의 방향장의 경우 방향장을 표시하는 벡터 화살표 사이 간격을 1로 매 격자점마다 그려 총 361개의 화살표로 표현한다. 각 화살표의 방향은 그 점에서의 기울기를 의미한다.
그래프의 개형은 조각적 선형함수의 구간 크기를 0.01로 설정하여 오일러 방법을 통해 그래프의 개형을 그려 주어진 범위 –10 < x, y < 10 내에서 출력한다.
2. 알고리즘
가. 인터페이스 제작하기
1). 인터페이스 구상
2). 입력란
3). 출력란
나. 사용자로부터 데이터 입력받기
1). 방정식
2). 초깃값
다. 방향장 생성하기
라. 초깃값으로 미분방정식의 해 구하기