我需要在一个选定的时间范围内求解一个微分方程组,但是这些方程取决于一些随时间变化的变量。我正在尝试编写要在ode45中使用的功能'odefun',当我使用时间跨度和初始条件运行代码时,它似乎可以正常工作,但是我不确定代码是否实际上在按照我的意愿进行。
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)。 开普勒·皮卡德函数的定义如下:
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'视为常数,则肯定是错误的)。 我需要改变什么吗?谢谢!