Question

Je dois représenter l'unité de pourcentage par seconde en utilisant le JScience.org JSR mise en œuvre 275 unités et mesures. Je suis en train de faire à ce qui suit:

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

mais je reçois un ClassCastException lorsque je tente de le faire.

Les travaux suivants, mais je ne sais pas s'il y a une meilleure façon:

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

Toutes les pensées? Le plus approchante à c'est la question sur Mesures de cuisine (ce qui est de savoir comment je voyais comment de définir vos propres unités).

Était-ce utile?

La solution

J'ai écrit cet exemple de code pour tester les mathématiques ici:

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

Si votre fonction d'origine a le temps comme variable indépendante (par exemple en secondes) et un rapport que la variable indépendante (par exemple, comme pour cent), la dérivée de cette fonction en ce qui concerne le temps aura encore le temps comme variable indépendante , mais aura « ratio par temps » comme la personne à charge.

Oui, les rapports sont adimensionnel, donc c'est un peu bizarre, mais vous pouvez imaginer un graphique de la journée de changement pour cent au cours jour dans un cours de l'action, puis un graphique de la variation de la pour cent changement de jour du cours des actions jour au cours de la journée sur le jour.

Alors qu'est-ce cette copie papier?

-3.0 %/s

Quel est ce que nous prévoyons que le taux de changement soit pour un changement de 50 à 20 pour cent de plus de 10 secondes.

Alors la construction de votre unité devrait ressembler à:

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

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

En effet, cette imprimante %/s measures 1/[T] (1/[T]), comme nous nous attendons.

Nous avons donc une unité et dimension et peut faire des mesures. Quelle est la quantité que nous mesurons? Les docs disent ceci au sujet Quantité:

  

quantités Distinct ont généralement   différentes dimensions physiques;   bien qu'il ne soit pas nécessaire, ni   nécessaire, par exemple du couple et   L'énergie ont la même dimension, mais sont des   nature différente (vecteur de couple,   scalaire pour l'énergie).

Ainsi, alors que la fréquence semble être la bonne quantité, il n'exprime pas vraiment la quantité sémantique nous semble discuter.

En terminant, la première ligne de code ne fonctionne pas parce que dans le modèle inclus 1 / [T] mesure la quantité Freqency, pas la quantité Dimensionless. Donc, si vous ne voulez pas faire votre propre quantité, utiliser l'unité. La dimension que vous recherchez est Aucun / heure ou% / seconde si vous voulez que les multiplicateurs scalaires correct là-dedans. Enfin, il est à vous si vous voulez faire votre propre quantité, mais il pourrait être utile si vous utilisez cela dans beaucoup d'endroits.

Il serait également utile de vérifier les derniers développements dans l'espace JScience car il semble qu'ils ont décidé Montant (avec addition, la soustraction, multiplication, division, pow, etc. méthodes) était nécessaire. Il serait vraiment facile à faire toute cette analyse dimensionnelle avec une quantité. Il suffit de faire un montant en pourcentage moins en pourcentage Montant et diviser par une quantité de secondes et il devrait faire les unités pour vous.

Autres conseils

Il a des unités s^-1 ou Hz (SI.HERTZ en parler JScience).

Ou Unit<Frequency>.

Pourcentage n'est pas une unité, mais un scalaire - donc pour cent par seconde est seulement une valeur scalaire par unité de temps, ce qui n'a pas de sens. Il est comme dire « 3 par seconde ». 3 quoi?

Si vous intégrez l'unité de ce que vous mesurez par unité de temps que vous obtiendrez l'unité correcte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top