\documentstyle[epsf]{jarticle}
\topmargin -60pt
\oddsidemargin -40pt
\textwidth 500pt
\textheight 750pt

\title{グラフ}
\author{天野研 修士2年 松本秀夫}
\date{5月11日金曜日}

\begin{document}
\maketitle
\section{gnuplot}
gnuplotとは、コマンド入力型の対話式グラフ描画プログラムです。割と簡単な
コマンドで多様なグラフを書くことができるほか、いろいろな形式のファイルと
してグラフを出力することもできるので、\TeX を用いた論文にグラフを張り付け
る際などに非常に役に立ちます。

\subsection{起動と終了}
gnuplotの起動は、kterm等の端末上で
\begin{verbatim}
% gnuplot
\end{verbatim}
と入力すればOKです。以下のような画面が出るはずです。
\begin{verbatim}
        G N U P L O T
        Unix version 3.7
        patchlevel 1
        lastmodified Fri Oct 22 18:00:00 BST 1999

        Copyright(C) 1986 - 1993, 1998, 1999
        Thomas Williams, Colin Kelley and many others

        Type `help` to access the on-line reference manual
        The gnuplot FAQ is available from <http://www.ucc.ie/gnuplot/gnuplot-faq.html>

        Send comments and requests for help to <info-gnuplot@dartmouth.edu>
        Send bugs, suggestions and mods to <bug-gnuplot@dartmouth.edu>

Terminal type set to 'x11'
gnuplot>
\end{verbatim}
この最後の{\tt gnuplot>}がプロンプトになり、ここにいろいろなコマンドを入
力していくことになります。また、{\tt Terminal type set to 'x11'}とあるよ
うに、デフォルトではグラフは全てXを用いて別ウィンドウで表示されます。

終了時には
\begin{verbatim}
gnuplot> quit
もしくは
gnuplot> exit
\end{verbatim}
と入力します。

\subsection{グラフを描く(plot,replot)}
グラフを描くコマンドは'{\tt plot}'です。試しに$y=\sin x$を描いてみましょ
う。
\begin{verbatim}
gnuplot> plot sin(x)
\end{verbatim}
山３つほどの$\sin x$グラフが得られると思います。x軸やy軸は勝手に設定さ
れます。x軸やy軸の範囲を指定してグラフを描きたいときには
\begin{verbatim}
gnuplot> plot [-3:3][-1:1] sin(x)
\end{verbatim}
と入力します。前の括弧内がx軸、後ろの括弧内がy軸に対応しています。x軸の
みを指定するときには後ろの括弧ごと省略することができますが、y軸のみを指定
するときには前の括弧内だけを省略して入力します。
\begin{verbatim}
gnuplot> plot [-pi:pi] sin(x)
gnuplot> plot [][-2:2] tan(x)
\end{verbatim}

複数のグラフを重ねて表示したいときは
\begin{verbatim}
gnuplot> plot sin(x)
gnuplot> replot cos(x)
もしくは
gnuplot> plot sin(x),cos(x)
\end{verbatim}
と入力します。'{\tt replot}'は、文字通り「再描画」するコマンドで、直前に
表示したグラフをもう一度表示します。先程のように別のグラフを重ねたいとき
や、設定を変更した上でもう一度同じグラフを表示したい場合などに用います。

gnuplotでは、関数を指定してグラフを描くだけでなく、データファイルを読み
込んでそのデータをグラフにすることも当然可能です。例えば以下のようなデー
タファイルがあるとします。
\begin{verbatim}
%cat data
# x        y1       y2
-10.00000 -5.44021  8.39072
-9.50000  -0.71394  9.47314
    :         :        :
9.50000	  -0.71394 -9.47314
10.00000  -5.44021 -8.39072
\end{verbatim}
このファイルを読み込んでグラフを描く場合、
\begin{verbatim}
gnuplot> plot "data"
\end{verbatim}
と入力すると、ファイル"data"の1列目をx軸、2列目をy軸としたグラフがドット
で描かれます。3列目をy軸として表示したい場合は
\begin{verbatim}
gnuplot> plot "data" using 1:3
\end{verbatim}
と入力します。さらに、ドットではなく線グラフにしたい場合は
\begin{verbatim}
gnuplot> plot "data" with lines
\end{verbatim}
という風にします。逆にドットで描きたいときには'{\tt lines}'を'{\tt
points}'に、どちらも合わせて描きたいときには'{\tt linespoints}'にすれば
OKです。

