地球重力场模型是地球重力位的数学表达式,通常用球谐函数的级数形式来表示。地球外部任意一点P地心求坐标(r,θ,λ),其重力位V的球谐表达式为:

根据上式可知,只需知道地球外部一点的球坐标,以及相应重力场模型球谐系数,即可解算该位置的重力位。

重力矢量和重力梯度分别是重力位对球坐标的一阶、二阶导数,还涉及球坐标与直角坐标的转换问题,计算较为复杂。球坐标与局部指北坐标的转换关系如下:

EGM2008是近来由美国国家地理空间情报局(NGA)发布的全球超高阶地球重力场模型,模型球谐系数阶次扩展至2190次,相当于模型的空间分辨率约为5′(约9 km)。该模型采用了GRACE卫星跟踪数据、卫星测高数据和地面重力数据等数据。

  1. 读取EGM2008模型球谐系数
fid = fopen(filename);
hasErrors = true;%读取头文件
while 1line = fgetl(fid);if ~ischar(line), break, endif isempty(line), continue, endkeyword = textscan(line,'%s',1);%获取最大阶数if(strcmp(keyword{1}, 'max_degree'))cells = textscan(line,'%s%d',1);maxDegree = cells{2};end%获取参考地球半径if(strcmp(keyword{1}, 'radius'))cells = textscan(line,'%s%f',1);R = cells{2};end%获取地心引力参数GMif(strcmp(keyword{1}, 'earth_gravity_constant'))cells = textscan(line,'%s%f',1);GM = cells{2};endif(strcmp(keyword{1}, 'errors'))cells = textscan(line,'%s%s',1);if(strcmp(cells{2}, 'no'))hasErrors = false;endendif(strcmp(keyword{1}, 'end_of_head'))breakend
end% 声明球谐系数阵
cnm = zeros(maxDegree+1, maxDegree+1);
snm = zeros(maxDegree+1, maxDegree+1);% 读取球谐系数
while 1line = fgetl(fid);if ~ischar(line), break, endif isempty(line), continue, endif(hasErrors)cells = textscan(line,'%s%d%d%f%f%f%f');elsecells = textscan(line,'%s%d%d%f%f');endcnm(cells{2}+1, cells{3}+1) = cells{4};snm(cells{2}+1, cells{3}+1) = cells{5};
endfclose(fid);
  1. 计算球坐标系下的重力梯度分量

因EGM2008是超高阶重力场模型,为了减轻计算量,取到180阶。data采用上篇GOCE卫星重力梯度观测数据,计算沿轨梯度值。

