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

vpasolve

수치적으로 방정식 풀기

설명

예제

S = vpasolve(eqn,var)은 변수 var에 대해 방정식 eqn을 수치적으로 풉니다. var을 지정하지 않으면 vpasolvesymvar이 결정하는 디폴트 변수에 대해 방정식을 풉니다. 예를 들어, vpasolve(x + 1 == 2, x)x + 1 = 2를 x에 대해 수치적으로 풉니다.

예제

S = vpasolve(eqn,var,init_param)은 초기 추측값 또는 검색 범위 init_param을 사용하여 변수 var에 대해 방정식 eqn을 수치적으로 풉니다.

예제

Y = vpasolve(eqns,vars)는 변수 vars에 대해 연립방정식 eqns를 수치적으로 풉니다. 이 구문은 해가 포함된 구조체형 배열 Y를 반환합니다. 구조체형 배열의 필드는 vars에 지정한 변수와 일치합니다. vars를 지정하지 않으면 vpasolvesymvar이 결정하는 디폴트 변수에 대해 방정식을 풉니다.

Y = vpasolve(eqns,vars,init_param)은 초기 추측값 또는 검색 범위 init_param을 사용하여 변수 vars에 대해 연립방정식 eqns를 수치적으로 풉니다.

예제

[y1,...,yN] = vpasolve(eqns,vars)는 변수 vars에 대해 연립방정식 eqns를 수치적으로 풉니다. 이 구문은 해를 변수 y1,...,yN에 할당합니다. vars를 지정하지 않으면 vpasolvesymvar이 결정하는 디폴트 변수에 대해 방정식을 풉니다.

예제

[y1,...,yN] = vpasolve(eqns,vars,init_param)은 초기 추측값 또는 검색 범위 init_param을 사용하여 변수 vars에 대해 연립방정식 eqns를 수치적으로 풉니다.

예제

___ = vpasolve(___,'Random',true)는 해를 구하기 위해 임의 초기 추측값을 사용합니다. 비다항 방정식에 대해 동일한 해를 반복적으로 반환하지 않으려면 이 입력값을 사용하십시오. 모든 변수에 대해 초기 추측값을 지정한 경우 'Random'true로 설정해도 아무런 효과가 없습니다.

예제

모두 축소

다항 방정식을 풉니다. 다항 방정식의 경우 vpasolve는 모든 해를 반환합니다.

syms x
S = vpasolve(2*x^4 + 3*x^3 - 4*x^2 - 3*x + 2 == 0, x)
S = 

(-2.0-1.00.51.0)

비다항 방정식을 풉니다. 비다항 방정식의 경우 vpasolve는 구한 해 중 첫 번째 해를 반환합니다.

S = vpasolve(sin(x) == 1/2, x)
S = 0.52359877559829887307710723054658

vpasolve를 사용할 때 초기 추측값을 지정하여 방정식 200sin(x)=x3-1의 여러 해를 구합니다.

방정식 양변을 플로팅합니다.

syms x
eqnLeft = 200*sin(x);
eqnRight = x^3 - 1;
fplot([eqnLeft eqnRight])
title([texlabel(eqnLeft) ' = ' texlabel(eqnRight)])

이 플롯을 통해 방정식에 3개의 해가 있음을 알 수 있습니다. 초기 추측값을 지정하지 않으면 vpasolve는 구한 첫 번째 해를 반환합니다.

S1 = vpasolve(eqnLeft == eqnRight, x)
S1 = -0.0050000214585835715725440675982988

특정 해에 가까운 초기 추측값을 지정하여 그 해를 찾습니다.

S2 = vpasolve(eqnLeft == eqnRight, x, -3)
S2 = -3.0009954677086430679926572924945
S3 = vpasolve(eqnLeft == eqnRight, x, 4)
S3 = 3.0098746383859522384063444361906

연립방정식을 풉니다. 하나의 출력 인수를 사용하여 해를 구조체형 배열 형식으로 반환합니다.

syms u v
Y = vpasolve([v^3 + 2*u == v, v^2 == u], [u,v])
Y = struct with fields:
    u: [3x1 sym]
    v: [3x1 sym]

