Как масштабировать данные Солнечной системы до моделируемых значений

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

Я воссоздаю солнечную систему в симуляции n тел, которую я запрограммировал ранее. И у меня проблема с уменьшением солнечных данных. Таким образом, даже если я использую килограммы и километры для метрических единиц, значения намного больше, чем переменные могут храниться в программировании. Также, как некоторые из вас знают, чем больше значение, тем больше ошибка с плавающей запятой. (шум ошибки в данных) Также это замедляет обработку.

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

Но я не уверен, стоит ли мне уменьшать массу или нет. Мой здравый смысл подсказывает, что я должен уменьшить массу, чтобы плотность каждого тела оставалась неизменной. Поэтому я взял плотность и рассчитал новое значение массы для каждого тела с новым уменьшенным радиусом. Но я как-то не мог убедить себя, правда это или нет. Вот я и обращаюсь к вам :) Должен ли я также уменьшить массу?

PS.1: я использовал с помощью Ф знак равно грамм М м / р 2 уравнение для расчетов как обычно. (Повторяя его через каждую пару тел)

Если есть другие программисты, такие как я, заинтересованные в создании подобной симуляции, как вы решили эту проблему с размером данных? Есть ли лучшие решения, чем уменьшение значений?

PS. Я создал файл excel, который выполняет преобразование масштаба. Поэтому я делюсь листом в OneDrive. ( http://1drv.ms/1NIekGo ) Если вы можете проверить мои расчеты и значения, это также будет очень полезно для меня. Спасибо за любую помощь.

Ничего не уменьшайте, а делайте то, что делает НАСА: ilrs.gsfc.nasa.gov/docs/2014/196C.pdf , и используйте расстояния в астрономических единицах (а.е.), время в секундах и массы в относительной пропорции к каждой из них . другое, не в кг.
@barrycarter Итак, какой формат константы G мне следует использовать в уравнении F = GMM/r^2? Я имею в виду, что если я использую массу в относительных пропорциях и длинах в а.е., обычные единицы постоянной G устаревают. Мне нужно преобразовать его, но как мне это сделать с относительными значениями массы?
Вы понимаете, как работает преобразование единиц измерения? Например, если вам дано значение гравитационной постоянной в метрах ^ 3 / (килограммы * секунды ^ 2), знаете ли вы, как преобразовать это значение в значение гравитационной постоянной в единицах AU ^ 3 / (масса Земли * годы^2)?

Ответы (3)

Как упомянул Баррикартер в своем комментарии, вам следует больше заботиться о единицах измерения, а не о масштабе.

Как правило, лучше придерживаться общепринятых единиц измерения, которые люди узнают. (Это поможет вам держать голову прямо и другим будет легче просматривать вашу работу.) В астрономии они немного отличаются от стандартных единиц СИ, поскольку вещи, скажем так , большие , и числа выходят из-под контроля. быстро (как вы заметили). Вот некоторые единицы измерения, предлагаемые на странице Википедии астрономической системы единиц :

  • Время : День. Это, вероятно, не слишком важно, поэтому не стесняйтесь использовать здесь секунды. (В конце концов, разница всего в 5 порядков.)
  • Масса : есть несколько условных обозначений, но лично я чаще всего встречаюсь с солнечными массами. Поскольку вы моделируете нашу солнечную систему, это будет удобным ориентиром.
  • Длина : я бы определенно использовал астрономические единицы. (Какое подходящее имя!)

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

Спасибо за ответ. Да, использование au имеет гораздо больше смысла. Но есть еще кое-что, что меня смущает. На странице вики, на которую вы ссылаетесь, 1 солнечная масса равна 1,988 * E30, а GM ☉ составляет 1,327 × E20 кг м3 с −2. Таким образом, это в формате метров и килограммов. Поскольку я использую уравнение F=GMm/r^2; Разве я не должен преобразовать формат G в au и солнечную массу, если я использую au в r (расстояние) и солнечную массу в массах тела? Я имею в виду, что это в основном та же проблема с проблемой масштаба, о которой я упоминал в основном вопросе. Есть что-то, чего я не могу себе представить, и не знаю почему.
Чтобы было более понятно: если вы проверили мой лист Excel, я уменьшаю длину, я также уменьшаю массы, поэтому плотности тела остаются прежними. Это действительно необходимо? Длина и масса - две независимые единицы, они не должны влиять друг на друга, когда я уменьшаю одну. Но с другой стороны, плотность должна остаться прежней. Значит, они все-таки зависят друг от друга по плотности?
Вам вообще не нужно беспокоиться о плотности. Просто конвертируйте свои единицы, пока они не станут управляемыми.

Рассмотрим почти круговую орбиту. В среднем, в знак равно 2 π р / Т , а сила тяжести уравновешивает центробежную силу:

грамм М м р 2 знак равно м в 2 р знак равно 4 π 2 м р Т 2
Решить для грамм и подставьте значения для орбиты Земли вокруг Солнца:
грамм знак равно 4 π 2 р 3 М Т 2 знак равно 4 π 2 А U 3 М   у 2
Если вместо этого вам нужны дневные единицы, используйте коэффициент преобразования, чтобы отменить годы:
грамм знак равно 39,5 А U 3 М   у 2 ( 1   у 365,25   г ) 2 знак равно 2,96 × 10 4 А U 3 М   г 2
Метод метки фактора также работает, если вы начинаете со значения MKS:
грамм знак равно 6,67 × 10 11 м 3 к грамм   с 2 ( 1   А U 1,496 × 10 11   м ) 3 ( 1,99 × 10 30   к грамм 1   М ) ( 86400   с 1   г ) 2 знак равно 2,96 × 10 4 А U 3 М   г 2
Проверочные тесты покажут, правильно ли работает ваша симуляция. Настройте множество простых систем, в которых у вас есть четкое представление о том, что должно произойти, а затем проверьте, что происходит на самом деле.

Я запрограммировал один сам некоторое время назад. Я использовал полные единицы СИ в сочетании с удвоениями (64-битные числа с плавающей запятой). Они отлично подходят для масштабов нашей Солнечной системы и по-прежнему чрезвычайно точны.

        var sun = new Star();
        sun.Position = new Vector3D(0,0,0);
        sun.Velocity = new Vector3D(0,0,0);
        sun.Mass = 1.998855e30;

        var earth = new Planet();
        earth.Mass = 5.9722e24;
        earth.Position = new Vector3D(0, 149.6e9, 0);
        earth.Velocity = new Vector3D(29780,0,0);

        system.World.Objects.Add(sun);
        system.World.Objects.Add(earth);

Если вам интересно, мой код для этой симуляции находится на github: https://github.com/RononDex/Simulation

Сама симуляция находится в подпапкеSimulation.Testing

"Солнце.Масса = 1.998855e30;" Это еще не уменьшено...
@Hohmannfan Как я уже сказал, я использовал значения SI, которые не уменьшены.
Я имею в виду, что во многих необходимых вычислениях вы должны умножить несколько чисел такой величины, прежде чем вернуться к разумным числам. Несмотря на то, что сама постоянная находится в допустимых пределах, они все же могут вызвать непредвиденные ошибки в вычислениях.
@Hohmannfan Я предлагаю вам прочитать некоторые ресурсы на тему двойной точности (64-битные числа с плавающей запятой). Даже для таких значений, как масса солнца с 10 ^ 30, точность все же лучше, чем 0,0001 кг (если 1 = 1 кг)
Хорошо, экспоненте выделено 11 бит, и это все еще на 4 бита больше, чем в худшем примере вычисления, который я могу придумать. Дело принято.