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ファイルの出力ができないので以下のような手順でファイルをコピーする。
- wgnuplotのbinフォルダ内にあるshareフォルダをC:\gnuplot\bin内にコピー
- wgnuplotのcontribフォルダをC:\gnuplot内にコピー
- 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を使う手もある。
| 固定リンク | コメント (0) | トラックバック (1)


最近のコメント