Эти примеры используют общую относительность Эйнштейна для вычисления геодезики в криволинейном пространстве-времени.
Предпосылки для этого примера отсутствуют.
Этот пример численно вычисляет прецессию планеты Меркурий. Прецессия представляет собой небольшое вращение эллиптической орбиты вокруг Солнца. Аналитически, используя уравнения общей относительности значение чрезвычайно мало, лишние 43 "(дуговые секунды) за век. Секунда дуги равна 1/3600 одной степени (считая 360 градусов для полного оборота). Хотя дополнительная прецессия чрезвычайно мала, она точно совпадает с наблюдением. Чистая ньютоновская механика (если мы решим игнорировать все другие планеты нашей Солнечной системы) предсказывает отсутствие прецессии.
Это приложение использует метод Эйлера с переменным временным шагом, где основной временной шаг составляет 0,5 секунды. Мы сокращаем временной шаг по мере приближения к одной полной революции. Прецессия вычисляется по мере достижения планетой максимального расстояния от Солнца, для которого мы вычисляем её относительный угол к координатной оси.
Создание функции MEX с помощью команды codegen за которым следует имя файла MATLAB для компиляции.
codegen gr_mercury_precessionCode generation successful.
gr_mercury_precession функция вызывает другие функции MATLAB, но при вызове необходимо указать только функцию начальной точки codegen.
По умолчанию codegen генерирует функцию MEX с именем gr_mercury_precession_mex в текущей папке. Это позволяет протестировать код MATLAB и функцию MEX и сравнить результаты.
Запустите сгенерированную функцию MEX.
gr_mercury_precession_mex
Progress: 5% Progress: 10% Progress: 15% Progress: 20% Progress: 25% Progress: 30% Progress: 35% Progress: 40% Progress: 45% Progress: 50% Progress: 55% Progress: 60% Progress: 65% Progress: 70% Progress: 75% Progress: 80% Progress: 85% Progress: 90% Progress: 95% Progress: 100%

precession: 0.10468" (0 years 87.87009 days) => 43.481"/century
Уравнения движения Эйнштейна в общей относительности могут обрабатывать любой объект с любой скоростью, поэтому применим его к фотонам, которые движутся со скоростью света. В этой конфигурации перед фоновым изображением имеется черная дыра. Чтобы сделать эффект более заметным, мы увеличиваем массу черной дыры до астрономических пропорций, а также фоновое изображение. Таким образом мы можем изучить эффекты гравитационного линзирования; фоновое изображение искажается искривленным пространственным временем, создаваемым черной дырой.
codegen gr_raytraceCode generation successful.
Трассировка изображения занимает минуту или две на машине x86 с тактовой частотой 2 ГГц. На экране вы видите оригинальную картинку (торговый центр Vittorio Emanuele в Милано, Италия) и справа тонированное изображение той же картины с черной дырой перед ней.
gr_raytrace_mex('mall.jpg');
Progress: 5% Progress: 10% Progress: 15% Progress: 20% Progress: 25% Progress: 30% Progress: 35% Progress: 40% Progress: 45% Progress: 50% Progress: 55% Progress: 60% Progress: 65% Progress: 70% Progress: 75% Progress: 80% Progress: 85% Progress: 90% Progress: 95% Progress: 100%
