我需要在选定的时间跨度内求解一个微分方程组,但这些方程取决于一些随时间变化的变量。我正在尝试编写函数 'odefun' 以在 ode45 中使用,当我运行具有时间跨度和初始条件的代码时,它似乎可以工作,但我不确定代码是否真的在做我想要的。
function [dX]=gauss(t,X)
mu_S=1.327*10^11; T=0.06; %constants
a=X(1); e=X(2);
n=sqrt(mu_S/a^3); M=n*t; %need to change with every iteration
[E] = KeplerPicard(M,e,0.5*10^-4);
dX(1)=2/n*sqrt((1+e*cos(E))/(1-e*cos(E)))*T; %da/dt
dX(2)=2*(1-e^2)*cos(E)/(a*n*sqrt(1-e^2*(cos(E))^2))*T; %de/dt
dX=dX(:);
end
dX(1)是a的导数,也就是我的X(1),dX(2)是e,X(2)的导数。函数 Kepler Picard 定义如下:
function [E] = KeplerPicard(M,e,eps)
E=M;
err=1;
while err>eps
En=e*sin(E)+M;
err=abs(En-E);
E=En;
end
我希望变量“n”在一段时间内改变并使用新值“a+da”(或者“X(1)+dX(1)”),但我不知道代码是否这样做。需要注意的是,这样代码运行没有错误,但我不知道结果是否正确(如果代码将'n'视为常量,它们肯定是错误的)。有什么我需要改变的吗?谢谢!