Я написал этот пример кода, чтобы проверить математику здесь:
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
То, что мы ожидаем, это скорость изменения от 50 до 20 процентов в течение 10 секунд.
Итак, конструкция вашего юнита должна выглядеть так:
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, а не количество безразмерных. Так что, если вы не хотите делать свой собственный Количество, используйте Единицу. Измерение, которое вы ищете, это None / Time или% / second, если вы хотите, чтобы там были правильные скалярные множители. Наконец, вам решать, хотите ли вы сделать свой собственный Количество, но это может быть полезно, если вы используете это во многих местах.
Также было бы целесообразно проверить последние разработки в области JScience , поскольку кажется, что они решили, что необходимо количество (с помощью методов сложения, вычитания, умножения, деления, вычисления и т. Д.). Было бы действительно легко выполнить весь этот анализ с помощью Amount. Просто введите сумму процентов за вычетом суммы процентов и разделите ее на доли секунды, и она должна подойти для вас.