In [31]:
import sympy as sp
A = []
for deriv in ['x', 'y', 'z']:
A.append([])
for field in ['x', 'y', 'z']:
A[-1].append(sp.Symbol('A' + deriv + field))
A = sp.Matrix(A)
A2 = A**2
A3 = A**3
Q = -sp.horner(sp.simplify(sum(A2[i, i] for i in range(3))/2))
R = -sp.horner(sp.simplify(sum(A3[i, i] for i in range(3))/3))
print(Q)
print(R)
S = (A + A.T)/2
S2 = S**2
trS2 = sp.horner(sp.simplify(sum(S2[i, i] for i in range(3))))
print(trS2)
In [15]:
def alt_measure(expr):
POW = sp.Symbol('POW')
count = sp.count_ops(expr, visual=True).subs(POW, 10)
count = count.replace(sp.Symbol, type(sp.S.One))
return count
Qalt = sp.simplify(Q, measure = alt_measure)
print(Qalt)
print(sp.count_ops(Qalt, visual=True))
Ralt = sp.simplify(R, measure = alt_measure)
print(Ralt)
print(sp.count_ops(Ralt, visual=True))
In [23]:
Qalt = - sum(A[i, (i+1)%3] * A[(i+1)%3, i] for i in range(3)) - sum(A[i, i]**2 for i in range(3))/2
print Qalt
print(sp.simplify(Qalt - Q))
In [24]:
Ralt = - (sum(A[i, i]*(A[i, i]**2/3 + sum(A[i, (i+j)%3]*A[(i+j)%3, i]
for j in range(1, 3)))
for i in range(3)) +
A[0, 1]*A[1, 2]*A[2, 0] + A[0, 2]*A[1, 0]*A[2, 1])
print Ralt
print(sp.count_ops(Ralt, visual=True))
print(sp.simplify(Ralt - R))
In [37]:
AxxAxx = A[0, 0]**2
AyyAyy = A[1, 1]**2
AzzAzz = A[2, 2]**2
AxyAyx = A[0, 1]*A[1, 0]
AyzAzy = A[1, 2]*A[2, 1]
AzxAxz = A[2, 0]*A[0, 2]
Qalt = - (AxxAxx + AyyAyy + AzzAzz)/2 - AxyAyx -AyzAzy - AzxAxz
print(sp.simplify(Qalt - Q))
Ralt = - (A[0, 0]*(AxxAxx/3 + AxyAyx + AzxAxz) +
A[1, 1]*(AyyAyy/3 + AxyAyx + AyzAzy) +
A[2, 2]*(AzzAzz/3 + AzxAxz + AyzAzy) +
A[0, 1]*A[1, 2]*A[2, 0] +
A[0, 2]*A[1, 0]*A[2, 1])
print sp.simplify(Ralt - R)
#print sp.simplify(Ralt + A.det())
trS2alt = (AxxAxx + AyyAyy + AzzAzz +
((A[0, 1] + A[1, 0])**2 +
(A[1, 2] + A[2, 1])**2 +
(A[2, 0] + A[0, 2])**2)/2)
print sp.simplify(trS2alt - trS2)
print Ralt
print A.det()
In [ ]: