Ошибка в упрощении SymPy с помощью тригометрической идентификации

#python #sympy

#python #sympy

Вопрос:

Прошу прощения, если я упускаю что-то фундаментальное. Я новичок SymPy . Проблема возникает с тригонометрическим идентификатором

 $$sin^3xcos^3 x = frac{3sin 2 x-sin 6x}{32}$$
  

С помощью Mathematica Simplify

 Simplify[Sin[x]^3 Cos[x]^3 == (3 Sin[2 x] - Sin[6 x])/32]  (*returns True*)
  

С помощью SymPy

 import sympy as sy
sy.simplify(sy.sin(x)**3*sy.cos(x)**3 == (3*sy.sin(2*x) - sy.sin(6*x))/32)  # returns False
  

Ответ №1:

Попробуйте использовать sympy.Eq вместо == :

 sy.Eq(sy.sin(x)**3*sy.cos(x)**3, (3*sy.sin(2*x) - sy.sin(6*x))/32)
  

== будет сравнивать два символьных представления для равенства на месте, в то время sympy.Eq как представляет собой уравнение.

 In [19]: sy.simplify(sy.Eq(sy.sin(x)**3*sy.cos(x)**3, (3*sy.sin(2*x) - sy.sin(6*x))/
    ...: 32))                                                                       
Out[19]: True
  

Ответ №2:

Я обнаружил, что следующий подход также работает:

 sy.simplify(sy.expand(exp2,trig=True))==exp1  #returns True
  

Спасибо @ForceBru за указание на то, что оператор == сравнивает два выражения для точного структурного равенства, а не алгебраической эквивалентности. Я узнал, что следует упростить или расширить выражения, прежде чем сравнивать их с == .