\subsection{グラフ環境の設定・確認(set,show)}
{\tt set}コマンドは、グラフにタイトルやラベルを付けたりグラフの表示範囲
や表示方法をあらかじめ変えたりすることができます。以下、主なオプションを
紹介します。
\begin{itemize}
 \item {\tt set title {\it 'title'}}\\
       グラフにタイトルを付けます。%
 \item {\tt set xlabel|ylabel {\it 'label'}}\\
       グラフのx軸またはy軸にラベルを付けます。
 \item {\tt set xrange|yrange {\it [from:to]}}\\
       グラフのx軸またはy軸の表示範囲を設定します。
 \item {\tt set data|function style {\it style}}\\
       グラフの表示方法を設定します。dataは読み込んだデータ、function
       は関数の場合のグラフ表示をそれぞれ{\it style}(linesやpointsなど)%
       にします。%
 \item {\tt set grid|nogrid}\\
       グリッド(目盛線)の表示/非表示を設定します。
\end{itemize}
設定した内容は、'{\tt show}'コマンドで確認することができます。例えば
\begin{verbatim}
gnuplot> show xrange
gnuplot> show grid
\end{verbatim}
等とすると、それぞれx軸の表示範囲やグリッドのON/OFFが表示されます。また、
\begin{verbatim}
gnuplot> show all
\end{verbatim}
で、現在の設定状況を全て見ることができます。

\subsection{ファイルへの出力}
gnuplotでは、Xによる画面へのグラフ表示のほかにグラフをファイルとして出力
することもできます。この場合は、出力端末を変更する'{\tt set terminal}'コ
マンドを用います。画面に表示されているグラフをpostscript形式でファイル'
graph.ps'に出力させる場合は以下のようにします。
\begin{verbatim}
gnuplot> set terminal postscript
Terminal type set to 'postscript'
Options are 'landscape noenhanced monochrome dashed defaultplex "Helvetica" 14'
gnuplot> set output 'graph.ps'
gnuplot> replot
\end{verbatim}
こうすることで、カレントディレクトリに'graph.ps'が作成されます。出力をX
に戻すときは
\begin{verbatim}
gnuplot> set output
gnuplot> set terminal x11
\end{verbatim}
と入力します。その他の出力端末としては以下のようなものがあります。
\begin{itemize}
 \item {\tt set terminal postscript eps}:epsファイル形式で出力します。%
 \item {\tt set terminal tgif}:tgifで読み込める形式で出力します。%
 \item {\tt set terminal png}:pngファイル形式で出力します。%
 \item {\tt set terminal}:使用できる出力端末の一覧が表示されます。
\end{itemize}

\subsection{3次元のグラフを描く(splot)}
3次元のグラフを描くには'{\tt splot}'コマンドを用います。オプションは基本
的に'{\tt plot}'コマンドと同じです。また、'{\tt zrange}'や'{\tt zlabel}'
等でx軸y軸と同様な設定も行えます。

3次元グラフの場合、視点を変えてグラフを表示させることができます。視点を
変えるのは'{\tt set view}'コマンドです。
\begin{verbatim}
gnuplot> set view 60,30
\end{verbatim}
とした場合、xy2次元のグラフからx軸を60度、z軸を30度回転させたアングルで
の表示になります。詳しくは、実際に自分で値を変更させてから確認してみてく
ださい。

\subsection{ヘルプを見る(help,?)}
gnuplotでは、'{\tt help}'コマンドでいろいろなコマンドの詳しい説明を見る
ことができます('{\tt ?}'で代用可)。例えば
\begin{verbatim}
gnuplot> help plot
もしくは
gnuplot> ? plot
\end{verbatim}
とすると、'{\tt plot}'コマンドの使用法について詳しい説明が出てきます。参
照したコマンドにサブトピックがある場合は、ヘルプの最後にその一覧が出てき
ます。'{\tt plot}'の場合、
\begin{verbatim}
Subtopics available for plot:
      acsplines       bezier          csplines         datafile
          :             :                :                :
      unique          using           with
(END)
\end{verbatim}
となります。ここで'q'を押すと最後の行に
\begin{verbatim}
Subtopic of plot:
\end{verbatim}
と表示されるので、上の選択肢から選んで入力すればさらにそのヘルプが参照で
きます。ここで'?'を入力するともう一度サブトピックの一覧が参照でき、何も
入力せずにリターンを押せばその段のヘルプを終了します。何か判らないことが
あったらガシガシ利用しましょう。

\subsection{おまけ}
gnuplotのコマンドは、区別がつく限り後ろの文字を省略してもちゃんと認識し
てくれるようになっています。例えば
\begin{verbatim}
gnuplot> plot "data" with lines, "data" using 1:3 with points
gnuplot> p "data" w l, "data" u 1:3 w p
\end{verbatim}
の2つはどちらも同じ結果がちゃんと得られます。'{\tt linespoints}'なんかは、'
{\tt linesp}'という風に省略が可能です。

