이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

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

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

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

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

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

dy2dt=(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)

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])

참고 항목

| | |