Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

수치적으로 2계 미분 방정식 풀기

이 예제는 2계 미분 방정식을 MATLAB®의 수치적 솔버 ode45를 사용하여 계산할 수 있는 연립미분방정식으로 변환하는 방법을 다룹니다.

고계 상미분 방정식을 풀기 위한 일반적인 접근법은 이를 1계 연립미분방정식으로 변환한 다음 해당 방정식을 푸는 것입니다. 이 예제에서는 Symbolic Math Toolbox™를 사용하여 2계 ODE를 1계 연립 ODE로 변환합니다. 그런 다음 MATLAB 솔버 ode45를 사용하여 연립방정식을 풉니다.

2계 ODE를 1계 연립 ODE로 재작성하기

다음 2계 미분 방정식을 재작성하려면 odeToVectorField를 사용하여

d2ydt2=(1-y2)dydt-y

변수를 변경합니다. 미분하면 1계 연립미분방정식을 얻을 수 있도록 y(t)=Y1dydt=Y2로 둡니다.

dY1dt=Y2dY2dt=-(Y12-1)Y2-Y1

syms y(t)
[V] = odeToVectorField(diff(y, 2) == (1 - y^2)*diff(y) - y)
V = 

(Y2-Y12-1Y2-Y1)[Y(2); - (Y(1)^2 - 1)*Y(2) - Y(1)]

MATLAB 함수 생성하기

MATLAB ODE 솔버는 기호 표현식을 입력값으로 받지 않습니다. 따라서 MATLAB ODE 솔버를 사용하여 방정식을 풀기 전에 해당 방정식을 MATLAB 함수로 변환해야 합니다. V와 함께 matlabFunction을 입력값으로 사용하여 이 1계 연립미분방정식에서 MATLAB 함수를 생성합니다.

M = matlabFunction(V,'vars', {'t','Y'})
M = function_handle with value:
    @(t,Y)[Y(2);-(Y(1).^2-1.0).*Y(2)-Y(1)]

1계 연립 ODE 풀기

이 방정식을 풀려면 생성된 MATLAB 함수를 입력값으로 사용하여 MATLAB ode45 수치 솔버를 호출하십시오.

sol = ode45(M,[0 20],[2 0]);

해 플로팅하기

linspace를 사용하여 해를 플로팅하여 구간 [0,20]과 deval로 100포인트를 생성하고 각 포인트에 대한 해를 계산합니다.

fplot(@(x)deval(sol,x,1), [0, 20])

Figure contains an axes. The axes contains an object of type functionline.

참고 항목

| | |