Main Content

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

solve

방정식 및 연립방정식 솔버

설명

예제

S = solve(eqn,var)은 방정식 eqn을 변수 var에 대해 풉니다. var을 지정하지 않으면 방정식을 풀 변수를 symvar 함수가 결정합니다. 예를 들어, solve(x + 1 == 2, x)는 방정식 x + 1 = 2를 x에 대해 풉니다.

예제

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

예제

Y = solve(eqns,vars)는 연립방정식 eqns를 변수 vars에 대해 풀고 해가 포함된 구조체를 반환합니다. vars를 지정하지 않으면 solvesymvar을 사용하여 방정식을 풀 변수를 찾습니다. 이 경우 symvar이 구하는 변수의 수는 방정식 eqns의 수와 같습니다.

예제

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

예제

[y1,...,yN] = solve(eqns,vars)는 연립방정식 eqns를 변수 vars에 대해 풉니다. 해는 변수 y1,...,yN에 할당됩니다. 변수를 지정하지 않으면 solvesymvar을 사용하여 방정식을 풀 변수를 찾습니다. 이 경우 symvar이 구하는 변수의 수는 출력 인수 N의 수와 같습니다.

[y1,...,yN] = solve(eqns,vars,Name,Value)는 하나 이상의 Name,Value 쌍 인수로 지정된 추가 옵션을 사용합니다.

예제

[y1,...,yN,parameters,conditions] = solve(eqns,vars,'ReturnConditions',true)는 해의 파라미터와 해의 조건을 지정하는 추가 인수 parametersconditions를 반환합니다.

예제

모두 축소

해를 구할 변수를 지정하지 않고 2차 방정식을 풉니다. solve가 해를 반환할 변수를 직접 선택합니다(이 경우, x).

syms a b c x
eqn = a*x^2 + b*x + c == 0
eqn = ax2+bx+c=0
S = solve(eqn)
S = 

(-b+b2-4ac2a-b-b2-4ac2a)

구하려는 변수를 지정하고 a에 대해 2차 방정식을 풉니다.

Sa = solve(eqn,a)
Sa = 

-c+bxx2

5차 다항식을 풉니다. 이 방정식에는 5개의 해가 있습니다.

syms x
eqn = x^5 == 3125;
S = solve(eqn,x)
S = 

(5-σ1-54-525-5i4-σ1-54+525-5i4σ1-54-525+5i4σ1-54+525+5i4)where  σ1=554

'Real' 옵션을 true로 설정하여 실수 해만 반환합니다. 이 방정식의 유일한 실수 해는 5입니다.

S = solve(eqn,x,'Real',true)
S = 5

solve는 방정식을 기호적으로 풀 수 없으면 vpasolve를 사용하여 수치 해를 구합니다. vpasolve 함수는 처음 구한 해를 반환합니다.

다음 방정식을 풉니다. solve가 기호 해를 구할 수 없기 때문에 수치 해를 반환합니다.

syms x
eqn = sin(x) == x^2 - 1;
S = solve(eqn,x)
Warning: Unable to solve symbolically. Returning a numeric solution using <a href="matlab:web(fullfile(docroot, 'symbolic/vpasolve.html'))">vpasolve</a>.
S = -0.63673265080528201088799090383828

방정식의 좌변과 우변을 플로팅합니다. 방정식에 양수 해도 있음을 알 수 있습니다.

fplot([lhs(eqn) rhs(eqn)], [-2 2])

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

구간을 지정하고 수치 솔버 vpasolve를 직접 호출하여 다른 해를 구합니다.

V = vpasolve(eqn,x,[0 2])
V = 1.4096240040025962492355939705895

여러 개의 변수에 대해 해를 구할 때는 개별 변수보다 구조체형 배열에 출력값을 저장하는 것이 더 편리할 수 있습니다. 출력 인수를 한 개 지정했는데 출력값이 여러 개 존재하면 solve 함수는 구조체를 반환합니다.

해를 구조체형 배열로 반환하는 연립방정식을 풉니다.

syms u v
eqns = [2*u + v == 0, u - v == 1];
S = solve(eqns,[u v])
S = struct with fields:
    u: 1/3
    v: -2/3

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

S.u
ans = 

13

S.v
ans = 

-23

구조체형 배열을 사용하면 간편하게 다른 표현식에 해를 대입할 수 있습니다.

subs 함수를 사용하여 해 S를 다른 표현식에 대입합니다.

expr1 = u^2;
e1 = subs(expr1,S)
e1 = 

19

expr2 = 3*v + u;
e2 = subs(expr2,S)
e2 = 

-53

