我有一个与时间相关的变量,需要进行插值,然后发送给我的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);
答案 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);