我寫了這個代碼示例來測試這裏的數學:
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