solve가 빈 객체를 반환하면 해가 존재하지 않는 것입니다.

eqns = [3*u+2, 3*u+1];
S = solve(eqns,u)
 
S =
 
Empty sym: 0-by-1
 

solve 함수는 부등식을 풀고 부등식을 충족하는 해를 반환할 수 있습니다. 아래의 부등식을 풉니다.

x>0

y>0

x2+y2+xy<1

해의 파라미터와 해의 조건을 반환하려면 'ReturnConditions'true로 설정하십시오.

syms x y
eqn1 = x > 0;
eqn2 = y > 0;
eqn3 = x^2 + y^2 + x*y < 1;
eqns = [eqn1 eqn2 eqn3];

S = solve(eqns,[x y],'ReturnConditions',true);
S.x
ans = 

u-3v22-v2

S.y
ans = v
S.parameters
ans = (uv)
S.conditions
ans = 4v2<uu<40<v

uv 파라미터는 MATLAB® 작업 공간에 없으므로 S.parameters를 사용하여 액세스해야 합니다.

subsisAlways를 사용하여 값 u = 7/2v = 1/2이 조건을 충족하는지 확인합니다.

condWithValues = subs(S.conditions, S.parameters, [7/2,1/2]);
isAlways(condWithValues)
ans = logical
   1

isAlways는 이러한 값이 조건을 충족한다는 것을 나타내는 논리값 1(true)을 반환합니다. 이러한 파라미터 값을 S.xS.y에 대입하여 xy에 대한 해를 구합니다.

xSol = subs(S.x, S.parameters, [7/2,1/2])
xSol = 

114-14

ySol = subs(S.y, S.parameters, [7/2,1/2])
ySol = 

12

다음 연립방정식을 풉니다.

2u2+v2=0

u-v=1

방정식을 둘 이상의 변수에 대해 풀 때는 사용자가 변수를 지정하는 순서에 따라 솔버가 해를 반환하는 순서가 정의됩니다. 변수를 명시적으로 지정하여 변수 solvsolu에 해를 할당합니다. 솔버는 각 변수에 대해 해 배열을 반환합니다.

syms u v
eqns = [2*u^2 + v^2 == 0, u - v == 1];
vars = [v u];
[solv, solu] = solve(eqns,vars)
solv = 

(-23-2i3-23+2i3)

solu = 

(13-2i313+2i3)

동일한 인덱스를 가진 요소가 한 쌍의 해를 구성합니다.

solutions = [solv solu]
solutions = 

(-23-2i313-2i3-23+2i313+2i3)

'ReturnConditions'true로 지정하여 해의 파라미터와 조건이 포함된 방정식의 완전해를 반환합니다.

방정식 sin(x)=0을 풉니다. 출력 인수 parametersconditions에 대한 출력 변수 2개를 추가로 제공합니다.

syms x
eqn = sin(x) == 0;
[solx,parameters,conditions] = solve(eqn,x,'ReturnConditions',true)
solx = πk
parameters = k
conditions = kZ

πk는 파라미터 k를 포함합니다. 여기서 k는 정수여야 합니다. 변수 k는 MATLAB® 작업 공간에 없으므로 parameters를 사용하여 액세스해야 합니다.

해를 0<x<2π로 제한합니다. 이 제한에 대해 유효한 k 값을 구합니다. 조건 conditions를 가정하고, solve를 사용하여 k를 구합니다. 구한 k 값을 x에 대한 해에 대입합니다.

assume(conditions)
restriction = [solx > 0, solx < 2*pi];
solk = solve(restriction,parameters)
solk = 1
valx = subs(solx,parameters,solk)
valx = π

또는 k의 값을 선택하여 x에 대한 해를 확인합니다. isAlways를 사용하여 선택한 값이 k에 대한 조건을 충족하는지 확인합니다.

k=4k에 대한 조건을 충족하는지 확인합니다.

condk4 = subs(conditions,parameters,4);
isAlways(condk4)
ans = logical
   1

isAlways는 논리값 1(true)을 반환합니다. 즉, 4는 k에 대해 유효한 값입니다. k에 4를 대입하여 x에 대한 해를 구합니다. vpa를 사용하여 수치 근삿값을 구합니다.

valx = subs(solx,parameters,4)
valx = 4π
vpa(valx)
ans = 12.566370614359172953850573533118

방정식 exp(log(x)log(3x))=4를 풉니다.

기본적으로 solvex의 모든 값에 유효하지 않은 단순화는 적용하지 않습니다. 이 경우 솔버는 x가 양의 실수라고 가정하지 않으므로 로그 항등식 log(3x)=log(3)+log(x)를 적용하지 않습니다. 따라서 solve는 방정식을 기호적으로 풀 수 없습니다.

