pm3dの表示をレインボーにする
| 固定リンク
| コメント (0)
| トラックバック (0)
Gnuplot起動時のTerminalを指定したければ、ホームディレクトリに「.gnuplot」なるファイルを作って、例えばx11にしたいときは
set terminal x11
と書いておけばいいのか。
| 固定リンク
| コメント (0)
| トラックバック (0)
gnuplotで等高線の引き方を変えたいときは次のようにする。
gnuplot> set contour gnuplot> set cntrparam levels 等高線の本数 gnuplot> set cntrparam levels incremental 最小値, 間隔, 最大値 gnuplot> set cntrparam levels discrete n1, n2, n3, n4 (等高線を引く値を直接列挙)
デフォルトのまま等高線を引くと、等高線の本数が少なくなり過ぎてよくわからない図になってしまうことがある。そういうときにはcntrparamで設定してみる。
| 固定リンク
| コメント (0)
| トラックバック (0)
例えば、v=(vx,vy)のベクトル場を表示するにはどうしたらいいのだろう?
[追記]
v(x, y)=(vx(x,y), vy(x,y))のベクトル場を表示させるにはこのようなフォーマットでデータファイルを作成すればいいようだ。
x座標 y座標 x成分 y成分 x_1 y_1 vx(x1, y1) vy(x1, y1)
ベクトルの矢印大きすぎるようなら成分を任意の定数で割り、矢印の大きさを調節する。
| 固定リンク
| コメント (0)
| トラックバック (0)
数値計算のデータをプロットするとき大変お世話になるGnuplotをWindowsにインストールする。
GnuplotにはWindows用のwgnuplotが用意されているが、このwgnuplotはLinuxで使うgnuplotとは使い方が異なる。そこで今回は、次のような方針でGnuplotをインストールする。
まずは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ファイルの出力ができないので以下のような手順でファイルをコピーする。
これでかなりそれっぽく動くようになる。試しに次のようなプログラムを動かしてみる。
/*==================================================*/ // 単振動シミュレーション // 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)
数値計算をしていると、データを出力してGnuplotでグラフを作成という作業をよくするんですが、この作業って結構面倒です。グラフをPostscriptにする作業まで終えてから間違いを発見したときなんて、まさに悲劇!!
ですが、コードの中にGunplotの操作を書いておけば、コンパイルして実行しただけでグラフまで作成されます。試しにコードを書いてみます。
/* プログラムからGnuplotを呼び出す */ #include#include int main(void) { FILE *gp; int i; double x; //---Gnuplotを起動--- gp = popen("gnuplot -persist", "w"); //---座標の名前を入力--- fprintf(gp, "set xlabel \"x\"\n"); fprintf(gp, "set ylabel \"y\"\n"); for(i=1 ; i<=200 ; i++) { x = 0.02 * i; //---Gnuplotのコマンドを実行--- fprintf(gp, "plot sin(x-%f*pi)*cos(2*x-%f*pi)\n", x, x); } pclose(gp); return 0; }
このコードのようにforループ内に処理を書くとグラフがアニメーションとして表示されます。また、このGnuplotの呼び出し方を応用すれば、一度にPostscriptファイルまで作成することもできます。これで悲劇ともお別れ、間違ってもコンパイル&実行で完了です。
今はいろんなグラフを表示するのがおもしろいです。
| 固定リンク
| コメント (0)
| トラックバック (1)
最近のコメント