From 5c17cf027a782ddcbac70039e3c41b7adc8adbea Mon Sep 17 00:00:00 2001 From: justanothercatgirl Date: Thu, 10 Oct 2024 08:30:19 +0300 Subject: initial commit --- build.sh | 3 ++ clean.sh | 1 + data | 50 +++++++++++++++++++++++++++++++++ plots.gp | 19 +++++++++++++ prak2.py | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ vtek2.py | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 262 insertions(+) create mode 100755 build.sh create mode 100755 clean.sh create mode 100644 data create mode 100644 plots.gp create mode 100755 prak2.py create mode 100755 vtek2.py diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..3b475f3 --- /dev/null +++ b/build.sh @@ -0,0 +1,3 @@ +cat data | ./vtek2.py +gnuplot *.gp + diff --git a/clean.sh b/clean.sh new file mode 100755 index 0000000..e429a28 --- /dev/null +++ b/clean.sh @@ -0,0 +1 @@ +rm -f *.png *.data diff --git a/data b/data new file mode 100644 index 0000000..5b6c7ba --- /dev/null +++ b/data @@ -0,0 +1,50 @@ +0.240 +0.002 +10 +10 +7.55 +7.59 +7.59 +8.15 +8.18 +8.18 +8.75 +8.75 +8.72 +9.34 +9.34 +9.31 +9.85 +9.88 +9.84 +10.29 +10.25 +10.28 +10.78 +10.68 +10.77 +11.19 +11.28 +11.25 +11.53 +11.60 +11.72 +12.12 +12.03 +12.11 +0.3789 +0.4104 +0.4376 +0.4650 +0.4894 +0.5125 +0.5347 +0.5575 +0.5811 +0.5997 +0.2473 +0.0965 +0.0609 +0.0452 +0.0360 +0.0289 diff --git a/plots.gp b/plots.gp new file mode 100644 index 0000000..93cd408 --- /dev/null +++ b/plots.gp @@ -0,0 +1,19 @@ +set term png +set output 'T2_timer.png' +set grid +set xlabel "m, ед." +set ylabel "T^2, c^2" +plot 'outputT2_timer.data' using 1:2:3 with yerrorbars title "", 'outputT2_timer.data' with line title "T^2(m)" +set term png +set output 'T2_photo.png' +set grid +set xlabel "m, ед." +set ylabel "T^2, c^2" +plot 'outputT2_photo.data' using 1:2:3 with yerrorbars title "", 'outputT2_photo.data' with line title "T^2(m)" +set term png +set output 'U.png' +set grid +set xlabel "U, В" +set ylabel "w, 1/c" +set yrange[0:250] +plot 'outputU.data' using 1:2:3:4 with xyerrorbars title "", 'outputU.data' with line title "w(U)" diff --git a/prak2.py b/prak2.py new file mode 100755 index 0000000..8be1a5f --- /dev/null +++ b/prak2.py @@ -0,0 +1,96 @@ +#!/home/main/coding/py/venv/bin/python3 + +import math +import numpy as np + +def getvarbyval(var, ls): + for name, value in ls.items(): + if value is var: + return name + +def avg(l): + return sum(l)/len(l) + +def stddev(l): + s = len(l) + a = avg(l) + return math.sqrt(sum(( (i - a)**2 for i in l )) / s / (s-1)) + +def sigsum(stddev, sig_sist): + return math.sqrt(stddev**2 + sig_sist**2) + +def sigma(func, args, sigmas): + s = 0 + dx = 1e-7 + for i in range(len(args)): + argsdx = args.copy() + argsdx[i] += dx + s += ( sigmas[i] * (func(*argsdx) - func(*args))/dx )**2 + return math.sqrt(s) + +def mnk(xs, ys, ss): + sss = ss*ss + d = np.sum(xs*xs/sss)*np.sum(1/sss) - np.sum(xs/sss)**2 + da = np.sum(xs*ys/sss)*np.sum(1/sss) - np.sum(xs/sss)*np.sum(ys/sss) + db = np.sum(xs*xs/sss)*np.sum(ys/sss) - np.sum(xs/sss)*np.sum(xs*ys/sss) + a = da/d + b = db/d + sa = math.sqrt(np.sum(1/sss)/d) + sb = math.sqrt(np.sum(xs*xs/sss)/d) + return {"a": a, "b": b, "sa": sa, "sb": sb} + +def v(l, t): return l/t +def v2(l, t): return (l/t)**2 +def a_teor(dh2, L): return 9.807 * dh2 / L + +def main(): + print("Введите L1-L3 (м), l1-l3 (м), M1-M3 (г)") + Ls = [float(input()) for _ in range(3)] + ls = [float(input()) for _ in range(3)] + Ms = [float(input())/1000.0 for _ in range(3)] + + for i in Ls, ls, Ms: + sig_sist = float(input(f"сист. погрешность для {getvarbyval(i, locals())}(м/Кг): ")) + print(f"{getvarbyval(i, locals())}: mean={avg(i)}; stddev={stddev(i)}; sigma={sigsum(sig_sist, stddev(i))}") + i.append(sigsum(sig_sist, stddev(i))) + + print("Введите 3 массы тележек"); + h = 6 # mm + rest = {float(input())/1000.0 : [[round(0.2 * (j+1), 1), 0, 0] for j in range(5)] for i in range(3)} + for m in sorted(rest.keys()): + for x in rest[m]: + print(f"введите t1, t2, t3 для dh=6mm, m={m*1000}г, x={x[0]}м") + ts = [float(input()) for _ in range(3)] + x[1] = avg(ts) + x[2] = stddev(ts) + print(f"t_avg = {x[1]}, t_dev = {x[2]}") + + l = avg(ls[:-1]); sl = ls[-1] + resv = {i : [np.zeros((5,), dtype=float) for _ in range(4)] for i in sorted(rest.keys())} + for m in sorted(rest.keys()): + for i, x in enumerate(rest[m]): + args = [l, x[1]] + sigmas = [sl, x[2]] + _v = v(*args) + _v2 = v2(*args) + _v2s = sigma(v2, args, sigmas) + resv[m][0][i] = x[0] + resv[m][1][i] = _v + resv[m][2][i] = _v2 + resv[m][3][i] = _v2s + print(f"для m={m*1000}г, x={x[0]}м: v={_v}, v^2={_v2}, sigma_v={_v2s}") + for m in sorted(resv.keys()): + data = resv[m] + d = mnk(data[0], data[2], data[3]) + A = d['a']; + sA = d['sa'] + B = d['b']; sB = d['sb'] + a = A/2; sa = sA/2 + a_t = a_teor(h / 1e3, avg(Ls[:-1])) + sa_t = sigma(a_teor, [h/1e3, avg(Ls[:-1])], [float(input("Введите погрешность dh_2: ")), Ls[-1]]) + print(f"A = {A}+-{sA}\nB = {B}+-{sB}\na = {a}+-{sa}\na_teor = {a_t}, sigma_a_teor = {sa_t}") + +if __name__ == "__main__": + main() + + diff --git a/vtek2.py b/vtek2.py new file mode 100755 index 0000000..4350159 --- /dev/null +++ b/vtek2.py @@ -0,0 +1,93 @@ +#!/home/main/coding/py/venv/bin/python3 + +from prak2 import * +from math import pow, sqrt + + +PI = 3.141592657 # ;) + +def main(): + timer = []; + photo = []; + Ns = []; + Tsqs = []; + STsqs = []; + H = float(input('Введите H и погрешность H')) + H_err = float(input()) + m0 = float(input('Введите m0 (количество измерений) ')) + n = float(input('Введите n (количество колебаний на 1 измерение) ')) + + print('\n', '-' * 35, "\nОБРАБОТКА С РУЧНЫМИ ЧАСАМИ\n", '-' * 35); + for i in range(10): + print("введите t_1, t_2, t_3 для N = ", i); + list = [float(input()) for _ in range(3)]; + mean = avg(list); + dev = stddev(list); + mean_err = sqrt(dev * dev + pow(1e-3 * mean, 2)); + T = mean / n; + T_err = mean_err / n; + tsq = T * T; + tsq_err = 2 * T * T_err; + timer.append((i, tsq, tsq_err)); + print(f"avg = {mean}; err = {mean_err}; T = {T} +- {T_err}\nTsq = {tsq} +- {tsq_err}"); + Ns = np.array([i[0] for i in timer]); + Tsqs = np.array([i[1] for i in timer]); + STsqs = np.array([i[2] for i in timer]); + res = mnk(Ns, Tsqs, STsqs); + print(f"A = {res['a']} +- {res['sa']}; B = {res['b']} +- {res['sb']}"); + g = 4 * PI * PI * H / res['a'] / m0; + g_err = g * sqrt(pow(res['sa'] / res['a'], 2) + pow(H_err / H, 2)); + l = res['b'] * g / 4 / PI / PI; + l_err = l * sqrt(pow(res['sb'] / res['b'], 2) + pow(g_err/g , 2)); + print(f"g = {g} +- {g_err}; l = {l} +- {l_err}"); + + + print('\n', '-' * 35, "\nОБРАБОТКА С ФОТОДАТЧИКАМИ\n", '-' * 35); + for i in range(10): + print("Введите t, St для N = ", i); + mean = float(input()) + dev = 0.0001 # НАГЛО ПОДОГНАТЬ!!! + mean_err = sqrt(dev * dev + pow(1e-3 * mean, 2)); + T = 2 * mean; + T_err = 2 * mean_err; + tsq = T * T; + tsq_err = 2 * T * T_err; + photo.append((i, tsq, tsq_err)); + print(f"T = {T} +- {T_err}\nTsq = {tsq} +- {tsq_err}"); + Ns = np.array([i[0] for i in photo]); + Tsqs = np.array([i[1] for i in photo]); + STsqs = np.array([i[2] for i in photo]); + res = mnk(Ns, Tsqs, STsqs); + print(f"A = {res['a']} +- {res['sa']}; B = {res['b']} +- {res['sb']}"); + g = 4 * PI * PI * H / res['a'] / m0; + g_err = g * sqrt(pow(res['sa'] / res['a'], 2) + pow(H_err / H, 2)); + l = res['b'] * g / 4 / PI / PI; + l_err = l * sqrt(pow(res['sb'] / res['b'], 2) + pow(g_err/g , 2)); + print(f"g = {g} +- {g_err}; l = {l} +- {l_err}"); + + print('\n', '-' * 35, "ОБРАБОТКА ВТОРОГО УПРАЖНЕНИЯ\n", '-' * 35); + omegas = []; + Us = [0.3 * (i+1) for i in range(6)]; + U_errs = [0.003 * i + 0.002 for i in Us]; + U_errs[0] -= 0.0015; + for U, U_err in zip(Us, U_errs): + tg = float(input('Введите t_д: ')); + # tg_err = float(input('Введите погрешность t_д')); + tg_err = 0.0001 + omega = 2*PI / tg; + omega_err = omega * tg_err / tg; + omegas.append((U, omega, U_err, omega_err)); + print(f"omega = {omega} +- {omega_err}"); + with open("outputU.data", "w+") as f: + for a, b, c, d in omegas: + f.write(f"{a} {b} {c} {d}\n"); + with open("outputT2_timer.data", "w+") as f: + for a, b, c in timer: + f.write(f"{a} {b} {c}\n") + with open("outputT2_photo.data", "w+") as f: + for a, b, c in photo: + f.write(f"{a} {b} {c}\n") + + +if __name__ == "__main__": main(); + -- cgit v1.2.3-70-g09d2