syms x
eqn = exp(log(x)*log(3*x)) == 4;
S = solve(eqn,x)
Warning: Unable to solve symbolically. Returning a numeric solution using <a href="matlab:web(fullfile(docroot, 'symbolic/vpasolve.html'))">vpasolve</a>.
S = -14.009379055223370038369334703094-2.9255310052111119036668717988769i

solve가 해를 구할 수 있도록 'IgnoreAnalyticConstraints'true로 설정하여 단순화 규칙을 적용해 봅니다. 자세한 내용은 알고리즘 항목을 참조하십시오.

S = solve(eqn,x,'IgnoreAnalyticConstraints',true)
S = 

(3e-log(256)+log(3)2233elog(256)+log(3)223)

solve는 단순화를 적용하여 솔버가 해를 구할 수 있도록 합니다. 단순화를 수행할 때 적용되는 수학 규칙이 일반적으로 항상 유효한 것은 아닙니다. 이 예제에서 솔버는 x가 양의 실수라고 가정하므로 로그 항등식을 적용합니다. 그러므로 이 모드에서 구한 해를 확인해야 합니다.

symsyms 함수를 사용하면 기호 변수에 대한 가정을 설정할 수 있습니다.

변수 x가 양수라고 가정합니다.

syms x positive

방정식을 가정이 설정된 변수에 대해 풀면 솔버는 가정에 부합하는 해만 반환합니다. x에 대해 아래의 방정식을 풉니다.

eqn = x^2 + 5*x - 6 == 0;
S = solve(eqn,x)
S = 1

'IgnoreProperties'true로 설정하여 가정을 충족하지 않는 해를 허용합니다.

S = solve(eqn,x,'IgnoreProperties',true)
S = 

(-61)

추후 계산을 위해 syms를 사용하여 변수 x를 다시 생성해서 이 변수에 설정된 가정을 지웁니다.

syms x

다항 방정식을 풀 때 솔버는 root를 사용하여 해를 반환할 수 있습니다. 3차 다항식을 풉니다.

syms x a
eqn = x^3 + x^2 + a == 0;
solve(eqn, x)
ans = 

(root(z3+z2+a,z,1)root(z3+z2+a,z,2)root(z3+z2+a,z,3))

'MaxDegree'를 사용해 솔버를 호출해서 이러한 방정식의 양함수 해를 구해보십시오. 이 옵션은 솔버가 양함수 해를 반환하려고 시도하는 다항식의 최대 차수를 지정합니다. 디폴트 값은 2입니다. 이 값을 높이면 더 높은 차수의 다항식에 대한 양함수 해를 구할 수 있습니다.

동일한 방정식에 대해 'MaxDegree' 값을 3으로 늘려서 양함수 해를 구해봅니다.

S = solve(eqn, x, 'MaxDegree', 3)
S = 

(19σ1+σ1-13-118σ1-σ12-13-319σ1-σ1i2-118σ1-σ12-13+319σ1-σ1i2)where  σ1=a2+1272-1729-a2-1271/3

방정식 sin(x)+cos(2x)=1을 풉니다.

솔버는 주기적 해의 무한 집합을 반환하는 대신 가장 실용적이라고 생각하는 3개의 해를 선택합니다.

syms x
eqn = sin(x) + cos(2*x) == 1;
S = solve(eqn,x)
S = 

(0π65π6)

'PrincipalValue'true로 설정하여 하나의 해만 선택합니다.

S1 = solve(eqn,x,'PrincipalValue',true)
S1 = 0

입력 인수

모두 축소

풀어야 할 방정식으로, 기호 표현식 또는 기호 방정식으로 지정됩니다. 관계 연산자 ==를 사용해서 기호 방정식을 정의합니다. eqn이 우변이 없는 기호 표현식인 경우, 솔버는 우변을 0으로 간주하고 방정식 eqn == 0을 풉니다.

방정식을 풀 변수로, 기호 변수로 지정됩니다. 기본적으로 solvesymvar에서 결정된 변수를 사용합니다.

연립방정식으로, 기호 표현식 또는 기호 방정식으로 지정됩니다. eqns에 우변이 없는 기호 표현식인 요소가 있으면 solve는 그 요소를 0과 같다고 놓고 등식을 풉니다.

방정식 또는 연립방정식을 풀 변수로, 기호 벡터 또는 기호 행렬로 지정됩니다. 기본적으로 solvesymvar에서 결정된 변수를 사용합니다.

사용자가 지정한 변수의 순서에 따라 솔버가 해를 반환하는 순서가 정의됩니다.

