TRIG_TR8

This transformation applies product-to-sum identities to rewrite products of trigonometric terms into additive forms.

Representative identities include:

\cos(a)\cos(b)=\frac{\cos(a-b)+\cos(a+b)}{2}

\sin(a)\cos(b)=\frac{\sin(a+b)+\sin(a-b)}{2}

The first option controls preferred conversion ordering.

Excel Usage

=TRIG_TR8(expression, first)
  • expression (str, required): Expression with trig products to convert (expression string).
  • first (bool, optional, default: true): Use first-pass preference for conversion choices (true/false).

Returns (str): Transformed expression as a string, or an error message.

Example 1: Converts cosine-cosine product to sum

Inputs:

expression
cos(2)*cos(3)

Excel formula:

=TRIG_TR8("cos(2)*cos(3)")

Expected output:

"cos(5)/2 + cos(1)/2"

Example 2: Converts cosine-sine product to sum

Inputs:

expression
cos(2)*sin(3)

Excel formula:

=TRIG_TR8("cos(2)*sin(3)")

Expected output:

"sin(5)/2 + sin(1)/2"

Example 3: Converts sine-sine product to cosine difference form

Inputs:

expression
sin(2)*sin(3)

Excel formula:

=TRIG_TR8("sin(2)*sin(3)")

Expected output:

"-cos(5)/2 + cos(1)/2"

Example 4: Runs conversion with first option disabled

Inputs:

expression first
cos(a)*cos(b) false

Excel formula:

=TRIG_TR8("cos(a)*cos(b)", FALSE)

Expected output:

"cos(a - b)/2 + cos(a + b)/2"

Python Code

from sympy import sympify
from sympy.simplify.fu import TR8 as sympy_tr8

def trig_tr8(expression, first=True):
    """
    Convert products of sine and cosine terms into sum or difference forms.

    See: https://docs.sympy.org/latest/modules/simplify/fu.html#sympy.simplify.fu.TR8

    This example function is provided as-is without any representation of accuracy.

    Args:
        expression (str): Expression with trig products to convert (expression string).
        first (bool, optional): Use first-pass preference for conversion choices (true/false). Default is True.

    Returns:
        str: Transformed expression as a string, or an error message.
    """
    try:
        expr_text = expression.replace("^", "**") if isinstance(expression, str) else expression
        expr_obj = sympify(expr_text)
        result = sympy_tr8(expr_obj, first=first)
        return str(result)
    except Exception as e:
        return f"Error: {str(e)}"

Online Calculator

Expression with trig products to convert (expression string).
Use first-pass preference for conversion choices (true/false).