Сгенерируйте код MEX, чтобы вычислить геодезию в кривом пространстве-времени

Эти примеры используют Общую теорию относительности Эйнштейна, чтобы вычислить геодезию в кривом пространстве-времени.

Необходимые условия

Нет никаких необходимых условий для этого примера.

Пример: вычисление прецессии планеты Меркурий

Этот пример вычисляет прецессию планеты Меркурий численно. Прецессия является небольшим вращением эллиптической орбиты вокруг солнца. Аналитически, использование уравнений Общей теории относительности значение чрезвычайно мало, дополнительные 43 дюйма (секунды дуги) в век. Вторая дуга является 1/3600-й из одной степени (считающий 360 градусов для полного оборота.) Даже при том, что дополнительная прецессия чрезвычайно мала, она соответствует точно с наблюдением. Чистая ньютонова механика (если мы принимаем решение проигнорировать все другие планеты нашей солнечной системы) не предсказывает прецессии.

Это приложение использует метод Эйлера с переменным временным шагом, где главный временной шаг составляет.5 секунд. Мы уменьшаем временной шаг, когда мы приближаемся к одному полному обороту. Прецессия вычисляется, когда планета достигает своего максимального расстояния от солнца, для которого мы вычисляем ее относительный угол к координатной оси.

Сгенерируйте MEX-функцию: прецессия планеты Меркурий

Сгенерируйте MEX-функцию с помощью команды codegen сопровождаемый под названием файл MATLAB, чтобы скомпилировать.

codegen gr_mercury_precession
Code generation successful.

gr_mercury_precession вызовы функции другие функции MATLAB, но необходимо задать только функцию точки входа при вызове codegen.

По умолчанию, codegen генерирует MEX-функцию под названием gr_mercury_precession_mex в текущей папке. Это позволяет вам тестировать код MATLAB и MEX-функцию и сравнивать результаты.

Запустите 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

Пример: трассировка лучей черная дыра

Уравнения Эйнштейном движения в Общей теории относительности могут обработать любой объект на любой скорости, поэтому давайте применим его к фотонам, которые перемещаются со скоростью света. В этой настройке у нас есть черная дыра перед фоновым изображением. Чтобы сделать эффект более видимым, мы увеличиваем массу черной дыры к астрономическим пропорциям, а также фоновому изображению. Таким образом мы можем изучить эффекты гравитационного lensing; фоновое изображение становится искаженным кривым пространством-временем, произведенным черной дырой.

Сгенерируйте MEX-функцию: трассировка лучей черная дыра

codegen gr_raytrace
Code generation successful.

Запустите MEX-функцию: трассировка лучей черная дыра

Трассировка лучей изображение занимает минуту или два на 2 ГГц x86 машина. На вашем экране вы видите исходное изображение (Vittorio Emanuele Mall в Милане, Италия) и, направо, представленное изображение того же изображения с черной дырой перед ним.

gr_raytrace_mex('mall.jpg');

Figure Original Picture contains an axes. The axes contains an object of type image.

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%

Figure Ray-traced with Black Hole contains an axes. The axes contains an object of type image.

Для просмотра документации необходимо авторизоваться на сайте