이름-값 인수

예: 'Real',true로 지정하면 솔버가 실수 해를 반환합니다.

실수 해만 반환하기 위한 플래그로, 'Real'과 함께 다음 값 중 하나가 쉼표로 구분되어 지정됩니다.

false모든 해를 반환합니다.
true원래 방정식의 모든 하위 표현식이 실수를 나타내는 해만 반환합니다. 이 옵션은 방정식의 모든 기호 파라미터가 실수를 나타낸다고도 가정합니다.

다항식을 풀고 실수 해 반환하기 항목을 참조하십시오.

해의 파라미터와 해가 성립할 때의 조건을 반환하는 플래그로, 'ReturnConditions'와 함께 다음 값 중 하나가 쉼표로 구분되어 지정됩니다.

false파라미터화된 해와 해가 성립할 때의 조건을 반환하지 않습니다. solve 함수가 파라미터를 적절한 값으로 바꿉니다.
true해의 파라미터와 해가 성립하는 조건을 반환합니다. 하나의 출력 변수를 가지는 호출이면 solveparametersconditions 필드가 있는 구조체를 반환합니다. 출력 변수가 여러 개이면 solve는 파라미터와 조건을 마지막 두 출력 변수에 할당합니다. 이 동작은 출력 변수의 개수가 해를 구할 변수의 개수에 2개를 더한 수와 같아야 함을 의미합니다.

부등식 풀기 항목을 참조하십시오.

예: [v1, v2, params, conditions] = solve(sin(x) +y == 0,y^2 == 3,'ReturnConditions',true)는 파라미터를 params에 반환하고 조건을 conditions에 반환합니다.

표현식 및 방정식에 적용된 단순화 규칙으로, 'IgnoreAnalyticConstraints'와 함께 다음 값 중 하나가 쉼표로 구분되어 지정됩니다.

false엄격한 단순화 규칙을 사용합니다.
true표현식과 방정식에 순수 대수적 단순화를 적용합니다. IgnoreAnalyticConstraintstrue로 설정하면 더 간단한 해를 얻을 수 있지만, 이로 인해 일반적으로는 유효하지 않은 결과가 나올 수 있습니다. 즉, 이 옵션은 편의적인 수학적 항등식을 적용하지만 그 적용 결과는 변수의 모든 가능한 값에 대해 성립하지 않을 수 있습니다. 일부 경우에는 이 옵션을 사용하면 solve에서 풀 수 없는 방정식과 연립방정식을 풀 수 있습니다. 자세한 내용은 알고리즘 항목을 참조하십시오.

단순화 규칙을 사용하여 결과 줄이기 항목을 참조하십시오.

변수의 속성에 위배되는 해를 반환하기 위한 플래그로, 'IgnoreProperties'와 함께 다음 값 중 하나가 쉼표로 구분되어 지정됩니다.

false변수의 속성에 위배되는 해를 포함하지 않습니다.
true변수의 속성에 위배되는 해를 포함합니다.

변수에 대한 가정 무시하기 항목을 참조하십시오.

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

높은 차수의 다항 방정식 풀기 항목을 참조하십시오.

하나의 해를 반환하기 위한 플래그로, 'PrincipalValue'와 함께 다음 값 중 하나가 쉼표로 구분되어 지정됩니다.

false모든 해를 반환합니다.
true하나의 해만 반환합니다. 방정식이나 연립방정식에 해가 없는 경우, 솔버는 빈 기호 객체를 반환합니다.

한 개의 해 반환하기 항목을 참조하십시오.

출력 인수

모두 축소

방정식의 해로, 기호 배열로 반환됩니다. 기호 배열의 크기는 해의 수에 상응합니다.

연립방정식의 해로, 구조체로 반환됩니다. 구조체의 필드 수는 연립방정식의 독립 변수 수에 상응합니다. 'ReturnConditions'true로 설정하면 solve 함수는 두 개의 필드, 즉 해의 파라미터가 포함된 필드와 해가 성립할 때의 조건이 포함된 필드를 추가로 반환합니다.

연립방정식의 해로, 기호 변수로 반환됩니다. 출력 변수 또는 기호 배열의 수는 연립방정식의 독립 변수 수와 같아야 합니다. 명시적으로 독립 변수 vars를 지정한 경우 솔버는 이 변수와 동일한 순서로 해를 반환합니다. vars를 지정하지 않으면 독립 변수가 사전순으로 정렬되고 이들 변수에 대한 해가 출력 변수에 할당됩니다.