\subsection{実習}
今回紹介した関数のグラフを範囲を変えながら実際に表示させてみましょう。指
数関数(exp)や対数関数(log)を使ったものや、半径1の円(または球)のグラフな
ども描いてみてください。
また、松本のホーム(/u/hideo)に'data'というファイルがあるので、そ
れを持ってきて一つはドットによるグラフ、もう一つはドット付き線グラフの形
で重ねて表示させてみてください。さらにこのファイルから3次元グラフを描い
てみましょう。

作ったグラフを\TeX で読み込める形にして\TeX に張り付けてみましょう。

\section{計算ツール}
計算ツール(いわゆる計算機)にはxcalcのような実際の電卓を模したグラフィカ
ルなものと、bc,dcのようなコマンドラインで計算を行うようなものがあります。
xcalcは実際に使ってみればすぐ判ると思うので、ここではbcとdcについて説明
したいと思います。

\subsection{bc(Business Calculator)}
bcは、任意の精度の数値を扱うことができ、C言語の文法によく似た形の入力を
対話的に実行する言語です(マニュアルより)。実行すると
\begin{verbatim}
% bc
bc 1.04
Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
\end{verbatim}
と表示され、ktermの右端にカーソルが来ます。ここでいろんな計算ができます。
デフォルトでは小数点以下の桁数は0に設定されているので、'{\tt scale=n}'と
入力することで小数点以下の桁数をn桁に指定することができます。また、aから
zまでの変数に数値を代入して計算することもできます。終了するときは'{\tt
quit}'と入力するかC-dを押します。
\begin{verbatim}
% bc
1+3 (入力)
4
1+2*3 (入力)
7
2/3 (入力)
0
scale=4 (入力)
2/3 (入力)
.6666
a=1 (入力)
b=4 (入力)
c=a+b (入力)
c (入力)
5
c-3 (入力)
2
quit (入力)
% 
\end{verbatim}
bcでは、/*…*/や\#…によるコメントや関係演算子などを使用することができま
す。

\subsection{dc(Desk Calculator)}
dcは、逆ポーランド形式の無限精度の計算が行える卓上計算機です(マニュアル
より)。「逆ポーランド式」とは、括弧の優先順位などを考えずに先頭から順番
に処理をしていく方式です。dcも起動するとbcと同じような入力画面になります。

dcでは、入力した数字は画面に表示せず、スタックに保存します。入力を繰り返
すと、スタックに積み上げられます。スタックに対する操作はコマンドによって
行います。
\begin{description}
 \item[p] スタックを変更せずに、先頭の値を表示します。%
 \item[P] スタックの先頭の値を表示し、スタックから取り出します。%
 \item[f] スタックを変更せずに、スタックの内容を全て表示します。%
 \item[c] スタックを消去し、空にします。%
 \item[d] スタックの先頭の値を複製し、スタックに積みます。%
 \item[r] スタックの先頭の値と2番目の値を入れ替えます。%
 \item[+] スタックから2つの値を取り出し、足し合わせて結果をスタックに積%
	    みます。%
 \item[-] スタックから2つの値を取り出し、最初に取り出した値を2番目に取り%
	    出した値から引きます。結果はスタックに積みます。%
 \item[*] スタックから2つの値を取り出し、掛け合わせて結果をスタックに積%
	    みます。%
 \item[/] スタックから2つの値を取り出し、2番目に取り出した値を最初に取り%
	    出した値で割ります。結果はスタックに積みます。%
 \item[\%] スタックから2つの値を取り出し、/で計算した割り算の余りを結果と%
	    してスタックに積みます。%
 \item[\~] スタックから2つの値を取り出し、/で計算した割り算の商をまずスタッ%
	    クに積み、続いて余りをスタックに積みます。%
 \item[\^] スタックから2つの値を取り出し、最初の値を指数、2つ目の値を底と%
	    して指数計算をします。結果はスタックに積みます。%
 \item[v] スタックから値を取り出し、平方根をとってスタックに積みます。
\end{description}
小数点以下の桁数は入力された数字に依存します。デフォルトの精度を変えるに
はkコマンドを用います。これは、スタックの先頭から値を取り出し、その数値
の精度を標準の精度として設定します。

\subsection{で。}
結局どんな風に計算を行うのかというと、例えば(2+3)を計算するときは2、3、+
の順に入力します。結果はスタックに積まれるので、最後にpを押せば答えの5
が表示されます。同じように、((1+2)*(5-3))は1、2、+、5、3、-、*の順に入力
します。

\subsection{実習2}
bc,dcを用いて$ \frac{-5 \pm \sqrt{5^{2}-4 \times 2 \times 3}}{2 \times 2} $を計
算してみましょう。マイナスの場合は精度にも注意。あと直径５cmの球の表面積
と体積とか誰か計算してみてください。
\end{document}

