Advertisement
paster442

prak

Dec 6th, 2024
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 13.14 KB | None | 0 0
  1. import math
  2.  
  3.  
  4. g = 9.81
  5.  
  6. def average(a): # выборочное среднее значение
  7.     return sum(a) / len(a)
  8.  
  9.  
  10. def standard_deviation(a): # выборочное стандартное отклонение среднего арифметического
  11.     n = len(a)
  12.     av = sum(a) / n
  13.     s = 0
  14.  
  15.     for i in range(n):
  16.         s += (a[i] - av)**2
  17.    
  18.     return math.sqrt(s / (n * (n - 1)))
  19.  
  20.  
  21. def standard_deviation2(a): # не знаю
  22.     n = len(a)
  23.     av = sum(a) / n
  24.     s = 0
  25.  
  26.     for i in range(n):
  27.         s += (a[i] - av)**2
  28.    
  29.     return math.sqrt(s / (n - 1))
  30.  
  31.  
  32. def relative_error(exp, teor): # в процентах
  33.     return 100 * (abs(teor - exp) / teor)
  34.  
  35. d1 = {"0.199307" : 0.297941,
  36.      "0.181059" : 0.280880,
  37.      "0.156232" : 0.265667,
  38.      "0.164659" : 0.252017,
  39.      "0.155193" : 0.239701}
  40.  
  41. d = {"0.154769" : 0.239701,
  42.      "0.528000" : 0.719104,
  43.      "0.787079" : 1.198507,
  44.      "0.937859" : 1.677910,
  45.      "1.114233" : 2.157312}
  46.  
  47. #a1 = [2.539, 2.458, 2.485]
  48. #a1 = [4.646, 4.700, 4.673]
  49. #a1 = [4.322, 4.376, 4.349]
  50. #a1 = [4.049, 4.065, 4.057]
  51. #a1 = [3.825, 3.817, 3.833]
  52. #a1 = [3.541, 3.552, 3.559]
  53.  
  54.  
  55.  
  56. '''
  57.        [2.550, 2.545, 2.541],
  58.    [2.544, 2.542, 2.539],
  59.    [2.549, 2.544, 2.545],
  60.    [2.544, 2.548, 2.545],
  61.    [2.543, 2.551, 2.547],
  62.    '''
  63.  
  64. '''
  65. h = [
  66.    [5.966, 5.871, 5.162],
  67.    [5.133, 5.203, 5.151],
  68.    [4.273, 4.300, 4.334],
  69.    [3.735, 3.796, 3.790],
  70.    [3.523, 3.309, 3.293],
  71.  
  72.    [6.566, 6.322, 6.394],
  73.    [9.918, 9.992, 9.518],
  74.    [7.629, 8.015, 8.111],
  75.    [13.030, 12.397, 13.141],
  76.  
  77.    [6.245, 6.382, 5.998],
  78.    [5.995, 6.133, 6.019],
  79.    [6.433, 6.321, 6.262],
  80.    [6.698, 6.682, 6.688],
  81.    ]
  82. '''
  83.  
  84.  
  85.  
  86. #f = [[4.04, 3.84, 3.77], [3.73, 3.69, 3.71], [3.77, 3.75, 3.75], [3.77, 3.76, 3.77], [3.71, 3.72, 3.75], [3.76, 3.77, 3.76]]
  87.  
  88. #h = [2.550, 2.545, 2.541, 2.544, 2.542, 2.539, 2.549, 2.544, 2.545, 2.544, 2.548, 2.545, 2.543, 2.551, 2.547]
  89.  
  90. #print(average(h))
  91. '''
  92. times = [
  93.    [6.245, 6.382, 5.998],
  94.    [5.995, 6.133, 6.019],
  95.    [6.433, 6.321, 6.262],
  96.    [6.698, 6.682, 6.688]
  97.    ]
  98.  
  99. for i in range(len(times)):
  100.    for j in range(len(times[0])):
  101.        times[i][j] *= times[i][j]
  102.  
  103. for time in times:
  104.    print(f"{average(time)} ± {standard_deviation(time)}")
  105.  
  106. '''
  107. '''times = [
  108.    [5.682, 5.642, 5.643],
  109.    [7.343, 7.315, 7.311],
  110.    [9.500, 9.507, 9.458],
  111.    [11.905, 11.772, 11.893],
  112.    [14.422, 14.358, 14.381],
  113.  
  114.    [5.738, 5.733, 5.746],
  115.    [5.772, 5.777, 5.774],
  116.    [6.347, 6.346, 6.346],
  117.    [7.302, 7.315, 7.314]
  118. ]'''
  119. '''
  120. times = [
  121.  
  122.    [15.0, 15.5, 15.0, 15.0, 15.5],
  123.    [20.5, 20.0, 20.0, 20.5, 20.0],
  124.    [25.0, 25.0, 25.0, 25.5, 25.0],
  125.    [30.0, 30.5, 30.5, 30.0, 30.0]
  126. ]'''
  127. '''
  128. a_s = [[5.417582, 5.458621, 5.460714],
  129.       [5.556485, 5.631667, 5.637500],
  130.       [24.18, 24.32, 24.20],
  131.       [13.79, 13.78, 13.64],
  132.       [2.4446, 1.9711, 1.91356],
  133.       [9.898976, 9.801047, 9.832461],
  134.       [12.939394, 12.953020, 12.881119]]
  135.  
  136. for a in a_s:
  137.    print(f"{average(a)} ± {standard_deviation(a)}")
  138. '''
  139. '''
  140. times = [
  141.    [17.196, 17.102, 17.112],
  142.    [18.150, 18.260, 18.241],
  143.    [19.693, 19.704, 19.670],
  144.    [21.564, 21.489, 21.475],
  145.    [23.792, 23.897, 23.728],
  146.    [25.568, 25.536, 25.503],
  147.    [27.768, 27.780, 27.720],
  148.    [29.721, 29.716, 29.684],
  149.    [31.848, 31.845, 31.855],
  150.  
  151.    [26.141, 26.237, 26.136],
  152.    [21.299, 21.292, 21.234],
  153.    [21.762, 21.912, 21.811]
  154. ]
  155. '''
  156. '''
  157. times = [
  158.    [123.5, 124.7, 125.1],
  159.    [5.0, 5.0, 5.0],
  160.    [158.02, 158.03, 158.03],
  161.  
  162.    [0.596, 0.587, 0.593],
  163.    [0.397, 0.389, 0.394],
  164.    [0.294, 0.290, 0.291],
  165.    [0.250, 0.254, 0.254],
  166.    [0.221, 0.222, 0.221],
  167.  
  168.    [0.422, 0.422, 0.420],
  169.    [0.277, 0.276, 0.277],
  170.    [0.213, 0.212, 0.213],
  171.    [0.183, 0.182, 0.183],
  172.    [0.168, 0.167, 0.167],
  173.  
  174.    [0.341, 0.343, 0.344],
  175.    [0.225, 0.225, 0.224],
  176.    [0.176, 0.176, 0.176],
  177.    [0.151, 0.151, 0.150],
  178.    [0.135, 0.135, 0.135],
  179.  
  180.    [0.408, 0.412, 0.418],
  181.    [0.273, 0.277, 0.273],
  182.    [0.212, 0.211, 0.211],
  183.    [0.181, 0.180, 0.180],
  184.    [0.160, 0.158, 0.160],
  185.  
  186.    [0.421, 0.425, 0.422],
  187.    [0.278, 0.280, 0.278],
  188.    [0.213, 0.214, 0.214],
  189.    [0.182, 0.183, 0.182],
  190.    [0.162, 0.162, 0.161]
  191. ]'''
  192.  
  193. times = [
  194.     #[36.571/25, 44.018/30, 29.420/20],
  195.     #[36.972/25, 44.092/30, 29.420/20],
  196.     #[36.719/25, 43.797/30, 29.721/20],
  197.     #[36.498/25, 43.797/30, 29.235/20]
  198.  
  199.     #[25.622/20, 31.889/25, 38.341/30],
  200.     #[25.806/20, 32.074/25, 38.433/30]
  201.  
  202.     [8.793, 9.217, 8.848],
  203.     [8.903, 9.309, 8.774]
  204. ]
  205.  
  206. for time in times:
  207.     print(f"{average(time)} ± {standard_deviation(time)}")
  208.  
  209. for time in times:
  210.     for a in time:
  211.         print(round(a, 3))
  212.     '''
  213.  
  214.  
  215. times = [
  216.    [11.25, 11.34, 11.35],
  217.    [11.75, 11.66, 11.81],
  218.    [12.13, 12.19, 12.16],
  219.    [12.50, 12.53, 12.44],
  220.    [12.78, 12.84, 12.94],
  221.    [13.16, 13.25, 13.25],
  222.    [13.63, 13.60, 13.59],
  223.    [13.90, 14.00, 14.04],
  224.    [14.25, 14.19, 14.16],
  225.    [14.59, 14.56, 14.50],
  226. ]
  227.  
  228.  
  229. for time in times:
  230.    
  231.    #print(f"{(average(time) / 10)**2} ± {((2 * (average(time) / 10)) * ((math.sqrt((standard_deviation(time))**2 + (average(time) * 0.1 * 0.01)**2)) / 10))}")
  232.    #print(f"{average(time)} ± {math.sqrt((standard_deviation(time))**2 + (average(time) * 0.1 * 0.01)**2)}")
  233.    print(f"{average(time)} ± {standard_deviation(time)}")'''
  234.  
  235. #for key in d.keys():
  236. #    print(relative_error(float(key), d[key]))
  237.  
  238.  
  239. #print(standard_deviation2(
  240. #    [1.90, 1.91, 1.90, 1.91, 1.92, 1.88, 1.87, 1.88, 1.88]
  241. #    ))
  242.  
  243. #N = 5
  244.  
  245. #for N in range(4, 9 + 1):
  246. #    print((g * N * 1.89) / (60.34 + N * 1.89))
  247. #arasch = (g * N * 1.89) / (60.34 + N * 1.89)
  248. #print(arasch)
  249.  
  250. '''
  251. [1.90, 1.91, 1.90, 1.91, 1.92, 1.88, 1.87, 1.88, 1.88] # массы грузов
  252.  
  253. [0.202568, .203348, .202948]
  254. [.370912, .441602, .422424]
  255. [0.570058, .659372, .615812]
  256. [.761000, .791408, .763414]
  257. [.814328, .917818, .905114]
  258. [.934452, .912838, .930280]
  259. [.985542, 1.029438, .974522]
  260. [1.136286, 1.131194, 1.132678]
  261. [1.005936, 1.138060, 1.161482]
  262.  
  263.  
  264. '''
  265.  
  266. import math
  267. # in CM
  268. '''
  269. L = [
  270.    [2.4, 2.5, 2.4, 2.6, 2.7],
  271.    [3.9, 4.1, 4.0, 3.8, 3.9],
  272.    [5.8, 5.7, 5.6, 5.6, 6.0],
  273.    [7.3, 7.4, 7.2, 7.5, 7.0],
  274.    [9.2, 8.9, 9.1, 9.1, 9.4],
  275.  
  276.    [3.1, 3.0, 2.9, 3.2, 2.8],
  277.    [8.0, 8.5, 8.3, 8.1, 8.1],
  278.    [14.4, 14.2, 13.1, 13.0, 12.8]
  279. ]
  280. '''
  281. #for length in L:
  282.     #print(f"{average(length)} ± {math.sqrt(standard_deviation(length)**2 + 0.05**2)}")
  283. #    print(f"{average(length)} ± {standard_deviation(length)}")
  284.  
  285.  
  286.  
  287. #x = [math.sqrt(abs(2.740-2.735)), math.sqrt(abs(2.690-2.735)), math.sqrt(abs(2.640-2.735)), math.sqrt(abs(2.590-2.735)), math.sqrt(abs(2.540-2.735))]
  288. #y = [5.666333333333333, 5.162333333333334, 4.302333333333333, 3.7736666666666667, 3.375]
  289. #sigma = [0.2536535257218223, 0.020986768318263033, 0.017647788655932042, 0.019410764482054234, 0.07414400402819726]
  290.  
  291. #x = [3.3**2, 6.3**2, 9.3**2, 12.3**2]
  292. #y = [6.21**2, 6.05**2, 6.34**2, 6.689**2]
  293. #sigma = [1.4, 0.5, 0.6, 0.07]
  294.  
  295.  
  296. def LinearWLS(x, y, yerr):
  297.     sum1 = 0
  298.     for i in range(len(x)):
  299.         sum1 += x[i]**2 / yerr[i]**2
  300.  
  301.     sum2 = 0
  302.     for i in range(len(x)):
  303.         sum2 += 1 / yerr[i]**2
  304.  
  305.     sum3 = 0
  306.     for i in range(len(x)):
  307.         sum3 += x[i] / yerr[i]**2
  308.  
  309.     delta = sum1 * sum2 - sum3**2
  310.  
  311.     sum4 = 0
  312.     for i in range(len(x)):
  313.         sum4 += x[i] * y[i] / yerr[i]**2
  314.  
  315.     sum5 = 0
  316.     for i in range(len(x)):
  317.         sum5 += 1 / yerr[i]**2
  318.  
  319.     sum6 = 0
  320.     for i in range(len(x)):
  321.         sum6 += x[i] / yerr[i]**2
  322.  
  323.     sum7 = 0
  324.     for i in range(len(x)):
  325.         sum7 += y[i] / yerr[i]**2
  326.  
  327.     delta_a = sum4 * sum5 - sum6 * sum7
  328.  
  329.     a = delta_a / delta
  330.  
  331.     sum8 = 0
  332.     for i in range(len(x)):
  333.         sum8 += 1 / yerr[i]**2
  334.  
  335.     s_a = math.sqrt(sum8 / delta)
  336.  
  337.     sum9 = 0
  338.     for i in range(len(x)):
  339.         sum9 += x[i]**2 / yerr[i]**2
  340.  
  341.     sum10 = 0
  342.     for i in range(len(x)):
  343.         sum10 += y[i] / yerr[i]**2
  344.  
  345.     sum11 = 0
  346.     for i in range(len(x)):
  347.         sum11 += x[i] / yerr[i]**2
  348.  
  349.     sum12 = 0
  350.     for i in range(len(x)):
  351.         sum12 += x[i] * y[i] / yerr[i]**2
  352.  
  353.     delta_b = sum9 * sum10 - sum11 * sum12
  354.  
  355.     b = delta_b / delta
  356.  
  357.     s_b = math.sqrt(sum9 / delta)
  358.  
  359.     return {
  360.         "A" : a,
  361.         "S_A" : s_a,
  362.         "B" : b,
  363.         "S_B" : s_b
  364.     }
  365.  
  366. '''
  367. print(LinearWLS([0, 10, 20, 30, 40, 50, 60],
  368.                [5.4000, 5.0017, 4.8000, 4.5000, 4.3000, 4.0017, 3.8017],
  369.                [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05]))
  370.  
  371. print(LinearWLS([0, 10, 20, 30, 40, 50, 60],
  372.                [5.4104, 4.3013, 3.2980, 2.4007, 1.5993, 0.7967, 0.1987],
  373.                [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05]))
  374.  
  375. print(LinearWLS([0, 10, 20, 30, 40, 50, 60],
  376.                [6.2016, 5.3980, 4.8990, 4.2990, 3.8000, 3.3010, 2.8000],
  377.                [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05]))
  378.  
  379. print(LinearWLS([0, 10, 20, 30, 40, 50, 60],
  380.                [6.1963, 5.6000, 4.9007, 4.2980, 3.6993, 3.2013, 2.6993],
  381.                [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05]))
  382.  
  383. print(LinearWLS([0, 1, 2, 3, 4, 5, 6],
  384.                [5.1978, 3.5075, 2.3041, 1.5088, 0.8012, 0.5088, 0.3099],
  385.                [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05]))
  386. '''
  387. '''
  388. print(LinearWLS([0, 10, 20, 30, 40, 50, 60],
  389.                [0, 22.352381, 44.742859, 67.076187, 89.409523, 111.676193, 133.895233],
  390.                [0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001]))
  391.  
  392. print(LinearWLS([0, 10, 20, 30, 40, 50, 60],
  393.                [0, 22.194253, 44.333164, 66.174205, 87.81084, 109.142421, 130.278781],
  394.                [0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001]))
  395.  
  396. print(LinearWLS([0, 10, 20, 30, 40, 50, 60],
  397.                [0, 22.230215, 44.422909, 66.572685, 88.660789, 110.722466, 132.881058],
  398.                [0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001]))
  399.  
  400. print(LinearWLS([0, 10, 20, 30, 40, 50, 60],
  401.                [0, 22.295918, 44.551022, 66.734695, 88.826530, 110.867348, 132.877548],
  402.                [0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001]))
  403.  
  404. print(LinearWLS([0, 1, 2, 3, 4, 5, 6],
  405.                [0, 2.020661, 4.033536, 6.006098, 7.935976, 9.820122, 11.658537],
  406.                [0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001]))'''
  407.  
  408. def ProportionalWLS(x, y, yerr):
  409.     sum1 = 0
  410.     for i in range(len(x)):
  411.         sum1 += x[i] * y[i] / yerr[i]**2
  412.  
  413.     sum2 = 0
  414.     for i in range(len(x)):
  415.         sum2 += x[i]**2 / yerr[i]**2
  416.  
  417.     a = sum1 / sum2
  418.  
  419.     s_a = math.sqrt(1 / sum2)
  420.  
  421.     return {
  422.         "A" : a,
  423.         "S_A" : s_a,
  424.     }
  425.  
  426. '''
  427. print(ProportionalWLS([0.2, 135.2, 272.2, 412.0, 546.0, 696.0],
  428.                [0.0, 9.2, 18.4, 27.9, 37.1, 47.9],
  429.                [(0.01 * y + 2 * 0.1) for y in [0.0, 9.2, 18.4, 27.9, 37.1, 47.9]]))
  430.  
  431. print(ProportionalWLS([0.1, 59.6, 91.2, 112.6, 175.40, 268.9],
  432.                [0.0, 11.0, 16.8, 20.8, 32.3, 49.4],
  433.                [(0.01 * y + 2 * 0.1) for y in [0.0, 11.0, 16.8, 20.8, 32.3, 49.4]]))
  434.  
  435. print(ProportionalWLS([0.0, 25.4, 45.9, 84.2, 104.7, 123.1],
  436.                [0.0, 12.5, 22.5, 41.1, 51.1, 60.0],
  437.                [(0.01 * y + 2 * 0.1) for y in [0.0, 12.5, 22.5, 41.1, 51.1, 60.0]]))
  438.  
  439. print(ProportionalWLS([1 / 0.0176715, 1 / 0.0490874, 1 / 0.1256637], [14.68, 5.4318, 2.049], [0.001, 0.001, 0.001]))
  440.  
  441. print(ProportionalWLS([0.50, 1.00, 1.50], [1 / 0.06812159975124797, 1 / 0.0340818569933156, 1 / 0.022685820854011673], [0.11, 0.26, 0.3]))
  442. print(ProportionalWLS([1 / 0.0176715, 1 / 0.0490874, 1 / 0.1256637], [14.68, 5.4318, 2.049], [0.001, 0.001, 0.001]))
  443. '''
  444. '''
  445. print(LinearWLS([0.2, 0.4, 0.6, 0.8, 1.0],
  446.                [0.00713, 0.0162, 0.0294, 0.0391, 0.0510],
  447.                [0.00016, 0.0004, 0.0006, 0.0009, 0.0010]))
  448.  
  449. print(LinearWLS([0.2, 0.4, 0.6, 0.8, 1.0],
  450.                [0.0141, 0.0327, 0.0553, 0.0749, 0.0893],
  451.                [0.00029, 0.0007, 0.0011, 0.0015, 0.0018]))
  452.  
  453. print(LinearWLS([0.2, 0.4, 0.6, 0.8, 1.0],
  454.                [0.0213, 0.0495, 0.0807, 0.1101, 0.1372],
  455.                [0.0004, 0.0010, 0.0016, 0.0022, 0.0027]))
  456. '''
  457.  
  458. '''
  459. print(LinearWLS([3, 6, 9],
  460. [0.024, 0.047, 0.071],
  461. [0.003, 0.003, 0.003]))
  462.  
  463. print(LinearWLS([3, 6, 9],
  464. [0.0268, 0.0491, 0.0730],
  465. [0.0004, 0.0008, 0.0011]))
  466. '''
  467. #x = [4.010, 6.430, 10.090, 12.760, 16.270,     4.010, 10.090, 16.270]
  468. #y = [100*0.056, 100*0.086, 100*0.12, 100*0.15, 100*0.19,     7.9, 24, 41]
  469. #yerr = [100*0.017, 100*0.025, 100*0.03, 100*0.04, 100*0.06,     2.4, 7, 12]
  470.  
  471. #print(ProportionalWLS([4.010, 10.090, 16.270],
  472. #                [7.9, 24, 41],
  473. #                [2.4, 7, 12]))
  474. '''
  475. print(LinearWLS([0.2, 0.4, 0.6, 0.8, 1.0],
  476.                [0.0147, 0.0332, 0.0560, 0.0769, 0.0985],
  477.                [0.0004, 0.0007, 0.0011, 0.0016, 0.0021]))
  478.  
  479.  
  480. print(LinearWLS([0.2, 0.4, 0.6, 0.8, 1.0],
  481.                [0.01399, 0.0322, 0.0547, 0.0752, 0.0956],
  482.                [0.00029, 0.0007, 0.0011, 0.0015, 0.0019]))
  483. '''
  484.  
  485. '''print(ProportionalWLS([0, 0.012*100/100, 0.002*100/100, 0.004*100/100, 0.007*100/100],
  486. [0, 0.46107, 0.0981, 0.1962, 0.2943],
  487. [0.01, 0.01, 0.01, 0.01, 0.01]))
  488. '''
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement