BMatrix 0.4

行ベクトルを2進行列として追加しました。以下の実行結果の中の $\boldsymbol{d}$ が行ベクトルです。BVector を継承してBRVector (bit row vector)オブジェクトを作ろうかとも思いましたが、まずはこの実装で作ってみました。結果を $\TeX$ で整形しました。

実行結果

ソース

"expand source" を押すと展開されます。元に戻すには、このページを再ロードしてください。

bmatrix04.html

今回追加したテストをハイライト表示してあります。
/**
 * 結果表示用の関数です。HTMLとして展開します。
 * @since 0.1
 */
function writeln(str) {
	document.writeln(str + "<br>");
}

/**
 * テストの実行と表示を行う関数です。
 * @since 0.1
 */
function test(caption, exp, tex) {
	writeln("<span style='font-family: monospace'>");
	writeln(caption + " " + exp);
	writeln("</span>");
	var ans = eval(exp);
	if (isNaN(ans)) {
		writeln("$$" + tex + "=" + ans.toTeX() + "$$");
	} else {
		writeln("$$" + tex + "=" + ans + "$$");
	}
}

// テストのメインです。
test("コンストラクタ", "A = new BMatrix(4,4,[1,4],[2,4],[3,4],[4,4])", "A");
test("コンストラクタ", "B = new BMatrix(4,4,[1,4],[2,3],[3,2],[4,1])", "B");
test("要素", "A.getValue(4,3)", "(A)_{4,3}");
test("論理和", "A.or(B)", "A \\vee B");
test("論理積", "A.and(B)", "A \\wedge B");
test("絶対値", "A.abs()", "\\left| A \\right|");
test("反転", "A.inv()", "\\overline{A}");
test("転置", "A.tran()", "^tA");
test("論理差", "A.diff(B)", "A - B");
test("排他的論理和", "A.xor(B)", "A \\oplus B");
test("積", "A.mul(B)", "A B");
test("コンストラクタ", "c = new BVector(0,0,1,1)", "\\boldsymbol{c}");
test("ベクトルとの積", "A.mul(c)", "A \\boldsymbol{c}");
test("コンストラクタ", "d = new BMatrix(1,4,[1,1],[1,4])", "\\boldsymbol{d}");
test("転置", "d.tran()", "^t\\boldsymbol{d}");

bmatrix04.js

2進行列を定義します。
	/**
	 * 2進行列の転置して(transpose)返します。
	 * @return 行列の転置を返します。行ベクトルの場合は列ベクトルを返します。
	 * @since 0.4
	 */
	tran : function() {
		if (this.n == 1) {	// 行ベクトル
			var bv = new BVector(this.m);
			for (var j = 1; j <= this.m; j++)
				bv.setValue(j, this.getValue(1, j));
			return bv;
		} else {	
			var bm = new BMatrix(this.m, this.n);
			for (var i = 1; i <= this.n; i++)
				for (var j = 1; j <= this.m; j++)
					bm.setValue(j, i, this.getValue(i, j));
			return bm;
		}
	},


Powered by
SyntaxHighlighter MathJax W3C HTML5