Guest User

Untitled

a guest
Jan 23rd, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.99 KB | None | 0 0
  1. import numpy as np
  2. from utils import qr_pos
  3.  
  4. def is_diagonal(A):
  5. return np.count_nonzero(A - np.diag(np.diagonal(A))) == 0
  6.  
  7. def test_eig(n=30, tol=0.00001):
  8. M = np.random.rand(N, N) # Random matrix
  9. M = 2*M - 1 # Entries from -1 to 1
  10. Q, R = qr_pos(M) # QR dec. so that diag(R) is positive
  11. if is_diagonal(R):
  12. print 'R is diagonal!'
  13. RTR = np.transpose(R) * R
  14. sinvals = np.sqrt(np.linalg.eigvals(RTR))
  15. diff = np.linalg.norm(sinvals - np.diag(R))
  16.  
  17. # print 'Singular values:', sinvals
  18. # print 'Diagonal of R:', np.diag(R)
  19. # print 'Difference:', diff
  20. return diff < tol, M
  21.  
  22. success = True
  23. N = 300
  24. for i in range(N):
  25. equal, M = test_eig()
  26. print 'i',
  27. if not equal:
  28. print
  29. print 'Case found where the hypothesis does not hold:', M
  30. success = False
  31. break
  32. if success:
  33. print
  34. print 'Hypothesis holds for', N, 'random test cases.'
  35.  
  36. i i i i ... i i i
  37. Hypothesis holds for 300 random test cases.
Add Comment
Please, Sign In to add comment