Main Content

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

기호 표현식 단순화하기

수학 표현식의 단순화는 명확하게 정의된 주제는 아닙니다. 표현식의 어떤 형식이 가장 간단한지에 대한 보편적인 기준은 없습니다. 한 문제에 대해 가장 단순한 수학 표현식의 형식이 다른 문제에 대해서는 복잡하거나 부적합할 수 있습니다. 예를 들어, 다음 두 수학 표현식은 동일한 다항식을 다른 형식으로 나타낸 것입니다.

(x + 1)(x - 2)(x + 3)(x - 4),

  x4 - 2x3 - 13x2 + 14x + 24.

첫 번째 형식은 이 다항식의 근을 명확하게 보여줍니다. 이 형식은 근과 관련된 작업을 하기에 간편합니다. 두 번째 형식은 다항식의 계수를 보고 싶을 때 가장 적합합니다. 예를 들어, 이 형식은 다항식을 미분 또는 적분할 때 편리합니다.

계산하려는 문제에 특정 형태의 표현식이 필요한 경우 적절한 단순화 함수를 선택하는 것이 가장 좋은 접근법입니다. Choose Function to Rearrange Expression 항목을 참조하십시오.

Symbolic Math Toolbox™는 특정 단순화 함수 외에도 일반적인 단순화 함수 simplify를 제공합니다.

표현식을 특정 형태(전개, 인수분해 또는 특정 항으로 표현)로 만들 필요가 없는 경우 simplify를 사용하여 수학 표현식을 짧게 만들 수 있습니다. 예를 들어, 계산의 최종 결과에 대해 더 짧은 형식을 구하려면 이 단순화 함수를 사용하십시오.

simplify는 다항식, 삼각 함수, 로그 함수 및 특수 함수를 사용하는 표현식과 같은 다양한 유형의 기호 표현식에서 사용할 수 있습니다. 예를 들어, 다음 다항식을 단순화해 보겠습니다.

syms x y
simplify((1 - x^2)/(1 - x))
simplify((x - 1)*(x + 1)*(x^2 + x + 1)*(x^2 + 1)*(x^2 - x + 1)*(x^4 - x^2 + 1))
ans =
x + 1
 
ans =
x^12 - 1

삼각 함수가 포함된 표현식을 단순화합니다.

simplify(cos(x)^(-2) - tan(x)^2)
simplify(cos(x)^2 - sin(x)^2)
ans =
1
 
ans =
cos(2*x)

지수 및 로그가 포함된 표현식을 단순화합니다. 세 번째 표현식에서는 log(3) 대신 log(sym(3))을 사용하십시오. log(3)을 사용하는 경우 MATLAB®은 배정밀도를 사용하여 log(3)을 계산한 다음 결과를 기호 숫자로 변환합니다.

simplify(exp(x)*exp(y))
simplify(exp(x) - exp(x/2)^2)
simplify(log(x) + log(sym(3)) - log(3*x) + (exp(x) - 1)/(exp(x/2) + 1))
ans =
exp(x + y)
 
ans =
0
 
ans =
exp(x/2) - 1

특수 함수가 포함된 표현식을 단순화합니다.

simplify(gamma(x + 1) - x*gamma(x))
simplify(besselj(2, x) + besselj(0, x))
ans =
0
 
ans =
(2*besselj(1, x))/x

또한 simplify를 사용하여 기호 함수를 단순화할 수도 있습니다.

syms f(x,y)
f(x,y) = exp(x)*exp(y)
f = simplify(f)
f(x, y) =
exp(x)*exp(y)
 
f(x, y) =
exp(x + y)

옵션을 사용하여 단순화하기

기본적으로 simplify는 엄격한 단순화 규칙을 사용하며 단순화된 표현식이 원래의 표현식과 항상 수학적으로 동등하도록 만듭니다. 예를 들어, 일반적으로 복소수 값의 로그를 결합하지는 않습니다.

syms x
simplify(log(x^2) + log(x))
ans =
log(x^2) + log(x)

추가적인 단순화 규칙을 적용할 수도 있는데, 비록 이런 규칙이 파라미터의 모든 값과 모든 사례에 적합하지는 않을 수 있지만 이런 규칙을 사용하면 simplify가 더 간단한 결과를 반환할 수 있습니다. 이런 방법에서는 IgnoreAnalyticConstraints를 사용하십시오. 예를 들어, IgnoreAnalyticConstraints를 사용하여 동일한 표현식을 단순화하면 로그가 결합된 형태의 결과를 얻게 됩니다.

simplify(log(x^2) + log(x),'IgnoreAnalyticConstraints',true)
ans =
3*log(x)

IgnoreAnalyticConstraints는 변수의 값에 대해 일반적으로 사용되는 가정하에 표현식을 단순화할 수 있는 손쉬운 방법을 제공합니다. 이 대신 변수에 대한 적절한 가정을 명시적으로 설정할 수도 있습니다. 예를 들어, 일반적으로 복소수 값에는 로그 결합이 불가능합니다. x가 실수 값이라고 가정하면 simplifyIgnoreAnalyticConstraints 없이 로그를 결합합니다.

assume(x,'real')
simplify(log(x^2) + log(x))
ans =
log(x^3)

