알 수 없는 파라미터가 있는 BVP 풀기
이 예제에서는 bvp4c
를 사용하여 알 수 없는 파라미터가 있는 경계값 문제를 푸는 방법을 보여줍니다.
마슈 방정식은 구간 에서 다음으로 정의되어 있습니다.
.
파라미터 일 때 경계 조건은 다음과 같습니다.
,
.
그러나 이 조건으로는 임의의 상수 배수를 갖는 까지만 결정되므로 세 번째 조건으로 다음 특수해를 지정해야 합니다.
.
MATLAB®에서 이 연립방정식을 풀려면 경계값 문제 솔버 bvp4c
를 호출하기 전에 방정식, 경계 조건 및 초기 추측값을 코딩해야 합니다. 필요한 함수를 이 예제와 같이 파일 끝에 로컬 함수로 포함시킬 수도 있고, MATLAB 경로에 있는 디렉터리에 이름이 지정된 별도의 파일로 저장할 수도 있습니다.
방정식 코딩하기
방정식을 코딩하는 함수를 만듭니다. 이 함수는 시그니처 dydx = mat4ode(x,y,lambda)
를 사용해야 합니다. 여기서,
x
는 독립 변수입니다.y
는 종속 변수입니다.lambda
는 고유값을 나타내는 알 수 없는 파라미터입니다.
다음 대입을 사용하여 마슈 방정식을 1계 시스템으로 작성할 수 있습니다. 및 ,
,
.
대응하는 함수는 다음과 같습니다.
function dydx = mat4ode(x,y,lambda) % equation being solved dydx = [y(2) -(lambda - 2*q*cos(2*x))*y(1)]; end
참고: 모든 함수는 예제 끝에 로컬 함수로 포함되어 있습니다.
경계 조건 코딩하기
이제 경계점에서 경계 조건의 잔차 값을 반환하는 함수를 작성합니다. 이 함수는 시그니처 res = mat4bc(ya,yb,lambda)
를 사용해야 합니다. 여기서,
ya
는 구간 에서 시작 부분의 경계 조건 값입니다.yb
는 구간 에서 끝부분의 경계 조건 값입니다.lambda
는 고유값을 나타내는 알 수 없는 파라미터입니다.
이 문제는 구간 에 세 개의 경계 조건이 있습니다. 잔차 값을 계산하려면 경계 조건을 형식으로 넣어야 합니다. 이 형식에서 경계 조건은 다음과 같습니다.
,
,
.
대응하는 함수는 다음과 같습니다.
function res = mat4bc(ya,yb,lambda) % boundary conditions res = [ya(2) yb(2) ya(1)-1]; end
초기 추측값 만들기
마지막으로, 해의 초기 추측값을 만듭니다. 알 수 없는 파라미터 뿐만 아니라 두 개의 해 성분 와 에 대한 초기 추측값을 모두 제공해야 합니다. 초기 추측값에 가까운 고유값과 고유함수만 계산할 수 있습니다. 계산된 고유함수가 네 번째 고유값에 대응될 가능성을 높이려면 올바른 정성적 동작을 보이는 초기 추측값을 선택해야 합니다.
이 문제의 경우 코사인 함수가 세 개의 경계 조건을 충족하므로 양호한 초기 추측값이 됩니다. 과 에 대한 추측값을 반환하는 함수를 사용하여 에 대한 초기 추측값을 코딩합니다.
function yinit = mat4init(x) % initial guess function yinit = [cos(4*x) -4*sin(4*x)]; end
구간 에 10개 점으로 구성된 메시, 초기 추측값 함수 및 값에 대한 추측값 15를 사용하여 bvpinit
를 호출합니다.
lambda = 15; solinit = bvpinit(linspace(0,pi,10),@mat4init,lambda);
방정식 풀기
ODE 함수, 경계 조건 함수 및 초기 추측값을 사용하여 bvp4c
를 호출합니다.
sol = bvp4c(@mat4ode, @mat4bc, solinit);
파라미터의 값
bvp4c
에서 구한 알 수 없는 파라미터 의 값을 출력합니다. 이 값은 마슈 방정식의 네 번째 고유값()입니다.
fprintf('Fourth eigenvalue is approximately %7.3f.\n',... sol.parameters)
Fourth eigenvalue is approximately 17.097.
해 플로팅하기
deval
을 사용하여 구간 의 100개 점에서 bvp4c
가 계산한 해를 구합니다.
xint = linspace(0,pi); Sxint = deval(sol,xint);
두 개의 해 성분을 플로팅합니다. 이 플롯은 네 번째 고유값 과 연결된 고유함수 및 그 도함수를 보여줍니다.
plot(xint,Sxint) axis([0 pi -4 4]) title('Eigenfunction of Mathieu''s Equation.') xlabel('x') ylabel('y') legend('y','y''')
로컬 함수(Local Function)
BVP 솔버 bvp4c
가 해를 계산하기 위해 호출하는 로컬 헬퍼 함수는 다음과 같습니다. 또는 이러한 함수를 MATLAB 경로에 있는 디렉터리에 고유의 파일로 저장할 수도 있습니다.
function dydx = mat4ode(x,y,lambda) % equation being solved q = 5; dydx = [y(2) -(lambda - 2*q*cos(2*x))*y(1)]; end %------------------------------------------- function res = mat4bc(ya,yb,lambda) % boundary conditions res = [ya(2) yb(2) ya(1)-1]; end %------------------------------------------- function yinit = mat4init(x) % initial guess function yinit = [cos(4*x) -4*sin(4*x)]; end %-------------------------------------------