Main Content

연립미분방정식 풀기

초기 조건의 유무와 상관없이 dsolve 함수를 사용하여 몇 가지 변수로 여러 개의 연립상미분방정식을 풉니다. 단일 미분 방정식을 풀려면 미분 방정식 풀기 항목을 참조하십시오.

연립미분방정식 풀기

다음 1계 선형 연립미분방정식을 풀어 보십시오.

dudt=3u+4v,dvdt=4u+3v.

기호 함수 u(t)v(t)를 생성하려면 우선 syms를 사용하여 u 및 v를 나타냅니다.

syms u(t) v(t)

==를 사용하여 방정식을 정의하고 diff 함수를 사용하여 미분을 표현합니다.

ode1 = diff(u) == 3*u + 4*v;
ode2 = diff(v) == -4*u + 3*v;
odes = [ode1; ode2]
odes(t) =
 diff(u(t), t) == 3*u(t) + 4*v(t)
 diff(v(t), t) == 3*v(t) - 4*u(t)

해를 구조체의 요소로 반환하는 dsolve 함수를 사용하여 방정식을 풉니다.

S = dsolve(odes)
S = 
  struct with fields:

    v: [1×1 sym]
    u: [1×1 sym]

dsolve로 방정식을 풀 수 없다면 수치적으로 방정식을 풀어 보십시오. 수치적으로 2계 미분 방정식 풀기 항목을 참조하십시오.

u(t)v(t)에 액세스하려면 구조체 S의 요소를 참조하십시오.

uSol(t) = S.u
vSol(t) = S.v
uSol(t) =
C2*cos(4*t)*exp(3*t) + C1*sin(4*t)*exp(3*t)
vSol(t) =
C1*cos(4*t)*exp(3*t) - C2*sin(4*t)*exp(3*t)

또는 여러 개의 출력 인수를 제공하여 직접 u(t)v(t)를 저장할 수도 있습니다.

[uSol(t), vSol(t)] = dsolve(odes)
uSol(t) =
C2*cos(4*t)*exp(3*t) + C1*sin(4*t)*exp(3*t)
vSol(t) =
C1*cos(4*t)*exp(3*t) - C2*sin(4*t)*exp(3*t)

조건을 지정하지 않았기 때문에 상수 C1C2가 나타납니다. 초기 조건 u(0) == 0v(0) == 0을 사용하여 연립방정식을 풉니다. 함수 dsolve는 이러한 조건을 만족하는 상수 값을 구합니다.

cond1 = u(0) == 0;
cond2 = v(0) == 1;
conds = [cond1; cond2];
[uSol(t), vSol(t)] = dsolve(odes,conds)
uSol(t) =
sin(4*t)*exp(3*t)
vSol(t) =
cos(4*t)*exp(3*t)

fplot을 사용하여 해를 시각화합니다.

fplot(uSol)
hold on
fplot(vSol)
grid on
legend('uSol','vSol','Location','best')

행렬 형식의 미분 방정식 풀기

dsolve를 사용하여 행렬 형식의 미분 방정식을 풀어 보십시오.

다음 연립미분방정식이 있다고 가정해 보겠습니다.

dxdt=x+2y+1,dydt=x+y+t.

이 방정식의 행렬 형식은 다음과 같습니다.

[x'y']=[1211][xy]+[1t].

다음과 같이 가정하겠습니다.

Y=[xy],A=[1211],B=[1t].

이 방정식은 이제 Y′ = AY + B가 됩니다.

다음 행렬과 행렬 방정식을 정의합니다.

syms x(t) y(t)
A = [1 2; -1 1];
B = [1; t];
Y = [x; y];
odes = diff(Y) == A*Y + B
odes(t) =
  diff(x(t), t) == x(t) + 2*y(t) + 1
   diff(y(t), t) == t - x(t) + y(t)

dsolve를 사용하여 행렬 방정식을 풉니다. simplify 함수를 사용하여 해를 단순화합니다.

[xSol(t), ySol(t)] = dsolve(odes);
xSol(t) = simplify(xSol(t))
ySol(t) = simplify(ySol(t))
xSol(t) =
(2*t)/3 + 2^(1/2)*C2*exp(t)*cos(2^(1/2)*t) + 2^(1/2)*C1*exp(t)*sin(2^(1/2)*t) + 1/9
ySol(t) =
C1*exp(t)*cos(2^(1/2)*t) - t/3 - C2*exp(t)*sin(2^(1/2)*t) - 2/9

조건을 지정하지 않았기 때문에 상수 C1C2가 나타납니다.

초기 조건 u(0) = 2v(0) = –1을 사용하여 연립방정식을 풉니다. 방정식을 행렬 형식으로 지정할 때 초기 조건 역시 행렬 형식으로 지정해야 합니다. dsolve는 이러한 조건을 만족하는 상수 값을 구합니다.

C = Y(0) == [2; -1];
[xSol(t), ySol(t)] = dsolve(odes,C)
xSol(t) =
(2*t)/3 + (17*exp(t)*cos(2^(1/2)*t))/9 - (7*2^(1/2)*exp(t)*sin(2^(1/2)*t))/9 + 1/9
ySol(t) =
- t/3 - (7*exp(t)*cos(2^(1/2)*t))/9 - (17*2^(1/2)*exp(t)*sin(2^(1/2)*t))/18 - 2/9

fplot을 사용하여 해를 시각화합니다.

clf
fplot(ySol)
hold on
fplot(xSol)
grid on
legend('ySol','xSol','Location','best')

참고 항목