============================================================================= MaTX-4.517+4.566 から MaTX-5.0+5.0 への変更点 (2000.1.6) 【改良】 o MaTX本の発売に合わせて,バージョンを 5.0 とした。 o inpline.c を修正。^I と ^O を無効にした。 o rtStart()からスレッドを生成するとき,CreateThread() の代わりに _beginthreadex() を呼び出すようにした。 o 文字列を行編集できるようになった。 o リアルタイムのとき,emalloc()の代わりに自動変数配列 で確保するメモリの量をチェックするようにした。 o MatElementCopy()を変更。サイズが一致しない場合, MatRequest()を呼び出すようにした。 o 0 * n や m * 0 行列の表示で,成分を表示しないようにした。 o -withlog と -nolog フラグを追加した。(matc) o print a,b,c -> "file.mx", read a,b,c <- "file.mx" に関して,ファイル がオープンできない場合は警告を表示して,実行を継続するようにした。(matc) ----------------------------------------------------------------------------- 【バグの修正】 o MatCatColumn() と MatCatRow() を修正した。行または列が 0 の行列を 合成するとき,0 以外の行または列の数を考慮して新しい行列を生成する ようになった。 o x と y が定数のとき,複素演算 (x,y) で生成される 複素数を定数としていたが,変数に変更した。 o x が定数のとき,-x を定数と定義していたが,変数に変更した。 o Linux版について,HAVE_STDARG を 1 に定義するように 変更した。vargs.h から stdarg.h への変更。 o A(Integer,Array)の表現について,第2引数の型 チェックに誤りがあったので修正した。 o 空行列のインデックスに 0 * 0 の配列や指数を指定し てもエラーにならないようにした。 o load コマンドで読み込んだファイルにエラーがあっても て実行できるようになった。 o strchr() が mxString に対応してなかったので修正した。 (matc) o AA(i,j,A) の出力コードに誤りがあったの修正した。(matc) o [文字列, 文字列] の出力が mxString に対応してなかったので修正した。(matc) o パース時エラーまたは実行時エラーが発生したとき, .c ファイルが残ってしまう問題を解決。(matc) o リスト(a:b) のとき,生成される ListGetSubElements2 の引数の int_sng を int_sgn に修正した。(matc) o fft()に関する出力で Row を Rows に修正した。(matc) ============================================================================= MaTX-4.496+4.547 から MaTX-4.517+4.566 への変更点 (1999.10.5) 【改良】 o rngkut4() と rkf45() の入力部分に行列以外に関数を指定できるようになった。 o 関数 negate() に渡された整数や実数の type が CONSTなら,結果の type も CONST になるように変更した。 o maximum_col(), maximum_row(), minimum_col(), minimum_row() を追加した。 o ifft_row() と ifft_col() が init.c に登録されていなかったので,追加した。 fft_col() と ifft_col()に渡した行列の行数をデータ数と見なすよう変更した。 o VisualC++について,ロングファイル名に対応した。 o fwrite() がフィルに書き込んだデータの個数を返すように変更した。 o I(m,A),Z(m,A),ONE(m,A)を無効にした。 o 組み込み関数のヘルプも MM-ファイルを参照するようにした。 ただし,環境変数 LANG が ja のときのみ。 o コマンド名等のキーワードも MM-ファイルを参照する ようにした。ただし,環境変数 LANG が ja のときのみ。 o -MMdir で,MM-ファイルを検索するディレクトリを指定できるようになった。 o A(i,j) = a のように,行列の成分に値を設定するとき, A が初期化されてない場合,名前を設定するようにした。 o エラーが発生したとき,整数,実数,文字列,複素数の 定数については,その値を表示するようにした。 o パース中にエラーを発見すると,2 パス目を実行しないようにした。また, Cファイルの生成に失敗すると,C コンパイラを呼び出さずに終了するようにした。 o Windows版について,拡張子は,'mm'だけでなく,'MM' も許すようにした。(matc) ----------------------------------------------------------------------------- 【バグの修正】 o MatFunc()のバグのため sqrt(行列), log(行列)などが正しく計算できなかった。 o CoPolynomial() と CoRational() で変換すると,複素多項式や複素有理 多項式にならない問題を解決。 o isinf()に行列を渡すと,無限大の判定ではなく NaNの判定をしていた。 o read A << "file" と read A <- "file" について,行列などの代入で ファイル名の文字列が Undef()され るのを防ぐようにした。 o mxStringMove()のバグのため,read <- で文字列のデータ を読み込むと,efree()でエラーが発生する問題を解決。 o 特異値分解が成功しないと core dump する問題を解決。 o OdeXY()に現在の時刻に近い時間を渡すと,エラーが発 生する可能性があったので,修正した。 o Integer 等の型の後ろにコメントを各と parse error が生じる問題を解決。(matc) o 型名の後ろのコメントを処理する部分のバグを修正。(matc) o read A << "file" で読み込んだ行列に適切な名前がつけられなかった。 o print str >> "file" で文字列 str を書き込むとき, ファイル名が正しく設定されなかった。 o ソースファイルがカレントディレクトリに無い場合,C ファイルがカレント ディレクトリ生成されるのに,C コンパイラが元のディレクトリを検索する 問題を解決。(matc) o カレントディレクトリにない MM-ファイルをコンパイルすると,途中で生成 された C-ファイルが削除されずに残る問題を解決。(matc) o set_filename()で,実行ファイル名を設定するように変更したため,拡張子 が mm でないオブジェクトファイルを引数に与えるとエラーとなる問題。(matc) o A(i,j) = a のように,行列の成分に値を設定するとき,A が初期化されて なくても,エラーにならないようにした。(matc) o リンクするとき,-lmxsig を -lmxctr の前に移動した。関数の参照の順番による 問題を解決するため。将来的には,全てのライブラリを 1 つのライブラリ ファイルにしたほうがよい。 ============================================================================= MaTX-4.448+4.506 から MaTX-4.496+4.547 への変更点 (1999.7.20) 【改良】 o リストの等号,不等号の判定が出来るようになった。 o makelist(n1, n2, ...) で多段リストを作成できる ようになった。また,初期値は整数の 0 となる。 o リストL について,L(1,2) = 3 や L(1,2,Integer) のように多段リストの成分を直接参照できるようになった。 o A(1,1) = A(2,2) = 3 のように代入は,全て代入式になった。 o length(a,n1,...) で多段リストの長さを調べられる ようになった。リストでない成分の長さは 0 。 o LIST .== LIST と LIST .!= LIST で成分毎の比較をして,結果を 0-1 配列で返すようになった。 o リストとスカラの .== と .!= による比較が出来るようになった。 o LIST * 整数 で,元のリストを整数個並べたリストを返すようにした。 o .<, .<=, .>, .>=, .==, .!= で文字列を成分毎に 比較をして,結果を 0-1 配列で返すようになった。 o 文字列の一方が長さ1のとき,その文字と他方の 文字列の全てを比較するようになった。 o STRING(指数),STRING(0-1配列)による参照ができるようになった。 o STRING(指数) = STRING, STRING(0-1配列) = STRING の代入が出来るようになった。 o 多項式行列と有理多項式行列の成分毎の比較ができるようになった。 o 行列とスカラ(多項式,有理多項式)の .== と .!= による比較が出来るようになった。 o リスト .== 型名 と リスト .!= 型名 で型の比較をして,結果を 0-1 配列で返すようになった。 o リスト(指数),リスト(0-1配列)による参照ができるようになった。 o リスト(指数) = リスト, リスト(0-1配列) = リスト の代入が出来るようになった。 o 多段リストの成分に指数と0-1配列で参照できるようになった。 o LIST .< LIST, LIST .<= LIST, LIST >. LIST, LIST .>= LIST, LIST .&& LIST, LIST .|| LIST, .! LIST LIST .< (整数|実数), LIST .<= (整数|実数) o 成分毎の比較をして,結果を0-1 配列で返すようになった。 o リスト A(:) = B で,A に B を代入できるようになった。 また,A(2:3) = B のとき,B の長さが 2 でなければならないように変更した。 o 文字列 A(:) = B で,A に B を代入できるようになった。 o 行列エディタで 'Q' を入力すると,行列を初期値に戻せるようになった。 o typeof で多段リストの型を調べられるようになった。 o バージョンを指定するオプション -v4, -v5 を追加した。 型変換関数 Polynomia() と Matrix() について,多項式の係数を行列に 変換するとき,降べきの順に並ぶように変更した。 o バージョン番号を調べる関数 version() を追加した。 この関数でバージョンを変更することもできる。 o ピース行列によるブロック行列の操作の指数を バージョン 5 なら,1 から始めるようにした。 o -checkblock オプションで,ブロック行列が使用 された箇所を調べられるようにした。 o -checkpoly オプションで,行列と多項式が 変換されたことを調べられるようになった。 o mx データフォーマットを変更し,バージョン 5 と命名した。 旧バージョンのデータも読み込めるようにした。 o Ode() 関数群に渡す diff_eqs() と link_eqs() の 型を void と Matrix の両方に対応した。 o rngkut4() と rkf45() の第 4 と第 5 引数の順番を入れ替えられるようにした。 o Ode()関数群について,引数 link_eqs() を省略する 方法として,任意の文字列を使用できるようになった。 o 文字拡張コード \a, \v, \', \? に対応した。 o VisualC++版について,MATXCPP が "cl" のときのみ, cl を C-プリプロセッサとして使用することにした。 o 複素数のメモリ管理を導入。 o 文字列 * 整数 で,文字列を複数並べた文字列を作れるようになった。 o 変数に代入した文字列だけ名前付で,表示するようにした。(matc) o 代入式の右辺の値を保存する変数を関数の局所変数に変更した。 リストを分解する時に使う変数 matx_list を局所変数に変更した。 print -> と read <- で利用する変数 matx_fp を局所変数に変更した。(matc) o 局所変数を保存する中間ファイル .lv を作成しなく てもよいように,2 パスでコンパイルするようにした。(matc) o -v オプションを指定してもオープニングメッセージを出さないようにした。(matc) ----------------------------------------------------------------------------- 【バグの修正】 o fscanf()のフォーマットの文字列が MXSTR に対応できていなかった。 o 論理和と論理積を再帰関数の呼び出しとともに使えるようにした。 and()内のstatic変数による実現を変更した。 o switch 文をネストすると,default ラベルを二重に 宣言していると誤って判断する問題を解決。 o l = {1,2}; l(2) = l; すると,core dump する問題を解決した。 o a = {1,2}; {a,b} = a; で core dump する問題をを解決。 o 0 x 0を行列の保存すると,セミコロンが余分につく問題を解決。 o {a, b, c} で入力したリストの型を LIST_MATX に設定するようにした。 o {a,b,c} = リストの代入について,右辺のリストが消去されないよう, type を一時的に LIST_MATX に変更するようにした。 o 「リスト .!= 文字列」に対応する case 文がが無かったので,追加した。 o 再帰関数を呼び出すとき,関数の引数のバックアップをとるようにした。 set_arguments() で引数を設定するとき,引数が壊される問題があった。 o 関数 lu() を実行するとエラーが発生する問題を解決。 o 関数 rngkut4() と rkf45() に行列を返す関数 diff()を渡した場合の 処置を修正した。正しい関数が呼ばれないようになっていた。 o xmStringSprintf()のSunOSに関するバグを修正。 o RtMaTXについて,C-プリプロセッサ処理のとき, -DMATX_RT=1 が正しく設定されるようにした。 o ListElementCopy() のバグのためリストを多用する プログラムが core dump する問題を修正した。 o '#' から始まる行が # line でないとき,error() の代りに warning() を呼び出すように変更した。 o PolySetZero()のバグで,0 次の多項式がリセット されないことがあったので修正した。 o 複素数の asin(), acos() の誤りを修正した。 o typeof(a,1) != ClassName のとき,誤って '==' が 出力されるようになっていたので,修正した。(matc) o 「行列(整数,整数) = 実数」に対応する set_element() 内で,途中で return していたため,代入式の値を返すことにした変更に対応できていなかった。(matc) o list_sub_elements() 内で SymbolNonNameUndef()を 呼び出す順番に問題があったの修正した。(matc) o 代入式の右辺の値を保存する変数に代入するように変更した。(matc) o access() の第2引数が整数のとき,誤ったコードを出力する問題を解決。(matc) o 「{a,b,c} = リスト」の展開について,右辺のリストの変数を matx_list という名前で push() するようにした。(matc) 右辺を2回も評価する問題を解決するため。 o 「{a,b,c} = リスト」の展開について,右辺のリストを新たなシンボルとして install() するようにした。右辺の辺の定義まで変ってしまっていた。(matc) o 「A(i,j) = 実数」のとき使用する変数 Real_assign_tmp を int で宣言していたので,double に修正した。(matc) o 既に定義されている関数と同じ名前の関数を関数の 引数にすると,core dump する問題を解決。(matc) o A(1,1) = -1; などの出力をカンマ式で出力するように変更した。(matc) o for 文の各要素に対するコードを別々に出力するようにした。 A(1,1) = -1; などの式が要素に入っている場合に対応するため。(matc) ============================================================================= MaTX-4.407+4.453 から MaTX-4.447+4.505 への変更点 (1999.4.7) 【改良】 o 環境変数 STRING_TABLE_MAX, STRING_LENGTH_MAX, POLYNOMIAL_TABLE_MAX, POLYNOMIAL_DEGREE_MAX, RATIONAL_TABLE_MAX, MATRIX_TABLE_MAX, MATRIX_SIZE_MAX によって,ガーベージコレクションのサイズを設定可能。 o diag() にスカラーと行列を同時に渡せるようになった。 o エラーメッセージに表示するソースコード中の改行とタブをスペース1文字 変換するようにした。メッセージ中の行番号の後ろをコンマからコロンへ。 o VC++版のRtMatXでは,ミューテックを用い排他制御するようにした。 o Win32版のRtMaTXで,クリティカルセッションで同期をとる。 o -help でオプションを表示するようになった。 o コマンドラインで !num1:num2 のように指定するとnum1 から num2 までの 履歴が実行できるようになった。 o 関数sort()は全ての成分をソートし,同じ型の行列と指数を返すようにした。 列毎にソートする関数sort_col()と行毎にソートする関数sort_row()を追加。 o LU分解する関数を lu() とし,ピボット付LU分解を lu_p()として追加した。 {l,u} = lu(A); ---> L*U = A {l,u,p} = lu_p(A); ---> L*U = P*A o FFTの引数が行列のとき,行毎に計算する fft_row()と列毎に計算する fft_col() を追加した。IFFTの引数が行列のとき,行毎に計算する ifft_row()と 列毎に計算する ifft_col() を追加した。 FFTの引数がベクトルのとき,縦ベクトルでも横ベクトル でも,どちらでもその FFT を計算するようにした。 o 多項式行列と有理多項式行列を round2z() で処理できるようにした。 o 行列の各行のフロベニウスノルムを計算する frobnorm_row()と 行列の各行のフロベニウスノルムを計算するfrobnorm_col()を追加した。 o 行列エディタに,1行1列へ移動するコマンド'<',最終行最終列へ移動する コマンド'>',列毎または行毎に削除するコマンド'DEL-c'と'DEL-r'を追加。 o 関数内で引数が修正されたか判定するオプション -checkarg を追加した。 o && と || について,最初の式の真偽によって,2番目の式の評価をしない ようにした。C言語とおなじ仕様になった。 o 無限大の判定をする関数 isinf()を追加。finite()をisfinite()に変更。 o Polynomial("var") で変数名が var の多項式を定義できる。 o fprintf(char *path, ...) と fscanf(char *path, ...)の path に "stdin", "stdout", "stderr" を指定できるようになった。 fscanf() の path に通常のファイルを指定すると,ファイルをオープン し,データを読み込み,ファイルをクローズする。 o typeof(L) でリストの成分の型からなるリストをtypeof(L,i) でリストの i 番目の成分の型を返すようにした。== と != と case で型名 (Integer, Real ... List)を使用できるようにした。 o 起動時に,まず MaTXRC.mm を読み込み,次に .matxrc を読み込むようにした。 終了時に,まず MaTXOUT.mm を読み込み,次に .matxout を読み込むようにした。 o リストの成分の代入と参照の引数に指数を使用できるようになった。 o ファイルのアクセス権をのモードを文字列で指定できるようになった。 o Polynomial("name")で 1 次の多項式を定義できるようにした。 o Polynomial(p, "var"), Rational(r, "var"), Matrix(A, "var"), Array(A, "var") で多項式の変数名を変更できるようになった。 o 内部処理の経過を表示するオプション -v を追加した。 o 整数と実数を print で表示するとき,変数でなけ れば,ans という名前を表示するようにした。(matc) ----------------------------------------------------------------------------- 【バグの修正】 o print i = j = 1 で,正しく変数名 i が表示されるようにした。(matc) o load コマンドでファイルを読み込むとき,その中から別のファイルが 読み込まれると,大域変数がオーバーライトされていた。 o 配列^複素数 の演算で core dump する問題を解決。 o A(x,y) において,x が配列で,y が行列のとき,エラーと判定。 o 行列 [] の解釈が正しくなるように修正した。 o 関数内部の局所変数について,値が設定される前に参照されると エラーとなるようチェックするようにした。 o a = {} の式をコマンドラインで入力してもプロンプトに戻るようにした。 o 多項式行列と有理多項式行列の成分に複素数成分をを代入したとき, 複素多項式行列と複素有理多項式行列に正しく変わるよう修正した。 o エラー回復のとき,丸括弧の数 paren を 0 にしてなかったので, エラー回復しても,行列を入力できない状態になったしまう問題を解決。 o lower()で次数より低く多項式の係数をシフト出来るように修正。 o 多項式行列の逆を .~ で求めると,core dump する問題を解決。 o whos の出力を修正した。Index がベクトルのとき長さを, 行列のときサイズを表示するようにした。 o 無限大を Inf と常に表示するようにした。 o eval("str") でエラーが発生すると,core dump する問題を解決。 o case 文のラベルとして負の整数を扱えるようにした。 o load "file" すると,Stack Error が発生する問題を解決。 o {1}(1,Integer) のとき,リストを NonNameUndef() してなかったので,memory がリークしていた。 o 整数や実数を read で編集するとき,値が設定されていれば値を表示し, そうでなければ値を表示しないようにした。 o error() でエラーメッセージ中の余分な情報を表示しないようにした。 o 変数の異なる多項式の計算をエラーと判定するようにした。 ============================================================================= MaTX-4.391+4.433 から MaTX-4.407+4.453 への変更点 (1999.1.17) 【改良】 o max(i1,r2), min(r1,i2)で整数と実数を比較し,実数を返す。 o Visual C++を用いたリアルタイム制御が可能となる。 o デフォルトの履歴の数を 20 に変更。 o デフォルトでは,MaTX.log にエラーログを残さないように変更した。 -withlog オプションをつけると,ログを出力するようにした。 o コマンドラインの番号と履歴の番号が一致するようにした。 o 可変長引数をもつ関数の宣言のチェックを厳しくした。返す型だけ でなく可変長引数をもつかどうかもチェックするようにした。 o 文字列型Stringのメモリ管理を行うようにした。 o -v オプションをつけると,C プリプロセッサの起動の様子も 表示するようにした。(matc) o -g オプションでデバッグ情報を出力するようにした。(matc) o for, while, do ループ中に関数呼び出しがあれば, MatTmpUndef()などを呼び出すようにした。(matc) o プログラムコードサイズが大きすぎるとき,-Np オプションを使用する ようメッセージを表示して,実行を中断するようにした。(matc) ----------------------------------------------------------------------------- 【バグの修正】 o mm ファイルの 1 行が 256*2 文字より長く,'/' が含まれる行について, parse に失敗することがあった。 o A(m:n) について,m < n のとき,正しい値を返すよう修正した。 o 関数呼び出しの引数の数や型が一致していないと,core dump する 問題を解決。 o s = $ のように,$ を式の中で用いると,eqnin = 0 が正しく 設定されないため,次の入力を待ち続ける問題を解決。 o sprintf()でとても長い文字列を生成すると core dump する問題を解決。 o コマンドラインで指定した C プリプロセッサへ -D オプションが正しく伝わるようにした。 o A(2,2:) のようにコロンの後ろに値が無い場合,yylex() 内の eqnin 変数 の関係で,文字列の読み込を続けようとする問題を解決。 o appendlist()のバグ(先頭付近の成分がなくなる)を修正。 o A(2:) のコロン表記のために行った修正の結果, [1:3] の parse に問題が発生したので,修正した。 o コマンドライン履歴機能について,起動直後,^Nを 入力すると core dump する問題を解決。 o 多項式の演算の最後に呼ばれるPolySimplify()に渡される許容誤差が係数 のフロベニウスノルム * EPS であったため,どれが1個の係数が大きな値 をとると,多の係数が消去される問題があった。修正した。 o ベクトルのノルムを norm()で計算すると,正しくない値を返す問題を解決した。 o A(1,:) のようにコロンをもちいると,yylex() 内のeqnin変数の関係で, 文字列の読み込を続けようとする問題を解決。 o 履歴を保存すると,順番が正しくなくなる問題を修正。 o rngkut4()の呼び出しについて,内部で MatObjectTmp()が呼び出されると, TMP 変数が解放されるため正しい結果を返さない問題を解決した。 o colsubvec(), colsubvecP() で,real_int() という 古い関数を使っていたので,int_sgn() に変更した。(matc) o E, DEG などのかつての定数を変数に使用すると,matrix.h などの中に定義が 残っていたので,正しくCコンパイルできない問題があった。(matc) o コマンドラインの引数を main() で受け取るときに用 いられる変数の宣言位置を関数の先頭へ移動した。(matc) ============================================================================= MaTX-4.376+4.420 から MaTX-4.391+4.433 への変更点 (1998.9.24) 【改良】 o C プリプロセッサのオプションに -DOSNAME を追加した。 o inpline_savehist() と inpline_loadhist() を追加。 ヒストリーを保存および読み込みするようになった。 o -nohist フラグを使用するとヒストリー機能を無効にできる。 o コマンドラインの先頭で '^H' を入力するとヒストリ全体を表示。 o !番号 でヒストリーを呼び出せるようになった。 o 環境変数で以下の設定ができるようになった。 MATX_HISTSIZE : 履歴の長さ MATX_HISTFILE : 履歴を保存するファイル MATX_HISTFILESIZE : ファイルに保存する履歴の数 o kernel() と inv()の第 2 引数で精度 tol を指定できる。 o pause で停止する時間を,プロセスの CPU 使用時間ではなく, 実際に経過した時間で計測するようにした。 o eig(), svd() における,計算の繰り返しの最大数を固定回数から,行列の 大きさ x 30 に変更した。eig(), svd() において,EPS より小さい数を 0.0 と見なしていたが,実際に 0.0 で判定するようにした。 o 絶対値が EPS 以下の数値を 0 と見なしていたが, 正確に 0 に等しいかどうかを判別するようにした。 o max(i1, r2), min(r1, i2) のように整数と実数を比較し,実数を返す。 o eval() の第 2 引数として整数も使用できるようにした。 ----------------------------------------------------------------------------- 【バグの修正】 o assign_list() のバグを修正。{A,B,...} = C によるメモリのリークを修正。 ListElementDestroy() のバグを修正。 o 浮動小数点 xxx E yy について,yy が整数でない場合をエラーとして検出。 o VC40 と DJGPP 版について,Inf や NaN の計算にともなう数値計算 割り込みが発生しないようにした。 o コマンドラインで {a,b,c} = afo() を実行したとき,ある関数の定義が Func class foo(ag1,ag2,c) のように 'c' が含まれると,変数 c が削除される 問題を解決。 o [[1 2 3](1,1) 2] を [1 2 3] と (1,1) と 2 の 3 個の成分の行列と 見なさず,[1 2 3](1,1) と 2 の 2 個の成分の行列と見なすようにした。 o 関数の再帰呼び出しについて,引数が正しく設定されない問題を解決。 関数呼び出しの機構を大幅に変更した。少し効率的になたははず。 o help コマンドで,登録されていないキーワードを指定すると, core dump する問題を解決。 o do 文が入れ子になっていて,内側のループをbreak 文で抜けると, 外側のループも抜けてしまう問題を解決。 o VC40 版についてレジストリを操作する関数を使うので user32.lib advapi32.lib をリンクするようにした。 o 式 [ ](m,n) があると,"Argument must be variable" というエラーになってしまう問題を解決。 o 式の右辺に関数呼び出しがあり,その関数内で行列,多項式,有理多項式, リストのいづれかの代入があると,右辺で計算した中間結果が消去されて しまう問題を解決した。ある関数で行列,多項式,有理多項式,リストの いづれかが使用されるとき,mat_last, poly_last, rat_last, list_last を全て宣言するようにした。 o A(i,j:k) = B の変換にバグがあった。修正した。 o while, for, return 文における poly_use, rat_use, list_use, mat_ust のチェックを単独から,論理和に変更した。これは,関数の先頭における mat_last, poly_last, rat_last, list_last の宣言と一致させる ためである。 o RtMaTX について,多項式,有理多項式,リストの メモリ管理方法を行列のそれに一致させた。 ============================================================================= MaTX-4.358+4.405 から MaTX-4.376+4.420 への変更点 (1998.5.3) 【改良】 o help で MM-FILE のヘッドを見るとき,AWK を呼び出さないようにした。 o getrusage() が無いシステムで,settimer() と gettimer() のために time() を用いるようにした。しかし,1 秒単位でしか計時できない。 o 環境変数 MATXINPUTS が設定されてないとき,MATXDIR が設定されていれば, MATXDIR/inputs を MATXINPUTS に設定するようになった。 o Visual C++ に対応した。パスにスペースとタブが入っていても,ダブル クォーテーションでくくれば良いようにした。 o Windows NTでも画面の制御が正しく行われるよう,画面の制御をエスケープ シーケンスから,Win32APIに変更した. 行列エディタを ESC キーで終了 できるようにした。ただし,ESC キーで始まるコマンドを無くした。 o Visual C++ がないとき,自動的に DJGPP の CPP をプリプロセッサとして 使用するようにした。 o Visual C++ の C プリプロセッサの起動のコマンドライン の引数に空白が含まれる場合に対処した。 o rank() と pseudoinv() の許容誤差のデフォルトを EPS から関数のデフォルト値に変更した。 o Long file のとき,get_short_path_name() でファイルの エイリアスを使用するよう変更した。 o DJGPP と VC40 版では,C プリプロセスをレスポンスファイル経由で起動 するようにした。コマンドラインの長さに依存しないためである。 o Visual C++ 版に関して,環境変数 MSDevDir を参照していたが,環境変数 MSVCDir が設定されていればそちらを参照するようにした。 o SGI IRIX 6.4 System V Release 4 に移植した。 o MM ファイルから生成される C ファイルを後に残さないようにした。 -mm オプションを用いれば,C ファイルは残される。 o VisualC++版とDJGPP版のとき,clear コマンドをcls コマンド利用する変更した。 ----------------------------------------------------------------------------- 【バグの修正】 o 擬似逆行列を求める関数 pseudoinv() に横長の行列を 渡すと,ランクが大きくなることがあったので修正。 o A(1:n) = B の代入において,A が 0 x 0 のとき,core dump する問題を解決。 o system()の変換結果が,matx_system()となるよう修正。 o MATXCPPが設定された場合も,__MATX__と__MATC__が正しく設定されるようにした。 o has_extension() の中で,拡張子を調べる部分に誤りあったので訂正した。 o 大域変数を main() 関数で出力したら,global_var[] を初期化するようにした。 main() を含むファイルに続けて,別のファイルをコンパイルしようとすると, 大域変数が main() を含まないファイルで宣言されたというエラーが発生する 問題を解決。 o local_declaration() で argdef であるべきところがargdef_run になって いたので,関数の引数を局所変数に代入すると,実引数の型が TMP のとき, 実引数が失われる問題を解決した。 ============================================================================= MaTX-4.352+4.397 から MaTX-4.358+4.405 への変更点 (1998.3.24) 【改良】 o 1 個のウィンドウに複数のグラフをプロットする関数 mgplot_subplot() を追加した。 o Windows95/NT で mgplot() を使用するとき,gnuplot の起動回数を減らす ため,mgplot_hold() 関数を追加した。 o 環境変数 MATXGNUPLOT で,使用する gnuplot を指定できるようになった。 MATXGNUPLOT が設定されてない場合,PATH から gnuplot が検索される。 o ファイルの読み込み中に文法エラーを検出すると, それ以降のファイルを読み飛ばすようにした。(matx) o A .+ B, A .- B の演算で呼び出す行列の関数を MatAdd_double(), MatAdd_Complex(), MatAdd_Polynomial() MatAdd_Rational(), MatSub_double(), MatSub_Complex(), MatSub_Polynomial(), MatSub_Rational()に変更。 o 行列成分の代入を行列ライブラリ関数の呼び出しに 依存するようにし,インタプリタ内部での処理を減らした。(matx) o A(2:*,3:*) と A(2:,3:) を同じ扱いにした。A(2:*,3:*) と A(2,*) など の表記をマニュアルから消去した。 o 大域変数 matx_nolog_flag を MaTXGVAL.h に出力するようにした。これで, MATX_INSTALL 付きで各ライブラリを再コンパイルする必要がなくなった。 o 行列成分の代入において,右辺の行列の情報をできる だけ使用しないよう変更した。かなり効率的になったはず。(matc) o matcc と matccc の機能を matc に統合した。 -mm : mm-file から c-file を生成 -c : mm-file または c-file から object file を生成 その他 : 実行可能ファイルを生成 -v で C コンパイラの呼び出しを表示するようになった。 -o prog で実行ファイルの名前を指定できるようになった。 ----------------------------------------------------------------------------- 【バグの修正】 o load コマンドでスクリプトを読み込むとき,そのスクリプトからユーザ関数 がさらに読み込まれると,コマンドプロンプトに戻らないバグを修正した。 o 関数外での関数の宣言を require 修飾子付きでおこなうと,その指定した ファイルが Undef されないバグを修正した。 o help を引数なしで実行すると Stack Underflow するエラーを解決した。 o fprintf(), sprintf() の内部でフォーマットを保存する文字列を固定長 で確保していたので,長すぎる文字列が引数として渡されると,core dump する問題を解決した。 ============================================================================= MaTX-4.341+4.381 から MaTX-4.352+4.397 への変更点 (1998.2.23) 【改良】 o AA = (行列|配列|指数), A = (AA のピース行列) ピース行列の型は行列でなければならないことになった。 AA の引数の配列は (0|1) からなる配列と見なされる。 (0|1)からなる配列による指数の指定において 0 と 1 以外の成分があると警告が表示される。 o Integer(行列), Real(行列), Complex(行列), Polynomial(行列), Rational(行列) による型変換を禁止した。これらは [行列](1) を用いるべきである。 o 横ベクトルの定義中にスカラとベクトルを混在できるようになった。 例題: A = [1 2 3]; B = [4 A 5]; o 行列の行や列を指定するコロン表記および数列について, i1:i2 に関して i1 > i2 のとき警告を表示するようにした。 o printf(), fprintf() のフォーマットで %% によって '%' を出力できるようになった。 o read << や read <- で読み込むファイルの検索を mm-file と同じ方法で行うようになった。 o which "name" で load や read の対象となる mm-file, mx-file, mat-file を表示するようになった。 o 局所変数の区間判定に strcmp() を用いていたが,関数の構造体に区間の 両端のシンボルを含めることでポインタで区間を判定できるようになった. o 関数の引数が変更されたか調べられるようになった。 シンボルの構造体に modify フラグを追加した。 o 大域シンボルのリストと局所シンボルのリストの切り替えに symbol_modeフラグ を用いるようになったのでシンボルリストのヘッドなどの管理が楽になった。 o 局所変数の名前に組み込み関数名とユーザ定義関数の名前を使えるようになった。 このとき,その関数内ではオーバーライとした関数を呼び出すことはできない。 o プロプロセッサで処理するとき __MATX__ を定義するようになった。(matx) o プリプロセッサの処理のとき,__MATC__ を定義するようになった。(matc) o 関数の引数に関数名や大域変数の名前を使えるようになった。 これで,関数内の変数は完全に局所化された。 o 関数を require 修飾子で Class func() require "package/file.mm"; のように宣言すると,C言語に変換されるとき package_func() に変換されるようになった。 o コマンドラインの読み込みに inpline() 関数を使うようになった。(matc) ----------------------------------------------------------------------------- 【バグの修正】 o max_col() と max_row() のバグを修正。 o if(), while(), for() の条件式の型をチェックしていなかった。 整数と実数のみ条件として受け付けるようにした。 o 関数の定義中にエラーが発見され function_error_out()が呼ばれても, その関数のシンボルが消去されずに残ってしまうバグを修正。 o load コマンドによるファイルの読み込み中にエラーが発見されると, matx を終了してしまう問題を解決。 o プログラムサイズが大きすぎると core dump するバグを修正し, プログラムが異常終了するようにした。 o 指数や配列の演算結果の型が行列になってしまう問題を解決した。(matc) ============================================================================= MaTX-4.327+4.367 から MaTX-4.341+4.381 への変更点 (1998.1.16) 【改良】 o static 変数を導入した。ただし,大域変数の static 変数は意味を持たない。 また,関数の static 修飾子も意味がない。static 変数は 0 に初期化される。 o 大域変数が宣言されると,自動的に 0 に初期化されるようにした。 o rtStartRehearsal()とrtStopRehearsal()を追加した。 o 年,月,日,時,分,秒を成分とする行列を返す関数clock() を追加した。 o 指数と整数を .>, .<, .>=, .<=, .==, .!= で比較できるようになった。 o fread()の第4引き数でバイナリのEndianの変更を指定できるようにした。 o 計算機のバイナリの数値形式(Endian)を調べる関数 machine_endian()を追加した。 0: IEEE Little Endian (PC, 386, 486) 1: IEEE Big Endian (SPARC, Motorola) o max_vec() を max_row() と max_col()に変更した。 min_vec() を min_row() と min_col()に変更した。 sum_vec() を sum_row() と sum_col()に変更した。 prod_vec() を prod_row() と prod_col()に変更した。 mean_vec() を mean_row() と mean_col()に変更した。 std_vec() を std_row() と std_col()に変更した。 any_vec() を any_row() と any_col()に変更した。 all_vec() を all_row() と all_col()に変更した。 o 指数に関して,行列や配列と同じ成分操作ができるようになった。 o 行列(配列) = 行列 によって,配列の0でない成分の 場所に右辺の行列の成分が代入されるようになった。 o Matrix(文字列), Array(文字列), Index(文字列) により文字列のアスキー コードを成分とする行列,配列,指数を生成できるようになった。 o String(行列), String(配列), String(指数)により行列,配列,指数から それらの成分をアスキーコードとする文字列に変換できるようになった。 o 商の余り rem() の引数に,実数,行列,配列,指数をとれるようになった。 o Matrix A; A(3,3) = 1.0; によって自動的に A は 3 x 3 の行列となり, さらに A(4,2) によって A は 4 x 3 行列なるようになった。 ----------------------------------------------------------------------------- 【バグの修正】 o for, while などのループが関数内にないとき,SymbolNonNameFrameUndef() などで定数が Undef されたいたのを修正した。 o FFTの計算結果(周波数0の値)が正しくない問題を修正。 o maximum(), と minimum() のバグ(成分の位置)を修正。 ============================================================================= MaTX-4.320+4.358 から MaTX-4.327+4.367 への変更点 (1997.12.3) 【改良】 o 実定数 E, DEG, GAMMA, PHI を削除した。 E = exp(1.0); DEG = 180/PI; で代用できる。 o 行列の行毎にゼロ成分と非ゼロ成分を調べる関数all_vec(), any_vec()を追加。 o ゼロへ丸める関数 round2z()を追加。 o ceil(), floor(), fix(), round() で複素数,多項式,有理多項式が 扱えるようになった。 o String()によって複素数と多項式を文字列に変換できるようになった。 o exit()を呼ぶと,プログラムを終了するのでなくコマンドラインに戻る ようになった。ただし,コマンドラインで exit を実行するとプログラム を終了する。 o ファイルからバイナリデータを読み込む関数 fread とファイルにバイナリ データを書き込む関数 fwrite を追加した。 o 関数の定義がどのファイルにあるかを require オプションで指定できる ようになった。例: List bode() require "control/bode.mm"; 宣言はされているが定義されていない関数は指定されたファイルから 直接読み込まれる。検索の順序はこれまで同じであり,ファイルが していされていない場合も従来通りである。 既にファイルが指定されている関数の宣言において,別の名前のファイル を require すると,既に登録されている関数の定義は破棄される。 o which コマンドで組み込み関数も調べられるようになった。 ============================================================================= MaTX-4.305+4.346 から MaTX-4.320+4.358 への変更点 (1997.9.28) 【改良】 o スクリーン上でカーソルを移動する関数 gotoxy()を追加。 o RtMaTXでなくても,Rtシリーズの関数をとりあえず 呼び出せるようにした。 o 環境変数 LANG によって,ヘルプメッセージの言語を 変えるようにした。LANG = (ja|japanse|ja_JP.xxx) ならば日本語。 o abs("123") によって,"123"の文字コードからなる 行列を返すようになった。 o 関数の仮引数が(行列|配列|指数)のとき,実引数の (行列|配列|指数)が自動的に型変換されるようになった。 o 演算子 '.+' と '.-' を追加した。スカラと(行列| 配列|指数)の和や差をこれらの演算子で行うと、 スカラが自動的にそれで満たされた(行列|配列|指数) に変換された後、通常の演算が行われる。 o 環境変数 LANG に ja, japanse, が設定されていない 場合, inputs ディレクトリ下のサーチでは ja という 名前のディレクトリをスキップするようになった。 o (行列|配列)と複素数(スカラ)の比較ができるようになった。 ----------------------------------------------------------------------------- 【バグの修正】 o コマンドラインで Ctrl+C を押すと画面の設定が変 わってしまうバグを修正。(matx) o DOS版において,help コマンドで more が pager として 呼ばれるとエラーが発生する問題を解決。 o Ode(), Ode45(), Ode45Auto()などの初期状態(引数) 関数呼び出しによって影響されないよう変更した。 従来は関数呼び出しによって初期状態は最終状態に 変更されていた。 o X を複素行列とする。X(2:3) = [1 2]による代入が 正しく行われよう修正した。 o 有理多項式に実数を代入する式,多項式に実数を代入 する式の出力コードに括弧が不足していたので補った。(matc) o main()関数が定義されていないファイルで,大域変数が 宣言された場合,エラーを出力するようになった。(matc) o A.^2 のとき,"Duplicate undefining for '(0 x 0)'" のエラーメッセージが出るバグを修正。(matc) o (3 > 2.1)のように整数と実数の比較ができるようになった。 かなり前に実現したと思っていたが,まだでした。(matc) o return "afo" + str; を不正と判断してしまう問題を解決。(matc) o 関数の参照を引数とする関数の定義に置いて, matrix_use, poly_use, rat_use, list_use の 設定がされていなかったので修正した。(matc) o 関数の参照のシンボルの削除において,FuncDestroy() を呼び出すように変更した。これまでは,コンテンツ を削除しようとして core dump していた。(matc) o ある関数が定義されても,global シンボルとして残ら ないようになっていたので修正した。(matc) o 関数定義の終了における局所変数の削除において 1 個だけ削除されずに残るようになっていたので修正。(matc) ============================================================================= MaTX-4.289+4.336 から MaTX-4.305+4.346 への変更点 (1997.6.15) 【改良】 o 関数 gets(), fgets()を追加。 o MXデータフォーマットのマシンタイプを判別し,マシンタイプ に応じてデータを自動変換して読み込むようになった。 o DEC Alpha (Digital Unix)に移植した。 o matx のプログラムコードのサイズを明示的に指定するコマンドライン オプション -Np を追加した。 -Np100000 とすると,100000ステップ のコード領域が確保される。 o matc が生成するコードを内部で保存するバッファの大きさを明示的に 指定するコマンドラインオプション-Nc を追加した。 -Nc1000000 と すると,1 Mb のメモリがバッファに使われる。 o 行列エディタに次のコマンドを追加した。 'O' : 1で行列を満たす 'F' : 指定した値で行列を満たす o ファイルの終りを検出する関数 feof() と文字列中か らある文字の位置を探す関数 strchr() を追加。 o matc に関して,必要でなくなった(テンポラリ)シンボルのメモリを その都度,開放するようにした。VARTMP の導入。 ----------------------------------------------------------------------------- 【バグの修正】 o read a(1,1); edit a(1,1); のエラーチェックを追加。 o printf(), sprintf(), fprintf() で2個以上の引数を を表示するとき,'%'が余分に表示される問題を修正した。 o MatFFT(), MatIFFT()において,実際のデータ数が指定されたデータ 数より少ない場合,計算結果が正しくならない問題を修正。 o fscanf(), sscanf()のフォーマットを正しく認識しないバグを修正。 o forループ,whileループ,break文,continue文におて,MATX_TMP_DESTORY() を常に出力していたが,Matrix, Polynomial, Raiotnal などの局所変数が その関数で宣言されている場合のみ,個別に MatTmpUndef()などを出力する よう変更した。 ============================================================================= MaTX-4.274+4.320 から MaTX-4.289+4.336 への変更点 (1996.11.26) 【改良】 o ディレクトリを変更するコマンド chdir を追加。 o {1, "2", [1]}(2:3) や {1, "2", [1]}(2,String) のような記述ができるようになった。 o DJGPP版で数値演算割り込みを制御するようになり, NaN と Inf が使えるようになった。 o 階乗を計算する関数 fact() の引数に整数をとれるようになった。 o mm 拡張子なしのファイルが指定されると,必ず拡張子を補うようにした。 これまでは,拡張子無しのファイルが存在すれば,そのファイルを読み込んでいた。 o ある関数の参照を関数の引数に渡すとき,参照の実態が定義されていなけ れば,その後,その関数の本当の名前が分からなくなるので,関数に渡す ときにその関数の実態をロードするようにした。 o 未定の関数を help で調べると,その関数名のファイル が存在すれば,それを表示するようにした。 o 行列の成分の和,積,平均,標準偏差を計算する関数 max(), min(), sum(), prod(), mean(), std()の仕様を変更した。全ての成分について 計算するようにした。 o 行列の成分の最大値,最小値,和,積,平均,標準偏差を縦あるいは 横ベクトルの場合,全ての成分について計算,行列の場合,行毎に計算 する関数 max_vec(), min_vec(), sum_vec(), prod_vec(), mean_vec(), std_vec() を追加した。 o 行列の成分の累積積と累積和を計算する関数 cumprod()とcumsum() の仕様を変更し,全ての成分について計算するようにした。 o 行列の成分の累積積と累積和を行毎に計算する関数 cumprod_vec()とcumsum_vec()を追加した。 o フォーマットにしたがってキーボードから入力する関数 '{a,b,c} = scanf(format)'を追加した。 ----------------------------------------------------------------------------- 【バグの修正】 o fclose()をすると core dump する問題を解決。 o A(m:n) = B の処理が正しく行われよう修正した。 o printコマンドに与えられた変数が未定義であるか チェックするようになった。 o 未定義変数や関数参照をリストのメンバに記述した場合のチェックを追加。 関数の参照を print コマンドの引数に記述した場合のチェックを追加。 関数の引数に未定義の変数を記述した場合のチェックを追加した。 o 関数 prod() に多項式行列を渡したとき,正しい値を 計算していなかったので,修正した。 o [A]によって1個の行列を [ と ] で括ったとき,(matc) 変数のタイプがTMPにならないようにした。 (可変個引数の関数の引数を局所引数に代入 するときこの差が問題を引き起こしていた) o mmファイルを絶対パスで指定すると,core dump する問題を解決。(matc) o A(i:*,j) の変換コードに括弧が1個多すぎた。(matc) o 定数が変数や関数の名前に使われたとき,適切な (matc) エラーメッセージを表示するようにした。 ============================================================================= MaTX-4.263+4.310 から MaTX-4.274+4.320 への変更点 (1996.8.28) 【改良】 o BREAK文字を入力すると,プログラムを終了する代わりにプロンプトに戻る ようにした。連続2回BREAK文字を入力するとプログラムが終了する。 o コマンドラインで Ctrl+L を押すと画面をクリアするにした。 o cppのエラーメッセージが画面に出力されないようになった。 o 転置 : A' : trans(A) 共役転置 : A# : conjtrans(A) の関数を追加した。 逆 : A~ : inv(A) 累乗 : A^B : pow(A, B) o リストを表示すると,整数,実数,文字列,リストは成分を, それ以外は成分のクラス名を表示するようになった。 o menu()コマンドで10以上のメニューを簡単に選択 できるように '+'キーに+10の意味を持たせた。 '+' + '0' --> 10 '+' + '3" --> 13 '+' + '+' + 3 --> 23 o 時間を計測する関数 settimer() と gettimer() を追加した。 settimer() でタイマをリセットして gettimer() で時間を得る。 o リストの接続 A + B を導入した。 o 生成されたC言語のプログラムの先頭にmatcによって 生成されたことをコメントとして記述するようにした。 ----------------------------------------------------------------------------- 【バグの修正】 o {A(2)} = {1} の左辺のチェックを修正した。 o コマンドラインで存在しないファイルを指定したとき, (例えば afo.mm) afo.mmi というゴミファイルが残る問題を解決。 o 行列(1:, 2: )=行列,左上を指定した行列成分の代入のバグを修正。(matc) o 行列(r1:*,c1:c2)の変換で,閉じ括弧が1個多かったので修正した。 (matc) ============================================================================= MaTX-4.251+4.294 から MaTX-4.263+4.310 への変更点 (1996.5.19) 【改良】 o -DARGS によってCプリプロセッサのオプションを指定できるようになった。 o 比較演算 ==, != で,配列と複素数の比較ができるようになった。 o mgplot()を改良して,パイプのないOSでもgnuplotを呼び出せるようにした。 o Ode()の途中で任意の時刻の状態と入出力を取り出す関数 OdeXY() を追加した。 これにより遅れのあるシステムのシミュレーションが簡単にできるようになった。 o 文字列からフォーマットにしたがって値を取り出す関数 sscanf() を追加した。 o help によって関数一覧が表示されるようになった。 o read <- によってデータを読み込むとき,そのデータ を書き込んだ計算機の種類をチェックするようになった。 o 行と列のノルムを一致するように変換する対角行列 を求める関数 balance() を追加した。 o BREAK文字を入力すると,プログラムを終了する代わりにコマンドラインに 戻るように変更。連続2回BREAK文字を入力するとプログラムが終了する。 ----------------------------------------------------------------------------- 【バグの修正】 o log(行列)が正しい値を返すように修正した。 o MatCatColumns(), MatCatRows(), MatDiag()中のバグによる メモリ破壊の問題を解決。 o pause の途中で CTRL-C が押されたとき,mgplot が終了しない問題を解決した。 o コマンドラインの1行目で CTRL-P すると "MaTX (1) "と表示されるバグを修正。 o pause コマンドに長い文字列を渡すと,文字列の後ろ の方が画面に残ってしまうバグを修正。 o makelist()とappendlist()を繰り返すと,大量のメモリが必要になる問題を解決。 ただし,makelist()とappendlist()を繰り返す方法は速度的に良くない。 o 行列(i,j:*) = や 行列(i:*, j:*) = の形式の代入のバグを修正。 o pause コマンドを実行した後で,Ctrl-Cを押すと, ログアウトしてしまう問題を解決。 o sscanf()に与えられた文字列がフォーマットにマッチ しない場合の処理が正しく行われるように修正。 o fprintf()の第2引数の文字列の中にセミコロンがあると, 出力コードがそこで改行してしまうバグを修正。 ============================================================================= MaTX-4.234+4.276 から MaTX-4.251+4.294 への変更点 (1996.3.24) 【改良】 o Windows 95, Windows NTの Win32API に対応した。 o コマンドラインを '!'で始めると,その行をシェルに渡せるようになった。 o コマンドラインの先頭で CTRL-D を2回連続して押さないと プログラムが終了しないようになった。 o Cプリプロセッサの出力をカレントディレクトリに書けない 場合は,環境変数TMPあるいは環境変数TEMPで指定されている ディレクトリ,/tmp ディレクトリに出力するようになった。 o リアルタイムMaTXのために非リエントラントな関数を リエントラントな関数になるように修正した。 o A を(行列|配列|指数),Bを配列とする。 A(find(B)) を A(B) と略記できる用になった。 例 A = Array([1, -1, 2, -2, 3, -3]); B = A(find(A > 0)); C = A(A > 0); B と C は等しく [1 2 3] である。 o 実数 = 整数 複素数 = 整数|実数 多項式 = 整数|実数|複素数 有理式 = 整数|実数|複素数|多項式 の代入において,暗黙の型変換が行なわれるようになった。 o 行列の成分の和,積,平均,標準偏差を計算する関数 sum(), prod(), mean(), std()の仕様を変更した。 縦あるいは横ベクトルの場合,全ての成分について計算, 行列の場合,行毎に計算するするようになった。 o .>, .<, .>=, .<=, .==, .!=, .&&, .||, .! 演算子を 追加した。行列と(整数|実数)の比較演算を型変換なしに 記述できるようになった。 o 累積積と累積和を計算する関数 cumprod()とcumsum()を追加した。 o シェルを実行する関数 system() をvoid型からInteger型 に変更して,システムコールの戻り値を返すようにした。 o ファイルのアクセス権の判定をする関数 access()を追加した。 アクセス権がある場合は0を返す。そうでない場合は0以外 の値を返す。 o 指数の符号反転も実行できるようになった。 指数の sum(), prod(), cumsum(), cumprod()ができるようになった。 o A(1,1) = B によって Aの(1,1)が B の左上に一致するように B が代入される代入文を廃止した。今後は, A(1:,1:) = B; によって上記の機能が実現される。 o A(2:,2:) = B によって A の (2,2)が左上に一致するように B を代入するように, A(2:*,2:*) = B によって A の (2,2) から A の右下端まで B を代入するようになった。後者は,B の大きさと A の 代入しようとしている部分の大きさのチェックが行なわれる。 ----------------------------------------------------------------------------- 【バグの修正】 o matxのコマンドラインにおいて,(行列|配列|指数)を変数に代入 しても,変数の型が(行列|配列|指数)のとき,その型が右 辺の型にならないバグを修正。 o finite(), isnan()に複素行列を渡すとcoreを吐く問題を解決。 o [A+B](1) 表記で,[A+B]部分に対してNonNameUndef()を するのを忘れていたので,名前の無いシンボルが残る問題を解決。 ============================================================================= MaTX-4.229+4.270 から MaTX-4.234+4.276 への変更点 (1996.1.22) 【改良】 o FreeBSD-2.1.0 をサポートするようになった。 o コマンドライン編集のために readline ライブラリの 代りに ipline を使うようになった。 o -nofep オプションにより,コマンドライン編集機能を使わ ないように設定できるようになった。 o -nolog オプションにより MaTX.log にログを出力しないようになった。 o 起動時のコマンドラインで -e "statement' のように記述 すると,statement が評価されるようになった。 o 標準入力にデータがあるかどうか調べる関数 kbhit(), 標準入力からエコー無しで任意の文字を取り込み, その文字コードを返す関数 getch(), 文字コードを文字列に変換する関数 int2str() を追加した。 o main()関数内で MatxSetSignal()によりシグナルの設定 をするようになった。MatMain()をMatxMain()に変更。 o pause コマンドの改良。 ----------------------------------------------------------------------------- 【バグの修正】 o matc の起動時のコマンドライン引数の順番に関する制限が無くなった。 o signal(SIGFPE, matx_fpecatch)の行で出る警告を出さない ようにするため,matx_fpecatch()の引数に int signo を加えた。 o 割り込みキー (CTRL-C)を押すと,親プロセスも死んでしまう問題を解決。 ============================================================================= MaTX-4.215+4.252 から MaTX-4.229+4.270 への変更点 (1995.11.24) 【改良】 o OdeHybrid()とOde45Hybrid()で,link_eqs()が各サンプリング 点において1回だけ呼ばれることを保証するようになった。 o OdeHybrid()において diff_eqs()が呼ばれる回数を半分に減らした。 OdeStopで止まるタイミングを早くした。 o OdeAuto()などで,eps を指定しない場合,キャスト(int)を使って デフォルトの eps を決めていたが,関数floor()を使うように変更した。 o Piece行列を使ったブロック成分の操作法を拡張した。次のような記述が 可能となった。 AA(1:2, 3:4, A), AA(1, *, A), AA(*, 1, A) AA(1:2, *, A), AA(*, 1:2, A) AA(1:2, 3, A), AA(1, 2:3, A) AA(1:2, 3:4, A) = B; AA(1, *, A) = B; AA(*, 1, A) = B; AA(1:2, *, A) = B; AA(*, 1:2, A) = B; AA(1:2, 3, A) = B; AA(1, 2:3, A) = B; o 配列,指数をsaveコマンドで保存するとき,Array()と Index()によりキャスト(型変換)するようにした。 o read A << "A.mat" で読み込まれるMAT形式のフォーマットの仕様を変更した。 (1) '#' で始まる行は,コメントと見なされるようになった。 (2) 必要以上のデータが行末にある場合,それを無視する。 o Ode()関数の時刻数の最大値であるKMAXを変更して,シミュレーション時間と dtsavを参考にして,時刻数を適切に決定するようにした。保存できるデータ 数の制限がなくなった。 o A(2:*,3:*) によって,2行目以降3列目以降の ブロック行列を指定できるようになった。 o 行列の成分をシフトする関数の追加。 shiftLeft(), shiftRight(), shiftUp(), shiftDown() 行列の成分を回転させる関数の追加。 rotateLeft(), rotateRight(), rotateUp(), rotateDown() o ファイルをオープンする関数の追加。 fd = fopen(path, mode) ファイルをクローズする関数の追加。 fclose(fd) フォーマットにしたがってファイルに出力する関数の追加。 fprintf(fd, format, ...) フォーマットにしたがってファイルから入力する関数の追加。 {a,b,c} = fscanf(fd, format) o popen(file, arguments)によって,別のプロセスと通信するパイプを作れる ようになった。使い終わったら,pclose(pid)によってパイプを削除する。 【例題】 pid = popen("gnuplot"); fprintf(pid, "plot sin(x)\n"); fprintf(pid, "quit\n"); pclose(pid); o SunOS, Solaris2.x で,Shared libraryに対応するようになった。 matcc -static とすると従来のバイナリが得られる。 ----------------------------------------------------------------------------- 【バグの修正】 o appendlist()のバグを修正。appendlist()すると, 追加したメンバが UNDEF になってしまう問題を解決。 o AA(Index([0:1]), Index(1), A)はできるが, AA(Index([0:1]), 1, A)はできないというバグを修正。 o do ループのブロック文の終了条件に nul がないため、直接 while ループ に入っていたので,while の後の文が2回実行されるバグが有った。(修正) o 正方でない行列を引数としてsvd()を呼び出したとき, 特異値の行列の右側,下側にゴミが入る問題を解決。 ============================================================================= MaTX-4.202+4.237 から MaTX-4.215+4.252 への変更点 (1995.8.7) 【リアルタイムMaTXのための改良 (matx)】 o 16進数と8進数を入力できるようになった。 例 0xffff(16進) 010(8進) o ビット毎の論理和,論理積,反転,排他的論理和の関数 bit_and(), bit_or(), bit_xor(), bit_comp()を追加した。 o ビット毎のシフト関数 bit_lshift()とbit_rshift()を追加した。 o 画面消去コマンド clear をsystem("cls")からエスケープ シーケンスを使うように変更した。(MS-DOSの場合) 【リアルタイムMaTXのための改良 (matc)】 o 16進数と8進数を入力できるようになった。 例 0xffff(16進) 010(8進) o ビット毎の論理和,論理積,反転,排他的論理和の関数 bit_and(), bit_or(), bit_xor(), bit_comp()を追加した。 o ビット毎のシフト関数 bit_lshift()とbit_rshift()を追加した。 o リアルタイムMaTXの場合,ループの終わりなどに MATX_TMP_DESTROY();を出力しないようにした。 o 画面消去コマンド clear をsystem("cls")からエスケープ シーケンスを使うように変更した。(MS-DOSの場合) ----------------------------------------------------------------------------- 【その他の改良 (matx)】 o mgplot (複数のグラフウィンドウをもつgnuplot)の実現。 o MM-FILEを再帰的にディレクトリを探すようになった。 o [A B](1,:) で行列[A B]の1行が,[A B](1,2)で [A B]の(1,2)成分が取り出せるようになった。 o pauseコマンドで表示するメッセージを指定できるようになった。 o matxを終了するとき,MaTXOUT.mm, .matxout が呼ばれるよう にした。いろいろな後始末ができるようになった。 o saveコマンドを関数の中で(変数を指定しないで)使うと, 大域変数に続いて局所変数も保存されるようにした。 (MAT_LAST, POLY_LAST, RAT_LAST, LIST_LAST などは存しない) o A = A; のとき代入を行なわないようにした。 o エラーを検出したとき,定数の整数,実数,文字列が関係 していれば,その値も表示するようにした。 【その他の改良 (matc)】 o mgplot (複数のグラフウィンドウをもつgnuplot)の実現。 o MM-FILEを再帰的にディレクトリを探すようになった。 o [A B](1,:) で行列[A B]の1行が,[A B](1,2)で [A B]の(1,2)成分が取り出せるようになった。 o pauseコマンドで表示するメッセージを指定できるようになった。 o 大域変数を関数main()の中で初期化するために "MaTXGVAL.mm"というMMファイルの中で関数MaTXGVAL() を定義するようにした。ファイルMaTXGVAL.mmは MaTXRC.mmと同様に特別なファイルとして処理される。 o 関数main()の最後に,mgplot_quit()を呼ぶようにした。 o [A], [[A]] のとき,直接 A を出力するようにした。(matc) ----------------------------------------------------------------------------- 【バグ修正 (matx)】 o ユーザ定義関数を初めて呼び出すとき,行番号が増加しないというバグを修正。 o 変数'ans'に関するバグを修正。 o 宣言されていない関数が呼ばれたときの,エラー検出に関するバグを修正。 o 16進数と8進数の入力に関するバグを修正 【バグ修正 (matc)】 o A = A; のときcoreを吐く問題を解決した。 o 要素がゼロ個のリストに関するバグを修正。 o 16進数と8進数の入力に関するバグを修正。 =============================================================================