KETpicは数式処理システム(Computer Algebra System,略してCAS)付属のマクロパッケージであるため,CASの上でKETpicプログラムを書いて実行します.KETpicプログラムを実行すると,CASを援用して図データを作成し,LaTeXのpicture環境に書き出して図用LaTeXファイルを作成できます.作成されたKETpicプログラムには作成者の意図や工夫が込められており,教材に有効な図が入れられるため,他のユーザーも利用できると便利です.そこで,KETpicプログラムを共有するために,統一した構造でプログラムを記す必要があります.以下,Scilab版KETpicを用いたKETpicプログラミング書法について,具体的に,関数y=\sin xのグラフで説明します.
sine-curve0.gif

KETpicプログラムの構造について

 KETpicプログラムの役割は大きく分けると二つあります.一つはCASを援用して図データを作成することであり,もう一つはLaTeXのpicture環境に書き出して図用LaTeXファイルを作成することです.これを踏まえて,KETpicプログラムは大きく以下の3つの部分に分かれます.
以下,これらについて詳しく説明します.

プリンブル部

 ここでの主な作業は以下の4つである.
  • KETpicをCASへ読み込む.
  • KETpicの初期化する.
  • 作業用ディレクトリへ移動する.
  • 図ファイル名を定義する.
これらを具体的に書くと以下のようになります.
Ketlib=lib("c:/SciF/ketpicsciL5");
cd("c:/work");
Ketinit();
Fname="sine-curve.tex";

プロットデータ作成部

 ここでの主な作業は,図に必要なプロットデータを作成することです.y=\sin xのグラフでは,描画範囲を設定し,グラフの実線データと振幅の上限線y=1,下限線y=-1の破線データです.これらを具体的に書くと以下のようになります.
Setwindow([-7,7],[-2,2]);
gr1=Plotdata("sin(x)","x");
sg1=Listplot([Xmin(),1],[Xmax(),1]);
sg2=Listplot([Xmin(),-1],[Xmax(),-1]);
Windisp(gr1,sg1,sg2,"c")
実行すると,以下の画像が表示されます.

KETpicプログラムの構造についてに戻る.

図ファイル書き出し部

 ここでの作業は,作成したプロットデータを線画で書き出し,文字や数式等のアクセサリを入れることです.最初に,書き出しのための設定を定義し,Openfile()から書き出し始めてClosefile()で終了します.これらを具体的に書くと以下のようになります.
Setax(7,"se");
Openfile(Fname,"1cm");
Drwline(gr1);
Dashline(sg1,sg2);
A=%pi/2;
Expr([A,sin(A)],"n2e","y=\sin x");
Htickmark(-2*%pi,"se","-2\pi",-%pi,"sw","-\pi",%pi,"sw","\pi",2*%pi,"se","2\pi");
Vtickmark(-1,"sw","-1",1,"nw","1");
Closefile("1");

KETpicのためのプログラミング書法について

 KETpicプログラムの構造に留意して,他のユーザーが解読しやすいプログラムを作成することが望まれます.そのためには,構造だけでなく,以下の9つの要件にも留意することが大切です.
  • 基本的な5要件
  • 応用的な4要件
6.ローカル変数
7.基準点
8.リスト構造
9.for文
以下で,具体例をあげながら,これらの留意点を説明します.

1.プログラムのブロック化

  • プログラム構造の切れ目に空白行を入れましょう.
 プログラムの構造は,プリアンブル部,プロットデータ作成部,図ファイル書き出し部の3つに大きく分かれています.これらの部の切れ目に空白行を入れるだけでなく,各部のプログラムの切れ目にも空白行を入れてブロック化することで,プログラムが解読しやすくなります.
Ketlib=lib("c:/SciF/ketpicsciL5");
cd("c:/work");
Ketinit();
Fname="sine-curve.tex";

Setwindow([-7,7],[-2,2]);
gr1=Plotdata("sin(x)","x");
sg1=Listplot([Xmin(),1],[Xmax(),1]);
sg2=Listplot([Xmin(),-1],[Xmax(),-1]);
Windisp(gr1,sg1,sg2,"c")
  • 行頭に空白文字を入れて階層構造にしましょう.
 If文やfor文などを何層にも利用する際,どこから始まりどこで終わるのかわかるように,行頭に空白文字を入れて階層構造にします.Scilabでは,自動で空白文字を半角4文字分入れるようになっていますが,横幅をとりたくなければ,半角2文字分で十分です.
function Out=CrossPr(V1,V2)
  if length(V1)==2 then
    Out=V1(1)*V2(2)-V2(1)*V1(2);
  else
    X1=V1(2)*V2(3)-V2(2)*V1(3);
    X2=V1(3)*V2(1)-V2(3)*V1(1);
    X3=V1(1)*V2(2)-V2(1)*V1(2);
    Out=[X1,X2,X3];
  end
endfunction

