Advertisement
osipyonok

TPR lab1

Oct 12th, 2017
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.31 KB | None | 0 0
  1. import numpy as np
  2.  
  3. def norm(mat):
  4.     total = [0, 0]
  5.     res = mat
  6.     for i in range(0, 2):
  7.         for j in range(0, 2):
  8.             total[j] = total[j] + mat[i][j]
  9.     for i in range(0, 2):
  10.         for j in range(0, 2):
  11.             res[i][j] = res[i][j] / total[j]
  12.     return res
  13.  
  14.  
  15. def get_w(mat):
  16.     w = [0, 0]
  17.     for i in range(0, 2):
  18.         for j in range(0, 2):
  19.             w[i] = w[i] + mat[i][j]
  20.         w[i] = w[i] / 2
  21.     return w
  22.  
  23.  
  24. def out_mat(suf, mat):
  25.     print('A_' + suf)
  26.     print(np.matrix(mat))
  27.     print('А_' + suf + ' нормована')
  28.     print(np.matrix(norm(mat)))
  29.     print('W_' + suf)
  30.     print(get_w(norm(mat)))
  31.  
  32.  
  33. def find_intersection(p, q, f_p, f_q, m_p, m_q):
  34.     f_in_p = f_p * p + f_q * q
  35.     m_in_p = m_p * p + m_q * q
  36.     return f_in_p - m_in_p > 0
  37.  
  38. A_p = [[1, 1], [1, 1]]
  39. A_v = [[1, 2], [1/2, 1]]
  40.  
  41. A_rb = [[1, 1/2], [2, 1]]
  42. A_rp = [[1, 1/3], [3, 1]]
  43. A_vb = [[1, 1/3], [3, 1]]
  44. A_vp = [[1, 2], [1/2, 1]]
  45.  
  46. A = {'р': A_p, 'в': A_v, 'рб': A_rb, 'рп': A_rp, 'вб': A_vb, 'вп': A_vp}
  47. W = dict()
  48.  
  49. for key in A.keys():
  50.     out_mat(key, A[key])
  51.     W[key] = get_w(norm(A[key]))
  52.     print()
  53.  
  54.  
  55. f_p = W['р'][0] * W['рб'][0] + W['р'][1] * W['рп'][0]
  56. f_q = W['в'][0] * W['вб'][0] + W['в'][1] * W['вп'][0]
  57.  
  58. m_p = W['р'][0] * W['рб'][1] + W['р'][1] * W['рп'][1]
  59. m_q = W['в'][0] * W['вб'][1] + W['в'][1] * W['вп'][1]
  60.  
  61. print('Ф(p, q) =', f_p, '* p +', f_q, '* q')
  62. print('М(p, q) =', m_p, '* p +', m_q, '* q')
  63. print()
  64.  
  65. l = -2
  66. r = 2
  67.  
  68. for _ in range(0, 50):
  69.     mid = (r + l) / 2
  70.     if find_intersection(mid, 1 - mid, f_p, f_q, m_p, m_q) == find_intersection(r, 1 - r, f_p, f_q, m_p, m_q):
  71.         r = mid
  72.     else:
  73.         l = mid
  74.  
  75. print('Прямi Ф(p, q) та М(p, q) перетинаються при p =', l, 'q =', 1 - l)
  76. if 0 <= l <= 1:
  77.     first = 'М'
  78.     second = 'Ф'
  79.     if find_intersection(0, l / 2, f_p, f_q, m_p, m_q):
  80.         first = 'Ф'
  81.         second = 'М'
  82.     print('На промiжку p:[ 0 ,', round(l, 4), '], q = 1 - p вибираємо', first, 'iнакше', second)
  83. else:
  84.     alt = 'М'
  85.     if find_intersection(0, 1, f_p, f_q, m_p, m_q):
  86.         alt = 'Ф'
  87.     print('Для будь-яких p та q , p + q = 1 та 0 <= p,q <= 1 вибираємо альтернативу ', alt)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement