Main Content

알 수 없는 파라미터가 있는 BVP 풀기

이 예제에서는 bvp4c를 사용하여 알 수 없는 파라미터가 있는 경계값 문제를 푸는 방법을 보여줍니다.

마슈 방정식은 구간 [0,π]에서 다음으로 정의되어 있습니다.

y+(λ-2q cos(2x))y=0.

파라미터 q=5일 때 경계 조건은 다음과 같습니다.

y(0)=0,

y(π)=0.

그러나 이 조건으로는 임의의 상수 배수를 갖는 y(x)까지만 결정되므로 세 번째 조건으로 다음 특수해를 지정해야 합니다.

y(0)=1.

MATLAB®에서 이 연립방정식을 풀려면 경계값 문제 솔버 bvp4c를 호출하기 전에 방정식, 경계 조건 및 초기 추측값을 코딩해야 합니다. 필요한 함수를 이 예제와 같이 파일 끝에 로컬 함수로 포함시킬 수도 있고, MATLAB 경로에 있는 디렉터리에 이름이 지정된 별도의 파일로 저장할 수도 있습니다.

방정식 코딩하기

방정식을 코딩하는 함수를 만듭니다. 이 함수는 시그니처 dydx = mat4ode(x,y,lambda)를 사용해야 합니다. 여기서,

  • x는 독립 변수입니다.

  • y는 종속 변수입니다.

  • lambda는 고유값을 나타내는 알 수 없는 파라미터입니다.

다음 대입을 사용하여 마슈 방정식을 1계 시스템으로 작성할 수 있습니다. y1=yy2=y,

y1=y2,

y2=-(λ-2q cos(2x))y1.

대응하는 함수는 다음과 같습니다.

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는 구간 [a,b]에서 시작 부분의 경계 조건 값입니다.

  • yb는 구간 [a,b]에서 끝부분의 경계 조건 값입니다.

  • lambda는 고유값을 나타내는 알 수 없는 파라미터입니다.

이 문제는 구간 [0,π]에 세 개의 경계 조건이 있습니다. 잔차 값을 계산하려면 경계 조건을 g(x,y)=0 형식으로 넣어야 합니다. 이 형식에서 경계 조건은 다음과 같습니다.

y(0)=0,

y(π)=0,

y(0)-1=0.

대응하는 함수는 다음과 같습니다.

function res = mat4bc(ya,yb,lambda) % boundary conditions
res = [ya(2)
       yb(2)
       ya(1)-1];
end

초기 추측값 만들기

마지막으로, 해의 초기 추측값을 만듭니다. 알 수 없는 파라미터 λ뿐만 아니라 두 개의 해 성분 y1=y(x)y2=y(x)에 대한 초기 추측값을 모두 제공해야 합니다. 초기 추측값에 가까운 고유값과 고유함수만 계산할 수 있습니다. 계산된 고유함수가 네 번째 고유값에 대응될 가능성을 높이려면 올바른 정성적 동작을 보이는 초기 추측값을 선택해야 합니다.

이 문제의 경우 코사인 함수가 세 개의 경계 조건을 충족하므로 양호한 초기 추측값이 됩니다. y1y2에 대한 추측값을 반환하는 함수를 사용하여 y에 대한 초기 추측값을 코딩합니다.

function yinit = mat4init(x) % initial guess function
yinit = [cos(4*x)
        -4*sin(4*x)];
end

구간 [0,π]에 10개 점으로 구성된 메시, 초기 추측값 함수 및 λ 값에 대한 추측값 15를 사용하여 bvpinit를 호출합니다.

lambda = 15;
solinit = bvpinit(linspace(0,pi,10),@mat4init,lambda);

방정식 풀기

ODE 함수, 경계 조건 함수 및 초기 추측값을 사용하여 bvp4c를 호출합니다.

sol = bvp4c(@mat4ode, @mat4bc, solinit);

파라미터의 값

bvp4c에서 구한 알 수 없는 파라미터 λ의 값을 출력합니다. 이 값은 마슈 방정식의 네 번째 고유값(q=5)입니다.

fprintf('Fourth eigenvalue is approximately %7.3f.\n',...
            sol.parameters)
Fourth eigenvalue is approximately  17.097.

해 플로팅하기

deval을 사용하여 구간 [0,π]의 100개 점에서 bvp4c가 계산한 해를 구합니다.

xint = linspace(0,pi);
Sxint = deval(sol,xint);

두 개의 해 성분을 플로팅합니다. 이 플롯은 네 번째 고유값 λ4=17.097과 연결된 고유함수 및 그 도함수를 보여줍니다.

plot(xint,Sxint)
axis([0 pi -4 4])
title('Eigenfunction of Mathieu''s Equation.') 
xlabel('x')
ylabel('y')
legend('y','y''')

Figure contains an axes object. The axes object with title Eigenfunction of Mathieu's Equation., xlabel x, ylabel y contains 2 objects of type line. These objects represent 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
%-------------------------------------------

참고 항목

| |

관련 항목