« CPUやHDDの温度をモニターする | トップページ | paco »

2008/10/12

WindowsにコンソールモードのGnuplotをインストールする

数値計算のデータをプロットするとき大変お世話になるGnuplotをWindowsにインストールする。

GnuplotにはWindows用のwgnuplotが用意されているが、このwgnuplotはLinuxで使うgnuplotとは使い方が異なる。そこで今回は、次のような方針でGnuplotをインストールする。

  • wgnuplotのように起動後に別のウィンドウを起動することなくコマンドプロンプト上で操作する。
  • Linux上で作ったGnuplotを呼び出すコードをWindowsでも書き換えることなしに使えるようにする。(terminal x11は除く)

まずはSourceForgeからgp424win32.zipをダウンロードして解凍する。解凍したら、後で使うのでとりあえず放置。このwgnuplotはbinフォルダ内のwgnuplot.exeを起動するだけで使えるけど、コンソールモードがないし、プログラムから呼び出すパイプ処理もLinuxのそれとは違う。

ではコンソールモードはどうするのかと言うと、「gnuplotメモ」にこんな文言がある。

Octave3.0.2+Forge20080831 Mingw版 にコンソールモードのgnuplot 4.3 (CVS)が添付されています

というわけでSourceForgeからOctave3.0.2のインストーラをダウンロードしてくる。次にインストーラを起動してCドライブ直下にでもインストールする。

インストールしたら「gnuplotメモ」にもあるとおりOctaveのbinフォルダ内にある次のファイルをコピーする。

pgnuplot.exe
wgnuplot.mnu
wgnuplot.hlp
gd.dll
fontconfig.dll
expat.dll
freetype-6.dll
zlib1.dll
libgcc_tdm_dw2_1.dll
jpeg.dll
png12.dll

コピー先はCドライブ直下に「gnuplot」というフォルダを作り、その中に「bin」フォルダを作ってその中。つまり、「C:\gnuplot\bin」内にコピーする。

これで環境変数PATHに「C:\gnuplot\bin」を追加すればコンソールモードのgunplotが使えるようになる。ただしコマンドはgnuplotではなくてpgnuplot。

コマンドはエイリアスでgnuplotにできるけど、プログラムから呼び出すときはエイリアスを使うことはできない。そこでpgnuplot.exeの名前ををgnuplot.exeに変更してしまう。

また、このままではpostscriptファイルの出力ができないので以下のような手順でファイルをコピーする。

  1. wgnuplotのbinフォルダ内にあるshareフォルダをC:\gnuplot\bin内にコピー
  2. wgnuplotのcontribフォルダをC:\gnuplot内にコピー
  3. C:\gnuplot内にshareフォルダを作り、その中にOctaveのshareフォルダ(C:\Octave\3.0.2_gcc-4.3.0\share)内にあるgnuplotフォルダをコピーする

これでかなりそれっぽく動くようになる。試しに次のようなプログラムを動かしてみる。

/*==================================================*/
// 単振動シミュレーション
// using Euler Method
// 2008/12/20
// Hiroshi Nishimura
/*==================================================*/

#include <stdio.h>
#include <math.h>

#define TIME 50     // 終了時刻
#define DT   0.01   // 時間刻み

// Gnuplotによるアニメーション
void plotter(FILE* gp, double t, double x);

/*==================================================*/
//  微分方程式 (d/dt)^2{x} = -x
//  ↓
//  d/dt{x} = +v
//  d/dt{v} = -x
/*==================================================*/
double dxdt(double v) { return +v; }
double dvdt(double x) { return -x; }

int main(void)
{
  int    it;
  double x    = 0.0;                  // 初期位置
  double v    = 1.0;                  // 初期速度
  double t    = 0.0;                  // 現在時刻
  int    tmax = (int)ceil(TIME/DT);   // ループ回数
  FILE*  gp   = popen("gnuplot", "w");

  for(it = 1; it <= tmax; it++) {
    double x_old = x;
    double v_old = v;

    t = it*DT;
    x = x + DT*dxdt(v_old);
    v = v + DT*dvdt(x_old);

    plotter(gp, t, x);
  }

  fprintf(stderr, "End. Hit Return Key\n");
  getchar();
  pclose(gp);
  
  return 0;
}

void plotter(FILE* gp, double t, double x)
{
  fprintf(gp, "set title 'Euler T = %4g'\n", t);
  fprintf(gp, "set xrange[-5:5]\n");
  fprintf(gp, "set yrange[-1:1]\n");
  fprintf(gp, "plot '-' with points title 'Point'\n");
  fprintf(gp, "%g, %g\n", x, 0.0);
  fprintf(gp, "end\n");
  fflush(gp);
}

簡単な単振動のアニメーションを出力するプログラムなのだが、アニメーションもちゃんと動く。(-persistは使えないようだ)

今のところは特に不具合もないようだけど、あくまで自己責任で。

[追記]

postscriptファイルの表示するにはghostscriptとgsviewが必要なのでインストールしておく。(gsviewのパスを通しておくとどこからでも開けるので便利)

Link:Ghostscript 8.63 + GSview 4.9 の日本語版

gsviewを起動すると毎度「Registration」が出てきて鬱陶しいので、ビューワにXnViewを使う手もある。

|

« CPUやHDDの温度をモニターする | トップページ | paco »

Gnuplot」カテゴリの記事

MinGW」カテゴリの記事

Windows」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/222903/42759627

この記事へのトラックバック一覧です: WindowsにコンソールモードのGnuplotをインストールする:

» [プログラミング][C#]Gnuplot on C# [千鳥の午後への前奏曲]
昔書いたエントリでC#からGnuplotを制御するプログラムを紹介した。そのときに使うGnuplotは改造されたものであることを述べた。実はGnu OctaveにGnuplotが付属しており、そのGnuplotでも良いことがわかった。(前から知っていたがなんとなく試してはいなかった) そのついで... [続きを読む]

受信: 2009/08/30 11:23

« CPUやHDDの温度をモニターする | トップページ | paco »