maxDegree = size(cnm,1)-1;  %0阶开始
Vq=zeros(2678400,9);        %声明一个球坐标系下重力梯度矩阵for  n=1:2678400  %matlab的矩阵是从1开始的,不是0开始。Plm = legendreFunctions(90-data(n,2), 182); %地心余纬for l=0:180   %l阶,取到1000阶for m=0:l          %m次%组合法计算勒让德级数的一阶导、二阶导%计算VrrVq(n,1) =Vq(n,1)+ GM/R*(l+1)*(l+2)/power(data(n,4),2) *power(R/data(n,4),l+1)*(cnm(l+1,m+1)*cosd(m*data(n,3)) + snm(l+1,m+1)*sind(m*data(n,3)))* Plm(l+1,m+1);%计算VλλVq(n,2)=Vq(n,2)+GM/R*(-1)*power(R/data(n,4),l+1)*(cnm(l+1,m+1)*cosd(m*data(n,3)) + snm(l+1,m+1)*sind(m*data(n,3)))* Plm(l+1,m+1)*m*m;%计算Vθθif m==0Vq(n,3)=Vq(n,3)+GM/R*power(R/data(n,4),l+1)*(cnm(l+1,m+1)*cosd(m*data(n,3)) + snm(l+1,m+1)*sind(m*data(n,3)))*(-l*(l+1)/2*Plm(l+1,1)+sqrt(l*(l-1)*(l+1)*(l+2)/8)*Plm(l+1,3));elseif m==1Vq(n,3)=Vq(n,3)+GM/R*power(R/data(n,4),l+1)*(cnm(l+1,m+1)*cosd(m*data(n,3)) + snm(l+1,m+1)*sind(m*data(n,3)))*((2*l*(l+1)+(l-1)*(l+2))/-4*Plm(l+1,2)+sqrt((l-2)*(l-1)*(l+2)*(l+3))/4*Plm(l+1,4));elseVq(n,3)=Vq(n,3)+GM/R*power(R/data(n,4),l+1)*(cnm(l+1,m+1)*cosd(m*data(n,3)) + snm(l+1,m+1)*sind(m*data(n,3)))*(sqrt((l+m)*(l-m+1)*(l+m-1)*(l-m+2))/4*Plm(l+1,m-1)-((l+m)*(l-m+1)+(l-m)*(l+m+1))/4*Plm(l+1,m+1)+sqrt((l-m)*(l+m+1)*(l-m-1)*(l+m+2))/4*Plm(l+1,m+3));           end%计算VrλVq(n,4)=Vq(n,4)+GM/R*(l+1)/-data(n,4)*power(R/data(n,4),l+1)*(snm(l+1,m+1)*cosd(m*data(n,3))-cnm(l+1,m+1)*sind(m*data(n,3)))*m*Plm(l+1,m+1);%计算Vrθif m==0Vq(n,5)=Vq(n,5)+GM/R*(l+1)/-data(n,4)*power(R/data(n,4),l+1)*(cnm(l+1,m+1)*cosd(m*data(n,3)) + snm(l+1,m+1)*sind(m*data(n,3)))*sqrt(1*(l+1)/2)*Plm(l+1,2);elseif m==1Vq(n,5)=Vq(n,5)+GM/R*(l+1)/-data(n,4)*power(R/data(n,4),l+1)*(cnm(l+1,m+1)*cosd(m*data(n,3)) + snm(l+1,m+1)*sind(m*data(n,3)))*(sqrt(2*l*(l+1))/-2*Plm(l+1,1)+sqrt((l-1)*(l+2))/2*Plm(l+1,3));elseVq(n,5)=Vq(n,5)+GM/R*(l+1)/-data(n,4)*power(R/data(n,4),l+1)*(cnm(l+1,m+1)*cosd(m*data(n,3)) + snm(l+1,m+1)*sind(m*data(n,3)))*(sqrt((l+m)*(l-m+1))/-2*Plm(l+1,m)+sqrt((l-m)*(l+m+1))/2*Plm(l+1,m+2));end%计算Vλθif m==0Vq(n,6)=Vq(n,5)+GM/R*power(R/data(n,4),l+1)*(snm(l+1,m+1)*cosd(m*data(n,3))-cnm(l+1,m+1)*sind(m*data(n,3)))*m*sqrt(1*(l+1)/2)*Plm(l+1,2);elseif m==1Vq(n,6)=Vq(n,5)+GM/R*power(R/data(n,4),l+1)*(snm(l+1,m+1)*cosd(m*data(n,3))-cnm(l+1,m+1)*sind(m*data(n,3)))*m*(sqrt(2*l*(l+1))/-2*Plm(l+1,1)+sqrt((l-1)*(l+2))/2*Plm(l+1,3));elseVq(n,6)=Vq(n,5)+GM/R*power(R/data(n,4),l+1)*(snm(l+1,m+1)*cosd(m*data(n,3))-cnm(l+1,m+1)*sind(m*data(n,3)))*m*(sqrt((l+m)*(l-m+1))/-2*Plm(l+1,m)+sqrt((l-m)*(l+m+1))/2*Plm(l+1,m+2));end%%  为了后续坐标转换,先算好三个一阶导%计算VrVq(n,7)=Vq(n,7)+GM/R*(l+1)/-data(n,4)*power(R/data(n,4),l+1)*(cnm(l+1,m+1)*cosd(m*data(n,3)) + snm(l+1,m+1)*sind(m*data(n,3)))* Plm(l+1,m+1);%计算Vθif m==0Vq(n,8)=Vq(n,8)+GM/R*power(R/data(n,4),l+1)*(cnm(l+1,m+1)*cosd(m*data(n,3)) + snm(l+1,m+1)*sind(m*data(n,3)))*sqrt(1*(l+1)/2)*Plm(l+1,2);elseif m==1Vq(n,8)=Vq(n,8)+GM/R*power(R/data(n,4),l+1)*(cnm(l+1,m+1)*cosd(m*data(n,3)) + snm(l+1,m+1)*sind(m*data(n,3)))*(sqrt(2*l*(l+1))/-2*Plm(l+1,1)+sqrt((l-1)*(l+2))/2*Plm(l+1,3));elseVq(n,8)=Vq(n,8)+GM/R*power(R/data(n,4),l+1)*(cnm(l+1,m+1)*cosd(m*data(n,3)) + snm(l+1,m+1)*sind(m*data(n,3)))*(sqrt((l+m)*(l-m+1))/-2*Plm(l+1,m)+sqrt((l-m)*(l+m+1))/2*Plm(l+1,m+2));end%计算VλVq(n,9)=Vq(n,9)+GM/R*power(R/data(n,4),l+1)*(snm(l+1,m+1)*cosd(m*data(n,3))-cnm(l+1,m+1)*sind(m*data(n,3)))*m*Plm(l+1,m+1);endend
  1. 坐标转换
    将球坐标系下的重力梯度值转换成局部指北坐标系。
