////////////////////////////////////////////////////////////// // 逐次近似法(ニュートン法) ////////////////////////////////////////////////////////////// #include #include double gps_newton(double mk, double e, int i) { double ek; double a1,a2,a3; double tol = 5.0e-12; int iter, lmax = 4; ek = 0.0; if(fabs(mk) > 0.0) { a1 = mk + e*sin(mk); iter = 1; while(iter <= lmax) { a2 = a1 - e*sin(a1) - mk; a3 = a1 - a2/2.0; a3 = 1.0 - e*cos(a3); ek = a1 - a2/a3; a2 = a1 - ek; if(fabs(a2) < tol){break ;} ++iter; if(iter <= lmax) { a1 = ek; } else { iter=iter; printf("gps_newton_error sat=%d\n",i); } } } return(ek); }