public class NumericalPropagator extends AbstractIntegratedPropagator
轨道
。
数值传播比如 开普勒
或 埃克斯坦-赫克勒
等解析传播更加精确,但需要设置更多步骤才能正确使用。解析传播器仅通过它们的各种构造函数进行配置,并且在构造后可以立即使用,而数值传播器的配置涉及在构造时间和传播时间之间设置几个参数。
可以设置的配置参数包括:
setInitialState(SpacecraftState)
)setMu(double)
)addForceModel(ForceModel)
, removeForceModels()
)类型
(setOrbitType(OrbitType)
)类型
(setPositionAngleType(PositionAngleType)
)状态转移矩阵和雅可比矩阵
与轨道状态一起 (AbstractPropagator.setupMatricesComputation(String, RealMatrix, DoubleArrayDictionary)
)额外导数
与轨道状态一起 (AbstractIntegratedPropagator.addAdditionalDerivativesProvider(AdditionalDerivativesProvider)
)AbstractIntegratedPropagator.addEventDetector(EventDetector)
, AbstractIntegratedPropagator.clearEventsDetectors()
)AbstractPropagator.getMultiplexer()
)从这些配置参数中,只有初始状态是必需的。默认传播设置为 赤道
参数,真经度参数为 真
。如果未明确指定中心引力系数,则将使用用于定义初始轨道的系数。但是,仅指定初始状态和可能中心引力系数将意味着传播器仅使用开普勒力。在这种情况下,更简单的 开普勒传播器
类可能更有效。
构造函数中设置的基础数值积分器也可能有自己的配置参数。自适应步长积分器的典型配置参数包括最小、最大和可能的起始步长,以及绝对和/或相对误差阈值。
积分器看到的状态是一个简单的七元素双精度数组。前六个元素可以是:
赤道轨道参数
(a, ex, ey, hx, hy, λM 或 λE 或 λv),单位为米和弧度开普勒轨道参数
(a, e, i, ω, Ω, M 或 E 或 v),单位为米和弧度圆形轨道参数
(a, ex, ey, i, Ω, αM 或 αE 或 αv),单位为米和弧度笛卡尔轨道参数
(x, y, z, vx, vy, vz),单位为米和米每秒最后一个元素是质量,单位为千克,仅在推进器点火期间发生变化
以下代码片段显示了在赤道参数和真经度参数中进行低地球轨道传播的典型设置:
final double dP = 0.001; final double minStep = 0.001; final double maxStep = 500; final double initStep = 60; final double[][] tolerance = NumericalPropagator.tolerances(dP, orbit, OrbitType.EQUINOCTIAL); AdaptiveStepsizeIntegrator integrator = new DormandPrince853Integrator(minStep, maxStep, tolerance[0], tolerance[1]); integrator.setInitialStepSize(initStep); propagator = new NumericalPropagator(integrator);
默认情况下,在传播结束时,传播器将初始状态重置为最终状态,从而允许从那里开始新的传播而无需重新计算已执行的部分。可以通过调用 AbstractIntegratedPropagator.setResetAtEnd(boolean)
来更改此行为。
请注意,同一实例不能同时被不同线程使用,该类 不是 线程安全的。
SpacecraftState
, ForceModel
, OrekitStepHandler
, OrekitFixedStepHandler
, IntegratedEphemeris
, TimeDerivativesEquations
AbstractIntegratedPropagator.MainStateEquations
DEFAULT_MASS
Constructor and Description |
---|
NumericalPropagator(org.hipparchus.ode.ODEIntegrator integrator)
创建一个基于轨道定义 mu 的 NumericalPropagator 的新实例。
|
NumericalPropagator(org.hipparchus.ode.ODEIntegrator integrator, AttitudeProvider attitudeProvider)
创建一个基于轨道定义 mu 的 NumericalPropagator 的新实例。
|
Modifier and Type | Method and Description |
---|---|
void |
addForceModel(ForceModel model)
添加一个力模型。
|
protected void |
beforeIntegration(SpacecraftState initialState, AbsoluteDate tEnd)
在积分之前调用的方法。
|
protected AbstractMatricesHarvester |
createHarvester(String stmName, org.hipparchus.linear.RealMatrix initialStm, DoubleArrayDictionary initialJacobianColumns)
创建适用于传播器的收割器。
|
protected StateMapper |
createMapper(AbsoluteDate referenceDate, double mu, OrbitType orbitType, PositionAngleType positionAngleType, AttitudeProvider attitudeProvider, Frame frame)
创建原始双精度分量和航天器状态之间的映射器。
|
List<ForceModel> |
getAllForceModels()
获取所有力模型,包括扰动力和牛顿引力。
|
protected AbstractIntegratedPropagator.MainStateEquations |
getMainStateEquations(org.hipparchus.ode.ODEIntegrator integrator)
获取要积分的微分方程(仅适用于主状态)。
|
OrbitType |
getOrbitType()
获取传播参数类型。
|
PositionAngleType |
getPositionAngleType()
获取传播参数类型。
|
TimeStampedPVCoordinates |
getPVCoordinates(AbsoluteDate date, Frame frame)
获取所选参考系中的物体的 PVCoordinates 。
|
void |
removeForceModels()
移除所有力模型(除了中心引力)。
|
void |
resetInitialState(SpacecraftState state)
重置传播器的初始状态。
|
void |
setIgnoreCentralAttraction(boolean ignoreCentralAttraction)
设置是否忽略创建 牛顿引力 。
|
void |
setInitialState(SpacecraftState initialState)
设置初始状态。
|
void |
setMu(double mu)
设置中心引力系数 μ。
|
void |
setOrbitType(OrbitType orbitType)
设置传播轨道类型。
|
void |
setPositionAngleType(PositionAngleType positionAngleType)
设置位置角类型。
|
protected void |
setUpStmAndJacobianGenerators()
设置状态转移矩阵和雅可比矩阵处理。
|
static double[][] |
tolerances(double dP, AbsolutePVCoordinates absPva)
在绝对位置-速度-加速度中传播时,估算积分器的容差向量。
|
static double[][] |
tolerances(double dP, double dV, Orbit orbit, OrbitType type)
在轨道中传播时,估算积分器的容差向量。
|
static double[][] |
tolerances(double dP, Orbit orbit, OrbitType type)
在轨道中传播时,估算积分器的容差向量。
|
addAdditionalDerivativesProvider, addEventDetector, afterIntegration, clearEventsDetectors, getAdditionalDerivativesProviders, getBasicDimension, getCalls, getEphemerisGenerator, getEventsDetectors, getInitialIntegrationState, getIntegrator, getIntegratorName, getManagedAdditionalStates, getMu, getPropagationType, getResetAtEnd, initMapper, isAdditionalStateManaged, propagate, propagate, setAttitudeProvider, setResetAtEnd, setUpEventDetector, setUpUserEventDetectors
addAdditionalStateProvider, getAdditionalStateProviders, getAttitudeProvider, getFrame, getHarvester, getInitialState, getMultiplexer, getStartDate, initializeAdditionalStates, initializePropagation, setStartDate, setupMatricesComputation, stateChanged, updateAdditionalStates, updateUnmanagedStates
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
clearStepHandlers, getDefaultLaw, setStepHandler, setStepHandler
getPosition
@DefaultDataContext public NumericalPropagator(org.hipparchus.ode.ODEIntegrator integrator)
addForceModel
,则集成轨道将仅遵循开普勒演化。默认值为 OrbitType.EQUINOCTIAL
用于 传播轨道类型
,PositionAngleType.TRUE
用于 位置角类型
。
此构造函数使用 默认数据上下文
。
integrator
- 用于传播的数值积分器。
NumericalPropagator(ODEIntegrator, AttitudeProvider)
public NumericalPropagator(org.hipparchus.ode.ODEIntegrator integrator, AttitudeProvider attitudeProvider)
addForceModel
,则积分轨道将仅遵循开普勒演化。默认值为OrbitType.EQUINOCTIAL
用于传播轨道类型
,PositionAngleType.TRUE
用于位置角类型
。
integrator
- 用于传播的数值积分器。
attitudeProvider
- 姿态法则。
public void setIgnoreCentralAttraction(boolean ignoreCentralAttraction)
NewtonianAttraction
。
ignoreCentralAttraction
- 如果为true,则如果缺失,则不会自动添加NewtonianAttraction
public void setMu(double mu)
设置中心引力系数等效于添加
一个NewtonianAttraction
力模型。
setMu
在类中 AbstractIntegratedPropagator
mu
- 中心引力系数(m³/s²)
addForceModel(ForceModel)
,getAllForceModels()
public void addForceModel(ForceModel model)
如果根本没有调用此方法,则积分轨道将仅遵循开普勒演化。
model
- 要添加的ForceModel
(可以是摄动力模型或NewtonianAttraction
的实例)
removeForceModels()
,setMu(double)
public void removeForceModels()
一旦所有摄动力被移除(并且没有添加新的力模型),积分轨道将仅遵循开普勒演化。
public List<ForceModel> getAllForceModels()
addForceModel(ForceModel)
,setMu(double)
public void setOrbitType(OrbitType orbitType)
setOrbitType
在类中 AbstractIntegratedPropagator
orbitType
- 用于传播的轨道类型,null表示使用AbsolutePVCoordinates
而不是Orbit
进行传播
public OrbitType getOrbitType()
getOrbitType
在类中 AbstractIntegratedPropagator
AbsolutePVCoordinates
而不是Orbit
进行传播
public void setPositionAngleType(PositionAngleType positionAngleType)
setPositionAngleType
在类中 AbstractIntegratedPropagator
positionAngleType
- 用于传播的角度类型
public PositionAngleType getPositionAngleType()
getPositionAngleType
在类中 AbstractIntegratedPropagator
public void setInitialState(SpacecraftState initialState)
initialState
- 初始状态
public void resetInitialState(SpacecraftState state)
resetInitialState
在接口中 Propagator
resetInitialState
在类中 AbstractPropagator
state
- 要考虑的新初始状态
protected AbstractMatricesHarvester createHarvester(String stmName, org.hipparchus.linear.RealMatrix initialStm, DoubleArrayDictionary initialJacobianColumns)
createHarvester
在类中 AbstractPropagator
stmName
- 状态转移矩阵状态名称
initialStm
- 初始状态转移矩阵∂Y/∂Y₀,如果为null(这是最常见的情况),则假定为6x6单位矩阵
initialJacobianColumns
- 相对于参数的雅可比矩阵的初始列,如果为null或字典中缺少某些选定参数,则假定相应的初始列为0
protected void setUpStmAndJacobianGenerators()
public TimeStampedPVCoordinates getPVCoordinates(AbsoluteDate date, Frame frame)
PVCoordinates
。
getPVCoordinates
在接口 PVCoordinatesProvider
getPVCoordinates
在类 AbstractPropagator
date
- 当前日期
frame
- 定义位置的参考系
protected StateMapper createMapper(AbsoluteDate referenceDate, double mu, OrbitType orbitType, PositionAngleType positionAngleType, AttitudeProvider attitudeProvider, Frame frame)
createMapper
在类 AbstractIntegratedPropagator
referenceDate
- 参考日期
mu
- 中心引力系数(立方米/平方秒)
orbitType
- 用于映射的轨道类型
positionAngleType
- 用于传播的角度类型
attitudeProvider
- 姿态提供者
frame
- 惯性参考系
protected AbstractIntegratedPropagator.MainStateEquations getMainStateEquations(org.hipparchus.ode.ODEIntegrator integrator)
getMainStateEquations
在类 AbstractIntegratedPropagator
integrator
- 用于传播的数值积分器。
public static double[][] tolerances(double dP, AbsolutePVCoordinates absPva)
dP
- 用户指定的位置误差
absPva
- 参考绝对位置-速度-加速度
tolerances(double, Orbit, OrbitType)
public static double[][] tolerances(double dP, Orbit orbit, OrbitType type)
从用户指定的位置误差开始,从轨道的偏导数属性估计误差。考虑到能量守恒方程V = sqrt(mu (2/r - 1/a)),我们在能量恒定(即在开普勒轨道上)时得到:
V r² |dV| = mu |dr|
因此,我们推导出与位置误差一致的标量速度误差。从这里,我们应用轨道雅可比矩阵以获得轨道参数的一致误差。
这些容差仅仅是数量级,积分器的容差仅仅是局部估计,而不是全局估计。因此,在使用这些容差时必须小心。将1毫米设置为位置误差并不意味着容差将在几个轨道积分后保证1毫米的位置误差。
dP
- 用户指定的位置误差
orbit
- 参考轨道
type
- 用于容差向量元素含义的传播类型(可能与orbit.getType()
不同)
public static double[][] tolerances(double dP, double dV, Orbit orbit, OrbitType type)
从用户指定的位置和速度误差开始,从轨道的偏导数属性估计误差。
这些容差仅仅是数量级,积分器的容差仅仅是局部估计,而不是全局估计。因此,在使用这些容差时必须小心。将1毫米设置为位置误差并不意味着容差将在几个轨道积分后保证1毫米的位置误差。
dP
- 用户指定的位置误差
dV
- 用户指定的速度误差
orbit
- 参考轨道
type
- 用于容差向量元素含义的传播类型(可能与orbit.getType()
不同)
protected void beforeIntegration(SpacecraftState initialState, AbsoluteDate tEnd)
默认实现不执行任何操作,可以在子类中进行特化。
beforeIntegration
在类 AbstractIntegratedPropagator
initialState
- 初始状态
tEnd
- 应传播状态的目标日期
Copyright © 2002-2023 CS GROUP. All rights reserved.