Визуализация линий напряженности и движений электростатических зарядов, симулирование движения планет солнечной системы

    Привет, сегодня я хочу вам предложить наглядное пособие по моделированию некоторых физических процессов и показать как получить красивые изображения и анимации. Осторожно много картинок.


    Весь код можно найти в Google colab.

    Теория


    Для начала нам понадобится небольшой теоретический минимум по этой теме. Начнем с понимания что такое линии напряженности и как их считать. По сути данные линии являются слиянием множества векторов напряжённости, которую можно посчитать так:$E=\frac{k*|q|}{r^2}$.

    image

    Метод вычисления E


    Я рассчитывал вектор напряженности через подобие треугольников, получая тем самым проекции на оси x и y dx и dy соответственно.



    Из подобия следует, что радиуса вектора от заряда до точки в пространстве r и длинны вектора напряженности E равно отношению проекций этих векторов (x1 и dx соответственно) $\frac{R}{E}=\frac{x}{dx}=\frac{y}{dy}$. Формула результирующего вектора $\vec{E}=\left(\begin{array}{c} \sum_{i=0}^{N}\frac{x_i*|\vec{E}_i|}{R_i} \\ \sum_{i=0}^{N}\frac{y_i*|\vec{E}_i|}{R_i} \end{array}\right) \qquad $
    с этими знаниями получаем первый результат.



    Функция расчета проекций
    def E(q_prop, xs, ys, nq): #q_prop=[[xq1, yq1, q1, mq1, vxq1, vyq1], [xq2, yq2, q2, mq2, vxq2, vyq2] ... ] 
        l=1
        k=9*10**9
        Ex=0
        Ey=0
        c=0
        for c in range(len(q_prop)):#проходимся по всем зарядам в массиве вычисляем проекции напряженности в заданной точке и обновляем значение результирующей напряженности
            q=q_prop[c]
            r=((xs-q[0])**2+(ys-q[1])**2)**0.5
            dEv=(k*q[2])/r**2
            dEx=(xs-q[0])*(dEv/r)*l
            dEy=(ys-q[1])*(dEv/r)*l
    
            Ex+=dEx
            Ey+=dEy
        return Ex, Ey
    


    Метод построения линий


    Для начала нужно определиться с начальной и конечной точкой, откуда будет идти линия и докуда. Началом являются точки на окружности с радиусом r вокруг заряда, а концом точки отдаленные от зарядов не более чем на r.

    код для определения начальных точек
    theta = np.linspace(0, 2*np.pi, n)
    mask=q_prop[ q_prop[:,2]>0 ]#оставляем только положительные заряды 
    for cq in range(len(mask)):
        qmask=mask[cq]
        xr = r_q*np.cos(theta)+qmask[0]#определение х-ов точек окружности вокруг заряда
        yr = r_q*np.sin(theta)+qmask[1]#аналогично
    


    Так-же стоит сказать, что линии строятся только из положительных зарядов.

    И наконец построение линий. Для этого мы из начальной точки строим линию вектора напряженности в ней, обновляем начальную точку на конец построенной линии и повторяем пока не будет достигнуто условия окончания, названные выше.



    функция вычисления координат линий
    def Draw(size, q_prop,r_q, n):
      
      linen=np.empty((np.count_nonzero(q_prop[:,2]>0),n, 2000000), dtype=np.float64)
      linen[:] = np.nan
      theta = np.linspace(0, 2*np.pi, n)
      mask=q_prop[ q_prop[:,2]>0 ][ q_prop[q_prop[:,2]>0][:,3]==1 ]
      for cq in range(len(mask)):
        qmask=mask[cq]
        x11 = r_q*np.cos(theta)+qmask[0]
        x22 = r_q*np.sin(theta)+qmask[1]
        for c in range(len(x11)):
    
          xs=x11[c]
          ys=x22[c]
    
          lines=np.empty((2,1000000), dtype=np.float64)
          lines[:]=np.nan
          stop=0
          nnn=0
          
          lines[0][nnn]=xs
          lines[1][nnn]=ys
          while  abs(xs)<size+2 and abs(ys)<size+2: 
            nnn+=1
    
            for cq1 in range(len(q_prop)):
              q=q_prop[cq1]
              if ((ys-q[1])**2+(xs-q[0])**2)**0.5<r_q/2 :
                stop=1
                break
            if stop==1:
              break
            dx, dy = E1(q_prop,xs,ys)
    
            xs+=dx
            ys+=dy
            lines[0][nnn]=xs
            lines[1][nnn]=ys
           
          linen[cq,c,:]=lines.reshape(-1)
    
      return linen 


    Взаимодействие между зарядами


    Чтобы отразить их взаимодействие, нужно изменять его координаты и скорость через каждое маленькое время dt.

    $x+=\frac{E_x \cdot q \cdot dt^2}{2\cdot m} + v_x\cdot dt$


    $y+=\frac{E_y \cdot q \cdot dt^2}{2\cdot m} + v_y \cdot dt$


    $v_x+= \frac{E_x \cdot q \cdot dt}{ m} $


    $v_y+= \frac{E_y \cdot q \cdot dt}{ m} $





    Функция обновления координат и проекций скоростей зарядов
    def Update_all(q_prop):
      vx=0
      vy=0
      x=0
      y=0
      q_prop_1=np.copy(q_prop)
      for c in range(len(q_prop)):#проход по зарядам и обновление их координат и проекций скоростей
        xs=q_prop[c][0]
        ys=q_prop[c][1]
        q =q_prop[c][2]
        m =q_prop[c][3]
        vx=q_prop[c][4]
        vy=q_prop[c][5]
        Ex, Ey= E(q_prop, xs, ys, c)
    
        x=(((Ex*q)/m)*dt**2)/2+vx*dt+xs
        y=(((Ey*q)/m)*dt**2)/2+vy*dt+ys
        vx+=((Ex*q)/m)*dt
        vy+=((Ey*q)/m)*dt
        #print(q_prop[c]-[x,y,q,m,vx,vy])
        q_prop_1[c]=[x,y,q,m,vx,vy]
      
      return q_prop_1#возвращение обновлённого массива характеристик зарядов


    Гравитация


    На основе имеющегося кода я написал симулятор, отражающий движения тел под действием гравитации. Изменения в коде в основном для функции напряженности т.к. теперь будет считаться ускорение по похожей формуле.

    $g=\frac{G*m}{r^2}$


    $\vec{g}=\left(\begin{array}{c} \sum_{i=0}^{N}\frac{x_i*|\vec{g}_i|}{R_i} \\ \sum_{i=0}^{N}\frac{y_i*|\vec{g}_i|}{R_i} \end{array}\right) \qquad $


    Планеты стартуют с оси х в перигелийном расстояние и с перигелийной скоростью. Все значения планет и солнца (массы, расстояния, экстренциситеты) из справочника.

    Анимация для первых 4 планет + cолнца.



    Жду критику и предложений. До свидания.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 65

      0
      Интересно. Насколько сильно отклонение движения планет от орбит построенных по классическим формулам орбитальной механики?
      Пробовали добавить искривление пространства времени? При этом должен наблюдаться ощутимый дрифт орбиты Меркурия.

      для питона есть модуль github.com/RazerM/orbital для кслассического рассчёта орбит
        0
        Чем меньше брать dt тем точнее будет, сейчас стоит 1 земной день. Про Меркурий знаю, будет и правда интересно добавить учет СТО и сравнить потом.
          0
          Это очень слабый эффект, порядка нескольких угловых секунд в год. Нужно на несколько порядков уменьшать dt, чтобы СТО хоть как-то проявлялось
          +3
          Перигелий Меркурия смещается на 5,7" за земной год, или 1,4" за оборот вокруг Солнца. Полный оборот он будет проходить за 944 тысячи оборотов вокруг Солнца.
          Если брать вклад возмущения только планет, то было бы смещение на 5,267" в земной год, или 1 миллион 22 тысячи оборотов вокруг Солнца.
          Согласны ждать? ;)
            +1
            Ждём потихонечку, куда деваться)
            0

            https://habr.com/ru/post/377651/#comment_16733413
            Тут я сделал Меркурию прецессию исключительно в рамках ньютоновской механики.

              0
              Влияние неточечности Солнца и Меркурия на силы гравитационного взаимодействия между ними прямо противоречит теореме Гаусса (грубо говоря, если ближайшая к центру Солнца точка Меркурия дальше от центра Солнца, чем самая удалённая точка Солнца, то влияние размеров этих тел на их гравитационное взаимодействие строго отсутствует в рамках ньютоновской физики), поэтому утверждение про прецессию исключительно в рамках ньютоновской механики формально неверное.
                0

                Если вы про эту теорему: https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%93%D0%B0%D1%83%D1%81%D1%81%D0%B0


                То какое она имеет отношение к обсуждаемому вопросу? Напомню, форма Солнца не сферическая.

                  0
                  Напомню, форма Солнца не сферическая.

                  Уточните, пожалуйста, что Вы вкладываете в это утверждение. Речь про полярное сжатие, которое менее 1e-5 (что даёт абсолютную разницу между экваториальным и полярным радиусом меньше, чем у Земли, хотя Земля в 109 раз меньше по диаметру), или о чем-то другом?
                    0

                    Почему все скрывают, что Земля полая? И нефть скоро йок.


                    Раньше я думал что электричество это поток электронов идущий по проводам, со скоростью света, а оказалось что это только электромагнитное поле распространяется со скоростью света (но так и не понял что это за поле

                    Поток электронов это при постоянном токе, а "переменный ток" это э/м колебания. У нас с синхронизацией на 50 гц. в сша на 60 гц.

                      0
                      Вы бы что ли внимательнее смотрели куда тыкаете, когда на сообщения отвечаете…
            0
            Только не смейтесь, весь инет перерыл. Что такое электрическое поле, что это изгиб пространстава? или в нем какие то частицы, нее я серьезно, вы там формулами оперируете, чем представлено поле, кроме того что это поле?
            Приведу на пальцах на примере электричества, когда я действительно понял что такое электричество:
            Вот раньше я думал что электричество это поток электронов идущий по проводам, со скоростью света, а оказалось что это только электромагнитное поле распространяется со скоростью света (но так и не понял что это за поле, и во всех учебниках так, вступление и дальше вот вам формулы, я даже задачи по электротехнике на 1 первом (институт не профильный по электронике) курсе хорошо решал), а вот электричество это действительно поток электронов, но все го лишь несколько см. в секунду — так называемый «дрейф электронов» и никуда они не улетают, просто меняю направление движения если ток переменный и никто нам тогда об этом почему-то не говорил.
              +5
              а вот электричество это действительно поток электронов
              Во-первых не электричество, а электрический ток. Термин электричество имеет более широкий смысл. Во-вторых не поток электронов, а поток электрических зарядов. В некоторых средах ток может создаваться положительными зарядами (ионами).
                –9
                Есть так называемые «грамарнацисты», то вы «электронацист». Вы же наверняка поняли про что я спросил, решили терминов накидать, «перевести стрелки», а электрический ток я для примера привел (и что знаю что он может быть «дырками»). Точно так же кстати и преподы отвечали в свое время.
                  +1
                  Когда то, мой отец задавался подобными вопросами. Я ему стандартные формулировки, а он мне — ничего ты так и не понял))), какие электроны, какие заряды…
                    +1
                    Во-во — у меня та же история с отчимом. Насмотрятся видосов на ютубе и потом говорят перлы в стиле «никто нам почему-то не говорил это в школе и в школьных учебниках» и «ни один учитель физики не знает что такое электрический ток», «электроны не летят со скоростью света в проводе» и прочее. Вопрос — а зачем каждому школьнику знать детали передачи тока? Решение проблемы — пойти в универ на профильную специализацию, не более. Или почитать хотя бы физику полупроводников, например, чтобы понимать о чём идёт речь. Но это ж неинтересно и нудно. Гораздо более весело такие вот глупые вопросы задавать на форумах.
                      0
                      Он не видосы смотрел — он у меня был физиком по ракетному топливу. Вряд ли им в то время, в Томском политехе читали квантовую физику в полном объеме, но про фотоны, он мне тогда рассказывал.
                +4
                Что такое электрическое поле, что это изгиб пространстава?

                Нет.


                чем представлено поле, кроме того что это поле?

                Ничем. Фундментальные физические поля — к которым относится электромагнитное поле в вакууме — сами по себе являются особыми материальными объектами, имеющими определённые проявления, свойства, поведение. Они — в рамках известного нам — не сводятся к чему-то более элементарному.

                  –2
                  материальными объектами!!!
                  • НЛО прилетело и опубликовало эту надпись здесь
                      0
                      Собственно, вы на практике проверили, что важно само поле, а не то, что его создаёт
                        0

                        Тут нет противопоставления. Все элементы реальности, выделяемые физикой, являются математическими абстракциями: физика последовательно пользуется математикой как языком для описания реальности.

                          +1
                          Или математической абстракцией?

                          Наша самая точная теория — квантовая теория поля — считает поля физическими объектами.
                          Другой теории у нас нет, так что причин полагать поле математической абстракцией пока тоже нет.
                        0

                        Достаточно сложно объяснить, что такое поле. Можно сказать, что это какая-то физическая величина, распределённая в пространстве, и имеющая определённую величину и определённое направление в каждой точке пространства. У электрического поля — это вектор напряжённости.
                        У каждого поля в физике есть свои переносчики взаимодействия — кванты поля (электромагнитное поле -> электромагнитное взаимодействие). В качестве кванта у э/м поля выступает фотон (частица света). То есть, чтобы один электрон узнал о существовании другого электрона, то он должен "получить" от него фотон. Собственно, можно сказать, что электромагнитное поле состоит из фотонов (грубо сказано, но допустимо).

                          0
                          Поля бывают и скалярными, а не только векторными, но это мало меняет суть сказанного.
                            0
                            Скалярные и векторные поля ещё можно худо-бедно осознать, а вот тензорные…

                              0
                              Да уже всё равно по большому счёту.
                            –1
                            На самом деле на обывательско-философском уровне это просто. Стоит только принять, что всё, что существует, на деле реально лишь отчасти.
                            Тогда выйдет, что поле это не величина и не напряженность, а некий «потенциал к существованию» частицы. И пока она недостаточно реальна, она словно бы и «не существует».
                            Но при этом эти «эфемеры» накладываются друг на друга, сливаются, повышая свою реальность, либо распадаются, уменьшая её. Взаимодействуя с «целостно существующим» объектом — частицей — увеличивает локальную реальность этой «эфемеры», но когда взаимодействие прекращается — она снова перестаёт существовать.

                            *это даже ближе к истине, ведь поля часто описывают как вероятностную волну, а сами так называемые «частицы» — это лишь огромные множители волновых функций, наивысшая точка амплитуды в их состояниях.
                              0
                              Стоит только принять, что всё, что существует, на деле реально лишь отчасти.

                              Не совсем удачная формулировка, кмк, ведь критерий реальности — именно существование.
                                0
                                Признаю. Но речь шла именно об обывательском уровне, ведь «облако комплексных амплитуд в конфигурационном пространстве состояний множества частиц», хотя и является точным определением, непричастного к физике лишь испугает и запутает.
                            0

                            Я когда-то интересовался таким вопросом, увы но физика пытается ответить на вопросы как мир работает, а не почему или зачем. Я читал что возможно идёт обмен виртуальными фотонами, но увы, проверить экспериментально невозможно.

                              0
                              На вопрос «зачем» отвечают другие направления, не всегда научные. Вернее последние претендуют, частенько слишком навязчиво.
                                0
                                Я читал что возможно идёт обмен виртуальными фотонами, но увы, проверить экспериментально невозможно.

                                Почему невозможно? Эффект Казимира вполне подтверждён экспериментально.

                                  0
                                  увы но физика пытается ответить на вопросы как мир работает, а не почему или зачем

                                  Интересно, откуда растёт это заблуждение? Уже в который раз его встречаю.
                                  Физика очень даже пытается ответить на вопросы «почему?» (вопрос «зачем?» немного неуместен, потому что намекает на целеполагание и тянет за собой какой-нибудь креационизм), чтобы в этом убедиться, достаточно зайти на страницу нерешённых проблем физики:

                                  ru.wikipedia.org/wiki/Нерешённые_проблемы_современной_физики

                                  И физиков очень напрягают те же необъяснённые фундаментальные константы — почему они именно такие, а не какие-нибудь другие.
                                    0
                                    Я не собираюсь спорить.
                                  0

                                  Не надо весь инет перерывать, есть вполне авторитетные источники:
                                  Нейман Л. Р., Демирчян К. С. Теоретические основы электротехники. Т. 1.-М. – 1966.
                                  С первых страниц вводится понятие электромагнитного поля как некоей математической абстракции, вполне соответствующей наблюдаемым явлениям

                                    0
                                    Что такое электрическое поле

                                    Представьте себе множество точек пространства, и каждая точка пространства имеет числовые значения «электричности», «магнитности», «глюонности», и прочих свойств. Там, где определённое поле отсутствует, значение соответствующего свойства равно нулю. Точки с одинаковым числовым значением составляют силовую линию соответствующего поля.
                                      0
                                      | Что такое электрическое поле и чем представлено поле
                                      Перед тем как перейти к идеям Фарадея, которые потом развил и доказал Максвелл, приведу пример который легко представить визуально.
                                      Вы сидите в комнате, от вас до отопительной батареи, скажем три шага. Если измерить температуру, на линии в пространстве, от вас до батареи, в произвольно выбранных точках, то вы получите распределение температуры (тепла) в вашей комнате на выбранной линии. Ещё можно сказать что это распределение и будет тепловым полем в вашей квартире на данной линии. Если взять прибор для измерения тепла, тепловизор, он покажет на картинке это поле. Температура это скалярная величина, поэтому поле тоже будет скалярным. Тепло не движется, а передается от одного тела к другому.
                                      Переходим к идеям Фарадея.
                                      Согласно идеям Фарадея, электрические заряды не взаимодействуют друг с другом напрямую. Каждый из них создаёт электрическое поле вокруг себя. Поле одного заряда действует на поле другого заряда, и наоборот. Как эти поля визуально можно представить с помощью силовых линий, как они распределяются в пространстве, об этом и интересный пост вверху.
                                      Потом Максвелл развил и теоретически доказал что электромагнитные взаимодействия распределяются в пространстве с конечной скоростью, t = AB / c, где с = 300,000.00 км/сек скорость электромагнитного взаимодействия. Максвелл нашёл это это взаимодействие равно скорости света в вакууме. Если заряд из точки А будет двигаться то, электрическое поле вокруг заряда в точке В изменится через время t.
                                      Само электрическое поле имеет ряд свойств, одно из них, это напряжённость. Поразмышляйте над этой формулой E = F / q. Где E это напряжённость, F сила взаимодействия, и q заряд.
                                      И совсем коротко, здесь мы видим движение, т.е. направление и вектор, а значит и поле будет векторным.
                                        0
                                        приведу пример который легко представить визуально

                                        Это правда легко представить и понять, потому что температура воздуха это производная скорости молекул воздуха. При переходе к электромагнетизму аналогия ломается вместе с мозгом, потому что ЭМ-волны могут распространяться в вакууме без какой-либо среды.
                                          0
                                          Коллега, ломать ничего не надо, я же не говорил — и по аналогии. «приведу пример который легко представить визуально» — это пример, не более, когда, где тепло а где холодно, представить и даже почувствовать можно. А потом, прешёл к идеям Фарадея.

                                          Дальше пишу для интереса и для широты кругозора.
                                          Вы правильно написали — «потому что ЭМ-волны могут распространяться в вакууме без какой-либо среды.» Поэтому в физике, перед изучением Электрического поля, изучают что такое близкодействие и действие на расстоянии.

                                          Кто любит физику, и жаден до знаний, потом перейдёт к тензорному анализу. Увидит что раз тепло распределятся неравномерно в комнате, то это надо как-то выразить, узнает про градиент, что это вектор, который указывает на направление скорости роста поля, (тепло, тепло, теплее, теплее, жарко, жарко, очень жарко — НАШЁЛ!:) и т.д. Потом прочитает про векторное поле, плотность векторных линий, про поток вектора ч/з поверхность, дивергенцию и ротор в. поля, потом прочитает и постарается понять крив. сис. координат. Тут наверное и сломает мозг, а я здесь остановлюсь. Потому что если интересно, то нужно учить тензорный анализ, чтобы потом перейти к Теории Поля уже электрического.
                                          +1

                                          Начало хорошее, а дальше ой.
                                          Электростатическое поле — оно такое же скалярное, как поле температур. Напряжённость электростатического поля — это градиент скалярного поля. Точно так же можно ввести градиент поля температур, и он будет отражать тепловой поток. Электростатическое поле, в общем-то, тоже отражает поток (даже есть такая величина — поток вектора напряжённости через площадку), но непонятно чего (виртуальных фотонов?).
                                          Если переходить к движению, то тут имеем уже полноценное электромагнитное поле. Оно векторное, да. Но это 4-вектор, в котором есть скалярный электростатический потенциал и векторный потенциал магнитного поля.

                                            0
                                            Писал чтобы проще было понять. Я во втором комменте начал про тензоры, но комментарии это прежде всего не о теории, а чтобы была понятна мысль. Хотя согласен, детали важны. Но я написал в первом комменте, в части про Максвелла, что — электромагнитные взаимодействия, а вы меня поправляете электростатическим полем. Хорошо признаю, был неточен, вы правы, нужно было подчеркнуть какое поле в конце.
                                              0

                                              Да, я уже тоже увидел второй комментарий с поправками.


                                              Но в первом вы так прыгаете между "электрическим" и "электромагнитным" полями, что сложно понять — это бред "понявшего Мироздание" или неточно выразились.

                                                0
                                                Согласен, нужно было остановиться после Максвелла, и не прыгать в Е.
                                        0
                                        Немного не пойму с первым роликом, там три точки две с краю одинакового заряда и по центру противоположного? Почему линии появляются соединяющие линии напряженности между крайними точками (которые первоначально были крайними), после того как один из крайних меняется с центральным местами? Они же ведь одного заряда и должны отталкиваться, а следовательно линии напряженности не пересекаться.
                                          0
                                          Надо было конечно заряды, разного цвета сделать. Так не сразу понятно, что они не меняются местами, а делают полный оборот и остаются в изначальном порядке
                                          +1

                                          У меня пара вопросов к вашему коду:
                                          1. Почему вы везде в коде пишете


                                          for index in range(len(array)):
                                              array_item = array[index]
                                              ...

                                          вместо более простого, понятного и производительного


                                          for array_item in array:
                                              ...

                                          ?
                                          2. Почему вы используете для параметров отдельных тел список вместо класса с именованными полями?

                                            +3
                                            Изначально я следовал 2 варианту, но после решил ускорить код через numba, и она придиралась к итерированию. По той же причине я перешел с list на np.array. Numba дала существенный прирост к скорости.
                                            +2

                                            Как я понимаю, вы уравнения движения для зарядов решаете одно за одним, а не все вместе. И метод интегрирования похож на метод Эйлера для скоростей и трапеций — для координат. Не было проблем с точностью решений? А то такие условия — это простор для расхождений.

                                              0
                                              Я действительно обновляю параметры зарядов поочереди, но обновляю сам массив с данными только после обновления всей информации
                                              def Update_all(q_prop):
                                              vx=0
                                              vy=0
                                              x=0
                                              y=0
                                              q_prop_1=np.copy(q_prop)
                                              for c in range(len(q_prop)):
                                              xs=q_prop[c][0]
                                              ys=q_prop[c][1]
                                              m =q_prop[c][2]
                                              vx=q_prop[c][3]
                                              vy=q_prop[c][4]
                                              gx, gy= g(q_prop, xs, ys, c)

                                              x = gx*dt**2 + vx*dt + xs
                                              y = gy*dt**2 + vy*dt + ys
                                              vx+=gx*dt
                                              vy+=gy*dt

                                              q_prop_1[c]=[x,y,m,vx,vy, 0]

                                              return q_prop_1
                                              0

                                              Зачем интегрировать уравнения движения столь неточным методом? Есть же всякие методы Адамса или весьма популярный в рядах астрономов метод Рунге-Кутты 4 порядка

                                                +2
                                                Очень просто, я делал физическую часть по своим знаниям, и не знал названые вами методы. Следуя вашему совету посмотрю теорию, попробую все и сравню точности всех методов(если не забуду конечно).
                                                0
                                                А Рунге-Кутты 4 порядка в чистом виде любимые, или с модификациями? АФАИР там или энергия или импульс не сохраняется нормально, и система легко улетает за допустимые параметры. Кажется все-таки энергия.
                                                  0
                                                  Явные методы РК рассыпаются на Гамильтоновых системах.
                                                +4

                                                Классика: если нужно интегрирование консервативной системы в течение долгого времени, лучше брать симплектический интегратор, в простейшем случае — схема Верле:
                                                v(t + dt/2) = v(t) + F(t) / m × dt / 2
                                                x(t + dt) = x(t) + v(t + dt/2) × dt
                                                v(t + dt) = v(t + dt/2) + F(t + dt) / m × dt / 2


                                                Позволяет "бесплатно" (т.е. без ещё вычисления сил) получить лишний порядок аппроксимации по сравнению со схемами Рунге-Кутты.


                                                Если время относительно небольшое (несколько периодов обращения), но как можно точнее — там, как сказал roustique, рулят многошаговые методы и методы Рунге-Кутты. Многошаговые экономичнее в пересчёте на шаг, но не очень устойчивые, т.е. сами шаги должны быть короткими. Методы Рунге-Кутты требуют больше вычислений на шаг, но шаги можно делать длиннее и есть схемы с автоматической оценкой ошибки (благодаря чему можно адаптировать длительность шага под локальные свойства задачи).

                                                  0
                                                  Говоря о стабильности интеграторов, надо уточнять в каком смысле они устойчивы. И уточнять, о каких именно методах РК идёт речь.
                                                    0

                                                    Стандартное же условие устойчивости: |R(z)| < 1, подразумевая Re(z) < 0.
                                                    Для явных методов — "РК устойчивее" означает, что область устойчивости (широко применяемых) РК шире, чем методов Адамса, при равном порядке аппроксимации.
                                                    Для неявных — "РК устойчивее" в смысле отсутствия ограничений на устойчивость для методов РК высоких порядков, в отличие от многошаговых.


                                                    Ну т.е. вывод "многошаговые методы экономичнее, но для РК ограничение на длину шага слабее" — он сохраняется в любом случае.

                                                  0
                                                  Посмотрел на гифку и сразу вспомнилась книжка «Задача трех тел»
                                                    0
                                                    Очень похожее Гравитация в симуляции
                                                    https://hermann.is/gravity/

                                                    можно посбивать орбиты пролетными массами астероидами
                                                      0
                                                      интересно автору это было просто интересно или нас ждет что-то более крупное? что-то будет еще?
                                                        +2
                                                          +1

                                                          Да, кстати, раз такая пьянка с интегрированием движения — силовые линии тоже суть решение диффура dr / dξ = E(r) (где r = r(ξ) — параметрическое уравнение силовой линии). И их тоже можно строить как численное решение задачи Коши. В статье, по сути, используется явный метод Эйлера — он как бы работает (иногда), но можно лучше.

                                                            0
                                                            А что вы приняли за ξ?
                                                              0

                                                              Это просто параметр. Просто кривая задаётся в виде
                                                              x = x(ξ)
                                                              y = y(ξ)
                                                              z = z(ξ)
                                                              Например, на плоскости:
                                                              x = cosξ
                                                              y = sinξ
                                                              это уравнение окружности.
                                                              Но его же можно записать в виде задачи Коши для дифференциального уравнения:
                                                              dx / dξ = -y
                                                              dy / dξ = x
                                                              x(0) = 1, y(0) = 0
                                                              С силовыми линиями очень условно можно сказать так: предположим, что есть магические частицы, которые движутся вдоль силовых линий электростатического поля со скоростью, пропорциональной напряжённости. Тогда, чтобы построить силовые линии, можно построить траектории движения этих частиц. ξ в этом случае будет "время" движения такой частицы вдоль траектории (только эти частицы выдуманные, а метод всё равно работает).

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                          Самое читаемое