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

dsolve

연립미분방정식 풀기

문자형 벡터 또는 string형 입력값은 향후 릴리스에서는 지원되지 않을 예정입니다. 대신, syms를 사용하여 변수를 선언하고 dsolve('Dy = y')와 같은 입력값을 syms y(t); dsolve(diff(y,t) == y)로 바꾸십시오.

설명

예제

S = dsolve(eqn)은 미분 방정식 eqn을 풉니다. eqn은 기호 방정식입니다. diff==를 사용하여 미분 방정식을 표현하십시오. 예를 들어, diff(y,x) == y는 방정식 dy/dx = y를 나타냅니다. 이러한 방정식으로 구성된 벡터로 eqn을 지정하여 연립미분방정식을 풉니다.

예제

S = dsolve(eqn,cond)는 초기 조건 또는 경계 조건 cond를 사용하여 eqn을 풉니다.

예제

S = dsolve(___,Name,Value)는 하나 이상의 Name,Value 쌍 인수로 지정된 추가 옵션을 사용합니다.

예제

[y1,...,yN] = dsolve(___)는 해를 변수 y1,...,yN에 할당합니다.

예제

모두 축소

1계 미분 방정식 dydt=ay.를 풉니다.

diff를 사용하여 1계 도함수를 지정하고 ==를 사용하여 방정식을 지정합니다. 그런 다음 dsolve를 사용하여 방정식을 풉니다.

syms y(t) a
eqn = diff(y,t) == a*y;
S = dsolve(eqn)
S = C1eat

해는 상수를 포함합니다. 상수를 제거하려면 조건이 있는 미분 방정식 풀기 항목을 참조하십시오. 전체 워크플로는 Solving Partial Differential Equations 항목을 참조하십시오.

2계 미분 방정식 d2ydt2=ay.를 풉니다.

diff(y,t,2)를 사용하여 y의 2계 도함수를 지정하고 ==를 사용하여 방정식을 지정합니다. 그런 다음 dsolve를 사용하여 방정식을 풉니다.

syms y(t) a
eqn = diff(y,t,2) == a*y;
ySol(t) = dsolve(eqn)
ySol(t) = C1e-at+C2eat

초기 조건 y(0)=5를 사용하여 1계 미분 방정식 dydt=ay를 풉니다.

== 연산자를 사용하여 dsolve의 두 번째 입력값으로 초기 조건을 지정합니다. 조건을 지정하면 해에서 C1, C2, ...와 같은 임의의 상수가 제거됩니다.

syms y(t) a
eqn = diff(y,t) == a*y;
cond = y(0) == 5;
ySol(t) = dsolve(eqn,cond)
ySol(t) = 5eat

이제, 초기 조건 y(0)=by(0)=1을 사용하여 2계 미분 방정식 d2ydt2=a2y를 풉니다.

diff(y,t)Dy에 할당한 다음 Dy(0) == 1을 사용하여 두 번째 초기 조건을 지정합니다.

syms y(t) a b
eqn = diff(y,t,2) == a^2*y;
Dy = diff(y,t);
cond = [y(0)==b, Dy(0)==1];
ySol(t) = dsolve(eqn,cond)
ySol(t) = 

eatab+12a+e-atab-12a

이 2계 미분 방정식에는 두 개의 지정된 조건이 있으므로 해에서 상수가 제거됩니다. 일반적으로 해에서 상수를 제거하려면 조건 수가 방정식의 계수와 같아야 합니다.

연립미분방정식을 풉니다.

dydt=zdzdt=-y.

연립방정식을 벡터로 지정합니다. dsolve는 해가 포함된 구조체를 반환합니다.

syms y(t) z(t)
eqns = [diff(y,t) == z, diff(z,t) == -y];
S = dsolve(eqns)
S = struct with fields:
    z: [1x1 sym]
    y: [1x1 sym]

구조체의 요소를 참조하여 해에 액세스합니다.

ySol(t) = S.y
ySol(t) = C1cos(t)+C2sin(t)
zSol(t) = S.z
zSol(t) = C2cos(t)-C1sin(t)

여러 함수의 해를 구할 때 dsolve는 기본적으로 구조체를 반환합니다. 또는 출력값을 명시적으로 벡터로 지정하여 함수 또는 변수에 해를 직접 할당할 수 있습니다. dsolvesymvar을 사용하여 출력값을 사전순으로 정렬합니다.

