aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjustanothercatgirl <sotov2070@gmail.com>2024-10-10 08:30:19 +0300
committerjustanothercatgirl <sotov2070@gmail.com>2024-10-10 08:30:19 +0300
commit5c17cf027a782ddcbac70039e3c41b7adc8adbea (patch)
treea73750056784c1d1c33d878f6e845e395ce3c579
initial commit
-rwxr-xr-xbuild.sh3
-rwxr-xr-xclean.sh1
-rw-r--r--data50
-rw-r--r--plots.gp19
-rwxr-xr-xprak2.py96
-rwxr-xr-xvtek2.py93
6 files changed, 262 insertions, 0 deletions
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();
+