gnuplot に関する情報やメモ (2023)


ページが長いので「しおり」の仕組みを用意してみました。 「しおり用」と書かれた所をクリックしてからブックマークに入れると、 それはページの先頭ではなく、その箇所へのブックマークになります。
(03/03 2006)

今までちゃんと説明していませんでしたが、 ここには、日付ごとに記事 (記事 A とします) を書いていますが、 その最後に、(cf. 「情報やメモ (XX/XX 20XX)」) のように別な日付の記事 (記事 B とします) へのリンクがついているものがあります。 これは、「被参照リンク」で、 記事 B が記事 A を参照している (リンクを貼っている) ことを意味します。 つまり、記事 B の方が記事 A より後の記事であり、 記事 A の続きや追加情報、訂正などの内容であったり、 記事 A に関連する別な話題であったりしますので、 記事 A に被参照リンクがついている場合は、 是非そちら (記事 B) もご覧ください。
(01/29 2014)


上では単振り子を set arrow と set object circle で、消してから描く、 ということを繰り返しています。 それを実際に描画するために 1/0 の空打ちの plot コマンドを実行しています。 ついでに key を空打ちの plot に描かせていますが、 5.4 の gnuplot ならそれは keyentry でもできますし、 固定の key なので、むしろ do ブロックの外で set label などで描く方がいいかもしれません。 また、動きが速すぎる、という場合には do ブロックの最後に 「pause 0.1」などを適宜入れてみるといいでしょう。

なお、正確な単振り子と単振動による近似的な振り子の違いは、 上の例では周期の違いが際立って出てしまいますが、 周期以外にもずれがあります。 それを見るには、上の u2 の定義内の T2 を T1 に変えて、 周期を u1 と同じにしてしまって、特に u0 を 0.75*pi や 0.9*pi のような 大きな値 (pi に近い値) にするとよくわかります。 u2 と u1 の差をグラフに描いたり、 または擬似的なアニメーションで見比べるとわかると思いますが、 正確な単振り子の方が、振れの両端 (u0, -u0 になるところ) にとどまっている時間が、 単振動に比べるとやや長めになっています。

  • (02/13 2023) (しおり用)

    02/11 頃に gnuplot-5.4.6 が公開されました。 5.4.6 での新規機能、変更、修正は以下のようです。

    新規機能は、開発版からのバックポートですが、 変更や修正はそれほど多くはありません。 なお、これが 5.X 系列としては最後のリリース版で、 次期リリース版のバージョンは 6.0 になる予定です (確か)。

    5.4.6 の all.dem の出力も置いておきます。

    前回の 5.4.3 用のもの (「情報やメモ (01/11 2022)」) と比較すると、

    の、いずれも追加された 2 つのデモファイルの分だけ 6 頁分増えています。 今回の変更点はそれほど多くはないですが、 今回の 5.4.6 と次期バージョンの 6.X とは、 すでに開発版に関する紹介でいつくか示していますが、 だいぶ違いがあります。 リリース版しか利用できない方は、もうしばらくお待ちください。

    なお、ドキュメントに関しても 6.X からはだいぶ良くなる予定で、 デフォルトの Makefile に日本語の PDF の作成ルールが追加されますし (lualatex を利用)、 texinfo や latex2html を必要としない HTML 形式のマニュアルも 付属の doc2web というプログラムで作れるようになる予定です。 HTML 形式のマニュアルはこんなやつです。

    まだ若干リンクがおかしいところがあったりするようですが、 doc2web によるマニュアルの日本語化もそれほど難しくはないので、 そのうちに紹介したいと思います。

  • (01/25 2023) (しおり用)

    最新の開発版 (git) の all.dem の出力を置いておきます。

    「情報やメモ (09/28 2022)」 の時点でのデモ (740 ページ) に比べると、かなり変更が追加されています。

    最後の watchpoints.dem は、前の 「情報やメモ (09/28 2022)」 の時点でもあり、all.dem にも入っていたはずなのですが、 なぜか前回のデモでは出力されていませんでした。 また、all.dem には入っていませんが、 function_block.dem, spotlight.dem などのデモも追加されています。

    2022 09/27 以降の git 版の改変としては、以下のようなものがあるようです (ドキュメントの差分より)。

    1. バージョンが 5.5 から 6.1 に
    2. 関数ブロックと局所変数の追加
    3. 極座標での with surface 描画スタイル
    4. set plor grid の新設
    5. with lines の sharpen オプション
    6. vms.trm の削除
    7. set colorbox bottom の新設
    8. set pm3d spotlight の新設
    9. show palette fit2rgbformulae の削除
    10. set warning の新設

    2. は、より複雑な関数を定義する機能の新設です。 従来は、gnuplot での関数定義は「f(x)=...」のような形だけで、 3 項演算子などを使って ある程度複雑な関数も無理矢理定義したりしていましたが、 今回の仕組みにより、プログラミング言語などの関数定義に近い形のものが 行えるようになります。ドキュメントには、以下のような例が出ています。

    function $sinc(arg) << EOF
      if (arg == 0) { return 1.0 }
      return sin(arg) / arg
    EOF
    ヒアドキュメント形式での定義で、 関数が呼び出されたときにそのブロックが評価されるので、 処理は早くはありません。 速度が必要な場合はプラグイン機能を利用すべきです。 なお、この関数ブロックで定義する関数の引数は ARGC, ARGV[] でもアクセスできるので、 可変引数の関数も容易に作ることができます。 ドキュメントには、以下のような例が出ています。
    function $max << EOF
      local max = real("-Inf")
      if (ARGC == 0) { return NaN }
      do for [i=1:ARGC] {
        if (max < ARGV[i]) {
          max = ARGV[i]
        }
      }
      return max
    EOF
    local というのが局所変数の定義で、この関数ブロック用に導入されました。 この関数ブロックの機能により、 より高度で、可読性の高い gnuplot スクリプトが書けるようになると思います。

    3. と 4. はセットのようなもののようですが、 実はあまりよく理解していません。ドキュメントでは、 2 次元の極座標描画 (polar plotZ) での温度分布図 (heatmap) を描くための機能のようです。

    5. は、関数のピーク (極) がとがっている場合、 それを with lines で描画するときに、 標本点数 (sample) が少ないとそのピークをまたいで線分を描いてしまうと ピークがだいぶ下ってしまいますが、 それを改善するためのオプションです。

    このオプションをつけると、本当の極を二分法で見つけ、 その点を標本点に追加することでピークがとがったグラフを描いてくれます。

    (cf. 「情報やメモ (04/07 2023)」)


    gnuplot (shige) のページへ戻る
    作成日: 01/12 2024
    竹野茂治@新潟工科大学 (shige@iee.niit.ac.jp)