/* -*- MaTX -*- * * 【名前】 * demo() - デモンストレーション * * 【形式】 * demo() * */ Func void demo() { Integer i; List mm; void demo_datatype(), demo_graph(), demo_command(); void demo_function(), demo_toolbox(); mm = {"<<< デモンストレーション >>>", "データ型について", // 1 "グラフィックス", // 2 "便利なコマンド", // 3 "関数定義", // 4 "ベンチマーク", // 5 "ツールボックス", // 6 "終 了"}; i = 1; for (;;) { i = menu(mm, i); switch (i) { case 1: demo_datatype(); break; case 2: demo_graph(); break; case 3: demo_command(); break; case 4: demo_function(); break; case 5: bench(); break; case 6: demo_toolbox(); break; } if (i == length(mm)-1) { break; } i++; } } Func void demo_datatype() { Integer i; List mm; void demo_datatype_all(), demo_matrix(), demo_symbolic(); mm = {"<<< MaTX のデータ型 >>", "データ型の種類", // 1 "行列について", // 2 "多項式と有理多項式", // 3 "終 了"}; i = 1; for (;;) { i = menu(mm, i); switch (i) { case 1: demo_datatype_all(); break; case 2: demo_matrix(); break; case 3: demo_symbolic(); break; } if (i == length(mm)-1) { break; } i++; } } Func void demo_datatype_all() { Integer a; Real b; Complex i; String str, str2; Polynomial s, p, p2; Rational rr, r2; Matrix A, A2; CoMatrix AC; PoMatrix AP; RaMatrix AR; Array Aa; Index idx; List l; print "\nデータ型\n"; print "\n(a) スカラー\n"; print "\n"; print "整数\n"; print "\n"; print "\ta=1\n"; print "\n"; pause; print a = 1; print "\n"; print "実数\n"; print "\n"; print "\tb=1.4142\n"; print "\n"; pause; print b = 1.41412; print "\n"; print "複素数 (虚数単位)\n"; print "\n"; print "\ti=(0,1)\n"; print "\n"; pause; print i = (0,1); print "\n"; print "文字列\n"; print "\n"; print "\tstr=\"string\"\n"; print "\n"; pause; print str = "string"; print "\n"; print "多項式変数の定義\n"; print "\n"; print "\ts=Polynomial(\"s\")\n"; print "\n"; pause; print s = Polynomial("s"); print "\n"; print "多項式\n"; print "\n"; print "\tp=1+3*s+4.5*s^2\n"; print "\n"; pause; print p = 1 + 3*s + 4.5*s^2; print "\n"; print "有理多項式\n"; print "\n"; print "\trr=s/p\n"; print "\n"; pause; print rr = s/p; print "\n"; print "(b) 行列\n"; print "\n"; pause; print "\n"; print "実行列\n"; print "\n"; print "\tA=[[a+1 2 3 ]\n"; print "\t [ 0 0 atan(1)]\n"; print "\t [ 5 9, -1 ]]\n"; print "\n"; pause; print A = [[a+1 2 3 ] [ 0 0 atan(1)] [ 5 9, -1 ]]; print "\n"; print "複素行列\n"; print "\n"; print "\tAC=[[1+2*i, 3+4*i]\n"; print "\t [(3,4), (1,2)]]\n"; print "\n"; pause; print AC = [[1+2*i, 3+4*i] [(3,4), (1,2)]]; print "\n"; print "多項式行列\n"; print "\n"; print "\tAP=[p, 1-s]\n"; print "\n"; pause; print AP = [p, 1-s]; print "\n"; print "行列多項式\n"; print "\n"; print "\tAP=[[AP][1 1+s*p]]\n"; print "\n"; pause; print AP = [[AP][1 1+s*p]]; print "\n"; print "有理多項式行列\n"; print "\n"; print "\tAR=AP/(s^3-3*s^2+4*s-2)\n"; print "\n"; pause; print AR = AP/(s^3-3*s^2+4*s-2); print "\n"; print "実配列\n"; print "\n"; print "\tAa = [0:0.1:1.0]\n"; print "\n"; pause; print Aa = [0:0.1:1.0]; print "\n"; print "指数\n"; print "\n"; print "\tidx = Index([1 3 5 7])\n"; print "\n"; pause; print idx = Index([1 3 5 7]); print "\n"; print "Aaの1,3,5,7成分\n"; print "\n"; print "\tAa(idx)\n"; print "\n"; pause; print Aa(idx); print "\n"; print "(c) リスト\n"; print "\n"; pause; print "\n"; print "リスト\n"; print "\n"; print "\tl={A, p, rr, \"this is a list\"}\n"; print "\n"; pause; print l = {A, p, rr, "this is a list"}; print "\n"; print "リストの分解\n"; print "\n"; print "\t{A2, p2, r2, str2} = l;\n"; print "\tprint A2, p2, r2, str2;\n"; print "\n"; pause; {A2, p2, r2, str2} = l; print A2, "\n", p2, r2, "\n", str2; print "\n"; print "リストの第 1 成分\n"; print "\n"; print "\tl(1,Matrix)\n"; print "\n"; pause; print l(1,Matrix); print "\n"; print "リストの第 2 成分\n"; print "\n"; print "\tl(2,Polynomial)\n"; print "\n"; pause; print l(2,Polynomial); print "\n"; pause; } Func void demo_matrix() { Integer i; List mm; void demo_matrix_misc(), demo_matrix_op(); void demo_matrix_element(), demo_matrix_function(); mm = {"<<< 行列について >>", "行列の書き方", // 1 "行列成分の操作", // 2 "行列の演算", // 3 "行列の関数", // 4 "終 了"}; i = 1; for (;;) { i = menu(mm, i); switch (i) { case 1: demo_matrix_misc(); break; case 2: demo_matrix_element(); break; case 3: demo_matrix_op(); break; case 4: demo_matrix_function(); break; } if (i == length(mm)-1) { break; } i++; } } Func void demo_matrix_misc() { Matrix A, B, C, D, E; CoMatrix F; Complex i; print "\n行列入力方法\n\n"; print "行ベクトルを入力するには,成分の間にスペースあるいは\n"; print "コンマ','を挟んで並べ,ブラケットで囲む。例えば,1 x 3\n"; print "の行ベクトルと入力するには次のようにタイプする。\n"; print "\n"; print "\tA = [1 2 3]\n"; print "\n"; A = [1 2 3]; print A, "\n"; pause; print "\n"; print "行列を入力するには数個の行ベクトル並べ,ブラケットで囲む。\n"; print "例えば,3 x 3の行列を入力するには次のようにタイプする。\n"; print "\nケース 1 (1 行で記述)\n"; print "\n"; print "\tA=[[1 2 3][4 5 6][7 8 0]]\n"; print "\n"; pause; print A = [[1 2 3][4 5 6][7 8 0]]; print "\nケース 2 (行毎に記述)\n"; print "\n"; print "\tA=[[1 2 3]\n"; print "\t [4 5 6]\n"; print "\t [7 8 0]]\n"; print "\n"; pause; print A = [[1 2 3] [4 5 6] [7 8 0]]; print "\nケース 3 (任意フォーマット)\n"; print "\n"; print "\tA=[[1 2 3]\n"; print "\t [4 5\n"; print "\t6][7 8 0]]\n"; print "\n"; pause; print A = [[1 2 3] [4 5 6][7 8 0]]; print "\nステートメントの最後にセミコロンを付けると,\n"; print "結果はスクリーンに表示されない。\n"; print "\n"; print "\tA = [[1 2 3][4 5 6][7 8 0]];\n"; print "\n"; pause; print "\n複素行列を入力するため虚数単位'i'を定義する。\n"; print "\n"; print "\ti = (0,1) \n"; print "\n"; pause; print i = (0,1); print "\n"; print "\tF = [[1+i 2+3*i][3+2*i 4+4*i]]\n"; print "\n"; pause; print F = [[1+i 2+3*i][3+2*i 4+4*i]]; print "\n2 行 3 列の零行列を作成する。\n"; print "\n"; print "\tZ(2,3)\n"; print "\n"; pause; print Z(2,3); print "\n3 行 3 列の単位行列を作成する。\n"; print "\n"; print "\tI(3)\n"; print "\n"; pause; print I(3); print "\n3 行 3 列の全てが 1 の行列を作成する。\n"; print "\n"; print "\tONE(3)\n"; print "\n"; pause; print ONE(3); print "\n対角行列を作成します。\n"; print "\n"; print "\tdiag(3.0, 7.0, 2.0)\n"; print "\n"; pause; print diag(3.0, 7.0, 2.0); print "\n1 から 3 まで 1 間隔のベクトルを作成する。\n"; print "\n"; print "\t[1:3]\n"; print "\n"; pause; print [1:3]; print "\n1 から 3 まで 0.5 間隔のベクトルを作成する。\n"; print "\n"; print "\t[1:0.5:3]\n"; print "\n"; pause; print [1:0.5:3]; print "\n3 から 1 まで 1 間隔のベクトルを作成する。\n"; print "\n"; print "\t[3:-1:1]\n"; print "\n"; pause; print [3:-1:1]; print "\n小行列 A, B, C, D を結合して,"; print "大きな行列を作ることができる。\n"; print "\n"; print "\tA = [[1 2 1][3 4 0][0 0 1]];\n"; print "\tB = Z(3,2);\n"; print "\tC = ONE(2,3);\n"; print "\tD = diag(2.0, 3.0);\n"; print "\tE = [[A B]\n"; print "\t [C D]]\n"; print "\n"; pause; A = [[1 2 1][3 4 0][0 0 1]]; B = Z(3,2); C = ONE(2,3); D = diag(2.0, 3.0); print E = [[A B][C D]]; print "\n"; pause; } Func void demo_matrix_element() { Matrix A, AA; print "\n\n行列成分の操作\n"; print "\n"; print "\t A = [[1 2 1][3 4 0][0 0 1]];\n"; print "\n"; pause; print A = [[1 2 1][3 4 0][0 0 1]]; print "\n"; print "(1,1) 成分\n"; print "\n"; print "\tA(1,1)\n"; print "\n"; pause; print A(1,1); print "\n"; print "第 1 列\n"; print "\n"; print "\tA(:,1)\n"; print "\n"; pause; print A(:,1); print "\n"; print "第 3 行\n"; print "\n"; print "\tA(3,:)\n"; print "\n"; pause; print A(3,:); print "\n"; print "1-2行,2-3列からなる部分行列\n"; print "\n"; print "\tA(1:2,2:3)\n"; print "\n"; pause; print A(1:2,2:3); print "\n"; print "1 行と 3 行\n"; print "\n"; print "\tA(Index([1 3]), :)\n"; print "\n"; pause; print A(Index([1 3]), :); print "\n"; print "1 行と 3 行で 2 〜 3 列\n"; print "\n"; print "\tA(Index([1 3]), 2:3)\n"; print "\n"; pause; print A(Index([1 3]), 2:3); print "\n"; print "3×4の零行列\n"; print "\n"; print "\tAA = Z(3,4)\n"; print "\n"; pause; AA = Z(3,4); print AA; print "\n"; print "(1,1)成分に1.0を代入\n"; print "\n"; print "\tAA(1,1) = 1.0;\n"; print "\tprint AA;\n"; print "\n"; pause; AA(1,1) = 1.0; print AA; print "\n"; print "1行目の3-4列に[2 3]を代入\n"; print "\n"; print "\tAA(1,3:4) = [2 3];\n"; print "\tprint AA;\n"; print "\n"; pause; AA(1,3:4) = [2 3]; print AA; print "\n"; print "2列に[4 5 6]'を代入\n"; print "\n"; print "\tAA(:,2) = [4 5 6]';\n"; print "\tprint AA;\n"; print "\n"; pause; AA(:,2) = [4 5 6]'; print AA; print "\n"; print "2-3行,3-4列に[[7 8][9 10]]を代入\n"; print "\n"; print "\tAA(2:3,3:4) = [[7 8][9 10]];\n"; print "\tprint AA;\n"; print "\n"; pause; AA(2:3,3:4) = [[7 8][9 10]]; print AA; print "\n"; pause; } Func void demo_matrix_op() { Matrix A, B, C, D, Ai, At, AB, CD; CoMatrix Cc; print "\n行列基本演算\n"; print "\n"; print "基本的な行列計算を紙に書くように記述できる。\n"; print "\n"; pause; print "\n加算,減算\n"; print "\n"; print "\tA = [[1 2 3][4 5 6][7 8 0]];\n"; print "\tB = [[8 1 6][3 5 7][4 9 2]];\n"; print "\tA + B\n"; print "\n"; pause; A = [[1 2 3][4 5 6][7 8 0]]; B = [[8 1 6][3 5 7][4 9 2]]; print A + B; print "\n"; print "\tA - B\n"; print "\n"; pause; print A - B; print "\n乗算(行列積)\n"; print "\n"; print "\tAB = A * B\n"; print "\n"; pause; print AB = A * B; print "\n"; print "\tC = [[1 2 3][3 2 5]\n"; print "\tD = [[3 1 6][3 5 7][4 9 1]]\n"; print "\tCD = C * D\n"; print "\n"; pause; C = [[1 2 3][3 2 5]]; D = [[3 1 6][3 5 7][4 9 1]]; print CD = C * D; print "\n"; print "逆行列\n"; print "\n"; print "\tAi = A~\n"; print "\n"; pause; print Ai = A~; print "\n"; print "\tA * Ai\n"; print "\n"; pause; print A * Ai; print "\n右割り(右から逆行列を掛ける)\n"; print "\n"; print "\tA / B\n"; print "\n"; pause; print A / B; print "\n左割り(左から逆行列を掛ける)\n"; print "\n"; print "\tB \ A\n"; print "\n"; pause; print B \ A; print "\n"; print "転置行列\n"; print "\n"; print "\tAt = A'\n"; print "\n"; pause; print At = A'; print "\n複素行列(C = A + B*i)\n"; print "\n"; print "\tC = (A,B)\n"; print "\n"; pause; C = (A,B); print C; print "\n複素共役転置行列\n"; print "\n"; print "\tCc = C#\n"; print "\n"; pause; print Cc = C#; print "\n配列演算(成分毎の演算)\n"; print "\n"; print "成分毎の乗算\n"; print "\n"; print "\tAB = A .* B\n"; print "\n"; pause; print AB = A .* B; print "\n成分毎の除算\n"; print "\n"; print "\tA ./ B\n"; print "\n"; pause; print A ./ B; print "\n成分毎のべき乗\n"; print "\n"; print "\tA .^ 0.3\n"; print "\n"; pause; print A .^ 0.3; } Func void demo_matrix_function() { Matrix A, B, d, D, V, U; Polynomial s, phi; print "\n行列関数\n"; print "\n"; pause; print "\n"; print "行列式を計算する。\n"; print "\n"; print "\tA = [[1 2 3][4 5 6][7 8 0]];\n"; print "\tdet(A)\n"; print "\n"; pause; A = [[1 2 3][4 5 6][7 8 0]]; print det(A); print "\n"; print "トレースを計算する。\n"; print "\n"; print "\ttrace(A)\n"; print "\n"; pause; print trace(A); print "\n"; print "ランクを計算する。\n"; print "\n"; print "\trank(A)\n"; print "\n"; pause; print rank(A); print "\n"; print "条件数(最大特異値/最小特異値)を計算する。\n"; print "\n"; print "\tcond(A)\n"; print "\n"; pause; print cond(A); print "\n"; print "行列の指数関数を計算する。\n"; print "\n"; print "\texp(A)\n"; print "\n"; pause; print exp(A); print "\n"; print "各要素の正弦(sine)を計算する。\n"; print "\n"; print "\tsin(Array(A))\n"; print "\n"; pause; print sin(Array(A)); print "\n"; print "各要素の指数乗(exponential)を計算する。\n"; print "\n"; print "\texp(Array(A))\n"; print "\n"; pause; print exp(Array(A)); print "\n"; print "固有値を計算する。\n"; print "\n"; print "\tA = [[1 2 3][4 5 6][7 8 0]];\n"; print "\td = eigval(A)\n"; print "\n"; pause; A = [[1 2 3][4 5 6][7 8 0]]; print d = eigval(A); print "\n"; print "標準固有値問題を Ax = a x を解く。\n"; print "\n"; print "\tA = [[1 2 3][4 5 6][7 8 0]];\n"; print "\t{D, V} = eig(A); V = Re(V); D = Re(D)\n"; print "\tprint V, D;\n"; print "\n"; pause; A = [[1 2 3][4 5 6][7 8 0]]; {D, V} = eig(A); D = Re(D); V = Re(V); print V, D; print "\n"; print "一般固有値問題 Ax = aBx を解く。\n"; print "\n"; print "\tA = [[1 2 3][4 5 6][7 8 0]];\n"; print "\tB = [[8 1 6][3 5 7][4 9 2]];\n"; print "\t{D, V} = eig(A, B);\n"; print "\tprint V, D;\n"; print "\n"; pause; A = [[1 2 3][4 5 6][7 8 0]]; B = [[8 1 6][3 5 7][4 9 2]]; {D, V} = eig(A, B); print V, D; print "\n"; print "特異値分解\n"; print "\n"; print "\t{U,D,V} = svd(A);\n"; print "\tprint U,D,V;\n"; print "\n"; pause; {U,D,V} = svd(A); print U,D,V; print "\n"; print "特性多項式\n"; print "\n"; print "\ts = Polynomial(\"s\");\n"; print "\tphi = det(s*I(A) - A)\n"; print "\n"; pause; s = Polynomial("s"); print phi = det(s*I(A) - A); print "\n"; print "この多項式の根は行列 A の固有値と一致する。\n"; print "\n"; print "\troots(phi)\n"; print "\teigval(A)\n"; print "\n"; pause; print roots(phi), "\n", eigval(A); print "\n"; pause; } Func void demo_symbolic() { Polynomial s, p, q, r; Rational rr; CoMatrix ro1, ro2; print "\n"; print "多項式関数\n"; print "\n"; print "多項式p(s)とq(s)を入力する。"; print "まず,変数's'の定義をする。\n"; print "\n"; print "\ts = Polynomial(\"s\");\n"; print "\tp = s^2 + 2*s + 3\n"; print "\tq = 4*s + 5\n"; print "\n"; pause; s = Polynomial("s"); print p = s^2 + 2*s + 3; print q = 4*s + 5; print "\n"; print "多項式の乗算\n"; print "\n"; print "\tr = p * q\n"; print "\n"; pause; print r = p * q; print "\n"; print "多項式の除算\n"; print "\n"; print "\trr = p / q\n"; print "\n"; pause; print rr = p / q; print "\n"; print "多項式の根を計算する。\n"; print "\n"; print "\tro1 = roots(p)\n"; print "\n"; pause; print ro1 = roots(p); print "\n"; print "\tro2 = roots(q)\n"; print "\n"; pause; print ro2 = roots(q); print "\n"; pause; } Func void demo_command() { print "\n"; print "その他の便利なコマンド\n"; print "\n"; print "変数の管理\n"; print "\n"; print "登録されている変数を表示する。\n"; print "\n"; print "\twho\n"; print "\n"; pause; who; print "\n"; print "登録されている変数とその内容を表示する。\n"; print "(最後に小文字 q を入力すると実行が継続される)\n"; print "\n"; print "\twhos\n"; print "\n"; pause; whos; print "\n"; print "変数の保存と呼出し\n"; print "\n"; print "saveコマンドで変数を保存できる。\n"; print "loadコマンドで変数を呼び出せる。\n"; print "\n"; print "オンラインヘルプ機能\n"; print "\n"; print "関数一覧を表示する。\n"; print "(最後に小文字 q を入力すると実行が継続される)\n"; print "\n"; print "\thelp\n"; print "\n"; pause; help; print "\n"; print "ボード線図を計算する関数'bode'の使用法を表示する。\n"; print "(最後に小文字 q を入力すると実行が継続される)\n"; print "\n"; print "\thelp bode\n"; print "\n"; pause; help bode; print "\n"; pause; } Func void demo_graph() { Integer i; List mm; void demo_element_graph(), demo_simple_graph(), demo_interest_graph(); mm = {"<<< グラフィック機能 >>", "基本的な機能 ", // 1 "自動グラフィックデモ", // 2 "楽しいプロット", // 3 "終 了"}; i = 1; for (;;) { i = menu(mm, i); switch (i) { case 1: demo_element_graph(); break; case 2: demo_simple_graph(); break; case 3: demo_interest_graph(); break; } if (i == length(mm)-1) { break; } i++; } } Func void demo_element_graph() { Integer win1, win2; Array x, y, x2, y2; win1 = mgplot_cur_win(); clear; print "\n"; print "プロットの方法\n"; print "\n"; print "サイン波形をプロットすることを考える。"; print "データを作成する。\n"; print "\n"; print "\tx = [0:PI/10:20*PI];\n"; print "\ty = sin(x);\n"; print "\n"; pause; x = [0:PI/10:20*PI]; y = sin(x); print "\n"; print "コマンドmgplotを使ってプロットする。\n"; print "\n"; print "\tmgplot(win1,x,y,{\"sin(x)\"})\n"; print "\n"; pause; mgplot_reset(win1); mgplot(win1,x,y,{"sin(x)"}); print "\n"; print "表示する範囲を変更する。\n"; print "\n"; print "\tmgplot_cmd(win1,\"set xrange [0:20*pi]\")\n"; print "\tmgplot_cmd(win1,\"set yrange [-1:1]\")\n"; print "\tmgreplot(win1);\n"; print "\n"; pause; mgplot_cmd(win1, "set xrange [0:20*pi]"); mgplot_cmd(win1, "set yrange [-1:1]"); mgreplot(win1); print "\nグリッドラインを描く。\n"; print "\n"; print "\tmgplot_grid(win1,1);\n"; print "\n"; pause; mgplot_grid(win1,1); mgreplot(win1); print "\n"; print "2 種類のデータをプロットする。\n"; print "\n"; print "\tx = [0:PI/10:20*PI];\n"; print "\ty = sin(x);\n"; print "\ty2 = 0.5*sin(2*x);\n"; print "\tmgplot_cmd(win1,\"set xrange [0:20*pi]\");\n"; print "\tmgplot_cmd(win1,\"set yrange [-1:1]\")\n"; print "\tmgplot_grid(win1,1);\n"; print "\tmgplot(win1, x, [[y][y2]], {\"sin(x)\", \"0.5*sin(2*x)\"});\n"; print "\n"; pause; x = [0:PI/10:20*PI]; y = sin(x); y2 = 0.5*sin(2*x); mgplot_reset(win1); mgplot_cmd(win1, "set xrange [0:20*pi]"); mgplot_cmd(win1, "set yrange [-1:1]"); mgplot_grid(win1, 1); mgplot(win1, x, [[y][y2]], {"sin(x)", "0.5*sin(2*x)"}); print "\n"; print "グラフにタイトルと x 軸ラベル,および y 軸ラベルを付ける。\n"; print "\n"; print "\tmgplot_title(win1,\"Sine Plot\");\n"; print "\tmgplot_xlabel(win1,\"x value\");\n"; print "\tmgplot_ylabel(win1,\"y & y2 value\");\n"; print "\n"; pause; mgplot_title(win1,"Sine Plot"); mgplot_xlabel(win1,"x value"); mgplot_ylabel(win1,"y & y2 value"); mgplot_replot(win1); print "\n"; print "x 軸の片対数プロットをする。\n"; print "\n"; print "\tx2 = [PI/100:PI/10:20*PI];\n"; print "\ty2 = sin(x2);\n"; print "\tmgplot_cmd(win1,\"set xrange [pi/100:20*pi]\");\n"; print "\tmgplot_cmd(win1,\"set yrange [-1:1]\");\n"; print "\tmgplot_grid(win1,1);\n"; print "\tmgplot_semilogx(win1, x2, y2, {\"sin(x)\"});\n"; print "\n"; pause; x2 = [PI/100:PI/10:20*PI]; y2 = sin(x2); mgplot_reset(win1); mgplot_cmd(win1,"set xrange [pi/100:20*pi]"); mgplot_cmd(win1,"set yrange [-1:1]"); mgplot_grid(win1,1); mgplot_semilogx(win1,x2,y2,{"sin(x)"}); #ifndef VC40 print "\n"; print "複数のウィンドウにプロットする。\n"; print "\n"; print "\tmgplot_cmd(win1,\"set xrange [pi/100:20*pi]\");\n"; print "\tmgplot_cmd(win1,\"set yrange [-1:1]\");\n"; print "\tmgplot_grid(win1,1);\n"; print "\tmgplot(win1,x,y,{\"sin(x)\"});\n"; print "\tmgplot_cmd(win2,\"set xrange [pi/100:20*pi]\");\n"; print "\tmgplot_cmd(win2,\"set yrange [-1:1]\");\n"; print "\tmgplot_grid(win2,1);\n"; print "\tmgplot_semilogx(win2,x2,y2,{\"sin(x)\"});\n"; print "\n"; pause; mgplot_reset(win1); mgplot_cmd(win1,"set xrange [pi/100:20*pi]"); mgplot_cmd(win1,"set yrange [-1:1]"); mgplot_grid(win1,1); mgplot(win1,x,y,{"sin(x)"}); #ifdef DJGPP pause; #endif win2 = mgplot_newwindow(); mgplot_reset(win2); mgplot_cmd(win2,"set xrange [pi/100:20*pi]"); mgplot_cmd(win2,"set yrange [-1:1]"); mgplot_grid(win2,1); mgplot_semilogx(win2,x2,y2,{"sin(x)"}); #endif clear; pause; mgplot_quit(win1); #ifndef VC40 mgplot_quit(win2); #endif } Func void demo_simple_graph() { Integer win; Array t,y,x,z; Real tt; List lines, names; List meshdom(); win = mgplot_cur_win(); clear; print "\n"; print "このデモは MaTX のいくつかのグラフィック機能を紹介する。\n"; print "デモのあいだ,キーを入力する必要はない。自動的に進む。\n\n"; t = [0:0.3:10]; y = sin(t); mgplot_reset(win); mgplot_grid(win,0); mgplot_title(win,"A simple X-Y plot"); mgplot(win,t,y,{""}); pause(1.0); mgplot_title(win,"Now with a dot, and with grid lines"); mgplot_grid(win,1); mgplot_xlabel(win,"I do labels too."); mgplot_ylabel(win,"Hello, World."); mgreplot(win,t,y,{""},{"w dots"}); pause(1.0); mgplot_reset(win); mgplot_title(win,"Four different line-types"); mgplot(win,t,[[y][2*y][3*y][4*y]],{"","","",""}); pause(1.0); t = [0.0:0.5:10]; lines = {"w boxes", "w points", "w lines", "w dots", "w linespoints"}; names = {"", "", "" , "", ""}; mgplot_reset(win); mgplot_title(win, "Five different marker-types"); mgplot(win,t,[[t][2*t .+ 3][3*t .+ 6][4*t .+ 9][5*t .+ 12]], names, lines); pause(1.0); t = [0.1:0.1:3]; mgplot_reset(win); mgplot_title(win,"i do loglog and semilog plots"); mgplot_loglog(win, exp(t), exp(t*t), {""}); pause(1.0); t = [0:0.3:30]; mgplot_reset(win); mgplot_hold(win, 1); mgplot_subplot(win, 2, 2, 1); mgplot(win, t, sin(t), {"sin(t)"}); mgplot_subplot(win, 2, 2, 2); mgplot(win, t, t*sin(t), {"t*sin(t)"}); mgplot_subplot(win, 2, 2, 3); mgplot(win, t, t*sin(t)^2, {"t*sin(t)^2"}); mgplot_subplot(win,2,2,4); mgplot(win, t, t^2 * sin(t)^2, {"t^2*sin(t)^2"}); mgplot_hold(win,0); pause(1.0); pause; mgplot_quit(win); } Func void demo_interest_graph() { Integer win; Array t,x,y; Matrix dzx,dzy,z,pzx,pzy; win = mgplot_cur_win(); clear; print "\n"; print "独特なベクトルを定義し,増大する余弦波をプロットする。\n"; print "まず,点でプロットする。\n"; print "\n"; print "\tt = [0:0.99*PI/2:500];\n"; print "\tx = t * cos(t);\n"; print "\tmgplot(win,x,t,{\"t * cos(t)\"},{\"w points\"});\n"; print "\n"; pause "何かキーを押すとプロットする。"; t = [0:0.99*PI/2:500]; x = t * cos(t); mgplot_reset(win); mgplot(win,x,t,{"t * cos(t)"},{"w points"}); print "次に,線でプロットする。\n"; print "\n"; print "\tmgplot(win,x,t,{\"t * cos(t)\"});\n"; print "\n"; pause "何かキーを押すとプロットする。"; mgplot_reset(win); mgplot(win,x,t,{"t * cos(t)"}); clear; print "\n"; print "増大する余弦波を x 座標,増大する正弦波を y 座標とするプロット\n"; print "\n"; print "\ty = t * sin(t);\n"; print "\tmgplot(win,x,y,{\"t * sin(t)\"});\n"; print "\n"; pause "何かキーを押すとプロットする。"; y = t * sin(t); mgplot_reset(win); mgplot(win,x,y,{"t * sin(t)"}); pause; mgplot_quit(win); } Func void demo_function() { Matrix demo_mat_add(); Integer demo_facto(); print "\n"; print "関数定義\n"; print "\n"; pause; print "\n"; print "2 個の行列の和を計算する関数 mat_add() を定義する。\n"; print "\n"; print "\tFunc Matrix mat_add(a, b)\n"; print "\t Matrix a, b;\n"; print "\t{\n"; print "\t Matrix c;\n"; print "\n"; print "\t c = a + b;\n"; print "\t return c;\n"; print "\t}\n"; print "\n"; pause; print "\n[[1 2][3 4]] と [[5 6][7 8]] の和を計算する。\n"; print "\n"; print "\tmat_add([[1 2][3 4]], [[5 6][7 8]])\n"; print "\n"; pause; print "\n", demo_mat_add([[1 2][3 4]], [[5 6][7 8]]); print "\n整数の階乗を計算する再帰関数 facto() を定義する。\n"; print "\n"; print "\tFunc Integer facto(n)\n"; print "\t Integer n;\n"; print "\t{\n"; print "\t if (n == 0) {\n"; print "\t return 1;\n"; print "\t } else {\n"; print "\t return n*facto(n-1);\n"; print "\t }\n"; print "\t}\n"; print "\n"; pause; print "5 の階乗を計算する。\n"; print "\n"; print "\tfacto(5)\n"; print "\n"; pause; print demo_facto(5); print "\n"; pause; } Func void demo_toolbox() { Integer i; List mm; void sig_demo(), ctr_demo(); mm = {"<<< ツールボックス >>>", "制御系設計ツールボックス", "信号処理ツールボックス", "終 了"}; i = 1; for (;;) { i = menu(mm, i); switch (i) { case 1: ctr_demo(); break; case 2: sig_demo(); break; } if (i == length(mm)-1) { break; } i++; } } Func Integer demo_facto(n) Integer n; { if (n == 0) { return 1; } else { return n*demo_facto(n-1); } } Func Matrix demo_mat_add(a, b) Matrix a, b; { Matrix c; c = a + b; return c; }