추후 계산을 위해 syms를 사용하여 x를 다시 만들어서 가정을 지웁니다.

syms x

표현식이나 함수의 단순화를 향상시킬 수 있는 또 다른 방법은 simplify(f,'Steps',n) 구문을 사용하는 것입니다. 여기서 nsimplify가 수행하는 단계 수를 제어하는 양의 정수입니다. 더 많은 단순화 단계를 지정하면 표현식이 더 단순화될 수 있지만 더 많은 시간이 소요됩니다. 기본적으로는 n = 1입니다. 예를 들어, 다음 표현식을 작성하여 단순화해 보십시오. 결과는 원래의 표현식보다 짧아졌지만 더 단순화될 수 있습니다.

syms x
y = (cos(x)^2 - sin(x)^2)*sin(2*x)*(exp(2*x) - 2*exp(x) + 1)/...
    ((cos(2*x)^2 - sin(2*x)^2)*(exp(2*x) - 1));
simplify(y)
ans =
(sin(4*x)*(exp(x) - 1))/(2*cos(4*x)*(exp(x) + 1))

동일한 표현식에 대한 단순화 단계 수를 지정합니다. 먼저 25개의 단계를 사용합니다.

simplify(y,'Steps',25)
ans =
(tan(4*x)*(exp(x) - 1))/(2*(exp(x) + 1))

50개의 단계를 사용하여 표현식을 더 단순화합니다.

simplify(y,'Steps',50)
ans =
(tan(4*x)*tanh(x/2))/2

이미 표현식이나 함수를 단순화했지만 동일한 표현식에 대한 또 다른 형식을 원한다고 가정해 보겠습니다. 이렇게 하려면 'All' 옵션을 true로 설정하면 됩니다. 구문 simplify(f,'Steps',n,'All',true)는 단순화 단계에서 동일한 표현식에 대한 다른 동등한 결과를 보여줍니다.

syms x
y = cos(x) + sin(x)
simplify(y,'Steps',10,'All',true)
ans =
                                                   2^(1/2)*sin(x + pi/4)
                                                   2^(1/2)*cos(x - pi/4)
                                                         cos(x) + sin(x)
 2^(1/2)*((exp(- x*1i - (pi*1i)/4)*1i)/2 - (exp(x*1i + (pi*1i)/4)*1i)/2)

이보다 더 많은 동등한 결과를 반환하려면 단계 수를 25로 늘리십시오.

simplify(y,'Steps',25,'All',true)
ans =
                                                   2^(1/2)*sin(x + pi/4)
                                                   2^(1/2)*cos(x - pi/4)
                                                         cos(x) + sin(x)
                                      -2^(1/2)*(2*sin(x/2 - pi/8)^2 - 1)
           2^(1/2)*(exp(- x*1i + (pi*1i)/4)/2 + exp(x*1i - (pi*1i)/4)/2)
 2^(1/2)*((exp(- x*1i - (pi*1i)/4)*1i)/2 - (exp(x*1i + (pi*1i)/4)*1i)/2)

가정을 사용하여 단순화하기

일부 표현식은 일반적으로 단순화될 수 없지만 특정 가정하에서 훨씬 짧아집니다. 예를 들어, 추가 가정 없이 이 삼각 함수 표현식을 단순화하면 원래의 표현식이 반환됩니다.

syms n
simplify(sin(2*n*pi))
ans =
sin(2*pi*n)

그러나 변수 n이 정수를 나타내는 것으로 가정하면 동일한 삼각 함수 표현식이 0으로 단순화됩니다.

assume(n,'integer')
simplify(sin(2*n*pi))
ans =
0

추후 계산을 위해 가정을 지웁니다.

syms n

분수 단순화하기

일반 단순화 함수인 simplify를 사용하여 분수를 단순화할 수 있습니다. 그러나 Symbolic Math Toolbox는 이 작업에 특히 더 효율적인 함수인 simplifyFraction을 제공합니다. 명령문 simplifyFraction(f)는 표현식 f를 분수로 나타냅니다. 여기서 분자와 분모는 모두 최대공약수가 1인 다항식입니다. 예를 들어, 다음 표현식을 단순화하십시오.

syms x y
simplifyFraction((x^3 - 1)/(x - 1))
ans =
x^2 + x + 1
simplifyFraction((x^3 - x^2*y - x*y^2 + y^3)/(x^3 + y^3))
ans =
(x^2 - 2*x*y + y^2)/(x^2 - x*y + y^2)

기본적으로 simplifyFraction은 반환된 결과의 분자와 분모에 있는 표현식을 전개하지 않습니다. 결과 표현식에서 분자와 분모를 전개하려면 Expand 옵션을 사용하십시오. 비교를 위해 먼저 Expand 없이 이 분수를 단순화하십시오.

simplifyFraction((1 - exp(x)^4)/(1 + exp(x))^4)
ans =
(exp(2*x) - exp(3*x) - exp(x) + 1)/(exp(x) + 1)^3

이제 Expand를 사용하여 동일한 표현식을 단순화하십시오.

simplifyFraction((1 - exp(x)^4)/(1 + exp(x))^4,'Expand',true)
ans =
(exp(2*x) - exp(3*x) - exp(x) + 1)/(3*exp(2*x) + exp(3*x) + 3*exp(x) + 1)