具有微分方程组的ODE45时间相关变量

时间:2019-07-30 21:15:57

标签: matlab

我有一个与时间相关的变量,需要进行插值,然后发送给我的ODE。我的EOM存储在一个功能.m文件中,我需要将插值发送给它,因此每个值都可以集成使用。我该怎么做?

我需要插值的变量是k。其中k遵循该公式

k = (h^2*(a+b)-b*h*(a+2*b)*cos(a.*time./b)+b^3)./...
((a+b)*(-2*b*h*cos(a.*time./b)+b^2+h^2).^2);

function [ sv ] = precessing_orbit_sim( t,R ) 
%%% skipped sv 1 and 2
mu = earth.mukm; 
rmag = norm([R(1),R(2)]); 
vmag = norm([R(3),R(4)]);
sv(3)=-R(4)/vmag^2*(vmag^3*k-mu/rmag^3*(-R(4)*R(1)+R(3)*R(2)));
sv(4) =  R(3)/vmag^2*(vmag^3*k-mu/rmag^3*(-R(4)*R(1)+R(3)*R(2)));
end

%%%在集成器文件中

[t,out] = ode45(@precessing_orbit_sim,tspan,IC,options);

1 个答案:

答案 0 :(得分:0)

在ODE函数中包含k吗?像这样:

function [ sv ] = precessing_orbit_sim( t,R ) 

  %%% skipped sv 1 and 2
  mu = earth.mukm; 
  rmag = norm([R(1),R(2)]); 
  vmag = norm([R(3),R(4)]);

  % Add definition of a, b and h variables
  k = (h^2*(a+b)-b*h*(a+2*b)*cos(a.*t./b)+b^3)./...
      ((a+b)*(-2*b*h*cos(a.*t./b)+b^2+h^2).^2);

  sv(3)=-R(4)/vmag^2*(vmag^3*k-mu/rmag^3*(-R(4)*R(1)+R(3)*R(2)));
  sv(4) =  R(3)/vmag^2*(vmag^3*k-mu/rmag^3*(-R(4)*R(1)+R(3)*R(2)));

end

然后像往常一样调用ODE求解器:

[t,out] = ode45(@precessing_orbit_sim,tspan,IC,options);