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:
  • start
  • end


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:
real end 終了位置

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);
[周]による角度の生成

Page was generated with on Fri Apr 3 17:07:43 2009