Frage

ich brauche die Einheit Prozent darzustellen pro Sekunde des JSR 275 Einheiten und Maßnahmen Umsetzung. Ich versuche, die folgenden zu tun:

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

, aber ich bin immer einen Classcast wenn ich versuche, das zu tun.

Die folgenden Werke, aber ich bin nicht sicher, ob es eine bessere Art und Weise:

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

Alle Gedanken? Der nächstgelegene ich dazu ist die Frage auf Cooking Measurements finden konnte (was, wie ich sah, wie definieren Sie Ihre eigenen Einheiten).

War es hilfreich?

Lösung

Ich schrieb dieses Codebeispiel zu testen, die Mathematik hier oben:

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);
}

Wenn Sie Ihre ursprüngliche Funktion der Zeit als unabhängige Variable (zB als Sekunden) und ein Verhältnis als unabhängige Variable (zB als Prozent) hat, dann ist die Ableitung dieser Funktion im Hinblick auf die Zeit wird noch Zeit als unabhängige Variable haben , hat aber ‚Verhältnis pro Zeit‘ als abhängiges wird.

Ja, Verhältnisse sind dimensionslose, so ist dies ein wenig seltsam, aber man konnte eine Grafik der prozentualen Veränderung Tag über Tag in einem Aktienkurs vorstellen, und dann eine grafische Darstellung der Veränderung der prozentualen Veränderung in einem Aktienkurs Tag über Tag Tag über Tag.

Was bedeutet diesen Druck aus?

-3.0 %/s

Welche ist das, was wir die Änderungsrate erwarten für einen Wechsel zu 50-20 Prozent mehr als 10 Sekunden.

So Ihr Gerät Konstruktion soll wie folgt aussehen:

    Unit<?> magicUnit = NonSI.PERCENT.divide(SI.SECOND);
    Dimension magicDimension = Dimension.NONE.divide(Dimension.TIME);

    System.out.println(magicUnit + " measures " + magicDimension + " ("
            + magicUnit.getDimension() + ")");

Tatsächlich diese Drucke %/s measures 1/[T] (1/[T]), wie wir es erwarten.

So haben wir eine Einheit und Dimension und Maßnahmen treffen können. Was ist die Menge wir messen werden? Die docs sagen diese über Menge:

Distinct Mengen haben in der Regel verschiedene physikalische Abmessungen; obwohl es nicht erforderlich ist, noch notwendig, beispielsweise Drehmoment und Energie hat die gleiche Dimension, sondern ist von unterschiedliche Art (Vektor für Drehmoment, Skalar für Energie).

Während also die Frequenz die richtige Menge zu sein scheint, ist es nicht wirklich die semantische Menge auszudrücken scheinen wir diskutieren werden.

Beim Schließen Sie Ihre erste Zeile Code funktioniert nicht, weil in dem mitgelieferten Modell 1 / [T] misst die Menge Freqency, nicht die Quantität Dimensionslos. Also, wenn Sie Ihre eigene Menge nicht machen wollen, verwenden Einheit. Die Dimension Sie suchen ist keine / Zeit oder% / Sekunde, wenn Sie die richtigen skalaren Multiplikatoren dort wollen. Schließlich ist es an Ihnen, ob Sie Ihre eigene Menge machen wollen, aber es könnte sich lohnen, wenn Sie diese in vielen Orten verwenden.

Es wäre auch sinnvoll sein, um die neuesten Entwicklungen zu überprüfen, in dem JScience Raum da es scheint, wie sie Betrag entschieden (mit addieren, subtrahieren, multiplizieren, dividieren, pow, usw. Methoden) erforderlich war. Es wäre wirklich einfach, all diese Dimensionsanalyse mit Menge zu tun. Sie einfach einen prozentualen Betrag minus einen Prozentbetrag und dividieren durch eine Sekunde Menge und es sollte die Maßeinheiten für Sie tut.

Andere Tipps

Es hat Einheiten s^-1 oder Hz (SI.HERTZ in JScience sprechen).

oder Unit<Frequency>.

Percent ist keine Einheit, sondern ein Skalar - so Prozent pro Sekunde ist nur ein Einzelwert pro Zeiteinheit, die keinen Sinn macht. Es ist wie wenn man sagt „3 pro Sekunde“. 3 was?

Wenn Sie das Gerät von nehmen, was Sie pro Zeiteinheit messen, dass Sie die richtige Einheit erhalten wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top