This media is not supported in your browser
VIEW IN TELEGRAM
Задумывались ли вы, как «увидеть» невидимое? Электрическое поле окружает нас повсюду, от розетки до экрана смартфона. Давайте разберемся, как смоделировать его для точечных зарядов и сложных поверхностей и получить эти завораживающие картинки силовых линий и эквипотенциалей.
1. Фундамент: Главные Уравнения
▪️ Закон Кулона для точечного заряда:
F = k * (q₁ * q₂) / r² . Но для поля удобнее работать с напряженностью E = F / q.▪️ Принцип суперпозиции: Поле системы зарядов — это просто векторная сумма полей от каждого заряда в отдельности. Это наше главное оружие в моделировании.
2. Силовые Линии и Эквипотенциали
Поле можно описывать по-разному, и это ключ к красивой визуализации.
▪️Силовые линии (Графическое отображение напряженности E):
— Воображаемые линии, касательные к которым в каждой точке совпадают с вектором E.
— Свойства: Начинаются на «+» зарядах, заканчиваются на «-» или уходят в бесконечность. Никогда не пересекаются!
— Густота линий пропорциональна величине напряженности.
▪️Эквипотенциальные поверхности (Графическое отображение потенциала φ):
— Что это? Поверхности, где потенциал постоянен (φ = const).
— Свойства: Всегда перпендикулярны силовым линиям. Работа по перемещению заряда вдоль такой поверхности равна нулю.
3. Как Строить Уравнения?
Для точечного заряда q в точке (x₀, y₀):
— Потенциал: φ(x, y) = k * q / sqrt( (x - x₀)² + (y - y₀)² )
— Вектор напряженности E: Eₓ = -∂φ/∂x, Eᵧ = -∂φ/∂y (это просто частные производные, градиент со знаком минус).
А как получить уравнение силовой линии? Это уже сложнее. Силовая линия — это кривая, которая в каждой точке направлена вдоль E. Математически это решается через дифференциальное уравнение:
dx / Eₓ(x, y) = dy / Eᵧ(x, y). Решая его (часто численно!), мы получаем траектории для наших визуализаций.4. Инструменты для Моделирования и Визуализации
▪️Python — король научной визуализации: Библиотеки: matplotlib, numpy, scipy.
▪️Как: Задаете сетку точек (x, y), для каждой считаете Eₓ и Eᵧ (суммируя вклады от всех зарядов). Затем:
— Для силовых линий: используйте matplotlib.streamplot
— Для эквипотенциалей: matplotlib.contour или contourf для потенциала φ.
import numpy as np
import matplotlib.pyplot as plt
# Создаем сетку
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
# Задаем заряды (q, x, y)
charges = [(1, -0.5, 0), (-1, 0.5, 0)]
# Вычисляем полные Eₓ и Eᵧ на сетке
Ex = np.zeros(X.shape)
Ey = np.zeros(Y.shape)
k = 9e9
for q, xq, yq in charges:
R = np.sqrt((X - xq)**2 + (Y - yq)**2)
Ex += k * q * (X - xq) / R**3
Ey += k * q * (Y - yq) / R**3
# Рисуем силовые линии
plt.streamplot(X, Y, Ex, Ey, color='blue', linewidth=1, density=2)
plt.show()
Готовые симуляторы:
— PhET Interactive Simulations (отлично для начального понимания).
— Falstad's E&M Simulator (очень наглядно).
— Comsol Multiphysics, Ansys — для серьезного моделирования сложных поверхностей.
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥65❤30👍21⚡12
Forwarded from Репетитор IT men
Для решения систем линейных алгебраических уравнений (СЛАУ) большой размерности, а также систем, имеющих разреженные матрицы, применение точных методов (например, метод Гаусса) не является целесообразным, так как...
👨🏻💻Читать статью полностью 📝
#программирование #математика #python #разбор_задач #численные_методы
💡 Репетитор IT men // @mentor_it
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤10🔥7😱4
В этой заметке разберем классический подвох, на котором спотыкаются даже опытные разработчики. Рассмотрим код:
a = [[]] * 3
a[0].append(1)
print(a)
Что будет на выводе в консоли? A)
[[1], [], []] B) [[1]] C) [[1], [1], [1]] D) ОшибкаПравильный ответ:
А если мы увеличим вложенность списков?
a = [[[]]] * 3
a[0].append(1)
print(a)
Что выведет? Подумайте, прежде чем открывать ответ.
Правильный ответ:
📚 Ошиблись? Тогда давайте разбираться. Теория того как работает умножение списков
▪️ 1. Главное правило: Операция
[x] * n работает так: ➖ Создается объект
x➖ Создается список из
n элементов➖ Каждый элемент — это ссылка на один и тот же объект
xЭто называется поверхностным (shallow) копированием.
a = [[]] * 3 Реально в памяти: a = [ссылка_на_список, ссылка_на_список, ссылка_на_список] ▪️ 2. Почему с числами всё проще, а со списками — нет?
b = [1] * 3
b[0] = 5
print(b) # [5, 1, 1] всё работает
Числа — неизменяемые. Когда мы пишем
b[0] = 5, мы не меняем объект 1, а переназначаем ссылку на новый объект 5. Остальные элементы продолжают ссылаться на 1.Со списками иначе:
a = [[]] * 3
a[0].append(1) # МЕНЯЕМ сам объект, а не переназначаем ссылку
Метод
.append() изменяет существующий список, не создавая новый. Поэтому изменения видны через все ссылки.a = [[]] * 3
a[0].append(1)
print(a) # [[1], [1], [1]]
a = [[[]]] * 3
a[0].append(1)
print(a) # [[[], 1], [[], 1], [[], 1]]
a = [[[]]] * 3
a[0][0].append(1) # Два индекса!
print(a) # [[[1]], [[1]], [[1]]]
a = [[[]]] * 3
a[0] = 100 # ПЕРЕНАЗНАЧАЕМ ссылку
print(a) # [100, [[ ]], [[ ]]]
a = [[], [], []] # уже три разных списка
a[0].append(1) # меняем только первый
print(a) # [[1], [], []]
▪️Как создать независимые списки?
a = [[] for _ in range(3)]
a[0].append(1)
print(a) # [[1], [], []]
a = [[[]] for _ in range(3)]
a[0].append(1)
print(a) # [[[], 1], [[]], [[]]]
Глубокое копирование:
import copy
a = [copy.deepcopy([[]]) for _ in range(3)]
Классика циклом:
a = []
for _ in range(3):
a.append([])
1. Умножение списков ≠ создание копий объектов — это создание копий ссылок.
2. Для изменяемых объектов (списки, словари, множества) проблема особенно заметна.
3. Для неизменяемых (числа, строки, кортежи) проблема скрыта, но механизм тот же.
4. Всегда используй генератор списков, если нужны независимые вложенные структуры.
5.
a[0].append() — изменение объекта; a[0] = ... — переназначение ссылки▪️Для проверки понимания задачи. Что выведет этот код?
a = [[0]] * 3
a[1][0] = 5
print(a)
#программирование #python #задачи #алгоритмы #computer_science #собеседования
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤42👍21🔥17🤯12🤔4👻4🗿4⚡1🤩1👨💻1👾1
Эту задачу решают по-разному. Кто прав? 🤯
🖥 Дан массив целых чисел. Найти индекс элемента, который не равен ни предыдущему, ни следующему (крайние элементы не проверяем).
Ограничение: длина массива ≥ 3.
Допустим... сделаем так...
Или даже так...
❓ Всё ли здесь хорошо? Или код содержит скрытый баг?
#python #алгоритм #программирование #собеседование #it #разработка #задачи
💡 Physics.Math.Code // @physics_lib
Ограничение: длина массива ≥ 3.
Допустим... сделаем так...
def find_unique(arr):
return next(i for i in range(1, len(arr)-1)
if arr[i] not in (arr[i-1], arr[i+1]))
Или даже так...
f=lambda a:next(i for i in range(1,len(a)-1)if a[i]-a[i-1]and a[i]-a[i+1])
#python #алгоритм #программирование #собеседование #it #разработка #задачи
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Эту задачу решают по-разному. Кто прав? 🤯 #python #algoritm
В этой задаче нет единственно верного решения. Всё зависит от конте...
👍12❤5🔥3🤔3👨💻2😎2
This media is not supported in your browser
VIEW IN TELEGRAM
Задумывались ли вы, как «увидеть» невидимое? Электрическое поле окружает нас повсюду, от розетки до экрана смартфона. Давайте разберемся, как смоделировать его для точечных зарядов и сложных поверхностей и получить эти завораживающие картинки силовых линий и эквипотенциалей.
1. Фундамент: Главные Уравнения
▪️ Закон Кулона для точечного заряда:
F = k * (q₁ * q₂) / r² . Но для поля удобнее работать с напряженностью E = F / q.▪️ Принцип суперпозиции: Поле системы зарядов — это просто векторная сумма полей от каждого заряда в отдельности. Это наше главное оружие в моделировании.
2. Силовые Линии и Эквипотенциали
Поле можно описывать по-разному, и это ключ к красивой визуализации.
▪️Силовые линии (Графическое отображение напряженности E):
— Воображаемые линии, касательные к которым в каждой точке совпадают с вектором E.
— Свойства: Начинаются на «+» зарядах, заканчиваются на «-» или уходят в бесконечность. Никогда не пересекаются!
— Густота линий пропорциональна величине напряженности.
▪️Эквипотенциальные поверхности (Графическое отображение потенциала φ):
— Что это? Поверхности, где потенциал постоянен (φ = const).
— Свойства: Всегда перпендикулярны силовым линиям. Работа по перемещению заряда вдоль такой поверхности равна нулю.
3. Как Строить Уравнения?
Для точечного заряда q в точке (x₀, y₀):
— Потенциал: φ(x, y) = k * q / sqrt( (x - x₀)² + (y - y₀)² )
— Вектор напряженности E: Eₓ = -∂φ/∂x, Eᵧ = -∂φ/∂y (это просто частные производные, градиент со знаком минус).
А как получить уравнение силовой линии? Это уже сложнее. Силовая линия — это кривая, которая в каждой точке направлена вдоль E. Математически это решается через дифференциальное уравнение:
dx / Eₓ(x, y) = dy / Eᵧ(x, y). Решая его (часто численно!), мы получаем траектории для наших визуализаций.4. Инструменты для Моделирования и Визуализации
▪️Python — король научной визуализации: Библиотеки: matplotlib, numpy, scipy.
▪️Как: Задаете сетку точек (x, y), для каждой считаете Eₓ и Eᵧ (суммируя вклады от всех зарядов). Затем:
— Для силовых линий: используйте matplotlib.streamplot
— Для эквипотенциалей: matplotlib.contour или contourf для потенциала φ.
import numpy as np
import matplotlib.pyplot as plt
# Создаем сетку
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
# Задаем заряды (q, x, y)
charges = [(1, -0.5, 0), (-1, 0.5, 0)]
# Вычисляем полные Eₓ и Eᵧ на сетке
Ex = np.zeros(X.shape)
Ey = np.zeros(Y.shape)
k = 9e9
for q, xq, yq in charges:
R = np.sqrt((X - xq)**2 + (Y - yq)**2)
Ex += k * q * (X - xq) / R**3
Ey += k * q * (Y - yq) / R**3
# Рисуем силовые линии
plt.streamplot(X, Y, Ex, Ey, color='blue', linewidth=1, density=2)
plt.show()
Готовые симуляторы:
— PhET Interactive Simulations (отлично для начального понимания).
— Falstad's E&M Simulator (очень наглядно).
— Comsol Multiphysics, Ansys — для серьезного моделирования сложных поверхностей.
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
❤33👍24🔥12⚡1😢1