Main Content

dsolve

연립미분방정식 풀기

설명

예제

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

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

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계 미분 방정식에는 두 개의 지정된 조건이 있으므로 해에서 상수가 제거됩니다. 일반적으로 해에서 상수를 제거하려면 조건 수가 방정식의 계수(order)와 같아야 합니다.

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

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: C2*cos(t) - C1*sin(t)
    y: C1*cos(t) + C2*sin(t)

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

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)

미분 방정식 ty(t)=e-y(t)+y(t)를 풉니다. dsolve는 상수 값을 갖는 람베르트 W 함수에 대해 양함수 해를 반환합니다.

syms y(t)
eqn = diff(y) == y+exp(-y)
eqn(t) = 

t y(t)=e-y(t)+y(t)

sol = dsolve(eqn)
sol = Wlambertw0(-1)

미분 방정식의 음함수 해를 반환하려면 'Implicit' 옵션을 true로 설정하십시오. 음함수 해는 F(y(t))=g(t) 형식을 갖습니다.

sol = dsolve(eqn,'Implicit',true)
sol = 

(eyyey+1 dy|y=y(t)=C1+te-y(t)ey(t)y(t)+1=0)

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

syms y(x)
eqn = diff(y) == (x-exp(-x))/(y(x)+exp(y(x)));
S = dsolve(eqn)
Warning: Unable to find symbolic solution.
 
S =
 
[ empty sym ]
 

또는 'Implicit' 옵션을 true로 지정하여 미분 방정식의 음함수 해를 구해 볼 수 있습니다. 음함수 해는 F(y(x))=g(x) 형식을 갖습니다.

S = dsolve(eqn,'Implicit',true)
S = 

ey(x)+y(x)22=C1+e-x+x22

조건 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 = 

{{{σ1} if  -π2<σ2{σ1,--a+e3t2-3a2+log(a+-12+σ33/2)+2πC2i2/312+σ3} if  σ2-π2 if  C2Z if  C2Zwhere  σ1=-a+e3t2-3a2+log(a+1)+2πC2i2/3  σ2=angle(e3C12+3t2-a)  σ3=3i2

2계 미분 방정식 (x2-1)22x2y(x)+(x+1)xy(x)-y(x)=0을 풉니다. dsolve는 미평가 적분 항을 포함하는 해를 반환합니다.

syms y(x)
eqn = (x^2-1)^2*diff(y,2) + (x+1)*diff(y) - y == 0;
S = dsolve(eqn)
S = 

C2x+1+C1x+1e12x-11-x1/4x+19/4 dx

x=-1 주위에서 미분 방정식의 급수해를 반환하려면 'ExpansionPoint'-1로 설정하십시오. dsolve는 퓌죠 급수 전개에 대해 두 개의 1차 독립 해를 반환합니다.

S = dsolve(eqn,'ExpansionPoint',-1)
S = 

(x+11x+11/4-5x+13/44+5x+17/448+5x+111/4336+115x+115/433792+169x+119/4184320)

'ExpansionPoint'Inf로 설정하여 전개 점 주위에서 다른 급수해를 구합니다.

S = dsolve(eqn,'ExpansionPoint',Inf)
S = 

(x-16x2-18x416x2+18x4+190x5+1)

급수 전개의 디폴트 절단 차수는 6입니다. 퓌죠 급수해에서 더 많은 항을 구하려면 'Order'를 8로 설정하십시오.

S = dsolve(eqn,'ExpansionPoint',Inf,'Order',8)
S = 

(x-16x2-18x4-190x5-37336x616x2+18x4+190x5+37336x6+371680x7+1)

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

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

C1+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는 이 조건을 우극한 lim xx0+로 취급합니다.

입력 인수

모두 축소

미분 방정식 또는 연립방정식으로, 기호 방정식 또는 기호 방정식으로 구성된 벡터로 지정됩니다. == 연산자를 사용하여 미분 방정식을 지정하십시오. eqn이 우변이 없는 기호 표현식인 경우, 솔버는 우변을 0으로 간주하고 방정식 eqn == 0을 풉니다.

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

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

syms y(t) z(t); S = dsolve([diff(y,t) == z, diff(z,t) == -y])와 같이 방정식으로 구성된 벡터를 사용하여 연립미분방정식을 지정하십시오. 여기서 yz는 기호 변수(이 경우에는 t)에 종속된 기호 함수여야 합니다. 우변은 t, yz에 종속된 기호 표현식이어야 합니다. 참고로, Symbolic Math Toolbox™는 현재 복합 기호 함수, 즉 다른 기호 함수에 종속된 기호 함수를 지원하지 않습니다.

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

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

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

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 버전에서는 쉼표를 사용하여 각 이름과 값을 구분하고 따옴표로 Name을 묶으십시오.

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

퓌죠 급수해의 전개 점으로, 숫자, 기호 숫자, 기호 변수, 기호 함수 또는 기호 표현식으로 지정됩니다. 이 옵션을 지정하면 퓌죠 급수(음의 지수 및 분수 지수를 허용하는 멱급수)에 대해 미분 방정식의 해가 반환됩니다. 전개 점은 급수 변수에 종속될 수 없습니다. 예제는 미분 방정식의 급수해 구하기 항목을 참조하십시오.

데이터형: single | double | sym
복소수 지원 여부:

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

기본적으로 솔버는 미분 방정식을 푸는 동안 단순화를 적용합니다. 이로 인해 일반적으로 유효하지 않은 결과가 나올 수 있습니다. 즉, 이 옵션은 편의적인 수학적 항등식을 적용하지만 그 적용 결과는 변수의 모든 가능한 값에 대해 성립하지 않을 수 있습니다. 따라서 기본적으로 솔버는 결과의 완전성을 보장하지 않습니다. 'IgnoreAnalyticConstraints'true인 경우, 항상 dsolve 함수에서 반환된 결과를 확인하십시오. 자세한 내용은 알고리즘 항목을 참조하십시오.

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

음함수 해를 반환하는 옵션으로, false 또는 true로 지정됩니다. 변수 xy(x)를 갖는 미분 방정식의 경우 음함수 해는 F(y(x)) = g(x) 형식을 갖습니다.

기본적으로 솔버는 미분 방정식을 풀 때 양함수 해 y(x) = f(x)를 해석적으로 구하려고 시도합니다. dsolve가 양함수 해를 구할 수 없는 경우에는 'Implicit' 옵션을 true로 지정하여 음함수 형식의 해를 구해 볼 수 있습니다.

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

퓌죠 급수해의 절단 차수로, 양의 정수 또는 양의 기호 정수로 지정됩니다. 이 옵션을 지정하면 퓌죠 급수(음의 지수 및 분수 지수를 허용하는 멱급수)에 대해 미분 방정식의 해가 반환됩니다. 절단 차수 nO항 즉, O(varn) 또는 O(varn)의 지수입니다.

출력 인수

모두 축소

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

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

  • 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을 제외한 모든 표현식을 곱할 수 있습니다.

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

버전 내역

R2006a 이전에 개발됨

모두 확장