연립미분방정식을 풀고 출력값을 함수에 할당합니다.

syms y(t) z(t)
eqns = [diff(y,t)==z, diff(z,t)==-y];
[ySol(t),zSol(t)] = dsolve(eqns)
ySol(t) = C1cos(t)+C2sin(t)
zSol(t) = C2cos(t)-C1sin(t)

dsolve는 미분 방정식을 해석적으로 풀 수 없으면 빈 기호 배열을 반환합니다. 이런 경우 ode45와 같은 MATLAB® 수치적 솔버를 사용하여 미분 방정식을 풀 수 있습니다. 자세한 내용은 수치적으로 2계 미분 방정식 풀기 항목을 참조하십시오.

syms y(x)
eqn = diff(y, 2) == (1 - y^2)*diff(y) - y;
S = dsolve(eqn)
Warning: Unable to find explicit solution.
 
S =
 
[ empty sym ]
 

조건 y(a)=1을 사용하여 미분 방정식 dydt=ay+y를 풉니다. 기본적으로 dsolve는 보편적으로 정확하지는 않지만 더 간단한 해를 제공하는 단순화를 적용합니다. 자세한 내용은 알고리즘 항목을 참조하십시오.

syms a y(t)
eqn = diff(y) == a/sqrt(y) + y;
cond = y(a) == 1;
ySimplified = dsolve(eqn, cond)
ySimplified = 

e3t2-3a2+log(a+1)-a2/3

파라미터 a의 가능한 모든 값을 포함하는 해를 반환하려면 'IgnoreAnalyticConstraints'false로 설정하여 단순화를 해제하십시오.

yNotSimplified = dsolve(eqn,cond,'IgnoreAnalyticConstraints',false)
yNotSimplified = 