구조체형 배열 S의 필드에 액세스하여 해를 표시합니다.

uSol = Y.u
uSol = 

(05.82842712474619009760337744841940.1715728752538099023966225515806)

vSol = Y.v
vSol = 

(0-2.41421356237309504880168872420970.4142135623730950488016887242097)

vpasolve는 해를 구할 수 없으면 빈 객체를 반환합니다.

syms x
eqns = [3*x+2, 3*x+1];
Y = vpasolve(eqns,x)
 
Y =
 
Empty sym: 0-by-1
 

연립방정식을 풀 때 여러 개의 출력 인수를 사용하여 각 출력 변수에 해를 직접 할당할 수 있습니다. 솔버가 해를 반환하는 순서는 사용자가 변수를 지정하는 순서를 따릅니다.

syms x y
[sol_x, sol_y] = vpasolve([x*sin(10*x) == y^3, y^2 == exp(-2*x/3)], [x,y])
sol_x = 88.90707209659114864849280774681
sol_y = 0.00000000000013470479710676694388973703681918

방정식의 해에 대한 범위를 지정할 수 있습니다. 예를 들어, 검색을 실수 해로만 제한하려는 경우 vpasolve는 가정을 무시하기 때문에 가정을 사용할 수 없습니다. 이런 경우, 대신 검색 구간을 지정합니다. 다음 방정식에서 범위를 지정하지 않으면 수치 솔버에서 방정식의 6개 해를 모두 반환합니다.

syms x
S = vpasolve(x^6 - x^2 == 3, x)
S = 

(-1.29294233500847243691965504363821.2929423350084724369196550436382-0.50188125716943915856832436499602-1.0429452224956770037495194222175i-0.50188125716943915856832436499602+1.0429452224956770037495194222175i0.50188125716943915856832436499602-1.0429452224956770037495194222175i0.50188125716943915856832436499602+1.0429452224956770037495194222175i)

이 방정식의 실수 해만 필요하다고 가정해 보십시오. vpasolve는 변수에 대한 가정을 무시하기 때문에 가정을 사용할 수 없습니다.

assume(x,'real')
S = vpasolve(x^6 - x^2 == 3, x)
S = 

(-1.29294233500847243691965504363821.2929423350084724369196550436382-0.50188125716943915856832436499602-1.0429452224956770037495194222175i-0.50188125716943915856832436499602+1.0429452224956770037495194222175i0.50188125716943915856832436499602-1.0429452224956770037495194222175i0.50188125716943915856832436499602+1.0429452224956770037495194222175i)

반환된 결과를 특정 범위로 제한하려면 검색 범위를 지정하십시오. 예를 들어, 이 방정식의 실수 해만 반환하려면 검색 구간을 [-Inf Inf]로 지정하십시오.

S = vpasolve(x^6 - x^2 == 3, x, [-Inf Inf])
S = 

(-1.29294233500847243691965504363821.2929423350084724369196550436382)

음이 아닌 해를 반환하려면 검색 구간을 [0 Inf]로 지정하십시오.

S = vpasolve(x^6 - x^2 == 3, x, [0 Inf])
S = 1.2929423350084724369196550436382

검색 범위는 [-1, 1+2i]와 같은 복소수도 포함할 수 있습니다. 이 경우 vpasolve는 복소 평면의 사각형 검색 영역을 사용합니다. 여기서 -1은 검색 영역의 맨 아래 왼쪽 코너를 지정하고 1+2i는 검색 영역의 맨 위 오른쪽 코너를 지정합니다.

S = vpasolve(x^6 - x^2 == 3, x, [-1 1+2i])
S = 

(-0.50188125716943915856832436499602+1.0429452224956770037495194222175i0.50188125716943915856832436499602+1.0429452224956770037495194222175i)

다음 연립방정식의 해를 구합니다.

syms x y
eqn1 = exp(-x^2-y^2)*(x-4) - exp((-x^2-y^2)/2)*(x-2) == 0
eqn1 = 

e-x2-y2x-4-e-x22-y22x-2=0

eqn2 = exp(-x^2-y^2)*(y-2) - exp((-x^2-y^2)/2)*(y-4) == 0
eqn2 = 

