function deltag=gravity_earthtide(ymdh,Longtitude,latitude)
% 理论固体计算函数
% output
% 计算时间[2000,1,1,1,0,0];
% 经度
% 纬度
% 2015/10/22
% timevec = datevec(daynum);
y = ymdh(1);
m = ymdh(2);
d = ymdh(3);
t = ymdh(4);
Phi = latitude;
%换算
Phip = Phi-0.192424*sin(2*Phi*pi/180.0);
Longtitude = Longtitude*pi/180.0;
Latitude = latitude*pi/180.0;
Phi = Latitude;
Phip = Phip*pi/180.0;
To = Julian(y,m,d);
T = (To-2415020+(t-8)/24)./(36525);
% 天文学参数
S = 270.43416+481267.89057*T-0.001133*T*T+0.000002*T*T*T;
H = 279.696678+36000.76892*T+0.0003025*T*T;
P = 334.3295556+4069.034033*T+0.0001*T*T*T;
N = 259.183275-1934.142008*T+0.002077*T*T+0.000002*T*T*T;
Ps = 281.2208333+1.719175*T+0.0004527*T*T+0.000003*T*T*T;
sigma = 23.452294-0.0130125*T-0.000002*T*T;
S = S*pi/180;
h = H*pi/180;
p = P*pi/180;
N = N*pi/180;
ps = Ps*pi/180;
e = sigma*pi/180;
crm = 1+0.0545*cos(S-p)+0.0030*cos(2*(S-p))+0.01*cos(S-2*h+p)+0.0082*cos(2*(S-h))...
+0.0006*cos(2*S-3*h+ps)+0.0009*cos(3*S-2*h-p);
Lambdam = S+0.0222*sin(S-2*h+p)+0.1098*sin(S-p)+0.0115*sin(2*S-2*h)+0.0037*sin(2*S-2*p)...
-0.0032*sin(h-ps)-0.001*sin(2*h-2*p)+0.001*sin(S-3*h+p+ps)+0.0007*sin(S-h-p+ps)...
-0.0006*sin(S-h)-0.0005*sin(S+h-p-ps)+0.0008*sin(2*S-3*h+ps)-0.002*sin(2*S-2*N)...
+0.0009*sin(3*S-2*h-p);
Beltam = 0.003*sin(S-2*h+N)+0.0895*sin(S-N)+0.0049*sin(2*S-p-N)-0.0048*sin(p-N)...
-0.0008*sin(2*h-p-N)+0.001*sin(2*S-2*h+p-N)+0.0006*sin(3*S-2*h-N);
Delta = sin(e)*sin(Lambdam)*cos(Beltam)+cos(e)*sin(Beltam);
Theta = ((t-8)*(15*pi/180.0))+h+Longtitude-pi;
H = cos(Beltam)*cos(Lambdam)*cos(Theta)+sin(Theta)*(cos(e)*cos(Beltam)*sin(Lambdam)-sin(e)*sin(Beltam));
Zm = sin(Phip)*Delta+cos(Phip)*H;
crs = 1+0.0168*cos(h-ps)+0.0003*cos(2*h-2*ps);
Lambdas = h+0.0335*sin(h-ps)+0.0004*sin(2*h-2*ps);
Beltas = 0.0;
Zs = sin(Phip)*sin(e)*sin(Lambdas)+cos(Phip)*(cos(Lambdas)*cos(Theta)+sin(Theta)*cos(e)*sin(Lambdas));
F = 0.998327+0.001676*cos(2*Phi);
Gt = -165.17*F*crm*crm*crm*(Zm*Zm-1.0/3.0)-1.3708*F*F*crm*crm*crm*crm*Zm*(5*Zm*Zm-3)-76.08*F*crs*crs*crs*(Zs*Zs-1.0/3.0);
deltag = Gt*1.16;
end
儒略日计算Julian.m
function R=Julian(y,m,d)
% 儒略数
yy = y-1900;
mm = m-1;
dd = d;
w = floor(yy/4);
if(y == 4*w & mm<2)
dd=dd-1;
end
if mm == 0
d1 = yy*365+w-0.5+mm+dd;
else if (mm == 1)
mm = 31;
d1 = yy*365 + w - 0.5 + mm + dd;
else
mm = floor(mm*365/12)-floor(10/(4+mm));
d1 = yy*365 + w - 0.5 + mm + dd;
end
end
R=d1+2415020.0;
end
计算例子main.m,计算2019.1.1-2019.1.10
clc
clear;
Longtitude=104; Latitude=30.6;
date1 = [2019,1,1];
date2 = [2019,1,10];
amend= [];
kk = 1;
for i = 1:datenum(date2)-datenum(date1)
date = datenum(date1) + i;
for j = 0:23
ymdh = datevec(date);
ymdh(4) = j;
ymdhnum(kk) = datenum(ymdh);
amend = [amend,gravity_earthtide(ymdh,Longtitude,Latitude)];
kk = kk+1;
end
end
disp('========= complete =========');
plot(ymdhnum,amend)
datetick;