voile.math
数学関数のヘルパなど
以下のクラスやインターフェース、関数が利用可能
See Also:
- INumericFunction インターフェース
- RungeKuttaMethoed4 クラス
- StepResponse_FirstOrderLeg_RK4 クラス
- StepResponse_SecondOrderLeg_RK4 クラス
- Nonlinearly クラス
- Angle 型
Date:
December 08, 2008
Author:
P.Knowledge, SHOO
Lisence:
NYSL ( http://www.kmonos.net/nysl/ )
- abstract interface
INumericFunction
;
- 数学関数
一変数関数。
トリッキーな関数に応用が可能。
たとえば
RungeKuttaMethoed4 などの複雑な要素の絡む関数、
Nonlinearly などを使った乱数の密度関数
などなどが挙げられます。
- abstract real
opCall
(real x);
- 値を得る
y = f(x) でいうところの x を与え y の値を得るための関数。
Params:
real x |
y = f(x) でいうところの x |
Returns:
y = f(x) でいうところの y
- class
RungeKuttaMethod4
: voile.math.INumericFunction;
- 4次のルンゲクッタ法
- void
input
(real delegate((real _param_0)) aDelegate);
void
input
(real function((real _param_0)) aFunction);
void
input
(DelegateFunction aFunction);
- 入力関数
property setter
Params:
real delegate((real _param_0)) aDelegate |
入力関数 |
aFunction |
同上 |
- void
state
(real[] aState, bool aDoCopy = true);
real[]
state
(bool aDoCopy = false);
- 入出力の状態
property setter/getter
入出力の状態を示します。 この値は calculate メソッドを実行することで更新
されます。
Params:
real[] aState |
setter の場合入出力の状態を強制的に変更します。
あまりお勧めできません。 initialize() を使用したほうがよい
でしょう。 |
bool aDoCopy |
コピーするか否か。 true ならコピーします。 |
Returns:
getter の場合現在の状態を取得することが可能です。
- void
systemProperties
(real[] aPropData, bool aDoCopy = true);
real[]
systemProperties
(bool aDoCopy = false);
- システムのプロパティ
property setter/getter
システムの特性に関するプロパティです。システムは制御工学でいうところの
伝達関数によって表わされます。
伝達関数の分子の数は1として、sの係数のリストを使用します。
Params:
real[] aPropData |
setter の場合、伝達関数のs^nの係数をsの次数の大きなものの
係数から順に設定してください。
伝達関数が (1)/(2s + 1) であれば、 [2, 1]です。 |
bool aDoCopy |
配列をコピーするか否か。 true の場合コピーされます。 |
Returns:
getter の場合、既に設定されているシステムの特性を返します。
- void
lastTime
(real aNewTime);
real
lastTime
();
- 最後に更新した際の時間
property setter/getter
Params:
real aNewTime |
setter の場合、最後の試行の際の時間を手動で切り替えます。
重要なのは、
lastTime
プロパティの時間と、試行時の時間の
差異となります。これを微少時間として計算を行います。 |
Returns:
getter の場合、前回試行時の時間を取得することが可能です。
- void
initialize
(real delegate((real _param_0)) aDelegate, real[] aStateDefaultData, real[] aPropData, real aStartTime = 0L, bool aDoCopy = true);
void
initialize
(real[] aStateDefaultData, real[] aPropData, real aStartTime = 0L, bool aDoCopy = true);
void
initialize
(real function((real _param_0)) aFunction, real[] aStateDefaultData, real[] aPropData, real aStartTime = 0L, bool aDoCopy = true);
void
initialize
(DelegateFunction aFunction, real[] aStateDefaultData, real[] aPropData, real aStartTime = 0L, bool aDoCopy = true);
- 初期化する
各プロパティを一斉に設定する。
各プロパティは以下の通り
- systemProperties
- state
- input
- lastTime
Params:
real delegate((real _param_0)) aDelegate |
入力関数 inputプロパティの値 |
aFunction |
入力関数 inputプロパティの値 |
real[] aStateDefaultData |
初期の状態 stateプロパティの値 |
real[] aPropData |
システムの状態 systemProperties プロパティの値 |
real aStartTime |
開始時間 |
bool aDoCopy |
各配列をコピーするか否か |
- this();
this(real[] aStateDefaultData, real[] aPropData, real aStartTime = 0L, bool aDoCopy = true);
this(real delegate(real) aDelegate, real[] aStateDefaultData, real[] aPropData, real aStartTime = 0L, bool aDoCopy = true);
this(real function(real) aFunction, real[] aStateDefaultData, real[] aPropData, real aStartTime = 0L, bool aDoCopy = true);
this(DelegateFunction!(real,real) aFunction, real[] aStateDefaultData, real[] aPropData, real aStartTime = 0L, bool aDoCopy = true);
- コンストラクタ
基本的に initialize() と同じ。
引数を指定しないでインスタンスを生成する場合、必ずすべてのプロパティを
設定しなければならない。
See Also:
initialize()
- void
calculate
(real t);
- 計算する
計算を行い、内部状態を更新する。
Params:
real t |
計算する際の時間。現在時刻など、今回計算する際の時間を指定する。
細かい周期で呼び出すほど精度が高くなる。
ただし、処理時間もかかるため、ほどほどの間隔で呼び出すのがいい。 |
- real
opCall
(real t);
- 値を得る
See Also:
INumericFunction
- void
write
(OutputStream ost);
- 書き込み
See Also:
tango.io.protocol.IWriter.IWritable
- void
read
(InputStream ist);
- 読み込み
See Also:
tango.io.protocol.IReader.IReadable
- class
StepResponse_FirstOrderLeg_RK4
: voile.math.INumericFunction;
- ルンゲクッタの一次ステップ応答
- void
initialize
(real aState, real aTimeConstant, real aStartTime = 0L);
- 初期化
すべてのプロパティを同時に設定します。
プロパティ一覧は下記の通り。
- state
- timeConstant
- lastTime
Params:
real aState |
state の初期値 |
real aTimeConstant |
timeConstant プロパティの値 |
real aStartTime |
lastTime プロパティの値 |
- void
calculate
(real t);
- 計算する
計算を行い、内部状態を更新する。
Params:
real t |
計算する際の時間。現在時刻など、今回計算する際の時間を指定する。
細かい周期で呼び出すほど精度が高くなる。
ただし、処理時間もかかるため、ほどほどの間隔で呼び出すのがいい。 |
- void
state
(real pState);
real
state
();
- 状態
property setter/getter
システムの状態を表します。これが事実上関数のアウトプットとなります。
Params:
state
|
setter の場合、状態の値を変更できます。 |
Returns:
getter の場合、状態を返します。
- void
timeConstant
(real aTimeConstant);
real
timeConstant
();
- 時定数
property setter/getter
一次応答のシステムにおける時定数に当たる値を設定します。
Params:
real aTimeConstant |
setter の場合、時定数を設定します。 |
Returns:
getter の場合、システムの時定数を得ます。
- real
target
();
void
target
(real aTarget);
- 目標値
property setter/getter
一次応答のシステムにおける目標値に当たる値を設定します。
Params:
aTarget |
setter の場合、目標値を設定します。 |
Returns:
getter の場合、システムの目標値を得ます。
- real
opCall
(real x);
- 値を得る
See Also:
INumericFunction
- void
write
(OutputStream ost);
- 書き込み
See Also:
tango.io.protocol.IWriter.IWritable
- void
read
(InputStream ist);
- 読み込み
See Also:
tango.io.protocol.IReader.IReadable
- class
StepResponse_SecondOrderLeg_RK4
: voile.math.INumericFunction;
- ルンゲクッタの二次ステップ応答
- this();
this(real aState1 = 0L, real aState2 = 0L, real aFrequency = 1L, real aViscosity = 1L, real aStartTime = 0L);
- コンストラクタ
内容は基本的に initialize関数と同じ
See Also:
initialize()
- void
initialize
(real aState1 = 0L, real aState2 = 0L, real aFrequency = 1L, real aViscosity = 1L, real aStartTime = 0L);
- 初期化
プロパティを一斉に初期化することが可能です。
プロパティ一覧は次の通り。
- state1
- state2
- frequency
- viscosity
- lastTime
Params:
real aState1 |
state1 プロパティの初期値 |
real aState2 |
state2 プロパティの初期値 |
real aFrequency |
frequency プロパティの値 |
real aViscosity |
viscosity プロパティの値 |
real aStartTime |
lastTime プロパティの値 |
- void
calculate
(real t);
- 計算する
計算を行い、内部状態を更新する。
Params:
real t |
計算する際の時間。現在時刻など、今回計算する際の時間を指定する。
細かい周期で呼び出すほど精度が高くなる。
ただし、処理時間もかかるため、ほどほどの間隔で呼び出すのがいい。 |
- real
state
();
- 1次の状態を得る
- void
state1
(real aState1);
real
state1
();
alias
location
;
- 1次状態プロパティ
property setter/getter
一次要素の状態を示します。例として、位置と速さでいえば、位置が一次要素と
なります。
location はその意味で
state1
と同義としました。
Params:
real aState1 |
setter の場合、1次要素の状態を変更します。
位置や速さの関係でいえば、初期位置に当たる値となります。 |
Returns:
getter の場合、1次要素の状態を返します。
- real
state2
();
void
state2
(real aState2);
alias
velocity
;
- 2次状態プロパティ
property setter/getter
二次要素の状態を示します。例として、位置と速さでいえば、速さが二次要素と
なります。
velocity はその意味で
state2
と同義としました。
Params:
aState1 |
setter の場合、2次要素の状態を変更します。
位置や速さの関係でいえば、初期位置に当たる値となります。 |
Returns:
getter の場合、2次要素の状態を返します。
- real
target
();
void
target
(real aTarget);
- 目標値
property setter/getter
一次応答のシステムにおける目標値に当たる値を設定します。
Params:
aTarget |
setter の場合、目標値を設定します。 |
Returns:
getter の場合、システムの目標値を得ます。
- void
frequency
(real aFreqency);
real
fequency
();
- システムの周波数成分
property setter/getter
2次の伝達関数における ωn です。
Params:
real aFreqency |
setter の場合、2次の伝達関数における
ωn の値を変更します。 |
Returns:
getter の場合、2次の伝達関数における ωn の値を得ます。
- void
viscosity
(real aViscosity);
real
viscosity
();
- システムの粘性成分
property setter/getter
2次の伝達関数における ζ です。
Params:
real aViscosity |
setter の場合、2次の伝達関数における
ζ の値を変更します。 |
Returns:
getter の場合、2次の伝達関数における ζ の値を得ます。
- real
opCall
(real t);
- 値を得る
See Also:
INumericFunction
- void
write
(OutputStream ost);
- 書き込み
See Also:
tango.io.protocol.IWriter.IWritable
- void
read
(InputStream ist);
- 読み込み
See Also:
tango.io.protocol.IReader.IReadable
- class
Nonlinearly
: voile.math.INumericFunction;
- 非線形関数
確率の分布関数や、処理の重い関数を疑似的に表す関数などとしての役割を持たせる
ことのできる関数クラスとなります。
状態を保存することも可能です。
- void
initialize
(real[] aMapTable = null, real aMin = cast(real)0, real aMax = cast(real)1, real aUnderflow = nanL, real aOverflow = nanL, bool aDoCopy = true);
- 初期化する
プロパティを一斉に設定する。
詳細は各プロパティを参照
See Also:
- mapTable
- minimum
- underflow
- maximum
- overflow
Params:
real[] aMapTable |
mapTable プロパティ |
real aMin |
minimum プロパティ |
real aMax |
maximum プロパティ |
real aUnderflow |
mapTable プロパティ |
real aOverflow |
overflow プロパティ |
bool aDoCopy |
mapTable をコピーするか否か。 true ならコピーをする。 |
- this(real[] aMapTable = null, real aMin = 0, real aMax = 1, real aUnderflow = (real).nan, real aOverflow = (real).nan, bool aDoCopy = true);
- コンストラクタ
基本的に initialize() 関数と同じ挙動。
See Also:
initialize()
- void
mapTable
(real[] aMapTable, bool aDoCopy = true);
real[]
mapTable
(bool aDoCpy = true);
-
mapTable
プロパティ
property setter/getter
y = f(x) 関数の y の値を決定するための配列のプロパティ。
Params:
real[] aMapTable |
setter の場合、 y = f(x) 関数の y にあたる部分を指定しま
す。
xを一定値刻みで進めた場合の結果。
実際の y の値は {index <= x, x < index+1}であるところの
x で aMapTable[index]とaMapTable[index+1]の内分点をとり、
この値を y とする。
例として、 aMapTableに [10, 100, 200] を与え、xの値が 1.2
であった場合を説明する。
x は1以上2未満であるため、2番目と3番目の値を、
0.2 : 0.8 に内分する点となる。
200 - 100 = 100
100 * 0.2 + 100 = 120
よって、 y の値は 120 となる。 |
bool aDoCopy |
aMapTable のデータをコピーするか否か。
true なら コピー。 |
Returns:
getter の場合、 y = f(x) 関数の y の値を決定するための配列の
プロパティを得られます。
- void
minimum
(real aMin);
real
minimum
();
-
minimum
プロパティ
property setter/getter
y = f(x) 関数の x の値を決定する変域の最小値のプロパティ。
y の mapTable は、 x の変域の、どこからどこまでを切り取ったものなのかを
定義する。その最小値のプロパティ。
Params:
real aMin |
setter の場合、 y = f(x) 関数の x の変域の最小値を指定します |
Returns:
getter の場合、 y = f(x) 関数の x の変域の最小値を得られます
- void
maximum
(real aMax);
real
maximum
();
-
maximum
プロパティ
property setter/getter
y = f(x) 関数の x の値を決定する変域の最大値のプロパティ。
y の mapTable は、 x の変域の、どこからどこまでを切り取ったものなのかを
定義する。その最大値のプロパティ。
Params:
real aMax |
setter の場合、 y = f(x) 関数の x の変域の最大値を指定します |
Returns:
getter の場合、 y = f(x) 関数の x の変域の最大値を得られます
- void
underflow
(real aUnderflow);
real
underflow
();
-
underflow
プロパティ
property setter/getter
y = f(x) 関数の x の値を決定する変域を下回る場合の戻り値。
real.nan を設定することによって mapTable の最初の要素の値を返す。
Params:
real aUnderflow |
setter では、y = f(x) 関数の x の変域の最小値を下回る
場合に戻る値を設定する。
ただし、 real.nan を設定することによって mapTable の最初
の要素の値を返すようになる。 |
Returns:
getter では設定されている
underflow
の値を返す
- void
overflow
(real aOverflow);
real
overflow
();
-
overflow
プロパティ
property setter/getter
y = f(x) 関数の x の値を決定する変域を上回る場合の戻り値。
real.nan を設定することによって mapTable の最後の要素の値を返す。
Params:
real aOverflow |
setter では、y = f(x) 関数の x の変域の最小値を上回る場合
に戻る値を設定する。
ただし、 real.nan を設定することによって mapTable の最後
の要素の値を返すようになる。 |
Returns:
getter では設定されている
overflow
の値を返す
- real
opCall
(real x);
- 値を得る
与えられたプロパティにより計算された値を取得する。
プロパティの各項を参照されたし。
詳しく知りたければソース嫁。数十行程度だ。
See Also:
- INumericFunction
- mapTable
- minimum
- maximum
- underflow
- overflow
- void
write
(OutputStream ost);
- 書き込み
See Also:
tango.io.protocol.IWriter.IWritable
- void
read
(InputStream ist);
- 読み込み
See Also:
tango.io.protocol.IReader.IReadable
- class
InternalDivision
: voile.math.INumericFunction;
- 内分するクラス
始点と終点があるとして、その途中の点を[0,1]の範囲の情報から計算する。
- void
start
(real aStart);
real
start
();
- 始点
property setter/getter
内分する際の始点の情報
Params:
real aStart |
setter の場合、始点を設定します |
Returns:
getter の場合、始点の値を得ます
- void
end
(real aEnd);
real
end
();
- 終点
property setter/getter
内分する際の終点の情報
Params:
aStart |
setter の場合、終点を設定します |
Returns:
getter の場合、終点の値を得ます
- void
initialize
(real aStart = 0L, real aEnd = 1L);
- 初期化
プロパティを一斉にすべて初期化します。
プロパティ一覧は次の通り
See Also:
- this(real aStart = 0L, real aEnd = 1L);
- コンストラクタ
基本的に initialize() 関数と同じ挙動。
See Also:
initialize()
- real
opCall
(real x);
- 値を得る
Params:
real x |
基本的に [0,1] の範囲の情報を与える。 3:4 に内分する点であれば
3 / 7 の値を設定する。 |
Returns:
start と end の区間を、 x : 1 - x に内分する点として返す。
See Also:
INumericFunction
- class
Derivative
: voile.math.INumericFunction;
- 導関数クラス
設定した関数の導関数として機能する
- void
dx
(real a_dx);
real
dx
();
- dt
property setter/getter
微分値を計算する際の d/dt f(x) における、dtの部分の値
Params:
real a_dx |
setter の場合、 d/dt f(x) における、dtの部分の値を設定する。 |
Returns:
getter の場合、 d/dt f(x) における、dtの部分の値を取得できる。
- void
func
(real function((real _param_0)) aFunction);
void
func
(real delegate((real _param_0)) aDelegate);
void
func
(DelegateFunction aFunction);
DelegateFunction
func
();
- 元となる関数
property setter/getter
導関数の元となる関数を設定/取得します
Params:
real function((real _param_0)) aFunction |
関数 |
aDelegate |
関数 |
Returns:
設定されている関数
- this(real function(real) aFunction);
this(real delegate(real) aDelegate);
this(DelegateFunction!(real,real) aFunction);
- コンストラクタ
Params:
real function(real) aFunction |
関数 |
aDelegate |
関数
ditto |
- real
opCall
(real x);
- 値を得る
See Also:
INumericFunction
- class
DefiniteIntegral
: voile.math.INumericFunction;
- 定積分クラス
定積分することが可能であるが、非常に時間がかかるため、あまりお勧めしない。
これを使うよりは、これによって計算された結果を Nonlinearly クラスで保存し、
それによって計算を行ったほうが高速である。
- void
dx
(real a_dx);
real
dx
();
-
dx
property setter/getter
微分値を計算する際の d/dt f(x) における、dtの部分の値
Params:
real a_dx |
setter の場合、 d/dt f(x) における、dtの部分の値を設定する。
real.nan を設定した場合、定積分区間を numPartitions 個に
分割して行う。 |
Returns:
getter の場合、 d/dt f(x) における、dtの部分の値を取得できる。
- void
numPartitions
(uint x);
uint
numPartitions
();
- dx が NaN の場合の分割数
property setter/getter
dx が reanl.nan であった場合、最初から最後までをこの分割数で分割し、
その回数だけ計算する。
Params:
a_dx |
setter の場合、分割数を指定することが可能。 |
Returns:
getter の場合、分割数を得る。
- void
start
(real x);
real
start
();
- 開始位置
property setter/getter
微分値を計算する際の d/dt f(x) における、dtの部分の値
Params:
a_dx |
setter の場合、 d/dt f(x) における、dtの部分の値を設定する。 |
Returns:
getter の場合、 d/dt f(x) における、dtの部分の値を取得できる。
- void
constant
(real c);
real
constant
();
- 定数
定積分結果に加算されるCの値
- this(real function(real) aFunction);
this(real delegate(real) aDelegate);
this(DelegateFunction!(real,real) aFunction);
- コンストラクタ
Params:
real function(real) aFunction |
関数 |
aDelegate |
関数
ditto |
- real
opCall
(real end);
- 値を得る
Params:
Returns:
あらかじめ設定しておいた開始位置から、引数の終了位置までの値を
定積分した答えが返る。
See Also:
INumericFunction
- struct
Angle
;
- 角度型
角度型は、周、度、弧度をサポートする。
内部的なデータを記録用などに使用する場合は value メンバを保存する。
- real
value
;
- 保存したりする場合に使用する値
- real
toCycles
();
real
cycle
();
- 周として角度を取得
- void
fromCycles
(real aCycle);
void
cycle
(real aCycle);
- 周として角度を設定
- real
toDegrees
();
real
deg
();
- 度として角度を取得
- void
fromDegrees
(real aDegrees);
void
deg
(real aDegrees);
- 度として角度を設定
- real
toRadians
();
real
rad
();
- 弧度として角度を取得
- void
fromRadians
(real aRadians);
void
rad
(real aRadians);
- 弧度として角度を設定
- Angle
opAdd
(Angle aAngle);
Angle
opSub
(Angle aAngle);
Angle
opMul
(real val);
Angle
opMul_r
(real val);
Angle
opDev
(real val);
Angle
opDev_r
(real val);
real
opDev
(Angle aAngle);
Angle*
opAddAssign
(Angle aAngle);
Angle*
opSubAssign
(Angle aAngle);
Angle*
opMulAssign
(real val);
Angle*
opDivAssign
(real val);
int
opEquals
(Angle x);
int
opCmp
(Angle x);
- 演算子オーバーロード
- static Angle
createDegrees
(real aDegrees);
- [度]による角度の生成
- static Angle
createRadians
(real aRadians);
- [弧度]による角度の生成
- static Angle
createCycles
(real aCycles);
- [周]による角度の生成
|