سؤال

أحتاج إلى تمثيل وحدة النسبة المئوية في الثانية باستخدام 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

وهو ما نتوقع أن يكون معدل التغيير من أجل تغيير من 50 إلى 20 في المائة على مدى 10 ثوانٍ.

لذلك يجب أن يبدو بناء وحدتك:

    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] يقيس الكمية freqency ، وليس البعد الكمي. لذلك إذا كنت لا ترغب في صنع كمية خاصة بك ، فاستخدم الوحدة. البعد الذي تبحث عنه هو لا شيء/وقت ، أو ٪/ثانية إذا كنت تريد مضاعفات العددية الصحيحة هناك. أخيرًا ، الأمر متروك لك ما إذا كنت تريد أن تصنع كمية خاصة بك ، ولكن قد يكون الأمر جديراً بالاهتمام إذا كنت تستخدم هذا في الكثير من الأماكن.

سيكون من المفيد أيضًا التحقق من أحدث التطورات في JScience المساحة لأنه يبدو أنها قررت المبلغ (مع إضافة ، طرح ، مضاعفة ، تقسيم ، أساليب ، إلخ. الأساليب). سيكون من السهل حقًا القيام بكل هذا التحليل الأبعاد بكمية. ما عليك سوى القيام بمبلغ في المئة ناقص مبلغ في المئة وتقسيم مبلغ ثواني ويجب أن تفعل الوحدات لك.

نصائح أخرى

لديها وحدات s^-1, أو هرتز (SI.HERTZ في JSCIENCE يتكلم).

أو Unit<Frequency>.

النسبة المئوية ليست وحدة ، ولكنها قياسية - لذا فإن النسبة المئوية في الثانية ليست سوى قيمة قياسية لكل وحدة زمنية ، وهو أمر لا معنى له. إنه مثل قول "3 في الثانية". 3 ماذا؟

إذا قمت بدمج وحدة ما تقيسه لكل وحدة زمنية ستحصل على الوحدة الصحيحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top