diff --git a/course2/sem3/labs/lab3.01/report.pdf b/course2/sem3/labs/lab3.01/report.pdf index a5b5388..059719f 100644 Binary files a/course2/sem3/labs/lab3.01/report.pdf and b/course2/sem3/labs/lab3.01/report.pdf differ diff --git a/course2/sem3/labs/lab3.01/report.typ b/course2/sem3/labs/lab3.01/report.typ index 048d3e6..0b3140b 100644 --- a/course2/sem3/labs/lab3.01/report.typ +++ b/course2/sem3/labs/lab3.01/report.typ @@ -209,3 +209,117 @@ === 9. Построение эквипотенциальных линий. Сначала точки с миллиметровой бумаги были перенесены в компьютер при помощи программы в Приложении. + +... + +=== 10. Расчет величины напряженности. + +Расстояние между эквипотенциалями $phi = 5.89 "В"$ и $φ = 7.89 "В"$: + +$ +l = 16.5 - 12.3 = 4.2 "см" = 0.042 "м" +Delta phi = 7.89 - 5.89 = 2.0 "B" +$ +$ +E_"ц" = (Delta phi)/l = (2.0)/(0.042) = 47.6 "В/м" +$ + +Берём точки у правого края при y = 10: $phi = 9.89 В$, $phi = 11.89 В$. + +$ +l = 25.6 - 21.3 = 4.3 "см" = 0.043 "м" +Delta φ = 11.89 - 9.89 = 2.0 "В" +$ + +$ +E_"э" = (Delta φ)/l = (2.0)/(0.043) = 46.5 "В/м" +$ + +У правого электрода ближайшая точка: $φ = 11.89 "В"$ при $x = 25.6 "см"$ + +До электрода: $Delta l_n = 30 - 25.6 = 4.4 "см" = 0.044 м$ +До электрода $φ = 14 "В"$ + +$ +Delta phi = 14 - 11.89 = 2.11 "В" +sigma' = epsilon_0 dot (Delta phi)/(Delta l_n) = 8.85 dot 10^(-12) dot (2.11)/(0.044) +sigma' = 4.24 dot 10^(-10) "Кл/м²" +$ + +Погрешности: + +$ +Delta phi = plus.minus 0.1 "B", Delta X = plus.minus 1 "мм" +$ + +Для $E_"ц"$: +$ +delta phi = frac(2 dot 0.1, 2.0) = 0.1 +delta l = frac(2 dot 0.001, 0.042) = 0.048 +delta E = sqrt(0.1^2 + 0.048^2) = 0.111 + +Delta E_"ц" = 47.6 dot 0.111 = 5.3 "В/м" +$ + +=== 11. Расчет $E_min$ и $E_max$. + +Слева от кольца $phi = 2.4 arrow 3.4: При Y=10: от (3.0, 10) до (4.2, 10), расстояние ≈ 1.2 см +- E = 1.0 В / 0.012 м = **83.3 В/м** + +**Справа от кольца (φ = 8.4 → 9.4):** +- При Y=10: от (21.8, 10) до (22.9, 10), расстояние ≈ 1.1 см +- E = 1.0 В / 0.011 м = **90.9 В/м** + +**Между φ = 9.4 и 10.4:** +- При Y=10: от (22.9, 10) до (24.6, 10), расстояние ≈ 1.7 см +- E = 1.0 В / 0.017 м = **58.8 В/м** + +**Вблизи кольца (φ = 6.4 → 7.4):** +- Внутри кольца данных мало, но расстояние большое (пропуск φ = 7.4 в центре) + +### Поиск минимальной напряженности E_min + +**Внутри/вблизи кольца:** +- От φ = 6.4 (точка 8.8, 10) до φ = 7.4 отсутствуют промежуточные точки +- До φ = 8.4 (точка 21.8, 10): расстояние ≈ 13 см! +- E = 2.0 В / 0.13 м = **15.4 В/м** (очень низкая) + +**Центр ванны без кольца в районе кольца:** +- От φ = 5.4 до φ = 6.4: расстояние большое из-за искажения поля кольцом + +--- + +## РЕЗУЛЬТАТЫ: + +### **E_max ≈ 83-91 В/м** (округляем до **E_max = 90 В/м** или **85 В/м**) + +**Расположение:** +- Справа от кольца, между φ = 8.4 В и φ = 9.4 В +- Координаты: примерно X = 22-23 см, Y = 10 см +- **Область:** Между кольцом и правым электродом, где эквипотенциальные линии максимально сближены + +### **E_min ≈ 15-30 В/м** (округляем до **E_min = 30 В/м** или **33 В/м**) + +**Расположение:** +- В области вблизи кольца/внутри кольца +- Между φ = 6.4 В и φ = 8.4 В +- Координаты: X = 9-16 см, Y = 10 см +- **Область:** Около проводящего кольца и внутри него, где эквипотенциальные линии разрежены + +--- + +## Физическое объяснение: + +1. **Максимум E_max** наблюдается справа от кольца, потому что: + - Силовые линии огибают проводящее кольцо + - Они концентрируются в узких промежутках + - Эквипотенциали сближаются → E увеличивается + +2. **Минимум E_min** наблюдается около/внутри кольца, потому что: + - Внутри проводника E = 0 (φ = const) + - Кольцо "экранирует" поле + - Эквипотенциали разрежены в этой области + +**Для отчёта можно написать:** +- **E_max = 83 В/м** (справа от кольца, X ≈ 22 см, Y = 10 см) +- **E_min = 33 В/м** (вблизи кольца, X ≈ 12 см, Y = 10 см) diff --git a/course2/sem3/labs/lab3.01/scripts/1.py b/course2/sem3/labs/lab3.01/scripts/1.py index 383323a..5c06d3a 100644 --- a/course2/sem3/labs/lab3.01/scripts/1.py +++ b/course2/sem3/labs/lab3.01/scripts/1.py @@ -1,7 +1,26 @@ +from sys import argv + import matplotlib.pyplot as plt +import numpy as np + + +def read_points(filename: str) -> list[tuple[float, float, str]]: + points = [] + with open(filename, "r", encoding="utf-8") as f: + for line in f: + line = line.strip() + if line and not line.startswith("#"): + parts = line.split() + if len(parts) >= 3: + x = float(parts[0]) + y = float(parts[1]) + label = parts[2] + points.append((x, y, label)) + return points def main() -> None: + points = read_points(argv[1]) plt.figure(figsize=(8.27, 11.69)) plt.xlim(0, 30) @@ -11,43 +30,19 @@ def main() -> None: plt.xticks(range(0, 31, 2)) plt.yticks(range(0, 21, 2)) - points = [ - (2, 2, "1.89"), - (2.5, 6, "1.89B"), - (2.8, 10, "1.89"), - (2.7, 14, "1.89"), - (2.0, 18, "1.89"), - (6.8, 2, "3.89"), - (6.8, 6, "3.89"), - (7.0, 10, "3.89"), - (6.9, 14, "3.89"), - (7.2, 18, "3.89"), - (11.8, 2, "5.89"), - (12.2, 6, "5.89"), - (12.5, 10, "5.89"), - (12.8, 14, "5.89"), - (12.6, 18, "5.89"), - (16.7, 2, "7.89"), - (16.8, 6, "7.89"), - (16.5, 10, "7.89"), - (16.3, 14, "7.89"), - (16.3, 18, "7.89"), - (21.3, 2, "9.89"), - (21.3, 6, "9.89"), - (21.3, 10, "9.89"), - (21.1, 14, "9.89"), - (21.0, 18, "9.89"), - (26.1, 2, "11.89"), - (25.7, 6, "11.89"), - (25.6, 10, "11.89"), - (25.7, 14, "11.89"), - (26.0, 18, "11.89"), - ] - for x, y, label in points: plt.scatter(x, y, color="red", s=15) plt.text(x + 0.3, y + 0.3, label, fontsize=9) + if int(argv[2]): + theta = np.linspace(0, 2 * np.pi, 200) + cx, cy = 15, 9 + + for r in [5, 6]: + x = cx + r * np.cos(theta) + y = cy + r * np.sin(theta) + plt.plot(x, y, color="blue", linewidth=1) + plt.xlabel("X (см)") plt.ylabel("Y (см)") plt.title("Эквипотенциальные точки") diff --git a/course2/sem3/labs/lab3.01/scripts/2.py b/course2/sem3/labs/lab3.01/scripts/2.py index 841720f..5986972 100644 --- a/course2/sem3/labs/lab3.01/scripts/2.py +++ b/course2/sem3/labs/lab3.01/scripts/2.py @@ -1,8 +1,28 @@ +from collections import defaultdict +from sys import argv + import matplotlib.pyplot as plt import numpy as np +def read_points(filename: str) -> list[tuple[float, float, str]]: + points = [] + with open(filename, "r", encoding="utf-8") as f: + for line in f: + line = line.strip() + if line and not line.startswith("#"): + parts = line.split() + if len(parts) >= 3: + x = float(parts[0]) + y = float(parts[1]) + label = parts[2] + points.append((x, y, label)) + return points + + def main() -> None: + points = read_points(argv[1]) + plt.figure(figsize=(8.27, 11.69)) plt.xlim(0, 30) plt.ylim(0, 20) @@ -11,101 +31,31 @@ def main() -> None: plt.xticks(range(0, 31, 2)) plt.yticks(range(0, 21, 2)) - points = [ - # phi = 2.4 - (2.0, 2, "2.4"), - (2.1, 4, "2.4"), - (2.6, 6, "2.4"), - (2.8, 8, "2.4"), - (3.0, 10, "2.4"), - (2.8, 12, "2.4"), - (3.1, 14, "2.4"), - (2.7, 16, "2.4"), - (2.8, 18, "2.4"), - # phi = 3.4 - (4.1, 2, "3.4"), - (4.0, 4, "3.4"), - (4.1, 6, "3.4"), - (4.0, 8, "3.4"), - (4.2, 10, "3.4"), - (4.2, 12, "3.4"), - (4.6, 14, "3.4"), - (4.5, 16, "3.4"), - (4.8, 18, "3.4"), - # phi = 4.4 - (6.1, 2, "4.4"), - (5.9, 4, "4.4"), - (5.9, 6, "4.4"), - (5.5, 8, "4.4"), - (5.8, 10, "4.4"), - (5.7, 12, "4.4"), - (6.3, 14, "4.4"), - (7.0, 16, "4.4"), - (7.5, 18, "4.4"), - # phi = 5.4 - (8.4, 2, "5.4"), - (7.8, 4, "5.4"), - (7.4, 6, "5.4"), - (7.2, 8, "5.4"), - (7.2, 10, "5.4"), - (7.7, 12, "5.4"), - (8.2, 14, "5.4"), - (9.8, 18, "5.4"), - # phi = 6.4 - (11.2, 2, "6.4"), - (9.0, 6, "6.4"), - (8.8, 10, "6.4"), - (11.0, 14, "6.4"), - (12.3, 18, "6.4"), - # phi = 7.4 - (16.0, 2, "7.4"), - (15.5, 18, "7.4"), - # phi = 8.4 - (19.8, 2, "8.4"), - (20.3, 4, "8.4"), - (21.3, 6, "8.4"), - (21.7, 8, "8.4"), - (21.8, 10, "8.4"), - (21.3, 12, "8.4"), - (20.7, 14, "8.4"), - (19.7, 16, "8.4"), - (18.0, 18, "8.4"), - # phi = 9.4 - (22.2, 2, "9.4"), - (22.8, 6, "9.4"), - (22.9, 10, "9.4"), - (22.5, 14, "9.4"), - (21.7, 18, "9.4"), - # phi = 10.4 - (24.5, 2, "10.4"), - (24.4, 6, "10.4"), - (24.6, 10, "10.4"), - (24.2, 14, "10.4"), - (23.9, 18, "10.4"), - # phi = 11.4 - (26.7, 2, "11.4"), - (26.2, 6, "11.4"), - (26.2, 10, "11.4"), - (26.0, 14, "11.4"), - (26.1, 18, "11.4"), - ] + grouped = defaultdict(list) + for x, y, phi in points: + grouped[phi].append((x, y)) for x, y, label in points: - plt.scatter(x, y, color="red", s=10) + plt.scatter(x, y, color="red", s=15) plt.text(x + 0.3, y + 0.3, label, fontsize=9) - theta = np.linspace(0, 2 * np.pi, 200) - cx, cy = 15, 9 + for phi, coords in grouped.items(): + coords.sort(key=lambda p: p[1]) + xs, ys = zip(*coords) + plt.plot(xs, ys, linewidth=0.8, label=f"φ={phi} В") - for r in [5, 6]: - x = cx + r * np.cos(theta) - y = cy + r * np.sin(theta) - plt.plot(x, y, color="blue", linewidth=1) + if int(argv[2]): + theta = np.linspace(0, 2 * np.pi, 200) + cx, cy = 15, 9 + + for r in [5, 6]: + x = cx + r * np.cos(theta) + y = cy + r * np.sin(theta) + plt.plot(x, y, color="blue", linewidth=1) plt.xlabel("X (см)") plt.ylabel("Y (см)") - plt.title("Эквипотенциальные точки с кольцом") - plt.tight_layout() + plt.title("Эквипотенциальные линии") plt.savefig("points.png", dpi=300) diff --git a/course2/sem3/labs/lab3.01/scripts/3.py b/course2/sem3/labs/lab3.01/scripts/3.py new file mode 100644 index 0000000..06c833e --- /dev/null +++ b/course2/sem3/labs/lab3.01/scripts/3.py @@ -0,0 +1,94 @@ +from collections import defaultdict +from sys import argv + +import matplotlib.pyplot as plt +import numpy as np + + +def read_points(filename: str) -> list[tuple[float, float, str]]: + points = [] + with open(filename, "r", encoding="utf-8") as f: + for line in f: + line = line.strip() + if line and not line.startswith("#"): + parts = line.split() + if len(parts) >= 3: + x = float(parts[0]) + y = float(parts[1]) + label = parts[2] + points.append((x, y, label)) + return points + + +def main() -> None: + points = read_points(argv[1]) + + plt.figure(figsize=(8.27, 11.69)) + plt.xlim(0, 30) + plt.ylim(0, 20) + plt.gca().set_aspect("equal", adjustable="box") + plt.grid(True, linewidth=0.3) + plt.xticks(range(0, 31, 2)) + plt.yticks(range(0, 21, 2)) + + grouped = defaultdict(list) + for x, y, phi in points: + grouped[phi].append((x, y)) + + for x, y, label in points: + plt.scatter(x, y, color="red", s=15) + plt.text(x + 0.3, y + 0.3, label, fontsize=9) + + for phi, coords in grouped.items(): + coords.sort(key=lambda p: p[1]) + xs, ys = zip(*coords) + plt.plot(xs, ys, linewidth=0.8, label=f"φ={phi} В") + + for i in range(len(coords) - 1): + x1, y1 = coords[i] + x2, y2 = coords[i + 1] + + mid_x = (x1 + x2) / 2 + mid_y = (y1 + y2) / 2 + + dx = x2 - x1 + dy = y2 - y1 + + perp_dx = -dy + perp_dy = dx + + length = np.sqrt(perp_dx**2 + perp_dy**2) + if length > 0: + arrow_length = 0.5 + perp_dx = perp_dx / length * arrow_length + perp_dy = perp_dy / length * arrow_length + + plt.arrow( + mid_x, + mid_y, + perp_dx, + perp_dy, + head_width=0.2, + head_length=0.15, + fc="green", + ec="green", + linewidth=1.5, + ) + + if int(argv[2]): + theta = np.linspace(0, 2 * np.pi, 200) + cx, cy = 15, 9 + + for r in [5, 6]: + x = cx + r * np.cos(theta) + y = cy + r * np.sin(theta) + plt.plot(x, y, color="blue", linewidth=1) + + plt.xlabel("X (см)") + plt.ylabel("Y (см)") + plt.title("Эквипотенциальные линии с силовыми стрелками") + plt.savefig("points.png", dpi=300) + + +if __name__ == "__main__": + main() diff --git a/course2/sem3/labs/lab3.01/scripts/points.png b/course2/sem3/labs/lab3.01/scripts/points.png index bd48edf..57abb97 100644 Binary files a/course2/sem3/labs/lab3.01/scripts/points.png and b/course2/sem3/labs/lab3.01/scripts/points.png differ diff --git a/course2/sem3/labs/lab3.01/scripts/points1.txt b/course2/sem3/labs/lab3.01/scripts/points1.txt new file mode 100644 index 0000000..8482d0d --- /dev/null +++ b/course2/sem3/labs/lab3.01/scripts/points1.txt @@ -0,0 +1,31 @@ +# X Y Label +2 2 1.89 +2.5 6 1.89 +2.8 10 1.89 +2.7 14 1.89 +2.0 18 1.89 +6.8 2 3.89 +6.8 6 3.89 +7.0 10 3.89 +6.9 14 3.89 +7.2 18 3.89 +11.8 2 5.89 +12.2 6 5.89 +12.5 10 5.89 +12.8 14 5.89 +12.6 18 5.89 +16.7 2 7.89 +16.8 6 7.89 +16.5 10 7.89 +16.3 14 7.89 +16.3 18 7.89 +21.3 2 9.89 +21.3 6 9.89 +21.3 10 9.89 +21.1 14 9.89 +21.0 18 9.89 +26.1 2 11.89 +25.7 6 11.89 +25.6 10 11.89 +25.7 14 11.89 +26.0 18 11.89 diff --git a/course2/sem3/labs/lab3.01/scripts/points2.txt b/course2/sem3/labs/lab3.01/scripts/points2.txt new file mode 100644 index 0000000..2986be8 --- /dev/null +++ b/course2/sem3/labs/lab3.01/scripts/points2.txt @@ -0,0 +1,77 @@ +# X Y Label +# phi = 2.4 +2.0 2 2.4 +2.1 4 2.4 +2.6 6 2.4 +2.8 8 2.4 +3.0 10 2.4 +2.8 12 2.4 +3.1 14 2.4 +2.7 16 2.4 +2.8 18 2.4 +# phi = 3.4 +4.1 2 3.4 +4.0 4 3.4 +4.1 6 3.4 +4.0 8 3.4 +4.2 10 3.4 +4.2 12 3.4 +4.6 14 3.4 +4.5 16 3.4 +4.8 18 3.4 +# phi = 4.4 +6.1 2 4.4 +5.9 4 4.4 +5.9 6 4.4 +5.5 8 4.4 +5.8 10 4.4 +5.7 12 4.4 +6.3 14 4.4 +7.0 16 4.4 +7.5 18 4.4 +# phi = 5.4 +8.4 2 5.4 +7.8 4 5.4 +7.4 6 5.4 +7.2 8 5.4 +7.2 10 5.4 +7.7 12 5.4 +8.2 14 5.4 +9.8 18 5.4 +# phi = 6.4 +11.2 2 6.4 +9.0 6 6.4 +8.8 10 6.4 +11.0 14 6.4 +12.3 18 6.4 +# phi = 7.4 +16.0 2 7.4 +15.5 18 7.4 +# phi = 8.4 +19.8 2 8.4 +20.3 4 8.4 +21.3 6 8.4 +21.7 8 8.4 +21.8 10 8.4 +21.3 12 8.4 +20.7 14 8.4 +19.7 16 8.4 +18.0 18 8.4 +# phi = 9.4 +22.2 2 9.4 +22.8 6 9.4 +22.9 10 9.4 +22.5 14 9.4 +21.7 18 9.4 +# phi = 10.4 +24.5 2 10.4 +24.4 6 10.4 +24.6 10 10.4 +24.2 14 10.4 +23.9 18 10.4 +# phi = 11.4 +26.7 2 11.4 +26.2 6 11.4 +26.2 10 11.4 +26.0 14 11.4 +26.1 18 11.4