Mol(Math Object Library) fot .Net
Math Object Library for .Net

クラス

  クラス説明
Public class_Array
ベクトルや行列の基底クラスです。最終的にベクトルや行列として扱われる一次元配列を管理します。 全ての行列・ベクトルの全(非ゼロ)要素は _Array クラスが管理する一次元配列に格納されます。 例えば _Array クラスが管理する一次元配列を Array として(インデクサでアクセス可能です)、A を密な一般行列 (M行 x N列)とすれば A[I,J] へのアクセスは Array[M*(I-1)+J] へのアクセスと同じことになります。 当然ながら、対称行列や疎な行列要素へのアクセスは、それぞれ異なったロジックで Array[] の要素に アクセスすることになります。特に Array[] は非ゼロ要素(実際の値が非ゼロであるとは限りません)のみ 格納することに注意してください。疎な行列は非ゼロ要素のみ。上三角行列・対称行列・エルミート行列 では上三角部分のみ。下三角行列は下三角行列部分のみ。帯行列では「帯」の部分のみです。 とくに、対称行列やエルミート行列では実際に(_Array[]に確保されない) 下三角部分も「存在」するので注意・工夫が必要です。
Public class_Blas
インテル社の計算ライブラリー(MKL)のラッパークラスです。 BLAS (Basic Linear Algebra Subprograms) と呼ばれる一連のサブルーチン群で行列とベクトルの演算部分の一部をサポートしています。 Molで実装されている四則演算メソッド群は多様な行列やベクトルを統一的に扱うようになっているので _Blas メソッド群より 一般に低速です。もし、希望の演算が以下のメソッドに含まれていて、かつ、計算時間が問題になる場合は _Blas メソッドの利用を検討してください。
Public class_DFT
離散データのフーリェ変換(DFT)を実行する基本クラスです。離散データ値 W とフーリェ変換値 Z の関係は以下のように一般化されます。

Zk1,k2,...,kd = σ・Σjd=1nd…Σj2=1n2Σj1=1n1Wj1,j2,...,jd exp(δ・i・2πΣl=1d jl・kl / nl)

最も単純な変換では W と Z は一次元のデータ列ですが、2次元以上の多次元データの変換が可能です。
ここで、
  i は虚数単位、d(≧1)は次元数(インデックスの数)、ni(1≦i≦d)は各次元サイズ(各インデックスの最大値)
  δは変換の方向を決定する因子で前進(Foward、または単に「フーリェ変換」)変換の時は -1、後退(Backward、または「フーリェ逆変換」)変換の時は +1 が設定されます。
  σはスケール因子でデフォルトでフーリェ変換のときは 1.0、逆変換の時は 1.0/(n1・n2・...nd) が仮定されます。
前進変換の時に与える Wj1,j2,...,jd を「元データ値」(または単に「データ値」)、 計算結果として得られるZk1,k2,...,kdを「変換データ値」(または単に「DFT」値)と定義します
通常の計算手順は以下のようになります。
 フーリェ変換 (δ=-1):元データ値(W) → Forward変換 → DFT値(Z)
 フーリェ逆変換(δ=+1):DFT値(W)    → Backward変換 → 元データ値(Z、元データの近似値)

元データ値は Double (FftDouble)か Complex (FftComplex)が選択できますが、DFT値は常に Complex となります。
データ値の数が 2、3、5、7、11、または 13 の累乗に因数分解できる場合は高速フーリエ変換(FFT)による最大のパフォーマンスを得ることができます。

