GPS卫星位置计算(C语言)
#include
#include
#include
#define bGM84 3.986005e14
#define bOMEGAE84 7.2921151467e-5
void main()
{
long double roota=0.515365263176E+04; //轨道长半轴的平方根(根号a)
long double toe=0.720000000000E+04; //观测时刻toe
long double m0=-0.290282040486E+00; //参考时刻toe的平近点角
long double e=0.678421219345E-02; //轨道偏心率e
long double delta_n=0.451411660250E-08;//卫星的摄动改正数△n
long double smallomega=-0.258419417299E+01;//近地点角距ω
long double cus=0.912137329578E-05;//纬度幅角正弦调和项改正的振幅(弧度)
long double cuc=0.189989805222E-06;//纬度幅角余弦调和项改正的振幅(弧度)
long double crs=0.406250000000E+01;//轨道半径的余弦调和项改正的振幅(m)
long double crc=0.201875000000E+03;//轨道半径的正弦调和项改正的振幅(m)
long double cis=0.949949026108E-07;//轨道倾角的余弦调和项改正的振幅(弧度)
long double cic=0.130385160446E-07;//轨道倾角的正弦调和项改正的振幅(弧度)
long double idot=-0.253939149013E-09;//轨道倾角变化率I
long double i0=0.958512160302E+00; //轨道倾角(弧度)
long double bigomega0=-0.137835982556E+01;//升交点赤经
long double earthrate=bOMEGAE84; //地球自转的速率we
long double bigomegadot=-0.856928551657e-08;
long double t=0.720000000000E+04; //加入卫星钟差改正的归化时间
long double A;
long double n0=0,n,tk;
long double mk,ek,tak,ik,omegak,phik,uk,rk;
long double corr_u,corr_r,corr_i;
long double xpk,ypk,xk,yk,zk;
int i;
printf("输入的数据:\n");
printf("√a=%e \n",roota);
printf("toe=%e \n",toe);
printf("e=%e \n",e);
printf("i0=%e \n",i0);
printf("ω=%e \n",smallomega);
printf("△n=%e \n",delta_n);
printf("Ω0=%e \n",bigomega0);
printf("I=%e \n",idot);
printf("Cuc=%e \n",cuc);
printf("Cus=%e \n",cus);
printf("Crc=%e \n",crc);
printf("Crs=%e \n",crs);
printf("Cic=%e \n",cic);
printf("Cis=%e \n",cis);
printf("\n\n输出的结果为: \n",e);
A=roota*roota;
n0=sqrt(bGM84/(A*A*A));//平均角速度n0
printf("n0=%.10lf \n",n0);
tk=t-toe;//相对于参考时刻toe的归化时间tk
printf("tk=%.10lf \n",tk);
n=n0+delta_n;//加摄动改正后的卫星平均角速度
printf(" n=%.10lf \n",n);
mk=m0+n*tk;//卫星平近点角
printf("mk=%.10lf \n",mk);
ek=mk;
for(i=0;i<10;i++) ek=mk+e*sin(ek);//利用迭代法求偏近点角ek
printf("ek