Advertisement
Guest User

Untitled

a guest
Jul 19th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.67 KB | None | 0 0
  1. from __future__ import division, with_statement
  2. import math, copy, csv
  3. from OD_LIB import *
  4. from OD3 import *
  5. from OD2 import *
  6. from Cramer import *
  7.  
  8. def RRdot(dat, sun, tiny):
  9. k = 0.017202098947
  10. c = 2.99792458*10**8
  11. rtemp = [10**12,10**12, 10**12]
  12. T1 = k*(dat[0][0]-dat[1][0])
  13. T3 = k*(dat[2][0]-dat[1][0])
  14. T0 = T3-T1
  15. D0 = tripleProduct(dat[0][1], dat[1][1], dat[2][1])
  16. if D0 == 0:
  17. raise Exception("reeeee")
  18. D1 = [tripleProduct(dat[2][1],r[1],dat[1][1]) for r in sun]
  19. D2 = [tripleProduct(dat[2][1],dat[0][1],r[1]) for r in sun]
  20. D3 = [tripleProduct(dat[0][1],dat[1][1],r[1]) for r in sun]
  21.  
  22. D=[D1, D2, D3]
  23. A1 = T3/T0
  24. A3 = -T1/T0
  25. A2 = -1
  26. A = [A1, A2, A3]
  27. rho = [(A[0]*D[i][0]+A[1]*D[i][1]+A[2]*D[i][2])/(A[i]*D0) for i in range(len(D))]
  28. r = [[i*f-d for f, d in zip(j[1],k[1])] for i, j, k in zip(rho, dat, sun)]
  29. rold = copy.deepcopy(r[1])
  30. rdotold = ([(a-b)/T0 for a, b in zip(r[2],r[0])])
  31. itermax = 100000
  32. counter = 0
  33. # print rold, rdotold
  34. # for l in range(1000):
  35. while sum([(x-y)**2 for x, y in zip(rold, rtemp)])>tiny:
  36. if counter>itermax:
  37. raise RuntimeError("Too many iterations.")
  38. k=0.017202098947
  39.  
  40. t1 = k*((dat[0][0]-rho[0]/c)-(dat[1][0]-rho[1]/c))
  41. t3 = k*((dat[2][0]-rho[2]/c)-(dat[1][0]-rho[1]/c))
  42. t0 = t3-t1
  43. f = []
  44. g = []
  45. for s in [t1, t3]:
  46. f.append(1-(s)**2/(2*(mag(rold)**3))+dot(rold, rdotold)*(s)**3/(2*mag(rold)**5)+((s)**4/(24*mag(rold)**3))*(3*(dot(rdotold, rdotold)/mag(rold)**2-(1/mag(rold)**3))-15*(dot(rold, rdotold)/mag(rold)**2)**2+1/mag(rold)**3))
  47. g.append((s)-(s)**3/(6*mag(rold)**3)+dot(rold, rdotold)*(s)**4/(4*mag(rold)**5))
  48. # print f, g
  49. a1 = g[1]/(f[0]*g[1]-g[0]*f[1])
  50. a3 = g[0]/(f[1]*g[0]-g[1]*f[0])
  51. A = [a1, -1, a3]
  52. b1 = f[1]/(f[1]*g[0]-g[1]*f[0])
  53. b3 = f[0]/(f[0]*g[1]-g[0]*f[1])
  54. B = [b1, -1, b3]
  55. rho = [(A[0]*D[i][0]+A[1]*D[i][1]+A[2]*D[i][2])/(A[i]*D0) for i in range(len(D))]
  56. r = [[i*f-d for f, d in zip(j[1],k[1])] for i, j, k in zip(rho, dat, sun)]
  57. # rold = [a*A[0] + b*A[2] for a, b in zip(r[0], r[2])] #Shaheen method
  58. rtemp = rold
  59. rold = r[1] #Flynn method
  60. rdotold = [a*B[0] + b*B[2] for a, b in zip(r[0], r[2])]
  61. counter += 1
  62. # print "dasfads,", rold, rdotold
  63. # break
  64. return rold, rdotold
  65.  
  66.  
  67.  
  68.  
  69. if __name__ == "__main__":
  70. data = []
  71. with open("testdate.csv","rb") as fil:
  72. read = csv.reader(fil)
  73. for l in read:
  74. data.append([float(l[0]),[float(l[2]),float(l[3]),float(l[4])]])
  75. for i in data:
  76. i[1] = normalize(i[1])
  77.  
  78. suns = []
  79. with open("sun.csv","rb") as fil:
  80. read = csv.reader(fil)
  81. for l in read:
  82. suns.append([float(l[0]),[float(l[2]),float(l[3]),float(l[4])]])
  83.  
  84. suna = []
  85. with open("sunast.csv","rb") as fil:
  86. read = csv.reader(fil)
  87. for l in read:
  88. suna.append([float(l[0]),[float(l[2]),float(l[3]),float(l[4])]])
  89.  
  90. answers = RRdot(data, suns, 0.00000000000000000000000000001)
  91. print answers
  92. print [(i-j)/(j) for i, j in zip(answers[0], suna[1][1])]
  93.  
  94. ### 1000 iterations
  95. # shaheen [-1.7999830616466656e-07, -2.0041305492683978e-07, 2.0346651712492786e-06]
  96. #dumbass [-1.7999829075524797e-07, -2.0041303449284424e-07, 2.0346649638512806e-06]
  97.  
  98. ##10 iterations
  99. # dumb = [0.0011511359310530176, 0.001333089510249852, -0.013556117030343401]
  100. # shaheen = [0.0011511359310401766, 0.00133308951023212, -0.013556117030162917]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement