我需要使用jscience.org表示每秒百分比的单位 JSR 275 单位和措施实施。我正在尝试处理以下内容:

Unit<Dimensionless> PERCENT_PER_SECOND = NonSI.PERCENT.divide(Si.SECOND).asType(Dimensionless.class)

但是,当我尝试这样做时,我会得到ClassCastException。

以下作品,但我不确定是否有更好的方法:

public interface PercentOverTime extends Quantity {}
public static Unit<PercentOverTime> PERCENT_PER_SECOND = new BaseUnit<PercentOverTime>("%/s");

有什么想法吗?我能找到的最接近的是问题 烹饪测量 (这就是我看到如何定义自己的单位的方式)。

有帮助吗?

解决方案

我写了此代码示例以在这里测试数学:

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]中测量了数量自由度,而不是无尺寸的数量。因此,如果您不想自行数量,请使用单元。如果您想要正确的标量乘数,则您要寻找的尺寸无/时间/秒。最后,是否要自行数量取决于您,但是如果您在很多地方使用它,那可能是值得的。

还值得查看 JScience 空间由于他们似乎决定数量(添加,减,乘,分隔,POW等)。用数量进行所有这些维度分析真的很容易。只需减去百分之额的百分比,然后除以几秒钟,它应该为您完成单位。

其他提示

它有单位 s^-1, 或Hz(SI.HERTZ 在JScience讲话)。

或者 Unit<Frequency>.

百分比不是单元,而是标量 - 因此每秒百分比仅是单位时间标量值,这是没有意义的。这就像说“每秒3个”。 3什么?

如果您将单位时间测量的单位合并为单位时间,这将使您成为正确的单位。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top