e-x2-y2y-2-e-x22-y22y-4=0

초기 추측값을 지정하지 않고 변수 xy에 대해 해를 구합니다. vpasolve는 해를 구할 수 없으므로 빈 객체를 반환합니다.

[solX, solY] = vpasolve([eqn1 eqn2],[x y])
 
solX =
 
Empty sym: 0-by-1
 
 
solY =
 
Empty sym: 0-by-1
 

이번에는 초기 추측값 x = 2y = 4를 지정합니다. vpasolve는 초기 추측값에 가까운 해를 반환합니다.

[solX, solY] = vpasolve([eqn1 eqn2],[x y],[2; 4])
solX = 1.9999092125057125429174334656647
solY = 4.0000907874942874570825665343353

기본적으로 vpasolve는 모든 호출에 대해 동일한 해를 반환합니다. 비다항 방정식에 대해 둘 이상의 해를 구하려면 'Random'true로 설정하십시오. 이렇게 하면 vpasolve에서 임의 초기 추측값을 사용하여 연속된 호출에서 다른 해를 반환할 수 있습니다.

'Random'을 지정하지 않으면 vpasolve가 모든 호출에 대해 동일한 해를 반환합니다.

syms x
f = x-tan(x);
for n = 1:3
    S = vpasolve(f,x)
end
S = 0
S = 0
S = 0

'Random'이 true로 설정된 경우 vpasolve는 모든 호출에 대해 다른 해를 반환합니다.

for n = 1:3
    S = vpasolve(f,x,'Random',true)
end
S = -227.76107684764829218924973598808
S = 102.09196646490764333652956578441
S = 61.244730260374400372753016364097

'Random' 옵션을 검색 범위와 함께 사용할 수 있습니다.

S = vpasolve(f,x,[10 12],'Random',true)
S = 10.904121659428899827148702790189

입력 인수

모두 축소

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

방정식을 풀 변수로, 기호 변수로 지정됩니다. var이 지정되지 않은 경우 symvar가 변수를 결정합니다.

풀어야 할 연립방정식 또는 표현식으로, 방정식이나 표현식으로 구성된 기호 벡터, 기호 행렬 또는 기호 배열로 지정됩니다. 이러한 방정식 또는 표현식은 쉼표로도 구분할 수 있습니다. 방정식이 우변이 없는 기호 표현식인 경우, 솔버는 방정식의 우변을 0으로 간주합니다.

연립방정식을 풀 변수로, 기호 벡터로 지정됩니다. 이러한 변수는 벡터 또는 쉼표로 구분된 목록으로 지정됩니다. vars가 지정되지 않은 경우 symvar가 변수를 결정합니다.

해에 대한 초기 추측값 또는 검색 범위로, 숫자형 값, 벡터, 또는 2개 열을 가진 행렬로 지정됩니다.

init_param이 숫자이거나 다변량 방정식에서 숫자로 구성된 벡터인 경우 수치 솔버가 이 값을 초기 추측값으로 사용합니다. init_param이 스칼라로 지정되었지만 연립방정식이 다변량인 경우 수치 솔버는 스칼라 값을 모든 변수에 대한 초기 추측값으로 사용합니다. 예제는 초기 추측값을 지정하여 여러 해 구하기 항목을 참조하십시오.

init_param이 2개 열을 가진 행렬인 경우 행의 두 요소는 해당 변수에 대한 초기 추측값의 범위를 지정합니다. 검색 범위로 구성된 행렬에 초기 추측값을 지정하려면 두 열을 모두 초기 추측값으로 지정하십시오.

init_param을 검색 범위 [a b]로 지정했는데 a,b 값이 복소수라면 vpasolve는 복소 평면의 사각형 검색 영역에서 해를 구합니다. 여기에서 a는 사각형 검색 영역의 왼쪽 아래 코너를 지정하고 b는 해당 영역의 오른쪽 위 코너를 지정합니다. 예제는 해 범위 지정하기 항목을 참조하십시오.

변수의 검색 범위를 생략하려면 init_param에서 해당 변수의 검색 범위를 [NaN, NaN]으로 설정하십시오. init_param에서 NaN을 다른 용도로 사용하면 오류가 발생합니다.

