我写了这个代码示例来测试这里的数学:
public void testUnit() {
// define two points on a function from t -> %
// the rate of change between these two points
// should have unit %/t
Measure<Double, Dimensionless> p0 = Measure.valueOf(50.0, NonSI.PERCENT);
Measure<Double, Dimensionless> p1 = Measure.valueOf(20.0, NonSI.PERCENT);
Measure<Double, Duration> timeDifference = Measure.valueOf(10.0, SI.SECOND);
// JSR-275 has no Amount, so have to convert and do math ourselves
// these doubles are percents
double p0Raw = p0.doubleValue(NonSI.PERCENT);
double p1Raw = p1.doubleValue(NonSI.PERCENT);
// this duration is in seconds
double timeDifferenceRaw = timeDifference.doubleValue(SI.SECOND);
// this is the slope of the secant between the two points
// so it should be the %/s we want
double rateSecant = (p1Raw - p0Raw)/timeDifferenceRaw;
// let's see what we get
Measure<Double, ?> answer = Measure.valueOf(rateSecant,
NonSI.PERCENT.divide(SI.SECOND));
System.out.println(answer);
}
如果你原来的功能有时间作为独立变量(如为秒)的比例为自变量(例如,作为百分比),那么这个函数关于时间的导数将仍然有时间作为自变量,但是将具有“每时间比率”作为相关性。
是的,比率是无量纲的,所以这有些奇怪,但是您可以想象一张股票价格随时间变化的百分比图,然后是股票价格变化百分比变化图白天的日子。
那么这个打印出来是什么?
-3.0 %/s
这就是我们预计在10秒内变化率从50%变为20%的原因。
所以,你的单位建设应该是这样的:
Unit<?> magicUnit = NonSI.PERCENT.divide(SI.SECOND);
Dimension magicDimension = Dimension.NONE.divide(Dimension.TIME);
System.out.println(magicUnit + " measures " + magicDimension + " ("
+ magicUnit.getDimension() + ")");
事实上这种打印%/s measures 1/[T] (1/[T])
,如我们预期。
所以我们有一个单位和维度,可以使措施。我们测量的数量是多少?文档说这个关于数量:
不同的数量通常有不同的物理尺寸 ; 虽然它不是必需的,但也是必需的,例如扭矩和 能量具有相同的尺寸,但具有不同的性质(扭矩矢量,能量标量 )。
所以虽然频率似乎是正确的数量,但它并不真正表达我们似乎讨论的语义量。
最后,您的第一行代码不起作用,因为在包含模型中1/[T]测量数量Freqency,而不是数量Dimensionless。所以如果你不想制作自己的数量,请使用单位。您要查找的维度是无/时间,或者如果您希望在那里有正确的标量乘数,则为%/秒。最后,您是否想要自己制作数量取决于您,但如果您在很多地方使用它,这可能是值得的。
查看JScience空间的最新进展也是值得的,因为它似乎需要量(需要加,减,乘,除,等等方法)。使用金额进行所有这些维度分析真的很容易。只要做一个百分比金额减去一个百分比金额和除以一秒的金额,它应该为你做单位。
我觉得这应该是可能的,但不能抓住JScience JSR-275 RI的JAR。你有一个指向它可以下载的地方吗?我知道我之前使用过它,但在JSR关闭后,很难找到指向它的任何指示。 – jasonmp85 2010-05-25 06:52:33
http://download.java.net/maven/2/net/java/dev/jsr-275/jsr-275/1.0-beta-2/ – I82Much 2010-05-25 12:07:08