?copyright ?license Copyright (C) 1986 - 1993, 1998 Thomas Williams, Colin Kelley Permission to use, copy, and distribute this software and its documentation for any purpose with or without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Permission to modify the software is granted, but not the right to distribute the complete modified source code. Modifications are to be distributed as patches to the released version. Permission to distribute binaries produced by compiling modified sources is granted, provided you 1. distribute the corresponding source modifications from the released version in the form of a patch file along with the binaries, 2. add special version identification to distinguish your version in addition to the base release version number, 3. provide your name and address as the primary contact for the support of your modified version, and 4. retain our contact information in regard to use of the base software. Permission to distribute the released version of the source code along with corresponding source modifications in the form of a patch file is granted with same provisions 2 through 4 for binary distributions. This software is provided "as is" without express or implied warranty to the extent permitted by applicable law. AUTHORS Original Software: Thomas Williams, Colin Kelley. Gnuplot 2.0 additions: Russell Lang, Dave Kotz, John Campbell. Gnuplot 3.0 additions: Gershon Elber and many others. (以下おおまかな訳; 訳は正しくないかも知れませんので詳しくは上記の原文 を当たってください。訳者は責任を持ちません。) Copyright (C) 1986 - 1993, 1998 Thomas Williams, Colin Kelley このソフトウェアとその付属文書の使用、複製、配布の許可は、上記の著作権 (copyright) 表示が、全ての複製物に書かれていること、および著作権表示と この許諾文の両方がその支援文書に書かれていることを条件とした上で、この 文書により保証されます。 このソフトウェアの修正も認められています。しかし、修正を含む全ソースコ ードの配布の権利は認められません。修正はリリース版に対するパッチの形で 配布しなければなりません。修正されたソースをコンパイルして作られたバイ ナリの配布は、以下の条件の元で認められます: 1. リリース版からのソースの修正部分を、パッチの形でバイナリと共に配 布すること 2. ベースとなるリリース版と区別するために、そのバージョン番号に特別 なバージョン指定子を付加すること 3. その修正版のサポート用に、あなたの名前とアクセス可能なアドレスと を提供すること 4. ベースとなるソフトウェアの使用に関しては、我々の連絡情報を保持し 続けること リリース版のソースコードを、パッチの形でのソースの修正と一緒に配布する ことは、バイナリ配布に関する条項 2 から 4 までの条件の元で許されます。 このソフトウェアは "あるがまま" 提供され、適用可能な法律で許められる範 囲の保証を表明あるいは暗示していはいません。 著者 オリジナルソフトウェア: Thomas Williams, Colin Kelley. Gnuplot 2.0 追加: Russell Lang, Dave Kotz, John Campbell. Gnuplot 3.0 追加: Gershon Elber and many others. ?introduction ? `gnuplot` は,コマンド入力方式の対話的な関数描画プログラムです.コマン ドや関数名は大文字小文字を区別します.いずれのコマンドも,あいまいさ の無い限りにおいて省略することができます.1行中にはセミコロン(;)で区 切って複数のコマンドを書くことができます (ただし、`load` と `call` は 最後のコマンドでなければなりません).文字列は引用符を使って表します. 引用符は,一重でも,二重でも構いません.例えば load "filename" cd 'dir' しかし、両者には微妙な違いがあります (詳細は `syntax` を参照してくだ さい)。 コマンドラインでの引数は `gnuplot` 用のコマンドの書かれたファイルの名前 であるものとします.但し標準の X11 の引数は例外で,まず最初に処理され ます.各ファイルはコマンドライン上で指定された順に `load` コマンドで ロードされます.`gnuplot` は,最後に指定されたファイルを処理し終ると終 了します.ファイルが1つも指定されていない場合は,`gnuplot` は対話モー ドになります.特別なファイル名 "-" は標準入力を表します。詳細は "help batch/interactive" を参照してください。 `gnuplot` のコマンドの多くは複数のオプションを持っています。これらの オプションは、ほとんどの場合、不必要なものが省略できるよう、適切な 順序で指定することになっています。よって、もしコマンドの全部の指定が "command a b c" である場合、"command a c" は多分うまくいくでしょうが、 "command c a" はうまくいかないかもしれません。 コマンドは,複数行にまたがることができます.その場合は,最終行以外の 全ての行の行末にバックスラッシュ (\) を書く必要があります.バックス ラッシュは必ず各行 *最後* の文字でなくてはなりません.その結果として バックスラッシュと,それに続く改行文字が存在しなかったかのように扱わ れます.つまり,改行文字がスペースの役をすることもありませんし,改行 によってコメントが終了することもありません.ですから複数行にまたがる 行の先頭をコメントアウトすると,そのコマンド全体がコメントアウトされ ることになります (`comment` 参照).なお注意しますが、もし、複数行のコ マンドのどこかでエラーが起きたとき、パーサはその場所を正確には指示す ることができませんし、また、正しい行に指示する必要もないでしょう。 このドキュメントにおいて,中括弧 ({}) は省略可能な引数を表すものとし、 縦棒 (|) は,互いに排他的な引数を区切るものとします.`gnuplot` のキー ワードや `help` における項目名は,バッククオート (`) または可能な場合 には `boldface` (太字) で表します.角括弧 (<>) は,それに対応するもの に置き換えられるべきものを表します.多くの場合、オプションの引数には それが省略されるとデフォルトの値が使用されます。しかし、これらの場合 必ずしも角括弧が中括弧で囲まれて書かれているわけではありません。 ある項目についてのヘルプが必要なときには,`help` に続けてその項目名を 入力して下さい.または単に `help` や `?` でもヘルプの項目のメニューが 現われます。 初めて `gnuplot` を使う方は,`plotting` に関する説明から読みはじめると 良いでしょう (現在使用中であれば `help plotting` と入力して下さい). ?seeking-assistance `gnuplot` ユーザのためのメーリングリストがあります。しかし、ニュースグ ループ comp.graphics.apps.gnuplot は、そのメーリングリストと同等であることに注意してください (どちらにも 同じメッセージが流れます)。私達はメーリングリストに参加するより、むし ろニュースグループのメッセージを読むことを勧めます。メーリングリスト管 理者向けのメッセージは majordomo@dartmouth.edu へお送りください。詳細に関しては、メール本文 (Subject ではなく) に 1 語 "help" (引用符はなしで) のみを書いたメッセージを送ってください。 メーリングリストメンバーへのメールアドレス: info-gnuplot@dartmouth.edu バグリポート、ソースの改良等は次のところへ: bug-gnuplot@dartmouth.edu βテスト版に関するメーリングリスト: info-gnuplot-beta@dartmouth.edu 更新情報、既知のバグ情報を含む WWW ページもあります。 http://www.cs.dartmouth.edu/gnuplot_info.html 助けを求める前に、次をチェックしてください: FAQ (Frequently Asked Questions) list. もし FAQ のコピーを持っていなければ、email 経由で上記の Majordomo アドレスから、あるいは ftp 経由で次のアドレスから ftp://ftp.ucc.ie/pub/gnuplot/faq, ftp://ftp.gnuplot.vt.edu/pub/gnuplot/faq, 取得できますが、他は `gnuplot` の WWW ページを参照してください。 何か質問を投稿するときは、あなたが使用している `gnuplot` のバージョン、 実行マシン、オペレーティングシステム、といった全ての情報を含むようにし てください。その問題を引き起こす _小さい_ スクリプトがあればなお良いで す。その場合、データファイルのプロットよりも関数のプロットの方がより良 いです。もし、info-gnuplot へメールをするなら、そのメーリングリストの 購読をしているかどうかを述べてください。そうすれば、ニュースを見たユー ザはあなたへの返事をメールで出せば良いことが分かるでしょうから。そのよ うな記事のポストの form が WWW サイトにあります。 ?new-features Gnuplot バージョン 3.7 は新しい機能をたくさん備えています。このセクシ ョンではそれらの一部分のリストやそれらに関する説明箇所について、順不同 で示します。 1. `fit f(x) 'file' via` は Marquardt-Levenberg 法を使ってデータの当て はめを行います (これは version 3.5 に対する `gnufit` パッチとほんの少 し違うだけです)。 2. `using` コマンドは大幅に拡張しました。詳しくは `plot using` を見て ください。 3. `set timefmt` で、時系列データの入出力時に日付が使用できるようにな りました。`Time/Date` の項目、および timedat.dem. を参照してください。 4. いくつかのドライバでの複数行ラベルとフォントの選択 5. 見出し付けされない小目盛り。`set mxtics` 参照 6. 描画ページ内のキー (グラフ見出し) ボックスの移動 (描画範囲の外にま で出せる)、そのタイトル、回りの枠等に関する `key` オプション。`set key` 参照 7. `set multiplot` による単一の描画ページ上での多重描画 (multiplot) 8. `postscript` ドライバの改良による上/下つき文字、フォントの変更 (こ れは 3.5 のパッチとして存在していた別なドライバ (`enhpost`) だったもの) 9. 第 2 軸: 上と右の軸を下と左の軸とは独立に使い、それぞれに対して描画、 目盛りのラベル付けが可能。`plot` 参照 10. 特別なデータファイル名 `'-'` と `""` のサポート。`plot special-filenames` 参照。 11. ラベルと矢 (arrow) に対する座標系を追加 12. `set size` でアスペクト比 (縦横比) の指定を可能に 13. 欠けているデータを正しく扱う `set missing` 14. コマンド `call`: 引数を持つ `load` 15. `reverse`, `writeback`, `restore` キーワードを持つより柔軟性のある `range` 16. 多国語エンコード用の `set encoding` 17. 持続性と複数のウィンドウをサポートした新しい `x11` ドライバ 18. 新しい描画スタイル: `xerrorbars`, `histeps`, `financebars` 等。 `set style` 参照 19. 目盛りの見出しの新しい書式。`"%l %L"` は、見出しの与えられた単位に 対する仮数部と指数部に使われます。`set format` 参照。 20. 新しいドライバ: MS-Office アプリケーションに張り込むための `cgm`、 WEB 用の `gif` 等。 21. `plot` のグラフの平滑化、およびスプライン補間オプション。`plot smooth` 参照。 22. `set margin` と `set origin` は、描画範囲のどこにグラフを置くかを より良く制御します。 23. `set border` は各境界線を個々に制御可能になりました。 24. 新しいコマンド `if` と `reread` はコマンドループを可能にします。 25. 点のスタイルと大きさ、線の型と幅も `plot` コマンド上で指定できるよ うになりました。線の型と幅は、grids, borders, tics, arrows の各コマンド でも指定可能です。`plot with` 参照。さらに、それらの型は組み合わせるこ とも可能ですし、再利用のために保存することも可能です。`set linestyle` 参照。 26. 出力ターミナルがサポートする限り、文字列 (ラベル、目盛り見出し、日 付) は縦書きも可能。 ?batch/interactive `gnuplot` は多くのシステム上で、バッチ処理形式、あるいは対話型のどちら の形式でも実行でき、それらを組み合わせることも可能です。 コマンドライン引数は `gnuplot` コマンドを含むファイルのファイル名であ ると解釈されます (先に指定される標準的な X11 用コマンドの引数を除いて)。 各ファイルは、指定された順に `load` コマンドで読み込まれます。最後のフ ァイルを実行した後は `gnuplot` は終了します。ロードファイルを指定しな い場合は、`gnuplot` は対話モードに入ります。特別なファイル名 "-" は標 準入力を指定するのに使われます。 `exit` と `quit` はどちらも現在のコマンドファイルを終了し、まだ全ての ファイルが終っていなければ、次のファイルを `load` するのに使われます。 例: 対話を開始する: gnuplot 2 つのコマンドファイル "input1", "input2" を使ってバッチ処理を行なう: gnuplot input1 input2 初期化ファイル "header" の後、対話型モードを起動し、その後別のコマンド ファイル "tailer" を実行する: gnuplot header - trailer ?line-editing ?editing ?history ?command-line-editing コマンドライン編集は Unix, Atari, VMS, MS-DOS and OS/2 上の `gnuplot` でサポートされています。履歴 (ヒストリ) 機能で、以前のコマンドを編集し 再実行することも出来ます。コマンドラインの編集後は、カーソルがどこにい ても改行や復帰キーによって行全体が入力されます。 (`gnuplot` における readline 関数は、GNU Bash や GNU Emacs で使われる readline 関数と全く同じではありません。もし、GNU 版を望むなら、コンパ イル時に `gnuplot` 版の代わりに選択できます) 編集コマンドは以下の通りです: `行編集`: ^B 1 文字前へ戻す ^F 1 文字先へ進める ^A 行の先頭に移動 ^E 行の最後に移動 ^H,DEL 直前の文字を削除 ^D 現在位置の文字を削除 ^K 現在位置から行末まで削除 ^L,^R 壊れた表示の行を再表示 ^U 行全体の削除 ^W カーソル手前の単語から行末まで削除 `履歴`: ^P 前の履歴へ移動 ^N 次の履歴へ移動 IBM PC では、行編集用に DOSEDIT とか CED などの TSR (常駐) プログラム を使いたいと思うかも知れません。デフォルトの makefile はこれを仮定して いて、`gnuplot` はデフォルトでは行編集機能無しでコンパイルされます。も し `gnuplot` の行編集機能を使用したければ、makefile の READLINE をセッ トしてリンクファイルとして readline.obj を追加してください。IBM PC と Atari 版で readline を使う場合は以下のキーも使えます。 左矢印 (←) - ^B と同じ 右矢印 (→) - ^F と同じ Ctrl + 左矢印 - ^A と同じ Ctrl + 右矢印 - ^E と同じ 上矢印 (↑) - ^P と同じ 下矢印 (↓) - ^N と同じ Atari 版の readline は更にいくつかのエイリアスが定義されています: Undo - ^L と同じ Home - ^A と同じ Ctrl Home - ^E と同じ Esc - ^U と同じ Help - `help` + return. Ctrl Help - `help `. ?comments コメントは次のように実装されています: 文字 '#' は,行中のたいていの場 所に書くことができます.このとき `gnuplot` はその行の残りの部分を無視し ます.ただし,引用符の中,数 (複素数を含む) の中,コマンド置換 (command substitution) の中などではこの効果がありません.簡単に言うと,意味 のあるような使い方をしさえすれば,正しく動作すると言うことです. ?coordinates コマンド `set arrow`, `set key`, `set label` はグラフ上の任意の位置が 指定できます。その位置は以下の書式で指定します: {} , {} {,{} } 各座標系指定 には、`first`, `second`, `graph`, `screen` のい ずれかが入ります。 `first` は左と下の軸で定義される x,y (3D の場合は z も) の座標系を使用 します。`second` は第 2 軸 (上と右の軸) を使用します。`graph` はグラフ 描画領域内の相対的位置を指定し、左下が 0,0 で 右上が 1,1 (splot の場合 はグラフ描画領域内の左下が 0,0,0 で、土台の位置は負の z の値を使用しま す。`set ticslevel` 参照) となります。`screen` は表示範囲内 (範囲全体 であり、`set size` で選択される一部分ではありません) を指定し、左下が 0,0 で 右上が 1,1 となります。 x の座標系が指定されていない場合は `first` が使われます。y の座標系が 指定されていない場合は x に対する座標系が使用されます。 一つ (あるいはそれ以上) の軸が時間軸である場合、`timefmt` の書式文字列 に従って、引用符で囲まれた時間文字列で適切な座標を指定する必要がありま す。`set xdata`, `set timefmt` を参照してください。また、`gnuplot` は 整数表記も認めていて、その場合その整数は 2000 年 1 月 1 日からの秒数と 解釈されます。 ?environment `gnuplot` は多くのシェル環境変数を認識します。必須のものはありませんが、 使えば便利になるかも知れません。 GNUTERM が定義されている場合、それは使用される出力形式 (terminal) の名 前として使われます。これは `gnuplot` が起動時に見つけた出力形式に優先 して使用されますが、.gnuplot (またはそれに相当する) スタートアップファ イル (`start-up` 参照) による指定や、当り前のことですが、その後に明示 的に指定した物の方が優先されます。 Unix, AmigaOS, AtariTOS, MS-DOS, OS/2 では、GNUHELP にヘルプファイル (gnuplot.gih) のパス名を定義しておくことができます。 VMS では、論理名 GNUPLOT$HELP を `gnuplot` のヘルプライブラリの名前と して定義します。`gnuplot` のヘルプは任意のシステムのヘルプライブラリに 入れることができ、`gnuplot` の内部からでも外部からでも参照して構いませ ん。 Unix においては、カレントディレクトリに .gnuplot というファイルがない 場合には、HOME に定義されたディレクトリを探します。AmigaOS, AtariTOS, MS-DOS, OS/2 では GNUPLOT がその役割に使われます。VMS では SYS$LOGIN です。`help start-up` を参照してください。 Unix においては、PAGER がヘルプメッセージの出力用のフィルタとして使わ れます。 Unix, AtariTOS, AmigaOS では、SHELL が `shell` コマンドの際に使われま す。MS-DOS, OS/2 では COMSPEC が `shell` コマンドの際に使われます。 MS-DOS で BGI または Watcom インターフェースが使われている場合、PCTRM が、使用するモニタがサポートする最大解像度を指示するのに使われます。 PCTRM は S<最大水平解像度> のように指定します。例えば、モニタの最大解 像度が 800x600 ならば、以下のように指定します: set PCTRM=S800 PCTRM が設定されていなければ、標準的な VGA (640x480) が使われます。 FIT_SCRIPT は、当てはめ (fit) が中断されたときに実行する `gnuplot` コ マンドの指定に使われます。`fit` を参照してください。FIT_LOG は当てはめ によるログファイルのファイル名の指定に使われます。 ?expressions 基本的には C, FORTRAN, Pascal, BASIC において利用可能な数学表現を使用 できます。 演算子の優先順位は C 言語の仕様に従います。数式中の空白文字 とタブ文字は無視されます。 複素数の定数は {,} と表現します。ここで (実部、虚部) は数値定数である必要があります。例えば {3,2} は 3 + 2i を あらわし、{0,1} は 'i' 自身を表します。これらには明示的に中カッコを使 う必要があります。 gnuplot は "実数" と "整数" 演算を FORTRAN や C のように扱うということ に注意してください。"1", "-10" などは整数と見なされ、"1.0", "-10.0", "1e1", 3.5e-1 などは実数と見なされます。 これら 2 つのもっとも重要な違 いは割算です。整数の割算は切り捨てられます: 5/2 = 2。実数はそうではあ りません: 5.0/2.0 = 2.5。それらが混在した式の場合、計算の前に整数は実 数に "拡張" されます: 5/2e0 = 2.5。負の整数を正の整数で割る場合、その 値はコンパイラによって変わります。"print -5/2" として、あなたのシステ ムが -2 と -3 のどちらを答えとするかを確認してください。 数式 "1/0" は "未定義値 (undefined)" フラグを生成し、それによりその点 は無視されます。`ternary` 演算子 (三項演算子) の項にその例があります。 複素数表現の実数部分、虚数部分は、どんな形で入力されても常に実数です: {3,2} の "3" と "2" は実数であり、整数ではありません。 ?expressions functions ?functions `gnuplot` の関数は、Unix 数学ライブラリの関数とほぼ同じですが、特に注 意がなければ全ての関数が整数、実数、複素数の引数を取ることができます。 度、あるいはラジアンのどちらかで角度を引数としたり戻り値としたりする関 数 (sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(x), arg(z)) に対しては、その単位は `set angles` で選択でき、デフォルトはラジアンで す。 ?expressions functions abs ?functions abs ?abs 関数 `abs(x)` 引数の絶対値を返します。返り値の型は引数と同じです。 複素数の引数に対しては, abs(x) は複素平面における x の長さと定義されて います [すなわち sqrt(real(x)**2 + imag(x)**2) ]。 ?expressions functions acos ?functions acos ?acos 関数 `acos(x)` は引数のアークコサイン (逆余弦) を返します。`acos` の 返す値がラジアン単位かまたは度であるかは `set angles` で選択されます。 ?expressions functions acosh ?functions acosh ?acosh 関数 `acosh(x)` は逆ハイパボリックコサイン (逆双曲余弦) の値をラジアンで 返します。 ?expressions functions arg ?functions arg ?arg 関数 `arg(x)` は複素数の偏角を、`set angles` の設定にしたがってラジアン、 または度で返します。 ?expressions functions asin ?functions asin ?asin 関数 `asin(x)` は引数のアークサイン (逆正弦) を返します。`asin` の 返す値は `set angles` の設定によってラジアン単位かまたは度になります。 ?expressions functions asinh ?functions asinh ?asinh 関数 `asinh(x)` は逆ハイパボリックサイン (逆双曲正弦) の値をラジアンで 返します。 ?expressions functions atan ?functions atan ?atan 関数 `atan(x)` は引数のアークタンジェント (逆正接) の値を返します。 `atan` の返す値は `set angles` の設定によってラジアン単位かまたは度に なります。 ?expressions functions atan2 ?functions atan2 ?atan2 関数 `atan2(y,x)` は引数の実数部分の比のアークタンジェント (逆正接) の 値を返します。`atan2` は `set angles` の設定によってラジアン単位か度に なる、適切な四分円における値を返します。 ?expressions functions atanh ?functions atanh ?atanh 関数 `atanh(x)` は逆ハイパボリックタンジェント (逆双曲正接) の値をラジ アンで返します。 ?expressions functions besj0 ?functions besj0 ?besj0 関数 `besj0(x)` は引数の j0 次ベッセル関数の値を返します。`besj0` には 引数はラジアンで与えます。 ?expressions functions besj1 ?functions besj1 ?besj1 関数 `besj1(x)` は引数の j1 次ベッセル関数の値を返します。`besj1` には 引数はラジアンで与えます。 ?expressions functions besy0 ?functions besy0 ?besy0 関数 `besy0` は引数の y0 次ベッセル関数の値を返します。`besy0` には 引数はラジアンで与えます。 ?expressions functions besy1 ?functions besy1 ?besy1 関数 `besy1(x)` は引数の y1 次ベッセル関数の値を返します。`besy1` には 引数はラジアンで与えます。 ?expressions functions ceil ?functions ceil ?ceil 関数 `ceil(x)` は引数以上の最小の整数を返します。複素数引数に対しては その実数部分以上の最小の整数を返します。 ?expressions functions cos ?functions cos ?cos 関数 `cos(x)` は引数のコサイン (余弦) の値を返します。`cos` は `set angles` の選択にしたがって、ラジアンまたは度の引数を受け付けます。 ?expressions functions cosh ?functions cosh ?cosh 関数 `cosh(x)` は引数のハイパボリックコサインの値を返します。`cosh` の 引数はラジアンで与えます。 ?expressions functions erf ?functions erf ?erf 関数 `erf(x)` は引数の実部の誤差関数の値を返します。引数が複素数の場合は 虚部は無視されます。 ?expressions functions erfc ?functions erfc ?erfc 関数 `erfc(x)` は 1.0 から、引数の実部の誤差関数の値を引いたものを返します。 引数が複素数の場合は虚部は無視されます。 ?expressions functions exp ?functions exp ?exp 関数 `exp(x)` 引数の指数関数の値 (`e` の引数乗) を返します。環境によっては (特に sun) 大きい x の値に対する exp(-x) は未定義値を返す場合があります。 このような場合、safe(x) = x<-100 ? 0 : exp(x) のようなユーザ定義関数が役に 立つでしょう。 ?expressions functions floor ?functions floor ?floor 関数 `floor(x)` はその引数以下の最大の整数を返します。複素数引数に対しては `floor` はその引数の実部以下の最大の整数を返します。 ?expressions functions gamma ?functions gamma ?gamma 関数 `gamma(x)` は引数の実部のガンマ関数の値を返します。整数 n に対しては gamma(n+1) = n! です。引数が複素数の場合、虚数部分は無視されます。 ?expressions functions ibeta ?functions ibeta ?ibeta 関数 `ibeta(p,q,x)` は引数の実部の不完全ベータ関数の値を返します。p, q > 0 で x は [0:1] 内の値です。引数が複素数の場合は虚部は無視されます。 ?expressions functions inverf ?functions inverf ?inverf 関数 `inverf(x)` は引数の実部の逆誤差関数の値を返します。 ?expressions functions igamma ?functions igamma ?igamma 関数 `igamma(a,x)` 引数の実部の不完全ガンマ関数の値を返します。a > 0, x >= 0 です。引数が複素数の場合は虚部は無視されます。 ?expressions functions imag ?functions imag ?imag 関数 `imag(x)` は引数の虚数部分を実数として返します。 ?expressions functions invnorm ?functions invnorm ?invnorm 関数 `invnorm(x)` は引数の実部の逆正規分布関数の値を返します。 ?expressions functions int ?functions int ?int 関数 `int(x)` は、引数の整数部分 (0 に向かって丸めた) を返します。 ?expressions functions lgamma ?functions lgamma ?lgamma 関数 `lgamma(x)` は引数の実部のガンマ関数値の自然対数の値を返します。 引数が複素数の場合、虚部は無視されます。 ?expressions functions log ?functions log ?log 関数 `log(x)` は引数の自然対数 (底 `e`) の値を返します。 ?expressions functions log10 ?functions log10 ?log10 関数 `log10(x)` は引数の対数 (底 10) を返します。 ?expressions functions norm ?functions norm ?norm 関数 `norm(x)` は引数の実部の正規分布 (ガウス分布) 関数の値を返します。 ?expressions functions rand ?functions rand ?rand 関数 `rand(x)` は、引数の実部を種 (seed) として区間 [0:1] 内の疑似乱数 の値を返します。seed < 0 の場合は乱数列は (再) 初期化されます。引数が 複素数の場合は虚部は無視されます。 ?expressions functions real ?functions real ?real 関数 `real(x)` は引数の実部を返します。 ?expressions functions sgn ?functions sgn ?sgn 関数 `sgn(x)` は引数が正なら 1 を、負なら -1 を、0 ならば 0 を返します。 引数が複素数の場合虚部は無視されます。 ?expressions functions sin ?functions sin ?sin 関数 `sin(x)` は引数のサイン (正弦) の値を返します。`sin` は `set angles` の選択にしたがって、ラジアンまたは度の引数を受け付けます。 ?expressions functions sinh ?functions sinh ?sinh 関数 `sinh(x)` は引数のハイパボリックサインの値を返します。`sinh` の 引数はラジアンで与えます。 ?expressions functions sqrt ?functions sqrt ?sqrt 関数 `sqrt(x)` は引数の平方根の値を返します。 ?expressions functions tan ?functions tan ?tan 関数 `tan(x)` は引数のタンジェント (正接) の値を返します。`tan` は `set angles` の選択にしたがって、ラジアンまたは度の引数を受け付けます。 ?expressions functions tanh ?functions tanh ?tanh 関数 `tanh(x)` は引数のハイパボリックタンジェントの値を返します。`tanh` の 引数はラジアンで与えます。 さらにいくつかの関数が追加されています。 ?expressions functions column ?functions column ?column `column(x)` は fit あるいはデータファイルプロットでの `using` の操作の 数式の一部としてのみ使われます。`plot datafile using` を参照してくださ い。 ?expressions tm_hour ?functions tm_hour 関数 `tm_hour` は引数を 2000 年 1 月 1 日からの秒数と解釈し、それが 時刻の何時 (0--23 の範囲の整数) であるかを、実数として返します。 ?expressions tm_mday ?functions tm_mday 関数 `tm_mday` は引数を 2000 年 1 月 1 日からの秒数と解釈し、それが その月の何日 (1--31 の範囲の整数) であるかを、実数として返します。 ?expressions tm_min ?functions tm_min 関数 `tm_min` は引数を 2000 年 1 月 1 日からの秒数と解釈し、それが 時刻の何分 (0--59 の範囲の整数) であるかを、実数として返します。 ?expressions tm_mon ?functions tm_mon 関数 `tm_mon` は引数を 2000 年 1 月 1 日からの秒数と解釈し、それが 何月 (1--12 の範囲の整数) であるかを、実数として返します。 ?expressions tm_sec ?functions tm_sec 関数 `tm_sec` は引数を 2000 年 1 月 1 日からの秒数と解釈し、それが 時刻の何秒 (0--59 の範囲の整数) であるかを、実数として返します。 ?expressions tm_wday ?functions tm_wday 関数 `tm_wday` は引数を 2000 年 1 月 1 日からの秒数と解釈し、それが その週の何日目 (1--7 の範囲の整数) であるかを、実数として返します。 ?expressions tm_yday ?functions tm_yday 関数 `tm_yday` は引数を 2000 年 1 月 1 日からの秒数と解釈し、それが その年の何日目 (1--366 の範囲の整数) であるかを、実数として返します。 ?expressions tm_year ?functions tm_year 関数 `tm_year` は引数を 2000 年 1 月 1 日からの秒数と解釈し、それが 西暦何年 (整数) であるかを、実数として返します。 ?expressions functions valid ?functions valid ?valid `valid(x)` は、データ描画か fit における `using` の式の中でしか使われ ません。`plot datafile using` を参照してください。 ?expressions operators ?operators `gnuplot` の演算子は、C 言語の演算子とほぼ同じですが、特に注意がなけれ ば全ての演算子が整数、実数、複素数の引数を取ることができます。また、 FORTRAN で使える ** (累乗) 演算子もサポートされています。 演算の評価の順序を変更するにはかっこを使います。 ?expressions operators unary ?operators unary ?unary 以下は、単項演算子とその使用法の一覧です: 記号 例 説明 - -a マイナス符号 + +a プラス符号 (何もしない) ~ ~a * 1 の補数 (ビット反転) ! !a * 論理的否定 ! a! * 階乗 $ $3 * `using` 内での引数/列指定 説明に星印 (*) のついた演算子の引数は整数でなければなりません。 演算子の優先順位は Fortran や C と同じです。それらの言語同様、演算の評 価される順序を変えるためにかっこが使われます。よって -2**2 = -4 で、 (-2)**2 = 4 です。 階乗演算子は、大きな値を返せるように実数を返します。 ?expressions operators binary ?operators binary ?binary 以下は、二項演算子とその使用法の一覧です: 記号 例 説明 ** a**b 累乗 * a*b 積 / a/b 商 % a%b * 余り + a+b 和 - a-b 差 == a==b 等しい != a!=b 等しくない < a a>b より大きい >= a>=b 以上 & a&b * ビット積 (AND) ^ a^b * ビット排他論理和 (XOR) | a|b * ビット和 (OR) && a&&b * 論理的 AND || a||b * 論理的 OR 説明に星印 (*) のついた演算子の引数は整数でなければなりません。 論理演算子の AND (&&) と OR (||) は C 言語同様に必要最小限の評価しかし ません。すなわち、`&&` の第 2 引数は、第 1 引数が偽ならば評価されませ んし、`||` の第 2 引数は、第 1 引数が真ならば評価されません。 ?expressions operators ternary ?operators ternary ?ternary 一つだけ三項演算子があります: 記号 例 説明 ?: a?b:c 三項演算子 三項演算子は C のものと同じ働きをします。最初の引数 (a) は整数でなけれ ばいけません。この値が評価され、それが真 (ゼロでない) ならば 2 番目の 引数 (b) が評価されその値が返され、そうでなければ 3 番目の引数 (c) が 評価され、その値が返されます。 三項演算子は、区分的に定義された関数や、ある条件が満たされた場合にのみ 点を描画する、といったことを行なう場合に有用です。 例: 0 <= x < 1 では sin(x) に、1 <= x < 2 では 1/x に等しくて、それ以外の x では定義されない関数を描画: f(x) = 0<=x && x<1 ? sin(x) : 1<=x && x<2 ? 1/x : 1/0 plot f(x) `gnuplot` は未定義値に対しては何も表示せずにただ無視するので、最後の場 合の関数 (1/0) は点を何も出力しないことに注意してください。また、この 関数描画の描画スタイルが lines (線描画) の場合、不連続点 (x=1) の所も 連続関数として線が結ばれてしまうことにも注意してください。その点を不連 続になるようにするには、関数を 2 つの部分それぞれに分けてください (こ のような場合、媒介変数関数を使うのが便利です)。 ファイル 'file' のデータで、4 列目のデータが負でないときだけ、1 列目の データに関する 2 列目と 3 列目のデータの平均値を描画: plot 'file' using 1:( $4<0 ? 1/0 : ($2+$3)/2 ) `using` の書式の説明に関しては `plot data-file using` を参照してくださ い。 ?expressions user-defined ?user-defined ?variables 新たなユーザ定義変数と 1 個から 5 個までの引数を持つユーザ定義関数を、 任意の場所で定義したり使ったりすることができます。それは `plot` コマン ド上でも可能です。 ユーザ定義関数書式: ( {,} ... {,} ) = ここで は仮変数 から で表される数式です。 ユーザ定義変数書式: = 例: w = 2 q = floor(tan(pi/2 - 0.1)) f(x) = sin(w*x) sinc(x) = sin(pi*x)/(pi*x) delta(t) = (t == 0) ramp(t) = (t > 0) ? t : 0 min(a,b) = (a < b) ? a : b comb(n,k) = n!/(k!*(n-k)!) len3d(x,y,z) = sqrt(x*x+y*y+z*z) plot f(x) = sin(x*a), a = 0.2, f(x), a = 0.4, f(x) 円周率 `pi` は既に定義されています。しかしこれは決して手品のようなもの ではなく、好きなように再定義することができます。 変数名や関数名の命名規則は、大抵のプログラミング言語と同じで、先頭はア ルファベットで、その後の文字はアルファベット、数字、"$", "_" が使えま す。ただし、`fit` のサブルーチンでいくつか "FIT_" で始まる変数を使用す ることに注意してください。よってそのような名前を使うのは避けるべきでし ょう。しかし、`fit` の使用に際しては、例えば "FIT_LIMIT" のように再定 義をする必要があるような変数はあります。詳しくは `fit` に関する説明を 参照してください。 `show functions`, `show variables`, `fit` も参照してください。 ?glossary このドキュメント全体に渡って、用語に関する一貫性の維持が考えられていま す。しかしこの試みは完全には成功していません。それは `gnuplot` が時間 をかけて進化してきたように、コマンドやキーワードの名前もそのような完全 性を排除するかのように採用されて来ているからです。この節では、これらの キーワードのいくつかがどのように使われているかを説明します。 "ページ (page)" または "表示画面 (screen)" は `gnuplot` がアクセス可能 な領域全体を指します。ディスプレイモニタでは、これは画面全体を指し、プ ロッタでは、一枚の紙全体になります。 表示画面は、一つ、またはそれ以上の "グラフ描画 (plot)" を含みます。グ ラフ描画は一つの横座標と一つの縦座標で定義されますが、余白 (margin) や その中に書かれる文字列 (text) 同様、それらは実際にその上に表示されてい る必要はありません。 グラフ描画は一つの "グラフ" を含みます。グラフは一つの横座標と一つの縦 座標で定義されますが、これらは実際にその上に表示されている必要はありま せん。 グラフは一つまたはそれ以上の "曲線 (line)" を含みます。曲線は一つの関 数、またはデータセットです。用語 "line" は描画スタイルとしても使われま す。さらにこの用語は "文字列の一行 (a line of text)" のように使われる こともあります。多分文脈からそれらは区別できるでしょう。 一つのグラフ上の複数の曲線はそれぞれ名前を持ちます。その名前は、その曲 線の表現に使われる描画スタイルのサンプルとともに "(説明) key" 内に一覧 表示されます。説明は、時には "(表題) legend" とも呼ばれます。 用語 "タイトル (title)" は `gnuplot` では複数の意味で使われます。この ドキュメントではそれらを区別するために、形容詞として "描画の (plot)"、 "曲線の (line)"、"説明の (key)" を頭につけたりもします。 一つのグラフは 4 つまでの見出し付けされる軸を持つことができます。そし て `set xlabel` のように、そのコマンド名の中に一つの軸の名前を持つ様々 なコマンドがあります。他に、`set logscale xy` のように、オプションに一 つまたはそれ以上の軸の名前を持つコマンドもあります。これらの使われ方の 中の 4 つの軸の名前はそれぞれ、グラフ描画の下の境界に沿う軸である "x"、 左の境界に沿う軸 "y"、上の境界に沿う軸 "x2"、右の境界に沿う軸 "y2" と なっています。3 次元描画では "z" もコマンド内に現われます。 データファイルに関する議論では、用語 "行 (record)" を復活し、ファイル の一行の文字列、すなわち、改行文字や行末文字同士の間の文字列、を指し示 すのに使います。"点 (point)" は行から取り出した一つのデータです。"デー タブロック (datablock)" は、空行で区切られた連続した複数の行からなる点 の集合です。データファイルの議論の中で "line" が参照される場合は、これ はデータブロックの部分集合を指します。 (訳注: この日本語訳の中ではここに書かれているような用語の統一は考慮さ れてはおらず、よって混乱を引き起こす可能性があります。厳密には原文を参 照すべきでしょう。) ?plotting `gnuplot` には描画を生成する 3 つのコマンド、`plot`, `splot`, `replot` があります。`plot` は 2 次元描画を生成し、`splot` は 3 次元描画 (もち ろん実際には 2 次元面への射影) を生成します。`replot` は与えられた引数 を、直前の `plot` または `splot` コマンドに追加し、それを実行します。 描画に関する一般的な情報の大半は、`plot` に関する項で見つかります。3 次元描画に固有の情報は `splot` の項にあります。 `plot` は xy 直交座標系と極座標系が使えます。極座標系の詳細に関しては `set polar` を参照してください。`splot` は xyz 直交座標系のみしか扱え ませんが、コマンド `set mapping` で他の 2, 3 の座標系を使用することが 出来ます。さらに、オプション `using` を使えば、`plot` でも `splot` で もほとんどどんな座標系でもそれを定義して使うことが出来ます。 `splot` は点や線による描画に加えて、曲面や等高線を描くこともできます。 3 次元の関数の格子定義に関する情報については、`splot` と `set isosamples` の項目を、3 次元データのファイルに必要な形態に関しては `splot datafile` の項目を、等高線に関する情報については `set contour` と `set cntrparam` の項目を参照してください。 ?startup ?start ?.gnuplot `gnuplot` が起動されるとき,初期設定ファイルを読み込もうとします.この ファイルは Unix と AmigaOS では,`.gnuplot` であり,その他の処理系で は `GNUPLOT.INI` となっています.このファイルがカレントディレクトリに 無い場合,`gnuplot` はホームディレクトリを検索します (AmigaOS と Atari(single)TOS と MS-DOS と OS/2, MS-DOS では,環境変数 `gnuplot` にホームディレクトリに対応するディレクトリを指定します).注意: インス トールの時に NOCWDRC を定義した場合には,`gnuplot` はカレントディレク トリからは読みません. 初期設定ファイルが見つかると,`gnuplot` はこのファイルに書かれているコ マンドを実行します.ここには任意の正しい `gnuplot` コマンドを書くこと が可能ですが、一般的には、出力装置の指定や、よく使う関数や変数の定義を 設定する程度に抑えておきます。 ?substitution シェルコマンドをバッククォートで囲むことによってコマンド置換を行うこ とができます。このコマンドは子プロセスで実行され、その出力結果でコマ ンド (およびそれを囲んでいる引用符) を置き換えます。処理系によっては パイプがサポートされている場合もあります。 `plot datafile special-filenames` を見てください。 子プロセスの出力中の改行文字は空白文字に置換されます。 コマンド置換は、単一引用符内の文字列以外は、`gnuplot` のコマンドライ ン中、どこででも使用可能です。 例: 以下の例は、`leastsq` というプログラムを実行し、その出力結果で、 `leastsq` を (まわりの引用符こみで) 置き換えます: f(x) = `leastsq` ただし VMS では、 f(x) = `run leastsq` 以下は現在の日付とユーザー名のラベルを生成します: set label "generated on `date +%Y-%m-%d`by `whoami`" at 1,1 set timestamp "generated on %Y-%m-%d by `whoami`" ?syntax ?specify ?punctuation `gnuplot` における記号や区切りの用法に関する一般的な規則は、キーワード とオプションは順序依存である、ということです。リストや座標がコンマ (,) 区切りであるのに対し、オプションやそれに伴うパ ラメータはスペース ( ) 区切りです。範囲はコロン (:) で区切ってかぎかっこ ([]) でくくりますし、 文字列やファイル名は引用符でくくり、他にいくつかカッコ (()) でくくるも のがあります。中カッコ ({}) は特別な目的で使われます。 コンマは以下の区切りで使用されます。`set` コマンドの `arrow`, `key`, `label` の座標; 当てはめ (fit) られる変数のリスト (コマンド `fit` のキ ーワード `via` に続くリスト); コマンド `set cntrparam` で指定されると びとびの等高線の値やそのループパラメータのリスト; `set` コマンドの `dgrid3d` `dummy`, `isosamples`, `offsets`, `origin`, `samples`, `size`, `time`, `view` の引数; 目盛りの位置やそのループパラメータのリ スト; タイトルや軸の見出しの位置; `plot`, `replot`, `splot` コマンドの x,y,z 座標の計算に使われる媒介変数関数のリスト; `plot`, `replot`, `splot` コマンドの複数の描画 (データ、または関数) のそれぞれの一連のキ ーワードのリスト。 (丸) カッコは、目盛りの見出しを (ループパラメータではなく) 明示的に集 合与える場合の区切りとして、または `fit`, `plot`, `replot`, `splot` コ マンドの `using` フィルタでの計算を指示するために使われます。 (カッコやコンマは通常の関数の表記でも使われます。) かぎかっこは、`set`, `plot`, `splot` コマンド上で用いられた場合は範囲 を区切るのに使われます。 コロンは `range` (範囲) 指定 (`set`, `plot`, `splot` コマンドで使われ る) の両端の値を区切るのに、または `plot`, `replot`, `splot`, `fit` コ マンドの `using` フィルタの各エントリを区切るのに使われます。 セミコロン (;) は、一行のコマンド行内で与えられる複数のコマンドを区切 るのに使われます。 中カッコは、`postscript` のようないくつかの出力形式で特別に処理される 文字列内で使用されます。または複素数を記述するのにも使われます: {3,2} = 3 + 2i となります。 文字列は単一引用符 ('') または二重引用符 ("") で囲まれます。\n (改行) や \345 (8 進表記の文字コード) のような文字列でのバックスラッシュ (\) は、2 重引用符内の文字列では効力がありますが、単一引用符内では効力を持 ちません。 1 つの複数行文字列に関する位置合わせは各行に同等に働きます。よって、中 央に位置合わせされた文字列 "This is the first line of text.\nThis is the second line." は次のように表示されます: This is the first line of text. This is the second line. しかし 'This is the first line of text.\nThis is the second line.' だと次のようになります。 This is the first line of text.\nThis is the second line. ファイル名は単一引用符、あるいは二重引用符内で囲みます。このマニュアル では一般にコマンドの例示では、わかりやすくするためにファイル名は単一引 用符でくくり、他の文字列は二重引用符でくくります。 postscript 出力形式 (terminal) の enhanced オプションを使う場合、現在 は、{} の内部に \n を入れてはいけません。 EEPIC, Imagen, Uniplex, LaTeX, TPIC の各ドライバでは、単一引用符内の \\ または二重引用符内の \\\\ で改行を示すことが可能です。 バッククォート (``) は置換のためにシステムコマンドを囲むのに使います。 ?time/date `gnuplot` は入力データとして時間/日付情報の使用をサポートしています。 この機能は `set xdata time`, `set ydata time` などのコマンドによって有 効になります。 内部では全ての時間/日付は 2000 年からの秒数に変換されます。コマンド `set timefmt` は全ての入力書式を定義します。データファイル、範囲、軸の 目盛りの見出し、ラベルの位置 -- 手短に言えば、データの値を受けとる全て のものがこの書式にしたがって受けとらなければいけません。一時には一つの 入力書式のみが有効なので、同じときに入力される全ての時間/日付のデータは 同じ書式である必要があります。よって、ファイル内の x と y の両方が時間 /日付データである場合は、それらは同じ書式でなければいけません。 秒数へ (秒数から) の変換は国際標準時 (UT; グリニッジ標準時 (GMT) と同 じ) が使われます。各国標準時や夏時間への変換の機能は何も持ち合わせてい ません。もしデータがすべて同じ標準時間帯に従っているなら (そして全てが 夏時間か、そうでないかのどちらか一方にのみ従うなら) これに関して何も心 配することはありません。しかし、あなたが使用するアプリケーションで絶対 的な時刻を厳密に考察しなければいけない場合は、あなた自身が UT に変換す べきでしょう。 `show xrange` のようなコマンドは、その整数値を `timefmt` に従って解釈 し直します。`timefmt` を変更してもう一度 `show` でその値を表示させると それは新しい `timefmt` に従って表示されます。このため、もし機能を停止 させるコマンド (`set xdata` のような) を与えると、その値は整数値として 表示されることになります。 コマンド `set format` は、指定された軸が時間/日付であるなしに関わらず 目盛りの見出しに使われる書式を定義します。 時間/日付情報がファイルから描画される場合、`plot`, `splot` コマンドで は `using` オプションを「必ず」使う必要があります。`plot`, `splot` で は各行のデータ列の分離にスペースを使いますが、時間/日付データはその中 にスペースを含み得るからです。もしタブ区切りを使用しているのなら、あな たのシステムがそれをどう扱うか確かめるために何度もテストする必要がある でしょう。 次の例は時間/日付データの描画の例です。 ファイル "data" は以下のような行からなるとします: 03/21/95 10:00 6.02e23 このファイルは以下のようにして表示されます: set xdata time set timefmt "%m/%d/%y" set xrange ["03/21/95":"03/22/95"] set format x "%m/%d" set timefmt "%m/%d/%y %H:%M" plot "data" using 1:3 ここで、x 軸の目盛りの見出しは "03/21" のように表示されます。 各コマンドの詳細はそれぞれの項の記述を参照してください。 ?commands このセクションでは `gnuplot` が受け付けるコマンドをアルファベット順に 並べています。このドキュメントを紙に印刷したものは全てのコマンドを含ん でいますが、オンラインドキュメントの方は完全ではない可能性があります。 実際、この見出しの下に何のコマンドも表示されないシステムがあります。 ほとんどの場合、コマンド名とそのオプションは、紛らわしくない範囲で省略 することが可能です。すなわち、"`plot f(x) with lines`" の代わりに "`p f(x) w l`" とすることができます。 書式の記述において、中カッコ ({}) は追加指定できる引数を意味し、 縦棒 (|) は互いに排他的な引数を区切るものとします。 ?commands cd ?cd `cd` コマンドはカレントディレクトリを変更します. 書式: cd '<ディレクトリ名>' ディレクトリ名は引用符に囲まれていなければなりません. 例: cd 'subdir' cd '..' DOS では、二重引用符内 (") ではバックスラッシュ (\) が特別な意味を持っ てしまうため、一重引用符 (') を用いなければなりません。 例えば cd "c:\newdata" では失敗しますが、 cd 'c:\newdata' なら期待通りに動くでしょう。 ?commands call ?call `call` コマンドは,1 つの機能以外は `load` コマンドと等価です. その機能は,10 個までのパラメータをコマンドに追加できることです (パラメータは標準的な構文規則によって区切られます).これらのパラメータ は,ファイルから読まれる行に代入することができます.`call` した入力 ファイルから各行が 読まれる時に,`$` (ドル記号) に続く数字 (0--9) の並 びを走査します.もし見つかれば,その並びは `call` のコマンド行の対応す るパラメータで置き換えられます.`call` の行でそのパラメータが文字列と して指定されているならば,取り囲んでいる引用符が省かれて代入されます. 数字以外の文字が後に続く `$` はその文字になります。例えば,一つの `$` を得るには `$$` を使います.`call` のコマンド行に 10 個より多いパラメ ータを与えるとエラーが起こります.与えられなかったパラメータは,何も無 しとして扱われます.`call` 中のファイルの中にさらに `load` または `call` コマンドがあっても構いません. `call` コマンドは,複数のコマンドからなる行の中では最後のコマンドでな ければなりません. 書式: call "<入力ファイル>" <パラメータ 0> <パ 1> ... <パ 9> 入力ファイル名は引用符で囲まなければなりません.そして、パラメータも 引用符で囲むことを推奨します (gnuplot の将来のバージョンでは引用符で 囲んである部分と囲んでない部分に対しては違う取り扱いをする予定です)。 例: ファイル 'calltest.gp' は以下の行を含んでいるとすると: pause 0 "p0=$0 p1=$1 p2=$2 p3=$3 p4=$4 p5=$5 p6=$6 p7=x$7x" 次の行を入力すると: call 'calltest.gp' "abcd" 1.2 + "'quoted'" -- "$2" 以下のように表示されるでしょう: p0=abcd p1=1.2 p2=+ p3='quoted' p4=- p5=- p6=$2 p7=xx 注意: `using` を使用しているデータファイルでは文法的に重なってしまいま す。その場合、`call` されたデータファイルからプロットするときは、デー タの n カラム目の指示には `$$n` または `column(n)` を使用してください。 ?commands clear ?clear `clear` コマンドは,`set output` で選択された画面または出力装置をクリ アします.通常,ハードコピー装置に対しては改ページを行います.出力装置 を選択するには `set terminal` を使用して下さい. いくつかの出力装置は `clear` コマンドでは `set size` で定義された描画 領域のみを消去します。そのため、`set multiplot` とともに使用することで 挿入図を一つ作ることができます。 例: set multiplot plot sin(x) set origin 0.5,0.5 set size 0.4,0.4 clear plot cos(x) set nomultiplot これらのコマンドの詳細については `set multiplot`, `set size`, `set origin` を参照してください。 ?commands exit ?exit `exit` と `quit` の両コマンドと END-OF-FILE 文字は,現在の `gnuplot` コマンドファイルを終了し、次のファイルを `load` します。詳細は "help batch/interactive" を参照してください。 これらのコマンドは,出力装置を `clear` コマンドと同様にクリアしてして から終了させます. ?commands fit ?fit ?least-squares ?Marquardt `fit` コマンドはユーザ定義関数を (x,y) または (x,y,z) の形式のデータ点の 集合への当てはめを可能にします。それには Marquardt-Levenberg 法による 非線形最小自乗法 (NLLS) の実装が用いられます。関数内部に現われるユーザ 定義変数はいずれも当てはめのパラメータとして使うことができます。ただ、 その関数の返り値は実数である必要があります。 書式: fit {[xrange] {[yrange]}} '' {datafile-modifiers} via '' | {,,...} 範囲 (xrange,yrange) は、当てはめられるデータ点を一時的に制限するのに 使うことができ、その範囲を超えたデータは全て無視されます。その書式は `plot` コマンド同様 [{dummy_variable=}{}{:}], です (`plot ranges` 参照)。 は通常はあらかじめユーザ定義された f(x) または f(x,y) の形 の関数ですが、`gnuplot` で有効な任意の数式を指定できます。 は `plot` コマンドと同様に扱われます。`plot datafile` の修 飾子 (`using`, `every`,...) は `smooth` を除いて全て `fit` に使うこと ができます。`plot datafile` を参照してください。 当てはめる 1 変数関数 y=f(x) へのデフォルトのデータの書式は {x:}y か x:y:s で、これらはデータファイルへの `using` 指定子で変更できます。こ の 3 番目の項目 (列番号、または数式) が与えられた場合は、それは対応す る y の値の標準偏差として解釈され、それはそのデータへの重み (=1/s**2) を計算するのに使われます。そうでなければ、全てのデータは同じ重み (1) で計算されます。 2 変数関数 z=f(x,y) を当てはめる場合、データの書式は `using` による 4 つの項目 x:y:z:s が要求されます。これは完全に全てが与えられなければな りません--不足する項目に対してはどの列もデフォルトは仮定されていません。 各データ点の重みは上と同様に 's' から計算されます。もし誤差評価を持っ ていなければ、定数値を定数式として指定すればいいでしょう (`plot datafile using` 参照)。例えば `using 1:2:3:(1)` のように。 複数のデータ集合も複数の 1 変数関数に同時に当てはめることも、y を '仮 変数' とすれば可能です。例えばデータ行番号を使い、2 変数関数への当ては め、とすればいいでしょう。`fit multibranch` を参照してください。 `via` 指定子はパラメータの調節を直接か、またはパラメータファイルを参照 することによって行うかを指定します。 例: f(x) = a*x**2 + b*x + c g(x,y) = a*x**2 + b*y**2 + c*x*y FIT_LIMIT = 1e-6 fit f(x) 'measured.dat' via 'start.par' fit f(x) 'measured.dat' using 3:($7-5) via 'start.par' fit f(x) './data/trash.dat' using 1:2:3 via a, b, c fit g(x,y) 'surface.dat' using 1:2:3:(1) via a, b, c 反復の個々のステップの後で、当てはめの現在の状態についての詳細な情報が 画面に表示されます。そし最初と最後の状態に関する同じ情報が "fit.log" というログファイルにも書き出されます。このファイルは前の当てはめの履歴 を消さないように常に追加されていきます。これは望むなら削除、あるいは別 な名前にできます。 当てはめの反復は Ctrl-C を押すことで中断できます (MSDOS と Atari マル チタスクシステムでは Ctrl-C 以外の任意のキー)。現在の反復が正常に終了 した後、(1) 当てはめを止めて現在のパラメータの値を採用する, (2) 当ては めを続行する, (3) 環境変数 FIT_SCRIPT で指定した `gnuplot` コマンドを 実行する、のいずれかを選ぶことができます。FIT_SCRIPT のデフォルトは `replot` であり、よってもしデータと当てはめ関数を一つのグラフにあらか じめ描画してあれば、現在の当てはめの状態を表示することができます。 `fit` が終了した後は、最後のパラメータの値を保存するのに `update` コマ ンドを使います。その値は再びパラメータの値として使うことができます。 詳細は `update` を参照。 ?commands fit parameters ?fit parameters ?commands fit adjustable_parameters ?fit adjustable_parameters ?fit_parameters `via` はパラメータを調節するための 2 つの方法を指定できます。一つは コマンドラインから直接指示するもので、もう一つはパラメータファイルを 参照して間接的に行うものです。この 2 つは初期値の設定で違った方法を取 ります。 調整するパラメータは、`via` キーワードの後ろにコンマで区切られた変数名 のリストを書くことで指定できます。定義されていない変数は初期値 1.0 と して作られます。しかし当てはめは、変数の初期値があらかじめ適切な値に設 定されている方が多分速く収束するでしょう。 パラメータファイルは個々のパラメータを、個別に 1 行に一つずつ、初期値を 次のような形で指定して書きます。 変数名 = 初期値 '#' で始まるコメント行や空行も許されます。特別な形式として 変数名 = 初期値 # FIXED は、この変数が固定されたパラメータであることを意味し、それはこのファイ ルで初期化されますが、調節はされません。これは、`fit` でレポートされる 変数の中で、どれが固定された変数であるかを明示するのに有用でしょう。な お、`# FIXED` と言うキーワードは厳密にこの形でなくてはなりません。 ?commands fit beginners_guide ?fit beginners_guide ?fit guide ?fitting `fit` は、与えられたデータ点を与えられたユーザ定義関数にもっとも良く 当てはめるようなパラメータを見つけるのに使われます。その当てはめは、 同じ場所での入力データ点と関数値との自乗誤差、あるいは残差 (SSR:Sum of the Squared Residuals) の和を基に判定されます。この量は通常χ(カイ) 自乗と呼ばれます。このアルゴリズムは SSR を 最小化することをしようと します。もう少し詳しく言うと、データ誤差 (または 1.0) の重みつき残差の 自乗和 (WSSR) の最小化を行っています。詳細は `fit error_estimate` 参照。 これが、(非線形) 最小自乗当てはめ法と呼ばれるゆえんです。`非線形` が 何を意味しているのかを見るための例を紹介しますが、その前にいくつかの 仮定について述べておきます。ここでは簡単のため、1 変数のユーザー定義 関数は z=f(x), 2 変数の関数は z=f(x,y) のようにし、いずれも従属変数と して z を用いることにします。パラメータとは `fit` が調整して適切な値を 決定するユーザ定義変数で、関数の定義式中の未知数です。ここで言う、線形 性/非線形性とは、従属変数 z と `fit` が調整するパラメータとの関係に対 するものであり、z と独立変数 x (または x と y) との関係のことではあり ません (数学的に述べると、線形最小自乗問題では、当てはめ関数のパラメー タによる 2 階 (そして更に高階の) 導関数は 0、ということになります)。 線形最小自乗法 (LLS) では、ユーザ定義関数は単純な関数の和であり、それ ぞれは一つのパラメータの定数倍で他のパラメータを含まない項になります。 非線形最小自乗法 (NLLS) ではより複雑な関数を扱い、パラメータは色んな 使われ方をされます。フーリエ級数は線形と非線形の最小自乗法の違いを表す 一つの例です。フーリエ級数では一つの項は z=a*sin(c*x) + b*cos(c*x). のように表されます。もし、a と b が未知なパラメータで c は定数だとすれば パラメータの評価は線形最小自乗問題になります。しかし、c が未知なパラメー タならばそれは非線形問題になります。 線形の場合、パラメータの値は比較的簡単な線形代数の直接法によって決定で きます。しかしそのような LLS は特殊な場合であり、'gnuplot' が使用する 反復法は、もちろんそれも含めて、より一般的な NLLS 問題を解くことができ ます。`fit` は検索を行うことで最小値を探そうとします。反復の各ステップ は、パラメータの新しい値の組に対して WSSR を計算します。Marquardt- Levenberg のアルゴリズムは次のステップのパラメータの値を選択します。そ してそれはあらかじめ与えた基準、すなわち、(1) 当てはめが "収束した" (WSSR の相対誤差が FIT_LIMIT より小さくなった場合)、または (2) あらか じめ設定された反復数の限界 FIT_MAXITER (`fit control variables` 参照) に達した場合、のいずれかを満たすまで続けられます。キーボードからその 当てはめの反復は中断できますし、それに続いて中止することもできます (`fit` 参照)。 当てはめに使われる関数はしばしばあるモデル (またはある理論) を元にして いて、それはデータの振舞を記述したり、あるいは予測しようとします。よっ て `fit` は、データがそのモデルにどれくらいうまく当てはまっているのかを 決定するため、そして個々のパラメータの誤差の範囲を評価するために、モデ ルの自由なパラメータの値を求めるのに使われます。`fit error_estimates` も 参照してください。 そうでなければ、曲線による当てはめにおける関数は、モデルとは無関係に選 ばれています (それは十分な表現力と最も少ない数のパラメータを持ち、デー タの傾向を記述しそうな関数として経験に基づいて選ばれるでしょう)。 しかし、もしあなたが全てのデータ点を通るような滑らかな曲線を欲しいなら `fit` ではなく、むしろ `plot` の `smooth` オプションでそれを行うべきで しょう。 ?commands fit error_estimate ?fit error_estimate ?fit errors `fit` において "誤差" という用語は 2 つの異なった文脈で用いられます。 一つはデータ誤差、もう一つはパラメータ誤差です。 データ誤差は、平方残差の重み付きの和 WSSR、すなわちχ自乗を決定する際 個々のデータ点の相対的な重みを計算するのに用いられます。それらはパラメ ータの評価に影響を与えます。それは、それらが、当てはめられた関数からの 個々のデータ点の偏差が最終的な値に与える影響の大きさを決定することによ ります。正確なデータ誤差評価が与えられている場合には、パラメータの誤差 評価等の `fit` が出力する情報はより役に立つでしょう。 'statistical overview' では `fit` の出力のいくつかを説明し、'practical guidelines' に対する背景を述べています。 ?commands fit error statistical_overview ?fit error statistical_overview ?statistical_overview 非線形最小自乗法 (Non-Linear Least-Squares; NLLS) の理論は、誤差の正規 分布の点から一般的に記述されています。すなわち、入力データは与えられた 平均とその平均に対する与えられた標準偏差を持つガウス (正規) 分布に従う 母集団からの標本と仮定されます。十分大きい標本、そして母集団の標準偏差 を知ることに対しては、χ自乗分布統計を用いて、通常「χ自乗」と呼ばれる 値を調べることにより「当てはめの良さ」を述べることができます。減らされ た自由度のχ自乗 (χ自乗の自由度は、データ点の数から当てはめられるパラ メータの個数だけ引いた数) が 1.0 である場合は、データ点と当てはめられた 関数との偏差の重みつき自乗和が、現在のパラメータ値に対する関数と与えら れた標準偏差によって特徴付けられた母集団の、ランダムなサンプルに対する 自乗和とが全く同じであることを意味します。 分散 = 総計である数え上げ統計学同様、母集団の標準偏差が定数でない場合、 各点は観測される偏差の和と期待される偏差の和を比較するときに個別に重み づけされるべきです。 最終段階で `fit` は 'stdfit'、すなわち残差の RMS (自乗平均平方根) で求 められる当てはめの標準偏差と、データ点が重みづけられている場合に '減ら されたχ自乗' とも呼ばれる残差の分散をレポートします。自由度 (データ点 の数から当てはめパラメータの数を引いたもの) はこれらの評価で使用されま す。なぜなら、データ点の残差の計算で使われるパラメータは同じデータから 得られるものだからです。 パラメータに関する信頼レベルを評価することで、当てはめから得られる最小 のχ自乗と、要求する信頼レベルのχ自乗の値を決定するためのχ自乗の統計 を用いることが出来ます。しかし、そのような値を生成するパラメータの組を 決定するには、相当のさらなる計算が必要となるでしょう。 `fit` は信頼区間の決定よりむしろ、最後の反復後の分散-共分散行列から直 ちに得られるパラメータの誤差評価を報告します。これらの評価は、標準偏差 として計算される量の指定に関する統計上の条件が、一般には非線形最小自乗 問題では保証されないのですが、線形最小自乗問題での標準誤差 (各パラメー タの標準偏差) と同じ方法で計算されます。そしてそのため慣例により、これ らは "標準誤差" とか "漸近標準誤差" と呼ばれています。漸近標準誤差は一 般に楽観過ぎ、信頼レベルの決定には使うべきではありませんが、定性的な指 標としては役に立つでしょう。 最終的な解は相関行列も生成します。それは解の範囲におけるパラメータの相 関の表示を与えてくれます:もし一つのパラメータが変更されると、χ自乗の 増加が、他の補正の変更を行なう ? 主対角成分、すなわち自己相関はすべて 1 で、もし全てのパラメータが独立ならば他の成分はすべて 0 に近い値にな ります。完全に他を補いあう 2 つ変数は、大きさが 1 で、関係が正の相関か 負の相関かによって正か負になる符号を持つ非対角成分を持ちます。非対角要 素の大きさが小さいほど、各パラメータの標準偏差の評価は、漸近標準誤差に 近くなります。 ?commands fit error practical_guidelines ?fit error practical_guidelines ?practical_guidelines ?guidelines 個々のデータ点への重みづけの割り当ての基礎を知っているなら、それが測定 結果に対するより詳しい情報を使用させようとするでしょう。例えば、幾つか の点は他の点より当てになるということを考慮に入れることが可能です。そし て、それらは最終的なパラメータの値に影響します。 データの重み付けは、最後の反復後の `fit` の追加出力に対する解釈の基礎 を与えます。各点に同等に重み付けを行なうにしても、重み 1 を使うことよ りもむしろ平均標準偏差を評価することが、χ自乗が定義によりそうであるよ うに、WSSR を 無次元変数とすることになります。 当てはめ反復の各段階で、当てはめの進行の評価に使うことが出来る情報が表 示されます ('*' はより小さい WSSR を見つけられなかったこと、そして再試 行していることを意味します)。'sum of squares of residuals' (残差の自乗 和) は、'chisquare' (χ自乗) とも呼ばれますが、これはデータと当てはめ 関数との間の WSSR を意味していて、`fit` はこれを最小化しようとします。 この段階で、重み付けされたデータによって、χ自乗の値は自由度 (= データ 点の数 - パラメータの数) に近付くことが期待されます。WSSR は補正された χ自乗値 (WSSR/ndf; ndf = 自由度)、または当てはめ標準偏差 (stdfit = sqrt(WSSR/ndf)) を計算するのに使われます。それらは最終的な WSSR に対し てレポートされます。 データが重み付けされていなければ、stdfit は、ユーザの単位での、データ と当てはめ関数の偏差の RMS (自乗平均平方根) になります。 もし妥当なデータ誤差を与え、データ点が十分多く、モデルが正しければ、 補正χ自乗値はほぼ 1 になります (詳細は、適当な統計学の本の 'χ自乗分 布' の項を参照してください)。この場合、この概要に書かれていること以外 に、モデルがデータにどれくらい良く当てはっているかを決定するための追加 の試験方法がいくつかあります。 補正χ自乗が 1 よりはるかに大きくなったら、それは不正なデータ誤差評価、 正規分布しないデータ誤差、システム上の測定誤差、孤立した標本値 (outliers)、または良くないモデル関数などのためでしょう。例えば `plot 'datafile' using 1:($2-f($1))` などとして残差を描画することは、それら のシステム的な傾向を知るための手がかりとなります。データ点と関数の両者 を描画することは、他のモデルを考えための手がかりとなるでしょう。 同様に、1.0 より小さい補正χ自乗は、WSSR が、正規分布する誤差を持つラ ンダムなサンプルと関数に対して期待されるものよりも小さいことを意味しま す。データ誤差評価が大きすぎるのか、統計的な仮定が正しくないのか、また はモデル関数が一般的すぎて、内在的傾向に加えて特殊なサンプルによる変動 の当てはめになっているのでしょう。最後の場合は、よりシンプルな関数にす ればうまく行くでしょう。 標準的なエラーを、パラメータの不確定性に関する、あるより現実的な評価に 関係付けること、および相関行列の重要性を評価することができるようになる 前に、あなたは `fit` と、それを適用しようとするある種の問題に慣れてお く必要があるでしょう。 `fit` は、大抵の非線形最小自乗法の実装では共通して、距離の自乗 (y-f(x))**2 の重み付きの和を最小化しようとすることに注意してください。 それは、x の値の "誤差" を計算に関してはどんな方法も与えてはおらず、単 に y に関する評価のみです。また、"孤立点" (正規分布のモデルのから外れ ているデータ点) は常に解を悪化させる可能性があります。 ?commands fit_control ?fit_control ?fit control `fit` に影響を与えるために定義できるたくさんの `gnuplot` の変数があり ます。それらは `gnuplot` の動作中に一度定義できますが、それは `control_variable` で紹介し、`gnuplot` が立 ち上がる前に設定する変数は `environment_variables` で紹介します。 ?commands fit_control variables ?fit_control variables ?fit control variables デフォルトのもっとも小さい数字の限界 (1e-5) は、変数 FIT_LIMIT で変更できます。残差の平方自乗和が 2 つの反復ステップ間で、この数値よ り小さい数しか変化しなかった場合、当てはめルーチンは、これを '収束した' と見なします。 反復数の最大値は変数 FIT_MAXITER で制限されます。0 (または定義しない場合) は制限無しを意味します。 更にそのアルゴリズムを制御したい場合で、かつ Marquardt-Levenberg アル ゴリズムを良く知っている場合は、さらにそれに影響を与える変数があります。 `lambda` (λ) の最初の値は、通常 ML 行列から自動的に計算されますが、も しそれをあらかじめ用意した値にセットしたければ FIT_START_LAMBDA にセットしてください。FIT_START_LAMBDA を 0 以下にセットすると、自動的 に計算されるようになります。変数 FIT_LAMBDA_FACTOR は、χ自乗化された関数が増加、あるいは減少するにつれて `lambda` が増加 あるいは減少する因数を与えます。FIT_LAMBDA_FACTOR を 0 とすると、それは デフォルトの因数 10.0 が使用されます。 `fit` には FIT_ から始まる変数が他にもありますから、ユーザ定義変数とし てはそのような名前で始まる変数は使わないようにするのが安全でしょう。 変数 FIT_SKIP と FIT_INDEX は、以前の版の `gnuplot` の、`gnufit` と呼 ばれていた `fit` パッチで使われていたもので、現在は使用されていません。 FIT_SKIP の機能はデータファイルに対する `every` 指定子で用意されていま す。FIT_INDEX は複数当てはめ法 (multi-branch fitting) で使われていたも のですが、1 変数の複数当てはめ法は、今では 疑似 3 次元当てはめとして行 なわれていて、そこでは枝の指定には 2 変数と `using` が使われています。 `fit multi-branch` を参照してください。 ?commands fit_control environment ?fit_control environment ?fit control environment 環境変数は `gnuplot` が立ち上がる前に定義しなければなりません。その設 定方法はオペレーティングシステムに依存します。 FIT_LOG は、当てはめのログが書かれるファイル名 (およびパス) を変更します。デフ ォルトでは、作業ディレクトリ上の "fit.log" となっています。 FIT_SCRIPT は、ユーザが中断した後に実行するコマンドを指定します。デフォルトでは `replot` ですが、`plot` や `load` コマンドとすれば、当てはめの進行状 況の表示をカスタマイズするのに便利でしょう。 ?commands fit multi-branch ?fit multi-branch ?multi-branch ?branch 複数当てはめ法 (multi-branch fitting) では、複数のデータ集合を、共通の パラメータを持つ複数の 1 変数の関数に、WSSR の総和を最小化することによ って同時に当てはめることが出来ます。各データセットに対する関数とパラメ ータ (枝) は '疑似変数' を使うことで選択できます。例えば、データ行番号 (-1; 'データ列' の番号) またはデータファイル番号 (-2) を 2 つ目の独立 変数とします。 例: 2 つの指数減衰形 z=f(x) が与えられていて、それぞれ異なるデータ集合 を記述しているが、共通した減衰時間を持ち、そのパラメータの値を評価する。 データファイルが x:z:s の形式であったとすると、この場合以下のようにす ればよい。 f(x,y) = (y==0) ? a*exp(-x/tau) : b*exp(-x/tau) fit f(x,y) 'datafile' using 1:-1:2:3 via a, b, tau より複雑な例については、デモファイル "fit.dem" で使われる "hexa.fnc" を参照してください。 もし従属変数のスケールに差がある場合、単位の重み付けでは 1 つの枝が支 配してしまう可能性があるので、適当な重み付けが必要になります。各枝をバ ラバラに当てはめるのに複数当てはめ法の解を初期値として用いるのは、全体 を合わせた解の各枝に対する相対的な影響に関する表示を与えることになるで しょう。 ?commands fit starting_values ?fit starting_values ?starting_values 非線形当てはめは、大域的な最適値 (残差の自乗和 (SSR) の最小値を持つ解) への収束は保証はしませんが、局所的な極小値を与えることはできます。その サブルーチンはそれを決定する方法を何も持ち合わせていないので、これが起 こったかどうかを判断するのはあなたの責任となります。 `fit` は、解から遠くから始めると失敗するかも知れませんし、しばしばそれ は起こり得ます。遠くというのは、SSR が大きく、パラメータの変化に対して その変化が小さい、あるいは数値的に不安定な領域 (例えば数値が大きすぎて 浮動小数の桁あふれを起こす) に到達してしまって、その結果 "未定義値 (undefined value)" のメッセージか `gnuplot` の停止を引き起こしてしまう ような場合を意味します。 大域的な最適値を見つける可能性を改善するには、最初の値をその解に少なく ともほぼ近くに取るべきでしょう。例えば、もし可能ならば一桁分の大きさの 範囲内で。最初の値が解に近いほど他の解で終了してしまう可能性は低くなり ます。最初の値を見つける一つの方法は、データと当てはめ関数を同じグラフ の上に描画して適当な近さに達するまで、パラメータの値を変更して `replot` することを繰り返すことです。その描画は、よくない当てはめの極小値で当て はめが終了したかどうかをチェックするのにも有用です。 もちろん、適度に良い当てはめが、"それよりよい" 当てはめ (ある改良され た当てはめの良さの基準によって特徴付けられた統計学的な意味で、あるいは そのモデルのより適切な解である、という物理的な意味で) が存在しないこと の証明にはなりません。問題によっては、各パラメータの意味のある範囲をカ バーするような様々な初期値の集合に対して `fit` することが望ましいかも 知れません。 ?commands fit tips ?fit tips ?tips ここでは、`fit` を最大限に利用するためにいくつか覚えておくべきヒントを 紹介します。それらは組織的ではないので、その本質がしみ込むまで何回もよ く読んでください。 `fit` の引数の `via` には、2 つの大きく異なる目的のための 2 つの形式が あります。`via "file"` の形式は、バッチ処理 (非対話型での実行が可能) で最も良く使われ、そのファイルで初期値を与え、またその後で結果を他の (または 同じ) パラメータファイルにコピーするために `update` を使うこ とも出来ます。 `via var1, var2, ...` の形式は対話型の実行で良く使われ、コマンドヒスト リの機構が使ってパラメータリストの編集を行い、当てはめを実行したり、あ るいは新しい初期値を与えて次の実行を行なったりします。これは難しい問題 に対しては特に有用で、全てのパラメータに対して 1 度だけ当てはめを直接 実行しても、良い初期値でなければうまくいかないことが起こり得るからです。 それを見つけるには、いくつかのパラメータのみに対して何回か反復を行ない、 最終的には全てのパラメータに対する 1 度の当てはめがうまくいくところに 十分近くなるまでそれを繰り返すことです。 当てはめを行なう関数のパラメータ間に共通の依存関係がないことは確認して おいてください。例えば、a*exp(x+b) を当てはめに使ってはいけません。そ れは a*exp(x+b)=a*exp(b)*exp(x) だからです。よってこの場合は a*exp(x) または exp(x+b) を使ってください。 技術的なお話: パラメータの大きさはあまり違いすぎてはいけません。絶対値 が最も大きいパラメータと最も小さいパラメータの比が大きい程当てはめの収 束は遅くなります。その比が、マシンの浮動小数の精度の逆数に近いか、また はそれ以上ならば、ほとんど永久に収束しないか、拒否されるでしょう。よっ てその関数をこれを避けるように改良しなければいけません。例えば、関数の 定義で 'parameter' を '1e9*parameter' にするとか、または最初の値を 1e9 で割るとか。 もし、関数を、当てはめるパラメータを係数とする、単純な関数の線形結合で 書けるなら、それはとてもいいので是非そうしてください。何故なら、問題が もはや非線形ではないので、反復は少ない回数で収束するでしょう。もしかし たらたった一回ですむかもしれません。 実際の実験の講義ではデータ解析に対するいくつかの指示が与えられ、それで データへの最初の関数の当てはめが行なわれます。もしかすると、基礎理論の 複数の側面にひとつずつ対応する複数回のプロセスが必要かも知れませんが、 そしてそれらの関数の当てはめのパラメータから本当に欲しかった情報を取り 出すでしょう。しかし、`fit` を使えば、求めるパラメータの視点から直接モ デル関数を書くことにより、それはしばしば 1 回で済むのです。時々はより 難しい当てはめ問題の計算コストがかかりますが、データ変換もかなりの割合 で避けることが出来ます。もしこれが、当てはめ関数の単純化に関して、前の 段落と矛盾してると思うなら、それは正解です。 "singular matrix" のメッセージは、この Marquardt-Levenberg アルゴリズ ムのルーチンが、次の反復に対するパラメータの値の計算が出来ないことを意 味します。この場合、別な初期値から始めるか、関数を別な形で書き直すか、 より簡単な関数にしてみてください。 最後に、他の当てはめパッケージ (fudgit) のマニュアルから、これらの文書 を要約するようないい引用を上げます: "Nonlinear fitting is an art! (非 線形当てはめ法は芸術だ !)" ?commands help ?help `help`コマンドは,オンラインヘルプを表示します.ある項についての説明 を指定したいときには,次の書式を使って下さい: help {<項目名>} もし <項目名> が指定されなかった場合は,`gnuplot` についての簡単な説 明が表示されます.指定した項目についての説明が表示された後,それに対 する細目のメニューが表示され、その細目名を入力することで細目に対する ヘルプを続けることができます。そして,その細目の説明が表示された後に, さらなる細目名の入力を要求されるか、または 1 つ前の項目のレベルへ戻り ます。これを繰り返すとやがて,`gnuplot` のコマンドラインへと戻ります. また、疑問符 (?) を項目として指定すると、現在のレベルの項目のリストが 表示されます。 ?commands if ?if `if` コマンドは,条件付でコマンドを実行させることができます. 書式: if (<条件>) <コマンド行> <条件> が評価され,もしそれが真 (ゼロでない) ならば,<コマンド行> のコ マンドが実行されます.もし,<条件> が偽 (ゼロ) ならば,<コマンド行> の 全部が無視されます.同じ行に複数のコマンド置くことを可能にする ';' を 使えば,条件付のコマンドが終らないことに注意して下さい. 例: pi=3 if (pi!=acos(-1)) print "?Fixing pi!"; pi=acos(-1); print pi を実行すると, ?Fixing pi! 3.14159265358979 と表示されます.また, if (1==2) print "Never see this"; print "Or this either" ならば,何も表示されません. `if` と `reread` を使ってループを構成する例については `reread` を参照 してください。 ?commands load ?load `load` コマンドは,指定された入力ファイルの各行を,それが対話的に入力 されたかのように実行します.`save` コマンドでつくられたファイルは, `load` することができます.有効なコマンドの書かれたテキストファイルを つくれば,それは,`load`コマンドによって,実行することができます. `load` 中のファイルの中にさらに `load` または `call` コマンドがあって も構いません.コマンド中のコメントについては,`comment` を参照して下さ い.`load` するときに引数を与える方法については `call` を参照してくだ さい。 `load` コマンドは,複数のコマンドからなる行の中では最後のコマンドでな ければなりません. 書式: load "<入力ファイル名>" 入力ファイル名は引用符で囲まなければなりません. `load` コマンドは、標準入力からのコマンドの入力のために、特別なファイ ル名 "-" を用意しています。これは、`gnuplot` のコマンドファイルが、い くつかのコマンドを標準入力から受け付けることを意味します。詳細について は "help batch/interactive" を参照してください。 例: load 'work.gnu' load "func.dat" `gnuplot` への引数として与えられたファイル名は,暗黙のうちに `load` コ マンドによって実行されます.これらは,指定された順にロードされ,その 後 `gnuplot` は終了します. ?commands pause ?pause `pause` コマンドは,コマンドに続く任意の文字列を表示した後,指定され た時間または,改行キーが押されるまで待ちます.`pause` コマンドは, `load` 用のファイルと共に使用すると,便利になるでしょう. 書式: pause <時間> {"<文字列>"} <時間>は,任意の整数の定数または式です.-1 を指定すると改行キーが押さ れるまで待ちます.0 を指定すると一切待たず,正整数を指定するとその秒 数だけ待ちます.`pause 0` は `print` と同じです。 注意: `pause` コマンドは OS へのコマンドであり描画の一部ではないので, 異なる出力装置では異なる動作をする可能性があります.(これは,テキスト とグラフィックスが,どのように混在するかによります.) 例: pause -1 # 改行キーが押されるまで待つ. pause 3 # 3秒待つ. pause -1 "Hit return to continue" pause 10 "Isn't this pretty? It's a cubic spline." ?commands plot ?plot `plot` は `gnuplot` で図を描くための基本的なコマンドです。 それは関数 やデータを実に多くの方法で表示します。`plot` は 2 次元の関数やデータを 描くのに使われ、`splot` は 3 次元の曲面やデータの 2 次元投影を描きます。 `plot` と `splot` は多くの共通の特徴点を持ちますが、その違いについては `splot` の項を参照してください。特に注意しておきますが、`splot` の `binary` と `matrix` のオプションは `plot` には存在しません。 書式: plot {<範囲 (ranges)>} { <関数 (function)> | {"<データファイル (datafile)>" {データファイル修飾子}}} {axes <軸 (axes)>}{<表題 (title)>}{with <スタイル (style)>} {, {定義,} <関数> ...} <関数> または引用符で囲まれたデータファイル名のどちらか一方を与えます。 関数は一本の数式、または parametric mode においては 2 つの数式の組です。 数式は完全に定義してもいいですし、前の方の `gnuplot` のコマンド列で部 分的に定義してもいいです (`user-defined` の項目参照)。 関数とパラメータは `plot` コマンド自身の上で定義をすることも可能です。 これは単に他の項目とコンマで分離して記述することでなされます。 軸は、4 種類の組が利用できます; キーワード <軸> は、特定の直線をどの軸 に尺度を合わせるか、ということを選択するのに使われます。`x1y1` は下の 軸と左の軸を指定; `x2y2` は上と右の軸の指定; `x1y2` は下と右の軸の指定; `x2y1` は上と左の軸の指定です。`plot` コマンドで指定された範囲は、この 最初の軸の組 (下と左) にのみ適用されます。 例: plot sin(x) plot f(x) = sin(x*a), a = .2, f(x), a = .4, f(x) plot [t=1:10] [-pi:pi*2] tan(t), \ "data.1" using (tan($2)):($3/$4) smooth csplines \ axes x1y2 notitle with lines 5 ?commands plot datafile ?plot datafile ?data-file ?datafile ?data ファイルに納められた離散的なデータは、`plot` コマンドライン上で、その データファイル名 (単一引用符または二重引用符で囲まれた) を指定すること によって表示できます。 書式: plot '<ファイル名>' {index } {every } {thru } {using } {smooth