Vcal=zeros(size(Vq,1),6);
for n=1:size(Vq,1)%VxxVcal(n,1)=Vq(n,7)/data(n,4)+Vq(n,3)/power(data(n,4),2);%VyyVcal(n,2)=Vq(n,7)/data(n,4)+cotd(90-data(n,2))*Vq(n,8)/power(data(n,4),2)+Vq(n,2)/(power(data(n,4),2)*power(sind(90-data(n,2)),2));%VzzVcal(n,3)=Vq(n,1);%VxyVcal(n,4)=Vq(n,6)/(power(data(n,4),2)*sind(90-data(n,2)))-cosd(90-data(n,2))*Vq(n,9)/(power(data(n,4),2)*power(sind(90-data(n,2)),2));%VxzVcal(n,5)=Vq(n,8)/power(data(n,4),2)-Vq(n,5)/data(n,4);%VyzVcal(n,6)=Vq(n,9)/(power(data(n,4),2)*sind(90-data(n,2)))-Vq(n,4)/data(n,4)/sind(90-data(n,2));
end

将EGM2008模型计算的重力梯度值与GOCE卫星观测值求差,得到以下残差图:
可见,GOCE卫星观测值还需要进一步滤波去噪,改正其他扰动因子。

附:

笔者尝试绘制全球2.55°分辨率的地心向径重力梯度分量Vrr分布图,因缺少全球地表地心距,选取地心距6.410^6m参考球面的梯度分布图。


Vglobe=zeros(71,73);
for i=1:71for j=1:73Plm = legendreFunctions(90-(2.5*i-90), 182); %地心余纬for l=0:180   %l阶,取到180阶for m=0:l    %m次  %计算VrrVglobe(i,j) =Vglobe(i,j)+ GM/R*(l+1)*(l+2)/power(6.4*10^6,2) *power(R/(6.4*10^6),l+1)*(cnm(l+1,m+1)*cosd(m*(5*j-180)) + snm(l+1,m+1)*sind(m*(5*j-180)))* Plm(l+1,m+1);endendend
end%画图---等值线
[X,Y] = meshgrid(-180:5:180,-87.5:2.5:87.5);
contourf(-180:5:180,-87.5:2.5:87.5,Vglobe,100,'LineStyle','none');
hold on;% 海岸线绘制:coast.dat为海岸线坐标文件
load('coast.dat');
plot(coast(:,1),coast(:,2),'k');colorbar;
shading flat;
title('重力梯度Vrr(r=6.4*10^6)')
xlabel('Longitude','FontSize',12)
ylabel('Latitude','Fontsize',12)
axis tight

分布图如下:(正确性有待考察)

