physics-labs-collection/processor.py

74 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import math
r = 6
def avg(a):
return round(sum(a) / len(a), r)
raw_stats = []
while True:
n = input()
if n != "":
clear_n = n.replace(",", ".").replace("..", ".")
raw_stats.append(float(clear_n))
else:
break
stats = list(map(lambda x: round(x/5, r), raw_stats))
print("Знаходимо час одного коливання для кожного значення та використовуємо отриманий набір даних для обчислень")
# processing: constants
delta_t = float(input("Зазначте Δt = "))
n = float(input("Зазначте n = "))
# processing: formulas
T_max = max(stats)
T_min = min(stats)
print(f"\n\nTmin = {T_min}\nTmax = {T_max}\n")
delta_T = delta_t / n
print(f"Знаходимо ΔT як ΔT = Δt/n = {delta_t} / {n} = {delta_T}")
m_raw = round(T_max - T_min, r) / (2*delta_T)
if m_raw % 1:
m = math.floor(m_raw)
else:
m = math.floor(m_raw) + 1
print(f"Знаходимо m як m = (Tmax - Tmin) / (2*ΔT) = ({T_max} - {T_min}) / (2 * {delta_T}) = {round(T_max - T_min, 3)} / {delta_T*2} = {m}")
interval_width = round((T_max - T_min) / m, r)
print(f"Розбиваємо гістограму на m={m} проміжків (кожен з інтервалом по {interval_width} секунди) та обчислюємо кількість результатів, що входять до кожного з них; отримуємо таку статистику:")
gist_list = []
Ni = 1
for i in range(m):
l = round(T_min + i*interval_width, r)
u = round(l + interval_width, r)
a = len([k for k in stats if l <= k < u])
gist_list.append(a)
print(f"Проміжок: {l}-{u}; № = {Ni} Ti = {avg([l, u])}; Ni = {a}; vi = {round(a/len(stats), r)}")
Ni += 1
print("\nОтримуємо таку гістограму:\n")
print("\n".join([("".join([" |"[int(k > i)] for k in gist_list])) for i in range(max(gist_list))][::-1]))
avg_T = round(sum(stats) / len(stats), r)
print(f"\nЗнаходимо середнє арифметичне ❬T❭ = {avg_T}")
D = round((sum(tuple(map(lambda x: x**2, stats))) / len(stats)) - ((sum(stats) / len(stats)) ** 2), r)
print(f"Знаходимо дисперсію D за формулою D = ❬v^2❭ - ❬v❭^2 = {round(sum(tuple(map(lambda x: x**2, stats))) / len(stats), r)} - {round((sum(stats) / len(stats)) ** 2, r)} = {D}")
sigma = round(math.sqrt(D), r)
print(f"Знаходимо середньоквадратичне відхилення σ як σ = √D = √{D} = {sigma}")
delta = round(sigma / avg(stats), r)
print(f"Знаходимо відносну флуктуацію δ як δ = σ / ❬T❭ = {sigma} / {avg(stats)} = {delta}")