Давно хотел посмотреть наглядно систему планет, теперь просто. В случае локальности система должна развалиться(ТТР: нелокальност - условие стабильности структуры). А. Гравитация нелокальна(мгновенна: связь = отношение). Б. Локальна, ограничена некоторой скоростью(C). Rel - дипсик Тест на нереал параметрах, проверить метод моделирования бям'ом. Дипсик собирает некий код, который запускается тут. Но долго оно майнит интерпретирует.. Код (Text): import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from IPython.display import HTML, display # ============================================================ # НОРМИРОВАННАЯ СИСТЕМА ЕДИНИЦ (МАЛЫЙ ШАГ ДЛЯ СТАБИЛЬНОСТИ) # ============================================================ G = 1.0 C = 0.3 # скорость гравитации (задержка ~30% периода) DT = 0.001 # МАЛЕНЬКИЙ ШАГ для стабильности STEPS = 15000 # 15000 * 0.001 = 15 единиц времени (~2.4 периода) N = 5 # Массы masses = np.array([1.0, 0.05, 0.05, 0.05, 0.05]) # звёзды очень лёгкие masses = masses / masses.sum() * 10.0 # Начальные условия radii = np.array([0.0, 1.0, 1.5, 2.0, 2.5]) angles = np.array([0.0, 0.0, np.pi/3, 2*np.pi/3, np.pi]) pos = np.zeros((N, 2)) vel = np.zeros((N, 2)) # Центр pos[0] = [0.0, 0.0] vel[0] = [0.0, 0.0] # Звёзды for i in range(1, N): r = radii[i] phi = angles[i] pos[i, 0] = r * np.cos(phi) pos[i, 1] = r * np.sin(phi) v_circ = np.sqrt(G * masses[0] / r) vel[i, 0] = -pos[i, 1] / r * v_circ vel[i, 1] = pos[i, 0] / r * v_circ # Центр масс com_pos = np.sum(masses[:, None] * pos, axis=0) / masses.sum() com_vel = np.sum(masses[:, None] * vel, axis=0) / masses.sum() pos = pos - com_pos vel = vel - com_vel print("=" * 60) print("СТАБИЛЬНАЯ СИМУЛЯЦИЯ (МАЛЫЙ ШАГ)") print("=" * 60) print(f" DT = {DT}, шагов = {STEPS}, время = {STEPS*DT:.2f}") print(f" Период звезды 1: {2*np.pi*radii[1] / np.linalg.norm(vel[1]):.2f}") print(f" Шагов на период: {int((2*np.pi*radii[1] / np.linalg.norm(vel[1])) / DT)}") print(f" C = {C}, задержка на радиусе 1: {1/C:.2f}") print("=" * 60) # ============================================================ # ФУНКЦИИ УСКОРЕНИЙ # ============================================================ def accel_instant(pos, masses): acc = np.zeros_like(pos) for i in range(N): for j in range(N): if i == j: continue dr = pos[j] - pos[i] r = np.linalg.norm(dr) if r < 1e-8: continue acc[i] += G * masses[j] * dr / r**3 return acc def accel_retarded(pos_now, history, step, masses): acc = np.zeros_like(pos_now) for i in range(N): for j in range(N): if i == j: continue dr = pos_now[j] - pos_now[i] r = np.linalg.norm(dr) if r < 1e-8: continue delay_steps = int(r / C / DT) delay_steps = max(1, min(delay_steps, step)) idx = max(0, step - delay_steps) pj_ret = history[idx][j] dr_ret = pj_ret - pos_now[i] rr = np.linalg.norm(dr_ret) if rr < 1e-8: continue acc[i] += G * masses[j] * dr_ret / rr**3 return acc # ============================================================ # ЗАПУСК # ============================================================ print("\nСимуляция мгновенной гравитации...") p = pos.copy(); v = vel.copy() traj_i = [p.copy()] a = accel_instant(p, masses) for step in range(STEPS): p = p + v * DT + 0.5 * a * DT**2 na = accel_instant(p, masses) v = v + 0.5 * (a + na) * DT a = na traj_i.append(p.copy()) traj_i = np.array(traj_i) print(f" ✓ Завершено: {len(traj_i)} шагов") print(f"\nСимуляция локальной гравитации (c={C})...") p = pos.copy(); v = vel.copy() traj_r = [p.copy()] hist = [p.copy()] for step in range(1, STEPS+1): a = accel_retarded(p, hist, step, masses) p = p + v * DT + 0.5 * a * DT**2 v = v + a * DT traj_r.append(p.copy()) hist.append(p.copy()) traj_r = np.array(traj_r) print(f" ✓ Завершено: {len(traj_r)} шагов") # ============================================================ # РАДИУСЫ # ============================================================ r1_i = np.sqrt(np.sum(traj_i[:, 1, :]**2, axis=1)) r1_r = np.sqrt(np.sum(traj_r[:, 1, :]**2, axis=1)) # ============================================================ # ВИЗУАЛИЗАЦИЯ # ============================================================ colors = ['#ffd43b', '#ff6b6b', '#4dabf7', '#69db7c', '#ff922b'] fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 7)) for ax, traj, title in zip([ax1, ax2], [traj_i, traj_r], ['МГНОВЕННАЯ (НЕЛОКАЛЬНАЯ)\nИДЕАЛЬНЫЕ ОРБИТЫ', f'ЛОКАЛЬНАЯ (c={C})\nСПИРАЛИ РАСПАДА']): ax.set_xlim(-3.5, 3.5) ax.set_ylim(-3.5, 3.5) ax.set_aspect('equal') ax.set_title(title, fontsize=14, fontweight='bold') ax.grid(True, alpha=0.15, linestyle='--') ax.set_facecolor('#0a0a1a') ax.set_xlabel('x') ax.set_ylabel('y') # Траектории for i in range(N): points = traj[:, i, :] step_plot = max(1, int(len(points) / 1000)) for t in range(0, len(points)-1, step_plot): ax.plot(points[t:t+2, 0], points[t:t+2, 1], color=colors[i], alpha=0.3, linewidth=0.8) # Старт ax.scatter(traj[0, :, 0], traj[0, :, 1], color='white', s=150, marker='*', edgecolors='black', linewidth=1, zorder=10) # Финиш ax.scatter(traj[-1, :, 0], traj[-1, :, 1], c=colors, s=masses*40, edgecolors='white', linewidth=1.5, zorder=10) plt.suptitle('СРАВНЕНИЕ ГРАВИТАЦИОННЫХ МОДЕЛЕЙ\n(МАЛЫЙ ШАГ = СТАБИЛЬНОСТЬ)', fontsize=16, fontweight='bold', color='white') plt.tight_layout() plt.show() # ============================================================ # ГРАФИК РАДИУСА # ============================================================ fig2, ax = plt.subplots(figsize=(14, 5)) ax.plot(r1_i, label='Мгновенная', color='#4dabf7', linewidth=2) ax.plot(r1_r, label=f'Локальная (c={C})', color='#ff6b6b', linewidth=2) ax.axhline(y=r1_i[0], color='white', linestyle='--', alpha=0.3) ax.set_xlabel('Шаг') ax.set_ylabel('Радиус звезды 1') ax.set_title('Эволюция радиуса') ax.legend() ax.grid(True, alpha=0.2) ax.set_facecolor('#0a0a1a') ax.tick_params(colors='white') plt.tight_layout() plt.show() # ============================================================ # АНИМАЦИЯ # ============================================================ print("\nСоздание анимации...") fig4, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 7)) for ax, traj, title in zip([ax1, ax2], [traj_i, traj_r], ['МГНОВЕННАЯ\nИДЕАЛЬНЫЕ ОРБИТЫ', f'ЛОКАЛЬНАЯ (c={C})\nСПИРАЛИ РАСПАДА']): ax.set_xlim(-3.5, 3.5) ax.set_ylim(-3.5, 3.5) ax.set_aspect('equal') ax.set_title(title, fontsize=14, fontweight='bold') ax.grid(True, alpha=0.15, linestyle='--') ax.set_facecolor('#0a0a1a') ax.set_xlabel('x') ax.set_ylabel('y') lines1 = [ax1.plot([], [], color=colors[i], alpha=0.6, linewidth=1)[0] for i in range(N)] lines2 = [ax2.plot([], [], color=colors[i], alpha=0.6, linewidth=1)[0] for i in range(N)] scat1 = ax1.scatter(traj_i[0, :, 0], traj_i[0, :, 1], s=masses*30, c=colors, edgecolors='white', linewidth=1.5, zorder=5) scat2 = ax2.scatter(traj_r[0, :, 0], traj_r[0, :, 1], s=masses*30, c=colors, edgecolors='white', linewidth=1.5, zorder=5) info1 = ax1.text(0.02, 0.98, '', transform=ax1.transAxes, verticalalignment='top', color='white', fontsize=10, family='monospace', bbox=dict(boxstyle='round', facecolor='black', alpha=0.7)) info2 = ax2.text(0.02, 0.98, '', transform=ax2.transAxes, verticalalignment='top', color='white', fontsize=10, family='monospace', bbox=dict(boxstyle='round', facecolor='black', alpha=0.7)) def update(frame): start = max(0, frame - 500) step = frame * 3 if step >= len(traj_i): step = len(traj_i) - 1 for i in range(N): lines1[i].set_data(traj_i[start:step+1, i, 0], traj_i[start:step+1, i, 1]) lines2[i].set_data(traj_r[start:step+1, i, 0], traj_r[start:step+1, i, 1]) scat1.set_offsets(traj_i[step, :, :]) scat2.set_offsets(traj_r[step, :, :]) info1.set_text(f'Шаг: {step}\nR: {r1_i[step]:.3f}') info2.set_text(f'Шаг: {step}\nR: {r1_r[step]:.3f}') return lines1 + lines2 + [scat1, scat2, info1, info2] ani = FuncAnimation(fig4, update, frames=range(0, STEPS//3, 2), interval=30, blit=True) plt.close() display(HTML(ani.to_html5_video())) print("\n" + "=" * 60) print("ГОТОВО!") print(f" Мгновенная: радиус изменился на {(r1_i[-1]/r1_i[0]-1)*100:.2f}%") print(f" Локальная: радиус изменился на {(r1_r[-1]/r1_r[0]-1)*100:.2f}%") print("=" * 60) Код (Text): import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from IPython.display import HTML, display # ============================================================ # ФИЗИЧЕСКИ КОРРЕКТНЫЕ ПАРАМЕТРЫ # ============================================================ G = 1.0 C = 0.5 # скорость гравитации (задержка = 2 радиуса) DT = 0.0001 # ОЧЕНЬ МАЛЕНЬКИЙ ШАГ (для точности) STEPS = 100000 # 100000 * 0.0001 = 10 единиц времени N = 5 # Массы masses = np.array([1.0, 0.05, 0.05, 0.05, 0.05]) masses = masses / masses.sum() * 10.0 # Начальные условия (круговые орбиты) radii = np.array([0.0, 1.0, 1.5, 2.0, 2.5]) angles = np.array([0.0, 0.0, np.pi/3, 2*np.pi/3, np.pi]) pos = np.zeros((N, 2)) vel = np.zeros((N, 2)) pos[0] = [0.0, 0.0] vel[0] = [0.0, 0.0] for i in range(1, N): r = radii[i] phi = angles[i] pos[i, 0] = r * np.cos(phi) pos[i, 1] = r * np.sin(phi) v_circ = np.sqrt(G * masses[0] / r) vel[i, 0] = -pos[i, 1] / r * v_circ vel[i, 1] = pos[i, 0] / r * v_circ # Центр масс com_pos = np.sum(masses[:, None] * pos, axis=0) / masses.sum() com_vel = np.sum(masses[:, None] * vel, axis=0) / masses.sum() pos = pos - com_pos vel = vel - com_vel print("=" * 60) print("ФИЗИЧЕСКИ КОРРЕКТНАЯ СИМУЛЯЦИЯ") print("=" * 60) print(f" DT = {DT}, шагов = {STEPS}, время = {STEPS*DT:.2f}") print(f" Период звезды 1: {2*np.pi*radii[1] / np.linalg.norm(vel[1]):.2f}") print(f" Шагов на период: {int((2*np.pi*radii[1] / np.linalg.norm(vel[1])) / DT)}") print("=" * 60) # ============================================================ # ФУНКЦИИ УСКОРЕНИЙ # ============================================================ def accel_instant(pos, masses): acc = np.zeros_like(pos) for i in range(N): for j in range(N): if i == j: continue dr = pos[j] - pos[i] r = np.linalg.norm(dr) if r < 1e-8: continue acc[i] += G * masses[j] * dr / r**3 return acc def accel_retarded(pos_now, history, step, masses): acc = np.zeros_like(pos_now) for i in range(N): for j in range(N): if i == j: continue dr = pos_now[j] - pos_now[i] r = np.linalg.norm(dr) if r < 1e-8: continue delay_steps = int(r / C / DT) delay_steps = max(1, min(delay_steps, step)) idx = max(0, step - delay_steps) pj_ret = history[idx][j] dr_ret = pj_ret - pos_now[i] rr = np.linalg.norm(dr_ret) if rr < 1e-8: continue acc[i] += G * masses[j] * dr_ret / rr**3 return acc # ============================================================ # ЗАПУСК # ============================================================ print("\nСимуляция мгновенной гравитации...") p = pos.copy(); v = vel.copy() traj_i = [p.copy()] a = accel_instant(p, masses) for step in range(STEPS): p = p + v * DT + 0.5 * a * DT**2 na = accel_instant(p, masses) v = v + 0.5 * (a + na) * DT a = na traj_i.append(p.copy()) traj_i = np.array(traj_i) print(f" ✓ Завершено: {len(traj_i)} шагов") print(f"\nСимуляция локальной гравитации (c={C})...") p = pos.copy(); v = vel.copy() traj_r = [p.copy()] hist = [p.copy()] for step in range(1, STEPS+1): a = accel_retarded(p, hist, step, masses) p = p + v * DT + 0.5 * a * DT**2 v = v + a * DT traj_r.append(p.copy()) hist.append(p.copy()) traj_r = np.array(traj_r) print(f" ✓ Завершено: {len(traj_r)} шагов") # ============================================================ # ЭНЕРГИЯ (ДЛЯ ПРОВЕРКИ) # ============================================================ def compute_energy(traj, masses): E = np.zeros(len(traj)) for t in range(1, len(traj)-1): v = (traj[t+1] - traj[t-1]) / (2*DT) E_kin = 0.5 * np.sum(masses[:, None] * v**2) E_pot = 0 for i in range(N): for j in range(i+1, N): dr = traj[t][j] - traj[t][i] r = np.linalg.norm(dr) if r > 1e-10: E_pot -= G * masses[i] * masses[j] / r E[t] = E_kin + E_pot return E E_i = compute_energy(traj_i, masses) E_r = compute_energy(traj_r, masses) # ============================================================ # ВИЗУАЛИЗАЦИЯ # ============================================================ colors = ['#ffd43b', '#ff6b6b', '#4dabf7', '#69db7c', '#ff922b'] fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(16, 12)) # Траектории for ax, traj, title in zip([ax1, ax2], [traj_i, traj_r], ['МГНОВЕННАЯ (НЕЛОКАЛЬНАЯ)', f'ЛОКАЛЬНАЯ (c={C})']): ax.set_xlim(-3, 3) ax.set_ylim(-3, 3) ax.set_aspect('equal') ax.set_title(title, fontsize=14, fontweight='bold') ax.grid(True, alpha=0.15) ax.set_facecolor('#0a0a1a') step_plot = max(1, int(len(traj) / 2000)) for i in range(N): points = traj[::step_plot, i, :] ax.plot(points[:, 0], points[:, 1], color=colors[i], alpha=0.5, linewidth=0.8) ax.scatter(traj[0, :, 0], traj[0, :, 1], color='white', s=100, marker='*', zorder=10) ax.scatter(traj[-1, :, 0], traj[-1, :, 1], c=colors, s=80, edgecolors='white', zorder=10) # Энергия ax3.plot(E_i, label='Мгновенная', color='blue') ax3.plot(E_r, label='Локальная', color='red') ax3.set_xlabel('Шаг') ax3.set_ylabel('Энергия') ax3.set_title('Сохранение энергии') ax3.legend() ax3.grid(True, alpha=0.3) # Радиус r1_i = np.sqrt(np.sum(traj_i[:, 1, :]**2, axis=1)) r1_r = np.sqrt(np.sum(traj_r[:, 1, :]**2, axis=1)) ax4.plot(r1_i, label='Мгновенная', color='blue') ax4.plot(r1_r, label='Локальная', color='red') ax4.set_xlabel('Шаг') ax4.set_ylabel('Радиус звезды 1') ax4.set_title('Эволюция радиуса') ax4.legend() ax4.grid(True, alpha=0.3) plt.tight_layout() plt.show() # ============================================================ # ВЫВОД # ============================================================ print("\n" + "=" * 60) print("РЕЗУЛЬТАТЫ") print("=" * 60) print(f" Изменение энергии (мгн): {(E_i[-1]-E_i[0])/E_i[0]*100:.2f}%") print(f" Изменение энергии (лок): {(E_r[-1]-E_r[0])/E_r[0]*100:.2f}%") print(f" Изменение радиуса (мгн): {(r1_i[-1]/r1_i[0]-1)*100:.2f}%") print(f" Изменение радиуса (лок): {(r1_r[-1]/r1_r[0]-1)*100:.2f}%") print("=" * 60) - это ничего не доказывает.. --- Сообщение объединено, 1 сен 2026 в 16:24 --- Вот что вышло
Application, Это не проверка классики(ото и прочих гипотез, где время переменная, мультиверс, темные материи), а матем. моделирование(в ньют. нелокальность). Про гравит. кресты и линзы - это подмена понятий, дифракции света в атмосфере звезды на какие то искривления рассудка пространства, причем симметричные для луча.
Предлагаю термин "спираль дефекации" для всех неонаучных топиков Индия. А также предлагаю измерить локальность, я думаю, она будет очень большая, так как эти топики стали локальным мемом.
На счет кривости пространств. Всякую функцию можно разложить в ряд, тн аппроксимировать. Это делается для гравитации в ото, где одному из членов ряда придается мистический смысл искривления пространства. Типичное сочинение хитрого физика над формулами. Артеху не предлагаю, дабы не травмировать детский разум.
Эксперименты Шапиро — это классическое доказательство Общей теории относительности, которое напрямую опровергает идею о том, что искривление — лишь математическая фикция. Вот как это было: · Идея (1964): Астрофизик Ирвин Шапиро предложил проверить ОТО, измерив время прохождения радиосигнала до Венеры или Меркурия и обратно, когда планеты находятся за Солнцем . · Суть: Если сигнал проходит у края Солнца, его скорость в сильном гравитационном поле должна немного замедлиться (из-за искривления времени). Предсказанная задержка составляла около 200 микросекунд . · Проведение (1966–1967): В обсерватории Массачусетского технологического института использовали 36-метровую антенну для отражения радиоимпульсов от планет . Сравнивали фактическое время возврата сигнала с расчетами для плоского пространства . · Результат: Задержка совпала с предсказаниями ОТО в пределах погрешности . Это был «четвертый тест» Эйнштейна (после смещения перигелия Меркурия, отклонения света и красного смещения) . · Почему это важно: В экспериментах с космическими аппаратами и интерферометрией точность подтверждения достигла 10⁻⁹. Этот результат нельзя получить, ограничившись первым членом разложения — он бьет точно в цель, доказывая, что геометрия пространства-времени реально меняется .
Application, Калибровка, статистическая выборка, подгонка результатов по разному метод называют. Эффекта реально нет, так как телескопы видят четкие картины, а не смазанный разноцветный хаос.
Нашли оптимизацию по скорости. Вот пример взаимодействия обьектов(коллапс), чистый Ньютон, без всякой ото и темной материи Опробовать метод моделирования для начала..