高阶次勒让德计算(跨阶次递推公式)

本文介绍如何在卫星大地测量中运用跨阶次递推勒让德公式计算高程异常。通过从ICGEM获取数据,进行坐标转换和重力计算,最终利用Matlab实现计算过程。

跨阶次递推勒让德公式

今天卫星大地测量课的一个问题
问题:已知某一点的大地坐标BLH,求该点的高程异常。

(1)从ICGEM网站获取模型数据,并提取l,m,c,s数据。
(2)在c位系数中减去正常重力位系数
(3)将给定点的大地坐标转化为地心坐标
(4)计算给定点处的平均正常重力
(5)Legendre递推公式的计算(标准前向列递推公式)(跨阶次递推公式)
(6)计算给定点处高程异常

matlab代码:

clc;clear;
% B = input('输入大地纬度B: ');
% L = input('输入大地经度L:');
% H = input('输入大地高: ');
H = 0;
GM = 0.3986004415E+15;
R = 0.6378136300E+07;
Degree = 360;
e2=0.00669437999013;
ge=9.7803253359;
k1=0.00193185265246;
Alpha=1/298.257223563;
Beta=0.00344978650684;
Pi=3.1415926535897932384626433;
% B = B*Pi/180;
% L = L*Pi/180;

%读取LMCS数据(读取前删除数据的前20行介绍)
path = 'C:\Users\Administrator\Desktop\EGM2008.gfc';
Data = importdata(path);
LMCS = Data.data;
C1 = {-4.841667749835220e-04,7.903037335100000e-07,-1.687249611513883e-09,3.460524683954118e-12,-2.650022257475667e-15};

%减去正常重力位系数
z=1;
for i = 2:54
    if(rem(LMCS(i,1),2)==0&&LMCS(i,2)==0)
        LMCS(i,3) = LMCS(i,3) - double(C1{z});        
        z=z+1;
    end
end
%定义高程异常矩阵
Anomaly = zeros(180,360);
%计算全球高程异常(B为-89到90,L为0到359)
for B1 = -89:90
    for L1 = 0:359
        B = B1*Pi/180;
        L = L1*Pi/180;                
        %坐标转换(BLH到XYZ到Phi,Lamda,r)
N = R/sqrt(1-e2*sin(B)^2);
X = (N+H)*cos(B)*cos(L);
Y = (N+H)*cos(B)*sin(L);
Z = (N*(1-e2)+H)*sin(B);
Phi = atan(Z/sqrt(X^2+Y^2));
Lam = L;
r = sqrt(X^2+Y^2+Z^2);
%j计算正常重力
y1 = ge*(1+k1*sin(B)^2)/sqrt(1-e2*sin(B)^2);
y2 = 1 - 2*H*(1+Alpha+Beta-2*Alpha*sin(B)^2)/R+3*H^2/R^2;
y = y1*y2;
P = zeros(Degree+1,Degree+1);

% %跨阶次正规化勒让德系数
P(1,1) = 1;
P(2,1) = sin(Phi)*3^0.5;
P(2,2) = sqrt(3*(1-sin(Phi)^2));

for j = 1:2
   for i = 3:Degree+1
       l=i-1;m=j-1;
       a = sqrt((4*l^2-1)/(l^2-m^2));
       b = sqrt((2*l+1)/(2*l-3))*sqrt(((l-1)^2-m^2)/(l^2-m^2));
       P(i,j) = a*sin(Phi)*P(i-1,j)-b*P(i-2,j);      
   end
end

for j = 3:Degree
    for i = j:j+1
        l=i-1;m=j-1;
      alpha = sqrt((2*l+1)*(l-m)*(l-m-1)/(2*l-3)/(l+m)/(l+m-1));
      if(m==2)
          beta = sqrt(2*(2*l+1)*(l+m-2)*(l+m-3)/(2*l-3)/(l+m)/(l+m-1));
          gama = sqrt(2*(l-m+1)*(l-m+2)/(l+m)/(l+m-1));
      else
          beta = sqrt((2*l+1)*(l+m-2)*(l+m-3)/(2*l-3)/(l+m)/(l+m-1));
          gama = sqrt((l-m+1)*(l-m+2)/(l+m)/(l+m-1));
      end
      P(i,j) = beta*P(i-2,j-2)-gama*P(i,j-2);
    end
    if j+2<Degree+1
        for i = j+2:Degree+1
        l = i-1; m = j-1;
        alpha = sqrt((2*l+1)*(l-m)*(l-m-1)/(2*l-3)/(l+m)/(l+m-1));
        if m ==2
            beta = sqrt(2*(2*l+1)*(l+m-2)*(l+m-3)/(2*l-3)/(l+m)/(l+m-1));
            gama = sqrt(2*(l-m+1)*(l-m+2)/(l+m)/(l+m-1));
        else
            beta = sqrt((2*l+1)*(l+m-2)*(l+m-3)/(2*l-3)/(l+m)/(l+m-1));
            gama = sqrt((l-m+1)*(l-m+2)/(l+m)/(l+m-1));
        end
        P(i,j) = alpha*P(i-2,j)+beta*P(i-2,j-2)-gama*P(i,j-2);
        end
    end
end
l = Degree;m = Degree;
beta = sqrt((2*l+1)*(l+m-2)*(l+m-3)/(2*l-3)/(l+m)/(l+m-1));
gama = sqrt((l-m+1)*(l-m+2)/(l+m)/(l+m-1));
P(l+1,m+1) = beta*P(i-2,j-2)-gama*P(i,j-2);

%求高程异常
z = 2;S = 0;
for i = 2 : Degree
    for j = 0 : i
        S = (R/r)^i*P(i+1,j+1)*(LMCS(z,3)*cos(Lam*j)+LMCS(z,4)*sin(Lam*j))+S;
        z = z+1;
    end
end
Anomaly(B1+90,L1+1) = GM/(y*r)*S;

    end
end
[m,n] = size(Anomaly);
%输出全球高程异常数据为number.txt(当前目录下)
fid = fopen('number.txt','wt');
for i = 1:m
    for j = 1:n
        if j == n
            fprintf(fid,'%g\n',Anomaly(i,j));
        else
            fprintf(fid,'%g\t',Anomaly(i,j));
        end
    end
end
fclose(fid);
%导入数据画图
Ano = importdata('number.txt');
load geoid;
worldmap('World');
geoshow(Ano,geoidrefvec,'DisplayType','texturemap');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值