Domanda

Ho bisogno di rappresentare l'unità di percentuale al secondo utilizzando il JScience.org JSR 275 unità e le misure di attuazione. Sto cercando di fare per quanto segue:

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

, ma sto ottenendo un ClassCastException quando cerco di farlo.

I seguenti lavori, ma non sono sicuro se c'è un modo migliore:

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

Qualche idea? Il più vicino che ho trovato per questo è la domanda su Misure Cooking (che è come ho visto come per definire le proprie unità).

È stato utile?

Soluzione

Ho scritto su questo esempio di codice per testare la matematica qui:

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

Se la funzione originale ha il tempo come variabile indipendente (in secondi) e un rapporto come variabile indipendente (in percentuale), allora la derivata di questa funzione con riguardo al tempo avrà ancora tempo come variabile indipendente , ma avra 'rapporto per volta' come il dipendente.

Sì, i rapporti sono adimensionale, quindi questo è un po 'strano, ma si potrebbe immaginare un grafico del giorno variazione percentuale nel corso del giorno in un prezzo delle azioni e quindi un grafico della variazione della variazione percentuale in un giorno di prezzo delle azioni nel corso del giorno giorno per giorno.

Che cosa significa questo stampa fuori?

-3.0 %/s

che è quello che ci aspettiamo che il tasso di variazione di essere per un cambiamento 50-20 per cento più di 10 secondi.

Quindi, la costruzione dell'unità dovrebbe essere simile:

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

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

In effetti questa stampe %/s measures 1/[T] (1/[T]), come ci aspettiamo.

Quindi abbiamo un'unità e la dimensione e possiamo fare misure. Qual è la quantità stiamo misurando? La documentazione dicono questo circa Quantità:

  

quantitativi distinti hanno di solito   dimensioni fisiche diverse;   anche se non è richiesta né   necessaria, per esempio coppia e   Energia hanno stessa dimensione, ma sono di   natura diversa (vettoriale per coppia,   scalare per l'energia).

Così, mentre in frequenza sembra essere la giusta quantità, in realtà non esprime la quantità semantica ci sembra di essere a discutere.

In chiusura, la prima linea di codice non funziona perché nel modello incluso 1 / [T] misura la quantità Freqency, non la quantità adimensionale. Quindi, se non si vuole fare il vostro proprio Quantita, utilizzare unità. La dimensione che si sta cercando è Nessuno / ora, o% / secondo se si desidera che i corretti moltiplicatori scalari in là. Infine, è a voi se volete fare il vostro proprio Quantità, ma potrebbe essere utile se si sta utilizzando questo in un sacco di posti.

Sarebbe anche utile per controllare gli ultimi sviluppi nello spazio JScience in quanto sembra che hanno deciso Importo (con addizione, sottrazione, moltiplicazione, divisione, pow, ecc metodi) è stato necessario. Sarebbe davvero facile da fare tutto questo l'analisi dimensionale di importo. Basta fare una quantità percentuale meno una quantità percentuale e dividere per un importo secondi e dovrebbe fare le unità per voi.

Altri suggerimenti

Ha unità s^-1, o Hz (SI.HERTZ in JScience parlare).

O Unit<Frequency>.

per cento non è un'unità, ma uno scalare - così per cento al secondo è solo un valore scalare per unità di tempo, il che non ha senso. E 'come dire "3 al secondo". 3 che cosa?

Se si incorporano l'unità di ciò che si sta misurando per unità di tempo che ti porterà l'unità corretta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top