「これまでに作ったプログラム」へ

matlib ─ matlib(hanahara) ─


解説

Cで書かれた行列演算ライブラリ. 特徴は以下のとおり.

古いCでも安心
識別子の長さをのぞけば, 古い処理系でも動作する. もちろん, 新しい処理系でも問題なく動作する (処理系によってはWarningを抑制するコンパイルオプションが必要かも知れないが).
添字は1から
行列の扱いを配列ではなく構造体とマクロで実現し, 添字は数式と同様に1からとして扱えるようにしている.
大きさも自由自在
領域確保にmallocを使っているので, コンパイルしなおすことなく, 処理に応じて自由な大きさの行列を扱うことができる.
各種演算をサポート
加減乗算, 逆行列, 固有値計算といった基本演算の他に, 一般化逆行列(一般逆行列), Newton法, 最急降下法, 高次元空間での外積等の演算を 備えている.
バンドマトリクス
全ての演算ではないが, 巨大行列を扱うためのバンドマトリクスが利用可能.
ファイル入出力
内部(バイナリ)形式, テキスト形式でのファイルの入出力関数を装備.
そこそこ高速(だと思う)
きびしいループはポインタのイクンリメント・デクリメントを活用しているため, そこそこ高速なプログラムとなっている──と, 思う.

このmatlib行列演算ライブラリ群(*1)は, 作者である花原が大学院修士課程で 知的適応トラスの研究を始めたときに基本部分を作成し, その後必要に応じて修正, 拡張を施してしてきたものである. プログラムの全ては古い(ANSI-C以前の)書式のC言語で書かれている. 関数名等の識別が8文字に収まったりしていないほかは, 構造体の代入なども使っておらず, 少々古い処理系でも動作する(はずである). いわゆる「商品となるような」プログラムや, 非常に大規模の演算をするような場合はともかくとして, 大学の研究室等で使う分には十分の能力がある(はずである).


(*1) 実はこのmatlibという名前は行列演算パッケージをはじめとして 様々な場所で既に使われている(例えば数学(math)関係, 材料(material)関係等)が, これまでに書いてきたプログラムを書き換える気力もなく, そのままにしてある. 区別する必要がある場合にはmatlib(hanahara)とする.

ファイル

まず, 以下のユーザーズマニュアルmatlib.pdf(A4で60ページ弱あって未だ未完成)の 1〜3章あたりにざっと目を通すことを勧める. とにかく詳細についてはマニュアルを参照のこと.

matlib.pdf matlibユーザーズマュアル(ver. 0.401)
matlib.lzh lzhファイル
matlib.zip zipファイル
mat.exe 簡易行列電卓mat.exe (Windows版) (コマンドプロンプトで使用. 下記およびmatlib.pdfの5章参照)

簡易行列電卓mat.exeの使用例. 逆ポーランド記法に従う. 下記の例は, 適当なエディタ等で行列A, ベクトルBを準備し, 線形方程式AU=Bを解くものである. コマンドプロンプト(DOS窓)での実行例を示す.

C:\tmp>mat
** Simple matrix calculator for reverse Polish notaion **
   Binary operator : '+' Add., '-' Sub., 'x' Mul.
   Unary operator  : '-1' Inv., '^' Scalar times, '=' Assign.

 Example: D = Inv[(-2.5 A + B) - C] --> mat A ^-2.5 B + C - -1 =D


C:\tmp>type A
1 2 4 8
8 4 2 1
1 3 5 7
7 5 3 1


C:\tmp>type B
1
2
3
4

C:\tmp>mat A -1 B x =U
   -0.3750
    1.0625
    0.5625
   -0.3750

C:\tmp>mat A U x
    1.0000
    2.0000
    3.0000
    4.0000

C:\tmp>
逆ポーランド記法については適当な書籍等を参照のこと.