Main Content

두 개의 해를 갖는 BVP 풀기

이 예제에서는 두 개의 서로 다른 초기 추측값을 갖는 bvp4c를 사용하여 BVP 문제에 대한 두 개의 해를 구합니다.

다음과 같은 미분 방정식을 가정해 보겠습니다.

y+ey=0.

이 방정식에는 다음 경계 조건이 적용됩니다.

y(0)=y(1)=0.

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

방정식 코딩하기

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

  • x는 독립 변수입니다.

  • y는 해입니다(종속 변수).

  • parameters는 알 수 없는 파라미터 값의 벡터입니다(선택 사항).

이 입력값은 솔버에 의해 자동으로 함수로 전달되지만 변수 이름에 따라 방정식 코딩 방식이 달라집니다. 이 경우 2계 방정식을 1계 연립방정식으로 다시 작성할 수 있습니다.

y1=y2,

y2=-ey1.

이러한 방정식을 인코딩하는 함수는 다음과 같습니다.

function dydx = bvpfun(x,y)
dydx = [y(2)
        -exp(y(1))];
end

경계 조건 코딩하기

이 문제처럼 2점 경계값 조건의 경우, 경계 조건 함수는 알 수 없는 파라미터 포함 여부에 따라 시그니처 res = bcfun(ya,yb) 또는 res = bcfun(ya,yb,parameters)를 사용해야 합니다. yayb는 솔버가 자동으로 함수에 전달하는 열 벡터이며 bcfun은 경계 조건에서의 잔차를 반환합니다.

경계 조건 y(0)=y(1)=0의 경우 bcfun 함수는 잔차 값이 두 경계에서 모두 0임을 지정합니다. 이 잔차 값은 초기 추측값의 bvpinit에 지정한 메시의 첫 번째 점과 마지막 점에서 적용됩니다. 이 문제에서 초기 메시는 x(1) = 0x(end) = 1을 가져야 합니다.

function res = bcfun(ya,yb)
res = [ya(1)
       yb(1)];
end

초기 추측값 생성하기

bvpinit를 호출하여 해의 초기 추측값을 생성합니다. x의 메시에는 많은 점이 있을 필요가 없지만 첫 번째 점은 0이어야 합니다. 또한 경계 조건이 제대로 지정되도록 마지막 점은 1이어야 합니다. y에 대한 초기 추측값을 사용합니다. 여기서 첫 번째 성분은 작은 양수 값이고 두 번째 성분은 0입니다.

xmesh = linspace(0,1,5);
solinit = bvpinit(xmesh, [0.1 0]);

방정식 풀기

bvp4c 솔버를 사용하여 BVP를 풉니다.

sol1 = bvp4c(@bvpfun, @bcfun, solinit);

다른 초기 추측값 사용하기

해에 대한 다른 초기 추측값을 사용하여 다시 BVP를 풉니다.

solinit = bvpinit(xmesh, [3 0]);
sol2 = bvp4c(@bvpfun, @bcfun, solinit);

해 비교하기

bvp4c가 다른 초기 조건에 대해 계산하는 해를 플로팅합니다. 두 개의 해가 모두 명시된 경계 조건을 충족하지만 중간의 동작은 다릅니다. 해가 항상 고유하지는 않기 때문에 이러한 서로 다른 동작은 해에 대한 양호한 초기 추측값을 제공하는 것이 중요함을 보여줍니다.

plot(sol1.x,sol1.y(1,:),'-o',sol2.x,sol2.y(1,:),'-o')
title('BVP with Different Solutions That Depend on the Initial Guess')
xlabel('x')
ylabel('y')
legend('Solution 1','Solution 2')

Figure contains an axes object. The axes object with title BVP with Different Solutions That Depend on the Initial Guess, xlabel x, ylabel y contains 2 objects of type line. These objects represent Solution 1, Solution 2.

로컬 함수(Local Function)

BVP 솔버 bvp4c가 해를 계산하기 위해 호출하는 로컬 헬퍼 함수는 다음과 같습니다. 또는 이러한 함수를 MATLAB 경로에 있는 디렉터리에 고유의 파일로 저장할 수도 있습니다.

function dydx = bvpfun(x,y) % equation being solved
dydx = [y(2)
        -exp(y(1))];
end
%-------------------------------------------
function res = bcfun(ya,yb) % boundary conditions 
res = [ya(1)
       yb(1)];
end
%-------------------------------------------

참고 항목

| |

관련 항목