xM(t) = −11.9084 + 57.9117 cos(2πt/87.97)
,yM(t) = 56.6741 sin(2πt/87.97)
和xE(t) = −2.4987 + 149.6041 cos(2πt/365.25)
,yE(t) = 149.5832 sin(2πt/365.25)
代表水星和地球在xy平面上的位置,太阳位于(0,0)和t是时间的流逝。我想通过使用实现割线方法的matlab程序找到函数f(t) = ((xE(t) − xM(t))^2 + (yE(t) − yM(t))^2)^(1/2)
的最小值来找到行星在接下来的1000天内的最小距离。
function [r,N] = SECANT(x0,x1,eps,Nmax,f)
N = 1;
while (N <= Nmax) && (abs(x1-x0) >= eps)
r = x1 - f(x1)*((x1-x0)/(f(x1)-f(x0)));
x0 = x1;
x1 = r;
N = N+1;
end
r
N
以上就是我对割线方法的看法。我认为它应该有效,但我可能犯了错误。这就是我在matlab中实际解决问题的方法。
p = @(t) (((-2.4987 + 149.6041*cos(2*pi*t/365.25))-(-11.9084 + 57.9117*cos(2*pi*t/87.97))).^2+((149.5832*sin(2*pi*t/365.25))-(56.6741*sin(2*pi*t/87.97))).^2).^(1/2);
y = SECANT(x0,x1,eps,Nmax,p)
我知道只有p
才能传递给函数。我可以弥补eps
(精度等级)和Nmax
(最大迭代次数),但我无法弄清楚参数x0
和{{1}应该是。