Guest User

Untitled

a guest
Dec 14th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. from symengine import *
  2.  
  3. X = Matrix(var("X1:10")).reshape(3, 3)
  4. A = Matrix(var("A1:10")).reshape(3, 3)
  5. B = Matrix(var("B1:10")).reshape(3, 3)
  6. C = Matrix(var("C1:10")).reshape(3, 3)
  7. D = Matrix(var("D1:10")).reshape(3, 3)
  8.  
  9. a = Matrix(var("a1:4")).reshape(3, 1)
  10. b = Matrix(var("b1:4")).reshape(3, 1)
  11. c = Matrix(var("c1:4")).reshape(3, 1)
  12.  
  13. def Trace(x):
  14. return x[0,0] + x[1,1] + x[2,2]
  15.  
  16. def Inverse(x):
  17. return Matrix([[(X[1, 1]*X[2, 2] - X[1, 2]*X[2, 1])/(X[0, 0]*X[1, 1]*X[2, 2] - X[0, 0]*X[1, 2]*X[2, 1] - X[0, 1]*X[1, 0]*X[2, 2] + X[0, 1]*X[1, 2]*X[2, 0] + X[0, 2]*X[1, 0]*X[2, 1] - X[0, 2]*X[1, 1]*X[2, 0]), (-X[0, 1]*X[2, 2] + X[0, 2]*X[2, 1])/(X[0, 0]*X[1, 1]*X[2, 2] - X[0, 0]*X[1, 2]*X[2, 1] - X[0, 1]*X[1, 0]*X[2, 2] + X[0, 1]*X[1, 2]*X[2, 0] + X[0, 2]*X[1, 0]*X[2, 1] - X[0, 2]*X[1, 1]*X[2, 0]), (X[0, 1]*X[1, 2] - X[0, 2]*X[1, 1])/(X[0, 0]*X[1, 1]*X[2, 2] - X[0, 0]*X[1, 2]*X[2, 1] - X[0, 1]*X[1, 0]*X[2, 2] + X[0, 1]*X[1, 2]*X[2, 0] + X[0, 2]*X[1, 0]*X[2, 1] - X[0, 2]*X[1, 1]*X[2, 0])], [(-X[1, 0]*X[2, 2] + X[1, 2]*X[2, 0])/(X[0, 0]*X[1, 1]*X[2, 2] - X[0, 0]*X[1, 2]*X[2, 1] - X[0, 1]*X[1, 0]*X[2, 2] + X[0, 1]*X[1, 2]*X[2, 0] + X[0, 2]*X[1, 0]*X[2, 1] - X[0, 2]*X[1, 1]*X[2, 0]), (X[0, 0]*X[2, 2] - X[0, 2]*X[2, 0])*X[0, 0]/((X[0, 0]*X[1, 1] - X[0, 1]*X[1, 0])*(X[0, 0]*X[2, 2] - X[0, 2]*X[2, 0]) - (X[0, 0]*X[1, 2] - X[0, 2]*X[1, 0])*(X[0, 0]*X[2, 1] - X[0, 1]*X[2, 0])), -(X[0, 0]*X[1, 2] - X[0, 2]*X[1, 0])*X[0, 0]/((X[0, 0]*X[1, 1] - X[0, 1]*X[1, 0])*(X[0, 0]*X[2, 2] - X[0, 2]*X[2, 0]) - (X[0, 0]*X[1, 2] - X[0, 2]*X[1, 0])*(X[0, 0]*X[2, 1] - X[0, 1]*X[2, 0]))], [(X[1, 0]*X[2, 1] - X[1, 1]*X[2, 0])/(X[0, 0]*X[1, 1]*X[2, 2] - X[0, 0]*X[1, 2]*X[2, 1] - X[0, 1]*X[1, 0]*X[2, 2] + X[0, 1]*X[1, 2]*X[2, 0] + X[0, 2]*X[1, 0]*X[2, 1] - X[0, 2]*X[1, 1]*X[2, 0]), -(X[0, 0]*X[2, 1] - X[0, 1]*X[2, 0])*X[0, 0]/((X[0, 0]*X[1, 1] - X[0, 1]*X[1, 0])*(X[0, 0]*X[2, 2] - X[0, 2]*X[2, 0]) - (X[0, 0]*X[1, 2] - X[0, 2]*X[1, 0])*(X[0, 0]*X[2, 1] - X[0, 1]*X[2, 0])), (X[0, 0]*X[1, 1] - X[0, 1]*X[1, 0])*X[0, 0]/((X[0, 0]*X[1, 1] - X[0, 1]*X[1, 0])*(X[0, 0]*X[2, 2] - X[0, 2]*X[2, 0]) - (X[0, 0]*X[1, 2] - X[0, 2]*X[1, 0])*(X[0, 0]*X[2, 1] - X[0, 1]*X[2, 0]))]])
  18.  
  19. expr = Trace(Inverse(X.T*C*X)*A)
  20. part1 = -(C*X*Inverse(X.T*C*X))
  21. part2 = Inverse(X.T*C*X)
  22.  
  23. result = part1*A*part2 + part1*A.T*part2
  24. assert expr.diff(X) == part1*A*part2 + part1*A.T*part2
  25.  
  26. def verify_result(expr, result):
  27. for i in range(3):
  28. for j in range(3):
  29. v = X[i, j]
  30. assert expr.diff(v) == result[i, j]
Add Comment
Please, Sign In to add comment