public class ParameterDriver extends Object
此类通常用作估算算法(通常是轨道确定或优化器)和需要调整的物理模型中的内部参数之间的桥梁,或者是有限差分算法和需要稍微偏移的物理模型中的内部参数之间的桥梁。物理模型将向算法公开此类的一组实例,以便算法可以调用setValue(double, AbsoluteDate)
方法来更新给定日期的参数值。一些参数驱动器在整个周期内只有1个值被估计/驱动(默认情况下构造函数)。另一些在几个周期/间隔上估计/驱动几个值。例如,如果对于每天估计一个拖动参数的时间段为3天,则将估计3个值,每个时间段一个值。为了允许估计多个值,PDriver具有名称和值TimeSpanMap
作为属性。为了切割时间跨度映射,有两种选择:
addSpans(AbsoluteDate, AbsoluteDate, double)
方法。给定开始日期、结束日期和驱动器的有效期(以秒为单位),addSpans(org.orekit.time.AbsoluteDate, org.orekit.time.AbsoluteDate, double)
方法将在开始日期到结束日期之间的名称和值时间跨度映射中切割多个有效期间隔。此方法不应在轨道驱动器上调用,只能在过程开始时调用一次(例如在轨道确定的开始时)。警告:为了确保轨道确定的收敛性,必须明智选择开始、结束日期和驱动器周期性。每个间隔上必须有足够的测量数据,否则收敛性将无法达到或出现奇异矩阵。addSpanAtDate(AbsoluteDate)
方法。给定日期,该方法将切割值和名称时间跨度名称,以便在给定日期开始一个新跨度。可以根据需要多次调用此方法来切割时间映射。警告:为了确保轨道确定的收敛性,如果多次调用该方法,则必须明智选择开始日期。每个间隔上必须有足够的测量数据,否则收敛性将无法达到或出现奇异矩阵。有几种方法可以在具有多个间隔上的参数的特定日期获取ParameterDriver值。
ParameterObserver
。
此设计有两个主要目标。首先,它允许外部算法几乎匿名地驱动内部参数,因为它只需要获取此类的实例列表,而无需知道它们实际驱动的内容。其次,它允许物理模型不直接暴露其参数的设置器方法。为了能够修改参数值,算法必须检索参数驱动器。
ParameterObserver
Constructor and Description |
---|
ParameterDriver(String name, double referenceValue, double scale, double minValue, double maxValue)
简单构造函数。
|
ParameterDriver(String name, TimeSpanMap<String> namesSpanMap, TimeSpanMap<Double> valuesSpanMap, double referenceValue, double scale, double minValue, double maxValue)
从另一个参数驱动器信息(例如(对于 ParameterDriversList.DelegatingDriver )创建一个新实例。在构造时,新参数被配置为未选择,参考日期设置为null 。
|
Modifier and Type | Method and Description |
---|---|
void |
addObserver(ParameterObserver observer)
为此驱动器添加一个观察者。
|
void |
addSpanAtDate(AbsoluteDate spanStartDate)
在给定开始日期的值和名称时间跨度映射中创建一个新跨度。
|
void |
addSpans(AbsoluteDate orbitDeterminationStartDate, AbsoluteDate orbitDeterminationEndDate, double validityPeriodForDriver)
根据轨道确定的开始和结束以及驱动器周期性切割值和名称时间跨度映射。
|
double |
getMaxValue()
获取最大参数值。
|
double |
getMinValue()
获取最小参数值。
|
String |
getName()
获取参数驱动器的通用名称。
|
String |
getNameSpan(AbsoluteDate date)
获取特定日期的参数跨度的名称。
|
TimeSpanMap<String> |
getNamesSpanMap()
获取ParameterDriver的当前名称跨度映射,根据值跨度映射和有效期间隔切割为间隔。
|
int |
getNbOfValues()
获取要估计的值的数量,也就是说,数量。
|
double |
getNormalizedValue()
获取标准化值。
|
double |
getNormalizedValue(AbsoluteDate date)
获取特定日期的标准化值。
|
List<ParameterObserver> |
getObservers()
获取此驱动器的观察者。
|
AbsoluteDate |
getReferenceDate()
获取当前参考日期。
|
double |
getReferenceValue()
获取参考参数值。
|
double |
getScale()
获取比例。
|
AbsoluteDate[] |
getTransitionDates()
获取拖动敏感模型的过渡日期 TimeSpanMap 。
|
double |
getValue()
获取当前参数值。
|
double |
getValue(AbsoluteDate date)
获取特定日期的当前参数值,取决于isContinuousEstimation值,返回的值将通过步骤估计或连续估计获得。
|
org.hipparchus.analysis.differentiation.Gradient |
getValue(int freeParameters, Map<String,Integer> indices)
在特殊日期以梯度形式获取值。
|
org.hipparchus.analysis.differentiation.Gradient |
getValue(int freeParameters, Map<String,Integer> indices, AbsoluteDate date)
在特殊日期以梯度形式获取值。
|
double |
getValueContinuousEstimation(AbsoluteDate date)
在特定日期使用连续估计获取当前参数值。
|
double[] |
getValues()
按时间顺序获取valueSpanMap的所有值。
|
TimeSpanMap<Double> |
getValueSpanMap()
获取参数驱动器的值时间跨度映射。
|
double |
getValueStepEstimation(AbsoluteDate date)
在特定日期使用步骤估计获取当前参数值。
|
boolean |
isContinuousEstimation()
检查参数估计是否连续,也就是说,当一个值要在日期t知道时,返回的值将是在日期t对应的跨度开始值和结束值之间的插值(对应于下一个跨度的开始),连续估计。
|
boolean |
isSelected()
检查参数是否已选择。
|
void |
removeObserver(ParameterObserver observer)
移除一个观察者。
|
void |
replaceObserver(ParameterObserver oldObserver, ParameterObserver newObserver)
替换一个观察者。
|
void |
setContinuousEstimation(boolean continuous)
将参数估计设置为连续,默认为步骤估计。
|
void |
setMaxValue(double maxValue)
设置最大参数值。
|
void |
setMinValue(double minValue)
设置最小参数值。
|
void |
setName(String name)
更改此参数驱动器的通用名称。
|
void |
setNormalizedValue(double normalized)
在特定日期设置标准化值。
|
void |
setNormalizedValue(double normalized, AbsoluteDate date)
在特定日期设置标准化值。
|
void |
setReferenceDate(AbsoluteDate newReferenceDate)
设置参考日期。
|
void |
setReferenceValue(double referenceValue)
设置参考参数值。
|
void |
setScale(double scale)
设置比例。
|
void |
setSelected(boolean selected)
配置参数选择状态。
|
void |
setValue(double newValue)
设置参数值。
|
void |
setValue(double newValue, AbsoluteDate date)
在特定日期设置参数值。
|
void |
setValueSpanMap(ParameterDriver driver)
将当前参数值跨度映射设置为匹配另一个驱动器。为了保持一致性,更新有效期和名称跨度映射。
|
String |
toString()
获取参数的文本表示。
|
public ParameterDriver(String name, TimeSpanMap<String> namesSpanMap, TimeSpanMap<Double> valuesSpanMap, double referenceValue, double scale, double minValue, double maxValue)
ParameterDriversList.DelegatingDriver
)创建一个新实例。在构造时,新参数被配置为未选择,参考日期设置为null
。validityPeriod、namesSpanMap和valueSpanMap。
name
- 参数的通用名称
namesSpanMap
- 名称时间跨度映射。警告,Span的数量必须与validityPeriod和valueSpanMap一致(具有相同数量的Span和相同的过渡日期)
valuesSpanMap
- 值时间跨度映射
referenceValue
- 参数的参考值
scale
- 缩放因子,将参数值转换为无量纲(通常设置为参数的预期标准偏差),必须为非零
minValue
- 允许的最小值
maxValue
- 允许的最大值
public ParameterDriver(String name, double referenceValue, double scale, double minValue, double maxValue)
在构造时,参数被配置为未选择,参考日期设置为null
,值设置为referenceValue
,有效期设置为0,因此默认情况下ParameterDriver将仅在从-INF到+INF的1个间隔上进行估计。要更改有效期,必须调用addSpans(AbsoluteDate, AbsoluteDate, double)
方法。
name
- 参数的名称
referenceValue
- 参数的参考值
scale
- 缩放因子,将参数值转换为无量纲(通常设置为参数的预期标准偏差),必须为非零
minValue
- 允许的最小值
maxValue
- 允许的最大值
public TimeSpanMap<String> getNamesSpanMap()
public TimeSpanMap<Double> getValueSpanMap()
public void setValueSpanMap(ParameterDriver driver)
driver
- 要为当前驱动程序复制值跨度映射的驱动程序
public int getNbOfValues()
public AbsoluteDate[] getTransitionDates()
TimeSpanMap
。
TimeSpanMap
public double[] getValues()
public void addObserver(ParameterObserver observer)
观察者 valueSpanMapChanged
方法在添加观察者时会自动调用一次,然后在每次值更改时调用。
observer
- 要添加的观察者,同时正在更新
public void removeObserver(ParameterObserver observer)
observer
- 要移除的观察者
public void replaceObserver(ParameterObserver oldObserver, ParameterObserver newObserver)
oldObserver
- 要替换的观察者
newObserver
- 要使用的新观察者
public List<ParameterObserver> getObservers()
public String getName()
public String getNameSpan(AbsoluteDate date)
date
- 要了解跨度名称的日期
public void setName(String name)
name
- 新名称
public void addSpans(AbsoluteDate orbitDeterminationStartDate, AbsoluteDate orbitDeterminationEndDate, double validityPeriodForDriver)
例如,对于阻力系数,有效期将为1天=86400秒。在构造函数之后调用以使用所需参数驱动程序时间性切割时间轴,以便在所需间隔上进行估计。
例如,只能在轨道确定开始时调用一次。如果调用多次,将引发异常。如果必须更改参数估计间隔,则必须创建新的ParameterDriver或应使用函数 addSpanAtDate(org.orekit.time.AbsoluteDate)
。
在DateDriver
和任何ParameterDrivenDateIntervalDetector
属性上不应调用此函数,因为对于dateDriver估计多个值是没有意义的。
在轨道确定情况下,必须谨慎选择orbitDeterminationStartDate
、orbitDeterminationEndDate
和validityPeriodForDriver
,确实,每个时间间隔应有足够的测量数据可用,否则轨道确定将无法收敛。
orbitDeterminationStartDate
- 开始估计参数值的日期。
orbitDeterminationEndDate
- 停止估计参数值的日期。
validityPeriodForDriver
- 参数值有效的有效期(例如,阻力系数为1天)。警告,validityPeriod不应太短,否则轨道确定将无法收敛。
public void addSpanAtDate(AbsoluteDate spanStartDate)
spanStartDate
- 参数值区间开始估计的所需开始日期。
public double getReferenceValue()
public void setReferenceValue(double referenceValue)
referenceValue
- 要设置的参考值。
public double getMinValue()
public void setMinValue(double minValue)
minValue
- 要设置的最小值。
public double getMaxValue()
public void setMaxValue(double maxValue)
maxValue
- 要设置的最大值。
public double getScale()
public void setScale(double scale)
scale
- 要设置的比例。
public double getNormalizedValue(AbsoluteDate date)
归一化值是一个无量纲值,适合作为优化过程中向量的一部分使用。它计算为(current - reference)/scale
。
date
- 要了解归一化值的日期
public double getNormalizedValue()
归一化值是一个无量纲值,适合作为优化过程中向量的一部分使用。它计算为(current - reference)/scale
。
public void setNormalizedValue(double normalized, AbsoluteDate date)
归一化值是一个无量纲值,适合作为优化过程中向量的一部分使用。它计算为(current - reference)/scale
。
date
- 要设置归一化值的日期
normalized
- 值
public void setNormalizedValue(double normalized)
归一化值是一个无量纲值,适合作为优化过程中向量的一部分使用。它计算为(current - reference)/scale
。
normalized
- 值
public AbsoluteDate getReferenceDate()
public void setReferenceDate(AbsoluteDate newReferenceDate)
newReferenceDate
- 新的参考日期
public double getValue()
public double getValue(AbsoluteDate date)
date
- 要获取值的日期。仅当参数驱动器在整个轨道确定期间(而不是估计的有效期间)上估计了1个值时,日期值可以为null
,然后将返回唯一估计的值,在这种情况下,日期也可以是任何值,返回的值将是相同的。此外,在这种特殊情况下,还可以调用getValue()
。
public double getValueStepEstimation(AbsoluteDate date)
date
- 要获取值的日期。仅当参数驱动器在整个轨道确定期间(而不是估计的有效期间)上估计了1个值时,日期值可以为null
,然后将返回唯一估计的值,在这种情况下,日期也可以是任何值,返回的值将是相同的。此外,在这种特殊情况下,还可以调用getValue()
。
public double getValueContinuousEstimation(AbsoluteDate date)
date
- 要获取值的日期。仅当参数驱动器在整个轨道确定期间(而不是估计的有效期间)上估计了1个值时,日期值可以为null
,然后将返回唯一估计的值,在这种情况下,日期也可以是任何值,返回的值将是相同的。此外,在这种特殊情况下,还可以调用getValue()
。
public org.hipparchus.analysis.differentiation.Gradient getValue(int freeParameters, Map<String,Integer> indices)
freeParameters
- 梯度中的自由参数总数
indices
- 在导数计算中的微分参数的索引
public org.hipparchus.analysis.differentiation.Gradient getValue(int freeParameters, Map<String,Integer> indices, AbsoluteDate date)
freeParameters
- 梯度中的自由参数总数
indices
- 在导数计算中的微分参数的索引,必须是跨度名称而不是驱动器名称
date
- 要获取值的日期。仅当参数驱动器在整个轨道确定期间(而不是估计的有效期间)上估计了1个值时,日期值可以为null
,然后将返回唯一估计的值
public void setValue(double newValue, AbsoluteDate date)
如果newValue
低于getMinValue()
,它将被静默设置为getMinValue()
。如果newValue
高于getMaxValue()
,它将被静默设置为getMaxValue()
。
date
- 要设置值的日期。仅当参数驱动器在整个轨道确定期间(而不是估计的有效期间)上估计了1个值时,日期值可以为null
newValue
- 要设置的新值
public void setValue(double newValue)
如果newValue
低于getMinValue()
,它将被静默设置为getMinValue()
。如果newValue
高于getMaxValue()
,它将被静默设置为getMaxValue()
。
newValue
- 要设置的新值
public void setSelected(boolean selected)
选择用于轨道确定中的估计参数,或用于计算偏导数矩阵。
selected
- 如果为true,则参数已选择,否则将被固定
public boolean isSelected()
选择用于轨道确定中的估计参数,或用于计算偏导数矩阵。
public void setContinuousEstimation(boolean continuous)
连续估计:当要在日期t获取值时,返回的值将是对应于日期t的跨度的起始值和结束值之间的插值(对应于下一个跨度的开始)。
步长估计:当要在日期t获取值时,返回的值将是对应于日期t的跨度的开始值,步长估计。
continuous
- 如果为true,则参数将使用连续估计进行估计,如果为false,则使用步长估计。
public boolean isContinuousEstimation()
Copyright © 2002-2023 CS GROUP. All rights reserved.