Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. def divisorGenerator(n):
  2. large_divisors = []
  3. for i in range(1, int(math.sqrt(n) + 1)):
  4. if n % i == 0:
  5. yield i
  6. if i*i != n:
  7. large_divisors.append(n / i)
  8. for divisor in reversed(large_divisors):
  9. yield divisor
  10.  
  11. def change_dataLength(vector):
  12. '''
  13. Function that removes last observations from input series, such that the data
  14. can be split in more than 2 ranges.
  15. '''
  16. found = False
  17. n= len(vector)
  18. while found==False:
  19. full_divisors = list(divisorGenerator(n))
  20. if len(full_divisors) <= 3:
  21. n -= 1
  22. else:
  23. found=True
  24. new_vector = vector[0:n]
  25. full_divisors=full_divisors[:-1] #last divisor is the length of the series, not useful for ranges
  26. return new_vector, full_divisors
  27.  
  28. def RS_function(input_series):
  29. incs = input_series
  30. mean_inc = np.sum(incs) / len(incs)
  31. deviations = incs - mean_inc
  32. Z = np.cumsum(deviations)
  33. R = max(Z) - min(Z)
  34. S = np.std(incs, ddof=1)
  35. return R/S
  36.  
  37. def calc_Hurst(original_series):
  38. input_series, splits = change_dataLength(original_series)
  39. window_sizes = len(input_series)/np.asarray(splits)
  40. window_sizes = window_sizes.astype(int)
  41. if np.sum(window_sizes < 4)>0:
  42. window_sizes = window_sizes[window_sizes >= 4]
  43.  
  44.  
  45. err = np.geterr()
  46. np.seterr(all='raise')
  47.  
  48. R_S = []
  49. for w in window_sizes:
  50. rs = []
  51. for start in range(0, len(input_series), w):
  52. if (start+w)>len(input_series):
  53. break
  54. temp_rs = RS_function(input_series[start:start+w])
  55. if temp_rs != 0:
  56. rs.append(temp_rs)
  57. R_S.append(np.mean(rs))
  58.  
  59. A = np.vstack([np.log10(window_sizes), np.ones(len(R_S))]).T
  60. H, c = np.linalg.lstsq(A, np.log10(R_S), rcond=-1)[0]
  61. np.seterr(**err)
  62.  
  63. c = 10**c
  64. return H, c, [window_sizes, R_S]
  65.  
  66. start= 0
  67. finish = 144000
  68. delta = 0.25
  69.  
  70.  
  71. times = np.arange(start,finish, delta)
  72. B = np.zeros(len(times))
  73. for i in range(len(times)):
  74. if i == 0:
  75. B[i] = 0
  76. else:
  77. u = np.random.normal(0,1)
  78. v = u * np.sqrt(times[i] - times[i-1])
  79. B[i]= B[i-1]+ v
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement