Этот пример показывает, как изучить зональные гармонические, сферические и Мировая геодезическая система (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 из 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 из 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: Общая гравитация с центробежными эффектами в метрах в секунду за секунду