В этом примере показано, как исследовать модели гравитации Всемирной геодезической системы (WGS84) по зональной гармонике, сферической и 1984 для широт от +/- 90 градусов на поверхности Земли.
Поскольку система координат ECEF является геоцентрической, можно использовать сферические уравнения для определения положения по широте, долготе и геоцентрическому радиусу.
Вычислите геоцентрические радиусы в метрах в массиве широт от +/- 90 градусов с помощью geocradius.
lat = -90:90; r = geocradius( lat ); rlat = convang( lat, 'deg', 'rad'); z = r.*sin(rlat);
Поскольку долгота не влияет на модель земной гармонической гравитации, предположим, что положение y равно нулю.
x = r.*cos(rlat); y = zeros(size(x));
Использовать gravityzonal вычислить массив зональной гармонической гравитации в координатах ECEF для массива позиций ECEF в метрах в секунду в квадрате.
[gx_zonal, gy_zonal, gz_zonal] = gravityzonal([x' y' z']);
Использовать gravitywgs84 вычислять WGS84 гравитацию по нисходящей и северной осям на поверхности Земли, массив геодезических широт в градусах и 0 градусов долготы точным методом с атмосферой, без центробежных эффектов и без предварительной обработки.
lat_gd = geoc2geod(lat, r);
long_gd = zeros(size(lat));
[gd_wgs84, gn_wgs84] = gravitywgs84( zeros(size(lat)), lat_gd, long_gd, 'Exact', [false true false 0] );
Вычислите массив сферической гравитации для массива геоцентрических радиусов в метрах в секунду в квадрате, используя гравитационный параметр Земли в метрах в кубах в секунду в квадрате.
GM = 3.986004415e14; gd_sphere = -GM./(r.*r);
Для сравнения гравитационных моделей их выходы должны находиться в одной системе координат. Можно преобразовать зональную гравитацию из координат ECEF в координаты NED, используя Матрицу направления косинуса (Direction Cosine Matrix) из dcmecef2ned.
dcm_ef = dcmecef2ned( lat_gd, long_gd ); gxyz_zonal = reshape([gx_zonal gy_zonal gz_zonal]', [3 1 181]); for m = length(lat):-1:1 gned_zonal(m,:) = (dcm_ef(:,:,m)*gxyz_zonal(:,:,m))'; end figure(1) plot(lat_gd, gned_zonal(:,3), lat, -gd_sphere, '--', lat_gd, gd_wgs84, '-.') legend('Zonal Harmonic', 'Spherical', 'WGS84','Location','North') xlabel('Geodetic Latitude (degrees)') ylabel('Down gravity (m/s^2)') grid

Рис. 1: Сила тяжести по оси вниз в метрах в секунду в квадрате
figure(2) plot( lat_gd, gned_zonal(:,1), lat_gd, gn_wgs84, 'r-.' ) hold on plot([lat(1) lat(end)], [0 0], 'g--' ) legend('Zonal Harmonic', 'WGS84', 'Spherical','Location','Best') xlabel('Geodetic Latitude (degrees)') ylabel('North gravity (m/s^2)') grid hold off

Рис. 2: Гравитация по оси Север в метрах в секунду в квадрате
Вычислите общую гравитацию для WGS84 и по зональному вектору гравитации в метрах в секунду в квадрате.
gtotal_wgs84 = gravitywgs84( zeros(size(lat)), lat_gd, zeros(size(lat)), 'Exact', [false true false 0] );
gtotal_zonal = sqrt(sum([gx_zonal.^2 gy_zonal.^2 gz_zonal.^2],2));
figure(3) plot( lat, gtotal_zonal, lat_gd, gtotal_wgs84, '-.' ) legend('Zonal Harmonic', 'WGS84','Location','North') xlabel('Geodetic Latitude (degrees)') ylabel('Total gravity (m/s^2)') grid

Рис. 3: Общая гравитация в метрах в секунду в квадрате
Вы видели гравитационные сравнения невращающейся Земли. Изучите центробежные воздействия вращения Земли на модели гравитации.
Использовать gravitycentrifugal вычислить массив центробежных эффектов в координатах ECEF для массива положений ECEF в метрах в секунду в квадрате.
[gx_cent, gy_cent, gz_cent] = gravitycentrifugal([x' y' z']);
Добавление центробежных эффектов к зональной гармонической гравитации.
gx_cent_zonal = gx_zonal + gx_cent; gy_cent_zonal = gy_zonal + gy_cent; gz_cent_zonal = gz_zonal + gz_cent;
Использовать gravitywgs84 для вычисления WGS84 гравитации по нисходящей и северной осям на поверхности Земли массив геодезических широт в градусах и 0 градусов долготы с использованием точного метода с атмосферой, центробежными эффектами и без предварительной обработки.
[gd_cent_wgs84, gn_cent_wgs84] = gravitywgs84( zeros(size(lat)), lat_gd, long_gd, 'Exact', [false false false 0] );
Вычислите суммарную гравитацию с центробежными эффектами для WGS84 и по зональному вектору гравитации в метрах в секунду в квадрате.
gtotal_cent_wgs84 = gravitywgs84( zeros(size(lat)), lat_gd, zeros(size(lat)), 'Exact', [false false false 0] );
gtotal_cent_zonal = sqrt(sum([gx_cent_zonal.^2 gy_cent_zonal.^2 gz_cent_zonal.^2],2));
Для сравнения гравитационных моделей их выходы должны находиться в одной системе координат. Можно преобразовать зональную гравитацию из координат ECEF в координаты NED, используя Матрицу направления косинуса (Direction Cosine Matrix) из dcmecef2ned. На рисунке 5 видно некоторое различие между зональной гармонической гравитацией с центробежными эффектами и WGS84 гравитацией с центробежными эффектами. Большая часть разницы обусловлена различиями между зональной гармонической гравитацией и WGS84 расчётами гравитации.
gxyz_cent_zonal = reshape([gx_cent_zonal gy_cent_zonal gz_cent_zonal]', [3 1 181]); for m = length(lat):-1:1 gned_cent_zonal(m,:) = (dcm_ef(:,:,m)*gxyz_cent_zonal(:,:,m))'; end figure(4) plot(lat_gd, gned_cent_zonal(:,3), lat_gd, gd_cent_wgs84, '-.') legend('Zonal Harmonic', 'WGS84','Location','North') xlabel('Geodetic Latitude (degrees)') ylabel('Down gravity (m/s^2)') grid

Рис. 4: Гравитация с центробежными эффектами по оси вниз в метрах в секунду в квадрате
figure(5) plot( lat_gd, gned_cent_zonal(:,1), lat_gd, gn_cent_wgs84, '--', lat_gd, (gned_zonal(:,1)-gn_wgs84'), '-.' ) axis([-100 100 -0.0002 0.0002]) legend('Zonal Harmonic', 'WGS84', 'Error Between Models w/o Centrifugal Effects', 'Location','Best') xlabel('Geodetic Latitude (degrees)') ylabel('North gravity (m/s^2)') grid

Рис. 5: Гравитация по оси Север в метрах в секунду в квадрате
figure(6) plot( lat, gtotal_cent_zonal, lat_gd, gtotal_cent_wgs84, '-.' ) legend('Zonal Harmonic', 'WGS84','Location','North') xlabel('Geodetic Latitude (degrees)') ylabel('Total gravity (m/s^2)') grid

Рис. 6: Общая гравитация с центробежными эффектами в метрах в секунду в квадрате