해의 파라미터로, 생성된 파라미터로 구성된 벡터로 반환됩니다. 이 출력 인수는 ReturnConditionstrue인 경우에만 반환됩니다. 한 개의 출력 인수가 제공된 경우 parameters는 구조체의 필드로 반환됩니다. 여러 개의 출력 인수가 제공된 경우 parameters는 끝에서 두 번째 출력 인수로 반환됩니다. 생성된 파라미터는 MATLAB® 작업 공간에 나타나지 않습니다. 생성된 파라미터에 액세스하려면 parameters를 사용해야 합니다.

예: [solx, params, conditions] = solve(sin(x) == 0, 'ReturnConditions', true)는 파라미터 k를 인수 params에 반환합니다.

해가 유효할 때의 조건으로, 기호 표현식로 구성된 벡터로 반환됩니다. 이 출력 인수는 ReturnConditionstrue인 경우에만 반환됩니다. 한 개의 출력 인수가 제공된 경우 conditions는 구조체의 필드로 반환됩니다. 여러 개의 출력 인수가 제공된 경우 conditions는 마지막 출력 인수로 반환됩니다.

예: [solx, params, conditions] = solve(sin(x) == 0, 'ReturnConditions', true)는 조건 in(k, 'integer')conditions에 반환합니다. solx의 해는 이 조건에서만 유효합니다.

  • solve 함수가 해를 구할 수 없고 ReturnConditionsfalse이면 solve는 수치 해를 구하는 수치 솔버 vpasolve를 내부적으로 호출합니다. 기호 파라미터가 없는 다항 방정식과 연립방정식인 경우 수치 솔버는 모든 해를 반환합니다. 기호 파라미터가 없는 비다항 방정식과 연립방정식인 경우 수치 솔버는 하나의 해만 반환합니다(해가 있는 경우).

  • solve가 해를 구할 수 없고 ReturnConditionstrue이면 solve는 경고와 함께 비어 있는 해를 반환합니다. 해가 존재하지 않으면 solve는 경고 없이 비어 있는 해를 반환합니다.

  • 해에 파라미터가 포함되어 있고 ReturnConditionstrue이면 solve는 해의 파라미터와 해를 성립하게 하는 조건을 반환합니다. ReturnConditionsfalse이면 solve 함수는 파라미터의 값을 선택하고 그에 대응하는 결과를 반환하거나, 특정 값을 선택하지 않고 파라미터화된 해를 반환합니다. 후자의 경우 solve는 반환된 해에 파라미터 값이 있다는 경고도 함께 표시합니다.

  • 파라미터가 어떤 조건에서도 나타나지 않으면 파라미터가 복소수 값을 받을 수 있음을 의미합니다.

  • solve의 출력에는 solve에서 도출된 파라미터 외에도 입력 방정식의 파라미터가 포함될 수 있습니다.

  • solve에서 도출된 파라미터는 MATLAB 작업 공간에 표시되지 않습니다. 이러한 파라미터는 해당 파라미터를 포함하는 출력 인수를 사용하여 액세스해야 합니다. MATLAB 작업 공간에서 파라미터를 사용하려면 syms를 사용하여 파라미터를 초기화하십시오. 예를 들어, 파라미터가 k이면 syms k를 사용하십시오.

  • 변수 이름 parametersconditionssolve에 대한 입력값으로 사용할 수 없습니다.

  • 미분 방정식을 풀려면 dsolve 함수를 사용하십시오.

  • 연립방정식을 풀 때는 항상 결과를 출력 인수에 할당합니다. 출력 인수를 사용하면 방정식 해의 값에 액세스할 수 있습니다.

  • MaxDegree는 5보다 작은 양의 정수만 허용합니다. 그 이유는 일반적으로 4보다 높은 차수의 다항식에서는 근에 대한 양함수 표현식이 없기 때문입니다.

  • 출력 변수 y1,...,yNsolve에서 방정식이나 연립방정식을 풀 때 사용할 변수를 지정하지 않습니다. y1,...,yNeqns에 들어있는 변수인 경우 solve(eqns)가 해를 y1,...,yN에 올바른 순서로 할당한다는 보장은 없습니다. 따라서 [b,a] = solve(eqns)를 실행하면 a에 대한 해가 b에 할당되거나 그 반대로 할당될 수 있습니다.

    해가 올바른 순서로 반환되도록 하려면 변수 vars를 지정하십시오. 예를 들어, 호출 [b,a] = solve(eqns,b,a)a에 대한 해를 a에 할당하고 b에 대한 해를 b에 할당합니다.

알고리즘

IgnoreAnalyticConstraints를 사용하면 솔버가 방정식 양변의 표현식에 다음 규칙 중 일부를 적용합니다.

  • 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 이전에 개발됨

모두 확장