質問

jscience.orgを使用して、1秒あたりの単位を表す必要があります 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);
}

元の関数が独立変数として時間(例:秒)および独立変数としての比率(パーセントとして)の場合、時間に関するこの関数の導関数はまだ独立変数として時間がありますが、依存者として「時間あたりの比率」を持っています。

はい、比率は無次元であるため、これは少し奇妙ですが、株価の1日の1日の変化率のグラフと、1日の株価の変化率の変化のグラフを想像できます。一日中。

それで、これは何を印刷しますか?

-3.0 %/s

これは、10秒間で50〜20パーセントの変化に変化すると予想されることです。

したがって、ユニットの構造は次のように見えるはずです。

    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]には、量の数量が無次元ではなく数量の速度を測定するため、コードの最初の行が機能しません。したがって、独自の量を作りたくない場合は、ユニットを使用してください。探している寸法は、正しいスカラー乗数が必要な場合は、NONE/TIME、または%/secondです。最後に、自分の量を作りたいかどうかはあなた次第ですが、これを多くの場所で使用している場合は価値があるかもしれません。

また、で最新の開発をチェックする価値があります JScience スペースは、(追加、減算、乗算、分裂、Powなど)を決定したように思われるため、必要が必要でした。この次元分析をすべて量で行うのは本当に簡単です。割合を引いた割合を超えて、秒単位で割るだけで、ユニットを実行する必要があります。

他のヒント

ユニットがあります s^-1, 、またはHz(SI.HERTZ JScienceが話す)。

または Unit<Frequency>.

パーセントはユニットではありませんが、スカラーです。したがって、1秒あたりのパーセントは単位時間ごとにスカラー値にすぎませんが、意味がありません。 「秒あたり3」と言っているようなものです。 3何?

正しい単位を取得するユニット時間ごとに測定しているものの単位を組み込む場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top