Pregunta

I necesidad de representar la unidad de ciento por segundo usando de la JScience.org JSR 275 unidades y medidas de aplicación. Estoy tratando de hacerlo a la siguiente:

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

Pero estoy un ClassCastException cuando trato de hacer eso.

Las siguientes obras, pero no estoy seguro si hay una mejor manera:

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

¿Alguna idea? Lo más cerca que pude encontrar para esto es la pregunta sobre Mediciones de cocina (que es la forma en que vi cómo para definir sus propias unidades).

¿Fue útil?

Solución

Me escribió este ejemplo de código para poner a prueba las matemáticas aquí:

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 su función original tiene tiempo como la variable independiente (por ejemplo, como segundo) y una relación como la variable independiente (por ejemplo, como un porcentaje), entonces la derivada de esta función con respecto al tiempo aún tendrá tiempo como la variable independiente , sino que tendrá 'relación por tiempo' como el dependiente.

Sí, las relaciones son sin dimensiones, así que esto es un poco raro, pero se podía imaginar un gráfico del día porcentaje de cambio en el día en un precio de las acciones y luego un gráfico del cambio en el porcentaje de cambio en un día precio de las acciones en el día día en el día.

Entonces, ¿qué hace esta impresión a cabo?

-3.0 %/s

¿Qué es lo que esperamos que la tasa de cambio sea para un cambio de 50 a 20 por ciento durante 10 segundos.

Por lo que su construcción de la unidad debe ser similar a:

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

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

De hecho, este grabados %/s measures 1/[T] (1/[T]), ya que esperamos.

Así que tenemos una unidad y la dimensión y podemos hacer medidas. ¿Cuál es la cantidad que estamos midiendo? Los documentos dicen esto sobre Cantidad:

Distintas cantidades tienen por lo general diferentes dimensiones físicas; aunque no se requiere ni necesario, por ejemplo Torque y Energía tiene misma dimensión, pero son de naturaleza diferente (vector de par de torsión, escalar de la energía).

Así, mientras frecuencia parece ser la correcta cantidad, que en realidad no expresa la cantidad semántica parece que estamos discutiendo.

En el cierre, su primera línea de código no funciona debido a que en el modelo incluido 1 / [T] medidas de la cantidad de Freqency, no la cantidad adimensional. Así que si usted no desea hacer su propia Cantidad, Unidad utilizar. La dimensión que busca es Ninguno / hora, o% / segundo si desea que los multiplicadores escalares correctas en ese país. Por último, le toca a usted si usted desea hacer su propia cantidad, pero podría ser útil si usted está usando esto en muchos lugares.

También valdría la pena echa un vistazo a los últimos avances en el espacio JScience ya que parece que decidieron Cantidad (con sumar, restar, multiplicar, dividir, prisionero de guerra, etc. métodos) que se necesitaba. Sería muy fácil de hacer todo esto con el análisis dimensional Cantidad. Sólo hacer una cantidad en porcentaje, menos una cantidad en porcentaje y se divide por una cantidad segundos y debe hacer las unidades para usted.

Otros consejos

Tiene unidades s^-1, o Hz (SI.HERTZ en JScience Hablar).

O Unit<Frequency>.

Porcentaje no es una unidad, pero un escalar - de modo ciento por segundo sólo es un valor escalar por unidad de tiempo, lo que no tiene sentido. Es como decir "3 por segundo". 3 ¿qué?

Si se incorpora la unidad de lo que se está midiendo por unidad de tiempo que les permite conocer la unidad correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top