Тригонометрическая линеаризация SymPy TR8 не работает должным образом ⇐ Python

Программы на Python
Anonymous
Тригонометрическая линеаризация SymPy TR8 не работает должным образом

Сообщение Anonymous »

Я использую SymPy версии 1.13.3 для интеграции выражений, включающих тригонометрические функции. Моя цель — линеаризовать тригонометрические произведения с помощью функции TR8 из Sympy.simplify.fu. Однако результаты с линеаризацией и без нее должны быть идентичными, но это не так.
Вот упрощенная версия моего кода:

Код: Выделить всё

import sympy as sp
import numpy as np
import matplotlib.pyplot as plt
from sympy.simplify.fu import TR8 as linearize_trigo_expr
from sympy import cos, sin

# Definitions
JMax = 3
nb_vals_t = 100
t_vals = np.linspace(0, 0.2, nb_vals_t)
s, t = sp.symbols('s t')
u = -12.33203125*sin(t) + 5.6064453125*sin(4*t) - 2.2708740234375*sin(9*t) + sin(12*t) - 0.103253126144409*sin(16*t) - 1.39863395690918*cos(t) + 1.81103515625*cos(4*t) - 0.4464111328125*cos(9*t) + 0.0336227416992188*cos(16*t)
integrand = u * (u.subs(t, s) * sum(sp.sin(j**2 * (t - s)) / j**4 for j in range(1, JMax + 1)))

# Without trigonometric linearization
integral = sp.integrate(integrand, (s, 0, t))
integral_values = []
for t_val in t_vals:
integral_values.append(integral.subs(t, t_val))

plt.plot(t_vals, integral_values)
plt.xlabel('t')
plt.ylabel('Integral')
plt.title("Test without trigonometric linearization")
plt.grid(True)
plt.show()

# With trigonometric linearization
integrand_simple = linearize_trigo_expr(integrand)
integral_simple = sp.integrate(integrand_simple, (s, 0, t))

integral_simple_values = []
for t_val in t_vals:
integral_simple_values.append(integral_simple.subs(t, t_val))

plt.plot(t_vals, integral_simple_values)
plt.xlabel('t')
plt.ylabel('Integral')
plt.title("Test with trigonometric linearization")
plt.grid(True)
plt.show()
Оба графика должны быть идентичны, но они различаются. Кто-нибудь знает, почему тригонометрическая линеаризация не работает должным образом, и есть ли решение, как заставить ее работать правильно?
Заранее спасибо!
Примечание: возможно, это не MWE, но я попытался найти простой пример, показывающий ошибки, которые допускает функция TR8.
Вот графики:
Изображение

Изображение


Подробнее здесь: https://stackoverflow.com/questions/790 ... s-expected

Вернуться в «Python»