Matlab||EGM2008模型计算GOCE沿轨重力梯度及全球重力梯度分布相关推荐

  1. matlab iri模型,iri-model IRI模型计算电离层延迟的matlab 算法 265万源代码下载- www.pudn.com...

    文件名称: iri-model下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 4182 KB 上传时间: 2013-05-29 下载次数: 85 详细说明: ...

  2. 零维水温模型计算——基于matlab建立计算模型

    零维水温模型计算--基于matlab建立计算模型 零维水温模型 基本方程 计算参数准备 matlab模型的建立 四阶龙格-库塔法的matlab实现 水面的净流通量φ~s~的计算函数 湖水与岩土的换热φ ...

  3. e-006 matlab,基于MATLAB进行潮流计算

    基于MATLAB 进行潮流计算 学生:王仕龙 2011148213 指导老师:李咸善 摘要:电力系统潮流计算方法有两类,即手算潮流和计算机潮流计算.手算潮流主要借助于形成简化的等值电路来实现,这种方法 ...

  4. 【Python】SEBS模型计算蒸散发

    教程照片及其他详细信息请关注微信公众号:夫也的笔记 公众号内容包含:GEE.ArcGIS.ENVI.MATLAB.Python和R语言教程和实际案例分享 SEBS模型介绍 近年来出现了许多遥感反演蒸散 ...

  5. matlab三相短路电流计算程序_基于MATLAB的短路电流计算程序编制.pdf

    基于MATLAB的短路电流计算程序编制 维普资讯 2008年第4期 <贵州电力技术> (总第 l06期) 基于 MATLAB的短路电流计算程序编制 武汉大学电气工程学院 周冬旭 向俊杰 陈 ...

  6. matlab与科学计算 王沫然,MATLAB与科学计算(第3版) 王沫然著 电子工业出版社 9787121180521...

    商品描述: 基本信息 书名:MATLAB与科学计算(第3版) 定价:49.80元 作者:王沫然 编著 出版社:电子工业出版社 出版日期:2012-10-01 ISBN:9787121180521 字数 ...

  7. 基于MATLAB梁模型振型动画程序设计

    基于MATLAB梁模型振型动画程序设计 梁模型振型动画 %该模型为一端固定梁模型振型动画 clear; close all; clc % 系统参数 E = 1e7; A = 1.5; rho = 2. ...

  8. Matlab软件使用讲解(5),Matlab数学工程计算2023a中文版下载安装教程

    Matlab是一款被广泛应用于科学.技术和工程等领域的数学软件,在数据分析.算法研究.信号处理等方面具有很高的实用性.在本文中,我将通过举例的方式向大家介绍Matlab软件的常用功能和使用技巧,并结合 ...

  9. matlab klobuchar模型,区域似大地水准面精化模型算法的优选

    区域似大地水准面精化模型算法的优选 第20卷第1期 2011年2月 ENGINEERING 测 绘 工 程 Vol.20l.1OFSURVEYINGANDMAPPING Feb.,2011 区域似大地 ...

最新文章

  1. with admin option /with grant option
  2. 科学计算机坏了怎么办,科学家:如果人脑像电脑一样运行,1分钟内就会烧坏!...
  3. SDUT-2449_数据结构实验之栈与队列十:走迷宫
  4. CSP认证201509-3 模板生成系统[C++题解]:字符串处理、模拟、哈希表、引号里面有空格的字符串怎么读入
  5. cudnn问题 cudnnCreate 延时长 见效慢 要卡十几分钟才能过 如何解决?(229)
  6. RxJava中BehaviorSubject适合的使用场景
  7. 一台古老电脑之维修记
  8. 问题 1462: [蓝桥杯][基础练习VIP]Huffuman树
  9. Juniper Space License Issue on Citrix Xen Environment
  10. C/C++ 指针的深入理解
  11. adb命令安装apk 来学习吧
  12. 初学者的React全家桶完整实例
  13. win11正式版iso镜像如何安装 windows11正式版iso镜像安装方法
  14. TreeLSTM Sentiment Classification
  15. 如何在 Flink 1.9 中使用 Hive?
  16. 佳能Canon PIXMA G1010 打印机驱动
  17. OpenDaylight Hydrogen版本应用SampleTap研究(一)
  18. 你的计算机没有安装cad2006,CAD2006安装常见问题及处理方法
  19. 腾讯云轻量型服务器与云服务器的区别
  20. 如何在移动硬盘上安装Ubuntu系统(2)

热门文章

  1. java 调整图片分辨率_java 改变图片的分辨率。。。可以吗?
  2. 1024程序员节!Hello world
  3. 知识图谱系统课程笔记(二)——知识抽取与挖掘
  4. 微信公众号密码转换的密钥
  5. 用正则表达式匹配(match)正整数
  6. 51单片机DS1302实时时钟
  7. poj 1637 Sightseeing tour 混合欧拉图判定
  8. 【项目管理】【SVN】TortoiseSVN清理历史访问记录
  9. python xlsxwriter不覆盖写入_python学习-xlsxwriter模块
  10. Mybatis插入语句