Public class_LightDB
軽量で高速な簡易データベース LightDB の基本クラス。
Public class_Matrix
行列の基本クラス。
Public class_MatrixComplex
要素が複素数の基本行列クラス
Public class_MatrixDouble
要素が実数の基本行列クラス
Public class_MatrixGeneralComplex
要素が複素数の一般行列の基底クラス。
Public class_MatrixGeneralDouble
要素が実数の一般行列の基底クラス。
Public class_MatrixSquareComplex
要素が複素数の正方行列の基底クラス。
Public class_MatrixSquareDouble
要素が実数の正方行列の基本クラス
Public class_Mol
Mol の基底クラスです。各種のライセンス管理等の静的メソッドを持ちます。
Public class_Spline
各種スプラインのベースクラスです。 各データ区間[(xi,y(xi)),((xi+1,y(xi+1)))]を近似する多項式(スプライン関数)を定義します。 多項式の情報は補間や積分計算のために DataFitting オブジェクトに提供されます。
Public class_Vector
ベクトルの基底クラスです。
Public class_VectorComplex
要素が Complex の基底ベクトル
Public class_VectorDouble
要素が double の基底ベクトル
Public class_VectorsComplex
複素数行列の行または列をベクトルとして扱うためのクラスです。
Public class_VectorsDouble
実数行列の行または列をベクトルとして扱うためのクラスです。
Public class_VML
_VML (Vector Mathematical Functions Library) は各ベクトル要素に対して高速に数学関数演算を実行する静的なクラスです (扱うベクトルは全て「密」でメソッドは static です)。 入力ベクトルの各要素に指定された演算を実行して結果を出力ベクトルに格納します。 畳み込み(Convolution)と相関(Correlation)を除いて、基本的に入力と出力のベクトルに同じものを指定することができます。 ベクトルの要素間に関連性が無ければ(そしてマルチスレッド機能が有効であれば) 各要素演算を同時並行的に実行できます。ベクトルの要素数が多いときはマルチスレッド機能のメリットを十分に受けることができます。
Public classBigDecimal
可変長任意桁数の数字を扱うクラスです。
Public classDataFitting
数値で与えられた n 個のデータ点列 (xi,yi(xi)) (i=1,2,...,n) の n-1 個の区間(xi < xi+1) (i=1,2,...,n-1) を多項式(n-1個)で結ぶ多項式スプライン(以後単にスプラインと呼びます)のクラスです。 各多項式は同じ次数で各項の係数だけが異なるものとします。 この多項式に基づいて任意の点 x の y(x) や任意範囲の積分値を計算します。 DataFitting オブジェクトは補間や積分の計算を実行します。多項式は別途_Splineを継承したオブジェクトを 作成して DataFitting オブジェクトにセットします。デフォルトでは SplineLinear が設定されます。
Public classDftComplex
元データが複素数のフーリェ変換クラスです。
Public classDftDouble
元データが実数のフーリェ変換クラスです。
Public classEgvSolver
行列 A が与えられたときに、以下の式を満たす固有値 λ と、対応する固有ベクトル x を計算します。
Ax = λx : 標準固有値問題
Ax = λBx: 汎用固有値問題(A と B は同じタイプの行列で、かつ、B は正定値である必要があります)
Public classLightDB<(Of <(<'K, D>)>)>
軽量で高速な簡易データベースクラス(ジェネリッククラス)です。 K はキーフィールドのタイプ。 D はデータフィールドで MOL_TYPE_LIGHT_DBの一覧で指定される .Net のデータ型(int や double 等)を指定します。 キーフィールドやデータフィールドは、それぞれのデータ型の配列となります。それぞれの配列の最大要素数は コンストラクターの引数で指定します。ただし、文字数は要素数1の配列で、コンストラクターで指定するのは最大文字列サイズです。
Public classLlsSolver
線形最小二乗 (LLS) 問題を解くクラスです。
LLS 問題とは、行列 A(サイズ:m x n) と ベ クトル b が与えられたときに、二乗和Σi((Ax)i - bi)2 を最小にするベクトル x を見つけることです。 m ≥ n で rank(A) = n ならば、優決定の連立 1 次方程式 ( 未知数より方程式の個数の方が多い) に対して最小二乗解を見つけることで 、行列 A のQR 因子分解を使用します。
m < n で rank(A) = m の場合は、Ax = b を満たす ( つまり、ノルム||Ax − b||2 が最小になる) 解 x は無限に存在します。 これは、劣決定の連立 1 次方程式 (方程式より未知数の個数の方が多い)に対して最小ノルム解(||x||2 を最小にする x )を見つけることになります。 この問題を解くには、行列 A のLQ 因子分解を使用します。
Rank = min(m,n) の場合は最大階数ですが、 一般には、A の階数が不明 rank(A) < min(m, n) であり、階数不足の最小二乗問題になります。この場合は ||x||2 も ||Ax − b||2 も最小にする最小ノルム最小二乗解を見つけます。 解法は、QR 因子分解 と、ピボット演算または特異値分解を併用します。
※各種因子分解の詳細については、それぞれの文献等を参照してください。

LlsSolver クラスは基本的な演算はスタティックメソッドで実行します。各メソッドで作成されるインスタンスは計算の結果として得られる 特異値や階数を保持しますが、解ベクトルなどは引数で指定するようになっています。計算中に作成された作業変数を解放するために Dispose() メソッドを 積極的に呼び出すようにしてください。
※現時点の線形最小二乗計算では疎な行列はサポートしていません。
Public classLuSolver
連立方程式を解いたり各種計算を実行します。 LuSolverオブジェクトを作成するには Create(MatrixDenseGeneralDouble)等のスタティックな Create() メソッドを使用します。
Public classMatrixDenseBandComplex
要素が複素数の一般密帯行列
Public classMatrixDenseBandDouble
要素が実数の一般密帯行列
Public classMatrixDenseGeneralComplex
要素が複素数の一般密行列
Public classMatrixDenseGeneralDouble
要素が実数の一般密行列
Public classMatrixDenseHermite
エルミート行列(要素は複素数)
Public classMatrixDenseLowerTriangleComplex
要素が実複素数の下三角行列
Public classMatrixDenseLowerTriangleDouble
要素が実数の下三角行列
Public classMatrixDenseSymmetricComplex
要素が複素数の対称行列
Public classMatrixDenseSymmetricDouble
要素が実数の対称行列
Public classMatrixDenseUpperTriangleComplex
要素が実複素数の上三角行列
Public classMatrixDenseUpperTriangleDouble
要素が実数の上三角行列
Public classMatrixSparseGeneralComplex
要素が複素数の一般疎行列
Public classMatrixSparseGeneralDouble
要素が実数の一般疎行列
Public classMatrixSparseHermite
エルミート行列(要素は複素数)
Public classMatrixSparseLowerTriangleComplex
要素が実複素数の下三角行列
Public classMatrixSparseLowerTriangleDouble
要素が実数の下三角行列
Public classMatrixSparseSymmetricComplex
要素が複素数の対称行列
Public classMatrixSparseSymmetricDouble
要素が実数の対称行列
Public classMatrixSparseUpperTriangleComplex
要素が実複素数の上三角行列
Public classMatrixSparseUpperTriangleDouble
要素が実数の上三角行列
Public classNativeDll
Mol(.Net)環境から、非 .Net のアンマネージド DLL (ネイティブ DLL)をロードし、ネイティブ DLLで定義されている関数を呼び出すためのクラスです。 基本的には .Net 環境から Windows API の LoadLibrary() や GetProcAddress() 関数を呼び出すだけの簡単な機能を提供します。 NativeDllインスタンス作成時に指定したネイティブ DLLをダイナミックにロード(LoadLibrary())し、DLL内で定義されている 関数アドレスを関数名で検索してから、関数を呼び出すという手順になります。呼出し手順などは GetFunctionPtr() メソッドの 説明などを参照してください。
Public classNonlinearEquations
非線形連立方程式
Yi = Fi(X1,X2,...,Xn) i=1,2,...m
を処理するクラスです(Y,F,X等の値は Double のベクトルで管理されます)。 ここで、非線形連立方程式 F(X) は 
 1. C や C++ で作成したネイティブな DLL(ネイティブDLL側の Y,F,X等の値は double の一次元配列でアクセスされます) で定義するか
 2. C# 等で デリゲート (delegate) として定義
します。計算結果に違いはありませんが、C/C++ のネイティブ DLL で関数を提供するやり方が高速に動作します。 C# 等の .Net 環境からネイティブな DLL をロードして操作する方法については NativeDll(String) クラスを参照してください。
NonlinearEquations クラスは単純に F(X) を計算する、 F(X) のヤコビ行列(Jacobian)を計算する、そして ΣFi(X)2 を 最小化するベクトル X を求める(非線形連立方程式の最小二乗化問題)機能等が実装されています。
Public classRandomNumber
乱数を生成するクラスです。 乱数とは「予測も再現もできない数列の値」を生成することです。 確定的な計算によってしか数列を作ることができないコンピューターでは疑似的な乱数(疑似乱数)を生成します。 予測不可能な(非決定的:non-deterministic)な乱数を生成するには専用のハードウェア等が必要になります。
疑似乱数を生成するには線形合同法(乗算合同法・混合合同法)、線形帰還シフトレジスタ法やメルセンヌ・ツイスタ法等がありますが、詳細はそれぞれの文献などを参照してください。 RandomNumber は各種の疑似乱数発生器を利用して、様々な統計分布(連続分布・離散分布)に従った乱数列を生成します。
※確率密度関数や分布関数等についてはリファレンスの「数式表記」の項を参照してください。
※発生された複数の乱数列は全て指定したベクトル(の全要素)に格納されます。
Public classSplineCubic
各区間は3次の多項式で結ばれます。 境界条件を2個指定する必要があります。
Public classSplineLinear
各区間は直線で結ばれます。境界条件はありません。
Public classSplineQuadratic
各区間は2次の多項式で結ばれます。 境界条件(境界値)を1個指定する必要があります。
Public classSplineStepWise
区間多項式は次数ゼロの多項式、つまり各区間で階段(定数)状になります。 他の多項式近似と異なり、各区間の端点で隣り合う多項式の値は一致しません。 従って端点でどちらの多項式の値を採用するのか指定する必要があります (デフォルトでは INCLUDED_EDGE.LEFT([xi,xi+1))が仮定されます。)
Public classStat
Stat(統計ライブラリー)クラスはデータセット(DataMatrixプロパティで与えます)のさまざまな統計的推定値を計算します。
 •代数積率と中心積率 (最大 4 次まで)、歪度、尖度、変動係数、分位値、および順序統計量
 •データの依存性を予測するアルゴリズム: 分散共分散/相関行列、偏分散共分散/相関行列、プールされた/グループ化された分散共分散/相関行列
 •データセット内の外れ値を検出するツールと、データの共分散行列および平均のロバスト推定
•欠測値を含むデータを効率良く処理するアルゴリズム
•一度に処理するには大きすぎる場合、複数に分けて処理(分割処理)することができます(分散共分散行列、代数積率と中心積率、歪度、尖度、および変動係数のような基礎統計推定量)
データや計算したい統計推定量は行列やベクトルの形で利用者が作成して Stat オブジェクトに設定します。計算する必要のない統計推定量については(設定しないままにするか) null を設定すれば計算から除外されます(平均値は常に計算されます)。Stat オブジェクトは設定された行列やベクトルの参照を保持します。 従ってStat オブジェクトが計算中の時点などで行列やベクトルの Dispose() メソッドは呼ばないようにしてください。
Public classSvdSolver
A を (m × n) の一般行列として、A の特異値分解 (SVD) を実行します。
A の特異値分解は A = UΣVH の形に分解することです(VHは行列 V の複素共役転置)。 ここで、U (m × m) と V (n × n) は、ユニタリ行列 (A が複素行列の場合) または直交行列 (Aが実行列の場合)です。 Σ は、次に示す対角成分σi を持つm × n の対角行列(対角成分のみの帯行列でAが複素数の場合は対角要素の虚数部は全てゼロ)になります。 σ1 ≥ σ2 ≥ ... ≥ σmin(m, n) ≥ 0 ここで σi は、 A の特異値となります。また、非ゼロの特異値の個数は A の階数(Rank)となります。 さらに A の条件数(Condition number)は 最大特異値/最小特異値 で表現可能です。 行列 U と V の先頭から min(m, n) の列は、それぞれ、A の左特異ベクトルと右特異ベクトルとなります。 対応する特異値と特異ベクトルは、Avi = σiui かつ AHui = σivi を満たします。ここで ui と vi は、 それぞれ、U と V の i 番目の成分です。
※現時点の特異値分解計算では疎な行列はサポートしていません。
Public classVectorDenseComplex
要素が Complex の密ベクトル
Public classVectorDenseDouble
要素が double の一般密行列
Public classVectorDenseInt
要素が整数のベクトルです。
Public classVectorSparseComplex
要素が複素数の疎なベクトルです。
Public classVectorSparseDouble
要素が実数のスパースベクトル。

構造体

  構造体説明
Public structureINDEX_PAIR
ベクトルや行列の内部と外部のインデックス番号ペアです。

デリゲート

  デリゲート説明
Public delegateNonlinearEquations..::..ComputeEquationsAt
非線形連立方程式を計算するためのデリゲート宣言です。

列挙型

  列挙値説明
Public enumeration_Array..::..ARRAY_TYPE
_Array オブジェクトの配列要素タイプです。
Public enumeration_Mol..::..INDEX_BASE
行列やベクトルの配列要素を指定するインデックスの既定です。 デフォルトは ONE (FORTRAN形式)
Public enumeration_Mol..::..MATRIX_OPERATION
BLASメソッドで計算を実行する際の行列に対する操作を指定します。
Public enumeration_Mol..::..MOL_TYPE
Mol オブジェクトの属性です。
Public enumeration_Mol..::..USER_TYPE
Mol オブジェクトの属性です。一般行列等、特に追加的な属性を設定する必要がある場合に使用します。
Public enumerationBigDecimal..::..DECIMAL_TYPE
BigDecimal の数値タイプを示します。 値は 0 なら非数値(NaN)、その他は符号が値の正負を示します。
Public enumerationBigDecimal..::..ROUND_MODE
計算時の丸め方法です。
Public enumerationDataFitting..::..BOUNDARY_CONDITION
境界条件の形
Public enumerationMOL_TYPE_LIGHT_DB
LightDB 内部(データファイル内部)で使用されるキーフィールド・データフィールドに使用できるデータタイプです。 ユーザレベルでのプログラミング等には特に必要ありません。
Public enumerationNonlinearEquations..::..NON_LINEAR_RESULT
非線形最小二乗問題の解法(MinimizeNorm()メソッド)が終了した時の終了状態。
Public enumerationNonlinearEquations..::..OPTIMISER
非線形連立方程式の最小二乗化問題を解く手法です。
Public enumerationRandomNumber..::..GAUSSIAN_METHOD
基本生成器で発生した疑似乱数をガウス分布に変換するための方法です。
Public enumerationRandomNumber..::..GENERATOR
統計分布(連続分布・離散分布)に従った乱数を発生させるために使用する疑似乱数発生器(基本生成器)。
Public enumerationRandomNumber..::..LOGNORMAL_METHOD
基本生成器で発生した疑似乱数を対数正規分布に変換するための方法です。
Public enumerationRandomNumber..::..POISSON_METHOD
ポアソン分布の乱数作成方法
Public enumerationSplineCubic..::..BOUNDARY_CONDITION
単一境界条件と複合境界条件を合わせた境界条件全体。
Public enumerationSplineCubic..::..EDGE_BOUNDARY_CONDITION
3次スプラインの複合境界条件。両端の1次または2次導関数の指定です。指定された値を境界条件として設定する必要があります。
Public enumerationSplineCubic..::..SINGLE_BOUNDARY_CONDITION
3次スプラインの単一境界条件。境界値は指定する必要はありません(無視されます)。
Public enumerationSplineStepWise..::..INCLUDED_EDGE
各区間の2つある端点のうちどちらが多項式に属するかを指定します。
Public enumerationStat..::..BACON_INITILIZER
外れ値を検出するBACONアルゴリズムの初期化処理方法です。
Public enumerationStat..::..PROPERTIES
各種プロパティで必ず計算されるものです。対応するプロパティが null かサイズ等が一致しない場合、実行時に自動作成されます。