{{{-a+e3t2-3a2+log(a+1)+2πC1i2/3 if  C1Z} if  0<a{{-a+e3t2-3a2+log(a+1)+2πC2i2/3 if  C2Z} if  a0

초기 조건을 지정하지 않고 미분 방정식 dydx=1x2e-1x를 풉니다.

syms y(x)
eqn = diff(y) == exp(-1/x)/x^2;
ySol(x) = dsolve(eqn)
ySol(x) = 

C3+e-1x

해에서 상수를 제거하려면 초기 조건 y(0)=1.을 지정하십시오.

cond = y(0) == 1;
S = dsolve(eqn,cond)
S = 

e-1x+1

ySol(x)의 함수 e-1xx=0에서 서로 다른 단측 극한을 갖습니다. 함수에는 우극한 limx0+e-1x=0이 있지만, 정의되지 않은 좌극한 limx0-e-1x=가 있습니다.

x0에서 서로 다른 단측 극한을 갖는 함수에 대해 조건 y(x0)을 지정하면 dsolve는 이 조건을 우극한 limxx0+로 취급합니다.

입력 인수

모두 축소

미분 방정식 또는 연립방정식으로, 기호 방정식 또는 기호 방정식으로 구성된 벡터로 지정됩니다.

== 연산자를 사용하여 미분 방정식을 지정하십시오. 방정식에서 diff를 사용하여 미분을 나타내십시오. 예를 들어, diff(y,x)는 기호 함수 y(x)x에 대해 미분합니다. syms를 사용하여 기호 함수 y(x)를 만들고 dsolve를 사용하여 방정식 d2y(x)/dx2 = x*y(x)를 풉니다.

syms y(x)
dsolve(diff(y,x,2) == x*y)

dsolve([diff(y,t) == z, diff(z,t) == -y])와 같이 방정식으로 구성된 벡터를 사용하여 연립미분방정식을 지정하십시오.

초기 조건 또는 경계 조건으로, 기호 방정식 또는 기호 방정식으로 구성된 벡터로 지정됩니다.

조건에 도함수가 포함되어 있으면 diff로 도함수를 나타냅니다. diff 호출을 변수에 할당하고 이 변수를 사용하여 조건을 지정합니다. 예제는 조건이 있는 미분 방정식 풀기 항목을 참조하십시오.

방정식으로 구성된 벡터를 사용하여 여러 조건을 지정합니다. 조건 수가 종속 변수 수보다 적으면 해에 임의의 상수 C1, C2, ...가 포함됩니다.

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: 'IgnoreAnalyticConstraints',false는 자동 단순화를 적용하지 않습니다.

자동 단순화 사용 옵션으로, true 또는 false로 지정됩니다.

기본적으로 솔버는 미분 방정식을 푸는 동안 단순화를 적용합니다. 이러한 단순화는 보편적으로 유효하지는 않을 수 있습니다. 따라서 기본적으로 솔버는 결과의 완전성을 보장하지 않습니다. 'IgnoreAnalyticConstraints'true인 경우, 항상 dsolve 함수에서 반환된 결과를 확인하십시오. 자세한 내용은 알고리즘 항목을 참조하십시오.

이러한 단순화 처리 없이 상미분 방정식을 풀려면 'IgnoreAnalyticConstraints'false로 설정하십시오. 'IgnoreAnalyticConstraints'false로 설정하여 얻은 결과는 모든 인수 값에 대해 정확합니다. 특정 방정식의 경우 'IgnoreAnalyticConstraints'false로 설정하면 dsolve가 양함수 해를 반환하지 않을 수 있습니다.

솔버가 양함수 공식을 사용할 다항 방정식의 최대 차수로, 5보다 작은 양의 정수로 지정됩니다. dsolve'MaxDegree'보다 차수가 큰 다항 방정식을 풀 때 양함수 공식을 사용하지 않습니다.

출력 인수

모두 축소

미분 방정식의 해로, 기호 표현식 또는 기호 표현식으로 구성된 벡터로 반환됩니다. S의 크기는 해의 숫자입니다.

미분 방정식의 해를 저장하는 변수로, 기호 변수로 구성된 벡터로 반환됩니다. 출력 변수의 수는 연립방정식의 종속 변수 수와 같아야 합니다. dsolve는 종속 변수를 사전순으로 정렬한 후 변수에 대한 해를 출력 변수 또는 기호 배열에 할당합니다.

  • dsolve는 닫힌 형식(양함수)의 해를 구할 수 없는 경우 음함수 해를 구하려고 시도합니다. dsolve가 음함수 해를 반환할 때 다음과 같은 경고가 발생합니다.

    Warning: Explicit solution could not be found;
    implicit solution returned.
  • dsolve에서 양함수 해 또는 음함수 해를 구할 수 없는 경우 경고가 발생하고 빈 sym이 반환됩니다. 이 경우 MATLAB® ode23 또는 ode45 함수를 사용하여 수치적 해를 구해 보십시오. 때때로, 출력값은 동등한 저계 미분 방정식 또는 적분입니다.

  • dsolve'IgnoreAnalyticConstraints'false인 경우에도 항상 완전해를 반환하는 것은 아닙니다.

  • dsolvex0에서 서로 다른 단측 극한을 갖는 함수를 반환하고 사용자가 조건 y(x0)을 지정할 경우, dsolve는 이 조건을 우극한 limxx0+ 로 취급합니다.

알고리즘

'IgnoreAnalyticConstraints'false로 설정하지 않으면 방정식을 풀 때 dsolve에서 다음 규칙을 적용합니다.

  • a 및 b의 모든 값에 대해 log(a) + log(b) = log(a·b). 특히, a, b 및 c의 모든 값에 대해 다음 등식이 적용됩니다.

      (a·b)c = ac·bc.

  • a 및 b의 모든 값에 대해 log(ab) = b·log(a). 특히, a, b 및 c의 모든 값에 대해 다음 등식이 적용됩니다.

      (ab)c = ab·c.

  • f 및 g가 표준 수학 함수이고 모든 작은 양수에 대해 f(g(x)) = x인 경우 f(g(x)) = x가 모든 복소수 x에 대해 유효한 것으로 간주됩니다. 구체적으로 살펴보면,

    • log(ex) = x

    • asin(sin(x)) = x, acos(cos(x)) = x, atan(tan(x)) = x

    • asinh(sinh(x)) = x, acosh(cosh(x)) = x, atanh(tanh(x)) = x

    • 람베르트 W 함수의 모든 분지(branch) 인덱스 k에 대해 Wk(x·ex) = x.

  • 솔버는 방정식의 양변에 0을 제외한 모든 표현식을 곱할 수 있습니다.

  • 다항 방정식의 해는 완전해여야 합니다.

호환성 관련 고려 사항

모두 확장

R2019b부터 경고 표시

R2006a 이전에 개발됨