출력 인수

모두 축소

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

연립방정식의 해로, 구조체형 배열로 반환됩니다. 구조체형 배열의 필드 개수는 방정식을 풀 변수 개수와 일치합니다.

연립방정식의 해가 할당된 변수로, 숫자형 변수 또는 기호 변수로 구성된 배열로 반환됩니다. 출력 변수 또는 기호 배열의 개수는 방정식을 풀 변수의 개수와 같아야 합니다. 명시적으로 독립 변수 vars를 지정한 경우 솔버는 이 변수와 동일한 순서로 해를 반환합니다. vars를 지정하지 않으면 툴박스가 독립 변수를 사전순으로 정렬한 다음 이러한 변수에 대한 해를 출력 변수 또는 기호 배열에 할당합니다.

  • vpasolve는 해를 구할 수 없으면 빈 객체를 반환합니다. 솔버가 해를 구하는 데 도움이 되도록 초기 추측값을 제공하십시오. 예제는 초기 추측값을 제공하여 해 구하기 항목을 참조하십시오.

  • 다항 방정식의 경우 vpasolve는 모든 해를 반환합니다. 비다항 방정식의 경우 모든 해를 구하는 전반적인 방법은 없습니다. vpasolve는 기본적으로 하나의 해만 반환합니다. 비다항 방정식에 대해 여러 해를 구하려면 'Random'을 true로 설정하고 vpasolve를 반복적으로 사용하면 됩니다.

  • 비다항 해를 갖는 연립방정식을 풀 때 vpasolve의 동작은 시스템이 다항식인지 비다항식인지에 따라 달라집니다. 다항식인 경우, vpasolve는 임의의 파라미터를 도출하여 모든 해를 반환합니다. 비다항식인 경우 단일 수치 해가 반환됩니다(있는 경우).

  • 유리 연립방정식을 풀 경우, vpasolve는 분모를 곱하여 유리 방정식을 다항식으로 변환합니다. vpasolve는 결과로 생성되는 연립다항식의 모든 해를 반환하는데, 여기에는 분모의 근도 포함됩니다.

  • vpasolve는 변수에 설정된 가정을 무시합니다. init_param 인수를 사용하여 적절한 검색 범위를 지정하면 반환된 결과를 특정 범위로 제한할 수 있습니다.

  • 출력 변수 y1,...,yNvpasolve에서 방정식이나 연립방정식을 풀 때 사용할 변수를 지정하지 않습니다. y1,...,yNeqns에 있다 하더라도 vpasolve(eqns)가 정확한 순서로 y1,...,yN에 해를 할당한다는 것을 보장하지 않습니다. 따라서 [a,b] = vpasolve(eqns) 호출의 경우, ab에 할당되거나 그 반대로 할당된 해를 구할 수 있습니다.

    해가 올바른 순서로 반환되도록 하려면 변수 vars를 지정하십시오. 그러나, [b,a] = vpasolve(eqns,[b,a]) 호출은 a에 할당된 해를 a에, b에 할당된 해를 b에 할당합니다.

  • solve를 사용하여 방정식을 기호적으로 푼 다음 vpa를 사용하여 결과를 수치적으로 근사할 수 있습니다. 이 접근법을 사용하면 기호 솔버에서 구한 모든 해에 대한 수치 근삿값을 구할 수 있습니다. 그러나 기호적으로 푼 다음 결과를 후처리하는 것은 수치 솔버 vpasolve를 직접 사용하는 것보다 시간이 더 걸리므로 이 방법은 계산 속도를 줄일 수 있습니다.

알고리즘

  • 'Random'true로 설정하고 변수에 대한 검색 범위를 지정하면 균등분포를 갖는 내장된 난수 생성기를 통해 임의 초기 추측값이 검색 범위 내에서 선택됩니다.

  • 'Random'true로 설정하고 변수에 대한 검색 범위를 지정하지 않으면 100의 절반 너비 코시 분포를 사용하여 임의 초기 추측값이 생성됩니다. 즉, 초기 추측값은 실수 값이며 반복되는 호출에서 넓게 분포된 값을 갖습니다.

R2012b에 개발됨