犬ぶよツールズ制作記録

Javaによる研究生活のためのパッケージ、犬ぶよツールズ。
その開発と保守のための備忘録

Inubuyo Array Matrix (仕様、前半)

2009-03-31 10:42:15 | about
Inubuyo Array Matrix

(概要)
配列型 double[] は自然にベクトルとみなすことができます。
配列型 double[][] は自然に行列とみなすことができます。
ベクトルや行列の間にはさまざまな演算が定義されます。
犬ぶよツールズでは、この同一視に基づいて、
ベクトルや行列の積を計算する方法を提供します。
それがInubuyo Array Matrixです。

(同一視の方法)
● v: double[]
+ ベクトルとみなします。
v.length がn のとき、n次元ベクトル空間の元とみなします。
v[i]: doubleは第i成分です。

+ 対角行列とみなすこともできます。
v[i]: doubleは(i, i)成分です。

● a: double
+ 実数とみなします。
ベクトルの係数になります。
+ スカラー行列とみなすこともできます。

● m: double[][]を行列とみなします。
各m[i]: double[] の長さは等しいとします。
m[i][j]: double は(i, j)成分、m[i]: double[] は第i行成分です。
n×m行列では、m.length = n、m[0].length = m となります。
m.lengthとm[0].lengthが等しい場合、mは正方行列とみなせます。

(定義される1項演算)
● double[]
v: double[]をベクトルとします。
+ 絶対値(各成分の2乗和の平方根)が定義されます。
+ abs(double[]): double
+ 1-ノルム(各成分の絶対値の和)が定義されます。
+ norm1(double[]): double

● double[][]
m: double[][]を行列とします。
+ 絶対値(各成分の2乗和の平方根)が定義されます。
+ abs(double[][]): double
+ 1-ノルム(各成分の絶対値の和)が定義されます。
+ norm1(double[][]): double
+ 転置(m[i][j]とm[j][i]の入れ替え)が定義されます。
+ transpose(double[][]): double[][]

(定義される2項演算)
● doubleと double[]
a: doubleを実数、v: double[]をベクトルとします。
+ vの成分を全てa倍にするという積が定義されます。
+ product(double, double[]): double[]
a: doubleをスカラー行列、v: double[]を対角行列とします。
+ 正方行列の和が定義されます。
+ diagSum(double[], double): double[]

● double[]と double[]
v1: double[]、v2: double[]をベクトルとします。
+ テンソル積が定義されます。
結果の(i, j)成分はv1[i]*v2[j]です。
+ tensorProduct(double[], double[]): double[][]
v1、v2の長さが同じ場合には、
+ 各成分を足すという和が定義されます。
+ sum(double[], double[]): double[]
+ 内積が定義されます。
+ innerProduct(double[], double[]): double
+ 一方を対角行列とみなして積が定義できます。
結果の第i成分はv1[i]*v2[i]です。
+ diagProduct(double[], double[]): double[]

● doubleと double[][]
a: doubleを実数、m: double[][]を行列とします。
+ mの成分を全てa倍にするという積が定義されます。
+ product(double, double[][]): double[][]

a: doubleをスカラー行列、m: double[][]を正方行列とします。
+ 正方行列の和が定義されます。
+ diagSum(double[][], double): double[][]


● double[]と double[][]
v: double[]をベクトル、m: double[][]を行列とします。
+ m[0].length とv.lengthが等しい場合、vにmを左から掛ける積が定義されます。
+ product(double[][], double[]): double[]
+ m.length とv.lengthが等しい場合、vにmを右から掛ける積が定義されます。
+ product(double[], double[][]): double[]

v: double[]を対角行列、m: double[][]を行列とします。
+ m[0].length とv.lengthが等しい場合、vにmを左から掛ける積が定義されます。
mの第i列がv[i]倍されます。
+ diagProduct(double[][], double[]): double[][]
+ m.length とv.lengthが等しい場合、vにmを右から掛ける積が定義されます。
mの第i行がv[i]倍されます。
+ diagProduct(double[], double[][]): double[][]

v: double[]を対角行列、m: double[][]を正方行列とします。
+ m.length とv.lengthが等しい場合、行列の和が定義されます。
+ diagSum(double[][], double[]): double[][]

● double[][]と double[][]
m1: double[][]、m2: double[][]を行列とします。
+ m1.length とm2[0].lengthが等しい場合、m1にm2を右から掛ける積が定義されます。
+ product(double[][], double[][]): double[][]

m1.length とm2].length、m1[0].length とm2[0].lengthが等しい場合には、
+ 各成分を足すという和が定義される。
+ sum(double[][], double[][]): double[][]
+ 内積が定義される。
+ innerProduct(double[][], double[][]): double

(配列の要素の書き換え)
● 上に挙げたメソッドでは、戻り値が配列の場合、新しいインスタンスを生成します。
演算の結果の型が引数と同じ配列の場合、新しいインスタンスを作らずに、要素を書き換えることができる場合があります。
引数に与えた配列の要素は書き換えられます。戻り値は書き換えられた配列そのものです。
+ 足し算(最初の引数の配列を書き換える)
+ sum(double[], double[]): double[] の代わりにsumM(double[], double[]): double[]
+ sum(double[][], double[][]): double[][] の代わりにsumM(double[][], double[][]): double[][]
+ diagSum(double[], double): double[]の代わりにdiagSumM(double[], double): double[]
+ diagSum(double[][], double): double[][]の代わりにdiagSumM(double[][], double): double[]
+ diagSum(double[][], double[]): double[][]の代わりにdiagSumM(double[][], double[]): double[]
+ 定数倍
+ product(double, double[]): double[] の代わりにproductM(double, double[]): double[]
+ product(double, double[][]): double[][] の代わりにproductM(double, double[][]): double[][]
+ 対角行列の積
(最初の引数の配列を書き換える)
+ diagProduct(double[], double[]): double[]の代わりに diagProductM(double[], double[]): double[]
(double[][]の方を書き換える)
+ diagProduct(double[][], double[]): double[][]の代わりに diagProductM(double[][], double[]): double[][]
+ diagProduct(double[], double[][]): double[][]の代わりに diagProductM(double[], double[][]): double[][]
正方行列の場合
+ 行列の転置
+ transpose(double[][]): double[][]の代わりに transposeM(double[][]): double[][]


最新の画像もっと見る

コメントを投稿