使用matlab通过割线方法

时间:2018-01-24 04:07:31

标签: matlab

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}应该是。

0 个答案:

没有答案