solve
함수로 방정식 해를 구할 때 발생하는 문제 해결하기
solve
가 복잡해 보이는 해를 반환하거나 solve
가 입력값을 처리할 수 없는 경우 사용할 수 있는 옵션이 많이 있습니다. 이러한 옵션은 solve
의 해 공간을 단순화합니다. 또한 입력값이 복잡한 경우 solve
를 지원하고, solve
가 이전에는 구하지 못했던 해를 반환하도록 할 수도 있습니다.
하나의 실수 해만 반환하기
방정식 x^5 - 1 == 0
을 풉니다. 이 방정식에는 5개의 해가 있습니다.
syms x solve(x^5 - 1 == 0, x)
ans = 1 - (2^(1/2)*(5 - 5^(1/2))^(1/2)*1i)/4 - 5^(1/2)/4 - 1/4 (2^(1/2)*(5 - 5^(1/2))^(1/2)*1i)/4 - 5^(1/2)/4 - 1/4 5^(1/2)/4 - (2^(1/2)*(5^(1/2) + 5)^(1/2)*1i)/4 - 1/4 5^(1/2)/4 + (2^(1/2)*(5^(1/2) + 5)^(1/2)*1i)/4 - 1/4
실수 해만 필요한 경우 Real
옵션을 true
로 지정합니다. solve
함수는 1개의 실수 해를 반환합니다.
solve(x^5 - 1, x, 'Real', true)
ans = 1
단순화 규칙 적용하기
아래의 방정식을 풉니다. solve
함수는 복잡한 해를 반환합니다.
syms x solve(x^(5/2) + 1/x^(5/2) == 1, x)
ans = 1/(1/2 - (3^(1/2)*1i)/2)^(2/5) 1/((3^(1/2)*1i)/2 + 1/2)^(2/5) -(5^(1/2)/4 - (2^(1/2)*(5 - 5^(1/2))^(1/2)*1i)/4 + 1/4)/(1/2 - (3^(1/2)*1i)/2)^(2/5) -((2^(1/2)*(5 - 5^(1/2))^(1/2)*1i)/4 + 5^(1/2)/4 + 1/4)/(1/2 - (3^(1/2)*1i)/2)^(2/5) -(5^(1/2)/4 - (2^(1/2)*(5 - 5^(1/2))^(1/2)*1i)/4 + 1/4)/(1/2 + (3^(1/2)*1i)/2)^(2/5) -((2^(1/2)*(5 - 5^(1/2))^(1/2)*1i)/4 + 5^(1/2)/4 + 1/4)/(1/2 + (3^(1/2)*1i)/2)^(2/5)
방정식을 풀 때 단순화 규칙을 적용하려면 IgnoreAnalyticConstraints
옵션을 true
로 지정하십시오. 적용된 단순화 규칙은 일반적으로 수학적으로 정확하지 않지만, 유용한 해를 생성할 수도 있으며 특히 물리학 및 공학에서 유용합니다. 이 옵션을 사용하는 경우 솔버가 결과의 정확성 및 완전성을 보장하지 않습니다.
solve(x^(5/2) + 1/x^(5/2) == 1, x, 'IgnoreAnalyticConstraints', true)
ans = 1/(1/2 - (3^(1/2)*1i)/2)^(2/5) 1/((3^(1/2)*1i)/2 + 1/2)^(2/5)
이 해는 더 단순하고 더 유용합니다.
가정을 사용하여 결과 좁히기
특정한 경우에 대한 해를 위해 적절한 해를 반환하도록 가정을 설정합니다. 아래의 방정식을 풉니다. solve
함수는 7개의 해를 반환합니다.
syms x solve(x^7 + 2*x^6 - 59*x^5 - 106*x^4 + 478*x^3 + 284*x^2 - 1400*x + 800, x)
ans = 1 - 5^(1/2) - 1 - 17^(1/2)/2 - 1/2 17^(1/2)/2 - 1/2 -5*2^(1/2) 5*2^(1/2) 5^(1/2) - 1
x
가 양수라고 가정하고 방정식을 다시 풉니다. solve
함수는 4개의 양수 해만 반환합니다.
assume(x > 0) solve(x^7 + 2*x^6 - 59*x^5 - 106*x^4 + 478*x^3 + 284*x^2 - 1400*x + 800, x)
ans = 1 17^(1/2)/2 - 1/2 5*2^(1/2) 5^(1/2) - 1
in(x,'integer')
를 사용하여 x
가 정수라는 가정을 추가합니다. assumeAlso
를 사용하여 변수에 대한 가정을 추가합니다.
assumeAlso(in(x,'integer')) solve(x^7 + 2*x^6 - 59*x^5 - 106*x^4 + 478*x^3 + 284*x^2 - 1400*x + 800, x)
ans = 1
solve
는 x
에 대한 양의 정수 해만 반환합니다.
추후 계산을 위해 syms
를 사용하여 x
를 다시 만들어서 가정을 지웁니다.
syms x
또는 여러 가정을 만들려는 경우 &
연산자를 사용합니다. 다음과 같이 가정을 설정하고 아래의 방정식을 풉니다.
syms a b c f g h y assume(f == c & a == h & a~= 0) S = solve([a*x + b*y == c, h*x - g*y == f], [x, y], 'ReturnConditions', true); S.x S.y S.conditions
ans = f/h ans = 0 ans = b + g ~= 0
지정된 가정하에서 해는 조건 b + g ~= 0
하에 x = f/h
, y = 0
입니다.
추후 계산을 위해 syms
를 사용하여 변수를 다시 생성해서 가정을 지웁니다.
syms a c f h
해 단순화하기
solve
함수는 최종 결과에 대해 단순화 함수를 호출하지 않습니다. 해를 단순화하려면 simplify
를 호출하십시오.
아래의 방정식을 풉니다. sym
을 사용하여 숫자를 기호 숫자로 변환하여 기호 결과를 반환합니다.
syms x S = solve((sin(x) - 2*cos(x))/(sin(x) + 2*cos(x)) == 1/2, x)
S = -log(-(- 140/37 + 48i/37)^(1/2)/2)*1i -log((- 140/37 + 48i/37)^(1/2)/2)*1i
simplify
를 호출하여 해 S
를 단순화합니다.
simplify(S)
ans = -log(37^(1/2)*(- 1/37 - 6i/37))*1i log(2)*1i - (log(- 140/37 + 48i/37)*1i)/2
더 많은 단계를 사용해 simplify
를 호출하여 결과를 더 단순화합니다.
simplify(S, 'Steps', 50)
ans = atan(6) - pi atan(6)
팁
숫자를 정확히 나타내려면
sym
을 사용하여 숫자를 부동소수점 객체로 변환하십시오. 예를 들어,13/5
대신sym(13)/5
를 사용하십시오. 그러면13/5
를 부동소수점 숫자로 변환하는 대신13/5
를 정확히 나타냅니다. 큰 숫자는 따옴표로 묶습니다.sym(13)/5
,sym(133333333333333333333)/5
및sym('133333333333333333333')/5
를 비교합니다.sym(13)/5 sym(133333333333333333333)/5 sym('133333333333333333333')/5
ans = 13/5 ans = 133333333333333327872/5 ans = 133333333333333333333/5
숫자를 따옴표로 묶고
sym
을 사용하면 최상의 정확도가 제공됩니다.가능한 경우,
solve
를 사용하기 전에 연립방정식을 수동으로 단순화하십시오. 방정식, 파라미터 및 변수의 수를 줄여 보십시오.