Guest User

Untitled

a guest
Dec 15th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.86 KB | None | 0 0
  1. import random
  2. import math
  3.  
  4.  
  5. def f(x):
  6. return math.sin(x) + 0.5
  7.  
  8.  
  9. def generate_alpha(r, M):
  10. alpha_M_1 = random.uniform(0, 1)
  11. alpha = list()
  12. alpha.append(alpha_M_1)
  13. r_range = int((r - 1) / 2)
  14. for _ in range(r_range):
  15. el = 0.5 * random.uniform(0, 1 - sum(i for i in alpha))
  16. alpha.append(el)
  17. alpha.insert(0, el)
  18. return alpha
  19.  
  20.  
  21. def Chebyshev_dis_f_for_w(f_filter):
  22. m_max = 0
  23. for index in range(1, len(f_filter), 1):
  24. el = abs(f_filter[index] - f_filter[index - 1])
  25. m_max = max(el, m_max)
  26. return m_max
  27.  
  28.  
  29. def Chebyshev_dis_f_for_d(f_filter, f_noize):
  30. f_noize = f_noize[1:-1:1]
  31. m_max = 0
  32. for index in range(0, len(f_filter), 1):
  33. el = abs(f_filter[index] - f_noize[index])
  34. m_max = max(el, m_max)
  35. return m_max
  36.  
  37.  
  38. def Chebyshev_dis_w_d(w, d):
  39. return max(w, d)
  40.  
  41.  
  42. def fun_J(h, w, d):
  43. return h * w + (1 - h) * d
  44.  
  45.  
  46. def f_noize(a, K):
  47. x_min = 0
  48. x_max = math.pi
  49. f_list = list()
  50. for k in K:
  51. x_k = x_min + k * (x_max - x_min) / (len(K) - 1)
  52. el = f(x_k) + random.uniform(-a, a)
  53. f_list.append(el)
  54. # print('(', x_k, ";", el, ')')
  55. return f_list
  56.  
  57.  
  58. def f_filter(f_noiz, alpha, K, M):
  59. f_list = list()
  60. for k in K:
  61. if k < M + 1:
  62. continue
  63. j_start = k - M
  64. j_end = k + M + 1
  65. s = 0
  66. x_k = x_min + k * (x_max - x_min) / (len(K) - 1)
  67. for j in range(j_start, j_end, 1):
  68. f_n_el = f_noiz[j - 1]
  69. alpha_el = alpha[j + M + 1 - k - 1]
  70. el = (f_n_el ** 2 * alpha_el) ** 0.5
  71. s += el
  72. # print('(', x_k, ";", s, ')')
  73. f_list.append(el)
  74. return f_list
  75.  
  76.  
  77. r = 3 # r = 5
  78. M = int((r - 1) / 2)
  79. x_min = 0
  80. x_max = math.pi
  81. K = [i for i in range(101)]
  82. a = 0.5 / 2
  83. H = [i / 10 for i in range(11)]
  84. P = 0.95
  85. e = 0.01
  86. N = math.log(1 - P, math.e) / math.log(1 - (e / (x_max - x_min)), math.e)
  87. N = math.ceil(N)
  88.  
  89. # aa = generate_alpha(r, M)
  90. # f_n = f_noize(a, K)
  91. # f_f = f_filter(f_n, aa, K, M)
  92. # new_f_n = f_n[1:-1:1]
  93. # print(len(new_f_n), len(f_f))
  94.  
  95. dict_h = {}
  96. for h in H:
  97. min_J = 100
  98. min_alpha = [0, 0, 0]
  99. min_w = 0
  100. min_d = 0
  101. min_f_f = None
  102. min_f_n = None
  103. for _ in range(N):
  104. alpha = generate_alpha(r, M)
  105. f_n = f_noize(a, K)
  106. f_f = f_filter(f_n, alpha, K, M)
  107. w = Chebyshev_dis_f_for_w(f_f)
  108. d = Chebyshev_dis_f_for_d(f_f, f_n)
  109. J = fun_J(h, w, d)
  110. if J < min_J:
  111. min_alpha = alpha
  112. min_J = J
  113. min_w = w
  114. min_d = d
  115. min_f_f = f_f
  116. min_f_n = f_n
  117. dict_h.update({h: [min_J, min_alpha, min_w, min_d, min_f_f, min_f_n]})
  118.  
  119. need_h = -1
  120.  
  121. min_dis = 100
  122. for h, l in dict_h.items():
  123. dis = Chebyshev_dis_w_d(l[2], l[3])
  124. if dis > min_dis:
  125. break
  126. if dis < min_dis:
  127. min_dis = dis
  128. need_h = h
  129.  
  130. print(need_h, dict_h[need_h])
Add Comment
Please, Sign In to add comment