Используя SymPy, я пытаюсь проверить, что дискриминант -ac + b^2 квадратичной формы ax^2+ bxy + cy^2 инвариантен относительно вращений. Для этого я написал следующий скрипт Python:
import sympy as sp
# Define the variables and parameters
x, y, theta = sp.symbols('x y theta', real=True)
a, b, c = sp.symbols('a b c', real=True)
# Original quadratic form
Q_original = a*x**2 + 2*b*x*y + c*y**2
# Rotation matrix
x_rot = x*sp.cos(theta) - y*sp.sin(theta)
y_rot = x*sp.sin(theta) + y*sp.cos(theta)
# Substitute the rotated coordinates into the original quadratic form
Q_rotated = Q_original.subs({x: x_rot, y: y_rot})
# Expand the rotated quadratic form
Q_rotated_expanded = sp.expand(Q_rotated)
# Collect terms to identify the new coefficients
Q_rotated_collected = sp.collect(Q_rotated_expanded, [x**2, x*y, y**2])
# Extract the new coefficients
a_rot = Q_rotated_collected.coeff(x**2, 1)
b_rot = Q_rotated_collected.coeff(x*y, 1) / 2 # because the form is 2*b*x*y
c_rot = Q_rotated_collected.coeff(y**2, 1)
# Compute the discriminant for the original and rotated forms
discriminant_original = b**2 - a*c
discriminant_rotated = b_rot**2 - a_rot*c_rot
print(f"discriminant_rotated: {discriminant_rotated}\n")
# trigsimp the rotated discriminant
discriminant_rotated_simplified = sp.trigsimp(discriminant_rotated)
print(f"discriminant_rotated_simplified: {discriminant_rotated_simplified}\n")
# Check if the discriminants are equal
are_equal = sp.trigsimp(discriminant_original - discriminant_rotated_simplified) == 0
print(f"are_equal: {are_equal}")
Переменная discriminant_rotated_simplified оценивается как
Используя SymPy, я пытаюсь проверить, что дискриминант -ac + b^2 квадратичной формы ax^2+ bxy + cy^2 инвариантен относительно вращений. Для этого я написал следующий скрипт Python: [code]import sympy as sp
# Define the variables and parameters x, y, theta = sp.symbols('x y theta', real=True) a, b, c = sp.symbols('a b c', real=True)
# Original quadratic form Q_original = a*x**2 + 2*b*x*y + c*y**2
# Substitute the rotated coordinates into the original quadratic form Q_rotated = Q_original.subs({x: x_rot, y: y_rot})
# Expand the rotated quadratic form Q_rotated_expanded = sp.expand(Q_rotated)
# Collect terms to identify the new coefficients Q_rotated_collected = sp.collect(Q_rotated_expanded, [x**2, x*y, y**2])
# Extract the new coefficients a_rot = Q_rotated_collected.coeff(x**2, 1) b_rot = Q_rotated_collected.coeff(x*y, 1) / 2 # because the form is 2*b*x*y c_rot = Q_rotated_collected.coeff(y**2, 1)
# Compute the discriminant for the original and rotated forms discriminant_original = b**2 - a*c discriminant_rotated = b_rot**2 - a_rot*c_rot print(f"discriminant_rotated: {discriminant_rotated}\n")
# trigsimp the rotated discriminant discriminant_rotated_simplified = sp.trigsimp(discriminant_rotated) print(f"discriminant_rotated_simplified: {discriminant_rotated_simplified}\n")
# Check if the discriminants are equal are_equal = sp.trigsimp(discriminant_original - discriminant_rotated_simplified) == 0 print(f"are_equal: {are_equal}") [/code] Переменная [b]discriminant_rotated_simplified[/b] оценивается как [code](-a*c + b**2)*cos(theta)**4 [/code] но должно получиться [code]-a*c + b**2. [/code] Что я делаю не так? Будем очень признательны за любую помощь! С уважением, Клаус