2.コマンドの配置

  • コマンドの配置は,加筆修正が行いやすいよう,適切な位置に配置しましょう.
 プログラムは書いた順番に実行されます.例えば,Setwindow()は描画範囲を定義するKETpicコマンドだから,本来,プロットデータ作成部の最初に書きます.一方,プロットデータを次々に作成した後,描画範囲を定義してもプログラムは実行できます.しかし,描画範囲を変更する度ごとに,プロットデータの定義域も確認しないといけません.プログラムの加筆修正が大変になるだけでなく,他のユーザーも読みづらいプログラムになってしまいます.このように,コマンドの配置する順番は,解読しやすいプログラムの作成には重要な留意点です.では,主なコマンドの配置について以下に記します.
 *KETpicの初期化コマンドKetinit()はプリアンブル部に配置しましょう.
 *描画範囲を指定するコマンドSetwindow()はプロットデータ作成部の最初に配置しましょう.
 *図ファイルを開くコマンドOpenfile()は図ファイル書き出し部の最初に配置しましょう.
 *座標軸の設定を変更するコマンドSetax()は図ファイル書き出し部でOpenfile()の直前に配置しましょう.
KETpicのためのプログラミング書法についてに戻る.

3.名前の付け方

  • 対象がわかりやすい名前を付けましょう.
 ローカル変数やプロットデータに名前を付けると,プログラムで繰り返し使用することができるため,とても便利です.「名は体を表す」と言いますが,何を表しているのかわかりやすい名前を付けると,プログラムが解読しやすくなります.KETpicプログラムでよく利用する名前を以下に記します.
 *文字定数の名前はA, B, C, ...を利用しましょう.
 *変数の名前はX, Y, Z, S, T, U, V, ...を利用しましょう.
 *点の名前はPa, Pb, Pc, ...を利用しましょう.
 *Plotdata()の名前はgr1, gr2, gr3, ...を利用しましょう.
 *Listplot(A,B,C)の名前は sgABCを利用しましょう.
 *Paramplot()の名前はgp1, gp2, gp3, ...を利用しましょう.
KETpicのためのプログラミング書法についてに戻る.

4.KETpicコマンドの使用

  • KETpicコマンドには,プロットデータ作成部で使用されるものと図ファイル書き出し部で使用されるものがあります.
 *Plotdata,Listplot,Paramplotなどはプロットデータ作成部で使用します.
 *Drwline,Dashline,Dottedline,Drwpt,Letter,Expr,Htickmark,Vtickmarkなどは図ファイル書き出し部で使用します.
 *Arrowlinedataはプロットデータ作成部で使用し,Arrowlineは図ファイル書き出し部で使用します.
KETpicのためのプログラミング書法についてに戻る.

5.CASの計算機能

  • KETpicはCASの付属パッケージであり,CASの機能を用いてプロットデータを作成しています.プロットデータを作成する際に必要な計算はCASで実行しましよう.
 例えば,$x=1$における曲線$y=¥sin x$の接線を引くには,以下のようにします.
G1=Plotdata("sin(x)","x");
X0=1;
Y0=sin(X0);
A=cos(X0);
B=-A*X0+Y0;
Plotdata("A*x+B","x");
米Scilabは行列計算ソフトであるため,関数の微分や不定積分の演算機能がありません.
KETpicのためのプログラミング書法についてに戻る.

6.ローカル変数

  • ローカル変数を使用すると,変数値を変更するだけでプログラムを再度実行できます.図形の的確な配置を見つける際に便利です.例えば,曲線$y=¥sin x$の接線を引くには,上記プログラムのローカル変数X0の値を変更するだけで的確な接線の配置を見つけることができます.

7.基準点

  • KETpicでは文字や数式の配置を微調整できます.そのために,それらを配置する基準点をとらなければなりません.目測で基準点をとることもできますが,アングルマークや曲線の中点のように正確な位置を指定することも可能です.基準点から位置をずらすには,東西南北("e", "w", "s", "n")の4方向に北東"ne",北西"nw",南東"se",南西"sw"の4方向と中心"c"を加えた9方向に配置できるだけでなく,北に3倍西に-1.5倍移動"n3w-1.5"という指定も可能です.ただし,西に-1.5倍とは,東に1.5倍ではなく,北西の位置から東側に1.5倍分ずらすという意味です.

8.リスト構造

  • リスト構造は順序集合を表し,集合の集合(族)としても使用できます.複数のデータを一度で扱うとき,リストを利用します.リストに要素を加えたり,削除したりというリスト処理を行いながら,必要なリストを構成します.KETpicコマンドも引数やオプションをリストで構成しています.出力するデータもリストで構成されているため,取り出すデータが何番目に格納されているか,データを表示して確認する必要があります.

9.for文

  • 繰り返し作業をさせるときに利用します.複数のデータを一度に生成したり,順番にデータを追加したりという場合に役立ちます.上記のリスト構造と組み合わせて使うことがほとんどです.
最終更新:2015年10月25日 11:24