犬ぶよツールズ制作記録

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

Inubuyo Array Matrix (仕様、後半)

2009-03-31 10:43:51 | about
Inubuyo Array Matrix (仕様、前半)の続き。

(演算の結合)
● 以上の演算を連続して行う場合、上のメソッドを連続して呼び出すと、演算全体を直接行うのに比べて計算量が増えてしまいます。
そこで、結合した演算を行うメソッドも用意します。
+ 足し算の連続
    + sum(sum(double[], double[]), double[]): double[]の代わりにsum(double[], double[], double[]): double[]
    + sum(sum(double[][], double[][]), double[][]): double[][]の代わりにsum(double[][], double[][], double[][]): double[][]
(最初の引数の配列を書き換える)
    + sumM(sumM(double[], double[]), double[]): double[]の代わりにsumM(double[], double[], double[]): double[]
    + sumM(sumM(double[][], double[][]), double[][]): double[][]の代わりにsumM(double[][], double[][], double[][]): double[][]
+ 掛け算の連続
    + product(double, product(double[][], double[])): double[]やproduct(double[][], product(double, double[])): double[]、product(product(double, double[][]), double[]): double[]の代わりにproduct(double, double[][], double[]): double[]
    + product(double, product(double[], double[][])): double[]やproduct(double[], product(double, double[][])): double[]、product(product(double, double[]), double[][]): double[]の代わりにproduct(double, double[], double[][]): double[]
    + product(double, product(double[][], double[][])): double[][]やproduct(double[][], product(double, double[][])): double[][]、product(product(double, double[][]), double[][]): double[][]の代わりにproduct(double, double[][], double[][]): double[][]
    + product(double[], product(double[][], double[])): doubleやproduct(product(double[], double[][]), double[]): doubleの代わりにproduct(double[], double[][], double[]): double
    + product(product(double[][], double[][]), double[]): double[]やproduct(double[][], product(double[][], double[])): double[]の代わりにproduct(double[][], double[][], double[]): double[]
    + product(product(double[], double[][]), double[][]): double[]やproduct(double[], product(double[][], double[][])): double[]の代わりにproduct(double[], double[][], double[][]): double[]
    + product(product(double[][], double[][]), double[][]): double[][]やproduct(double[][], product(double[][], double[][])): double[][]の代わりにproduct(double[][], double[][], double[][]): double[][]
    + product(double, diagProduct(double[], double[]))やdiagProduct(diagProduct(double, double[]), double[])の代わりにdiagProduct(double, double[], double[])
    + productM(double, diagProductM(double[], double[]))やdiagProductM(productM(double, double[]), double[])の代わりにdiagProductM(double, double[], double[])
    + productM(double, diagProductM(double[], double[][]))やdiagProductM(productM(double, double[]), double[][])の代わりにdiagProductM(double, double[], double[][])
    + productM(double, diagProductM(double[][], double[]))やdiagProductM(productM(double, double[][]), double[])の代わりにdiagProductM(double, double[][], double[])
+ 線形結合
    + sum(product(double, double[]), product(double, double[]))の代わりにcombine(double, double[], double, double[])
    + sumM(productM(double, double[]), product(double, double[]))の代わりにcombineM(double, double[], double, double[])
    + sum(product(double, double[][]), product(double, double[][]))の代わりにcombine(double, double[][], double, double[][])
    + sumM(productM(double, double[][]), product(double, double[][]))の代わりにcombineM(double, double[][], double, double[][])
    + sum(product(double[][], double[]), product(double[][], double[]))の代わりにcombine(double[][], double[], double[][], double[])
    + sum(product(double[], double[][]), product(double[], double[][]))の代わりにcombine(double[], double[][], double[], double[][])

(差)
● ベクトルや行列の差はcombine(), combineM()で引数に+1, -1を指定すれば実現できます。
しかし、-演算子を用いて実装した方が若干速くなります。
そこで、使用頻度が高いと期待される以下のメソッドを提供します。
+ diff(double[], double[]): double[]
+ diff(double[][], double[][]): double[][]
(最初の引数の配列を書き換える)
+ diffM(double[], double[]): double[]
+ diffM(double[][], double[][]): double[][]

diff(v1, v2)はcombine(1, v1, -1, v)に比べて実行時間が10%程度短いようです。

● product(double, *)やproduct(double, *, *)を使う時は、
その後の計算が和になるように符号を選ぶと良いでしょう。

(提供方法)
● jp.inubuyo.brain.num.util.AM
以上のすべてのメソッドをAMのstaticなメソッドとして提供します。
AMはArrayとMatrixの頭文字を取ったものです。

(Javaとしての仕様)
● 例外
各メソッドは計算の前提として、配列の長さを調べます。
等しくなければならない配列の長さが異なっていた場合、IllegalArgumentExceptionを投げます。
配列としてnullが渡された場合、NullPointerExceptionが発生します。


最新の画像もっと見る

コメントを投稿