Visual C++プログラムからGnuplot(2)

Visual C++プログラムからGnuplot(1) では,とりあえずCプログラムからGnuplotを呼び出して,グラフを描けるようになりました.今度は数値計算したグラフをプロットします.プログラムを実行した瞬間にグラフが表示されるようにします.データをプロットする手順は

  1. 数値計算して
  2. 座標データをファイルに保存
  3. ファイルからデータを読み出してプロット

という感じです.これをプログラム中で一気にやってしまいます.

Cのソース

つぎのプログラムは箱型関数のフーリエ級数を50項足し合わせるものです.

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

#define N 50  /* 項の数 */

double term(int n, double x){
  return sin((2*n-1)*x)/(2*n-1);
}

int main(void){
  int i;
  double x, y=0;

  FILE *fp;

  fp = fopen("tmp.dat", "w");
  for (x=-3.14; x<3.14; x+=0.001) {  /* x+= の値はプロットの刻み幅 */
    for (i=1; i<=N; i++) {
      y += term(i,x);
    }
    fprintf(fp, "%lf %lf\n", x, 4/3.14*y);
    y=0;
  } 
  fclose(fp);

  system("wgnuplot -persist setting.plt");

  return 0;
}

まず関数を数値計算しておいて tmp.dat というファイルに保存します.それを描画するgnuplot用の命令をsetting.pltに書いておいて, system()関数でgnuplotの引数として呼び出します.

gnuplotの設定ファイル

座標軸や描画範囲などを少し細かく設定しておきます. Cのソースにあるように,このファイルは setting.plt という名前で保存しておきます.

set xzeroaxis
set yzeroaxis
set xrange[-pi:pi]
set yrange[-1.2:1.2]
set xtics axis
set ytics axis
plot "tmp.dat" with lines

保存場所はCのソースと同じフォルダです.

実行

Visual C++上でコンパイル,ビルド,実行します.そして

fig1.jpg

のようにグラフが表示されれば成功です.ウィンドウ上にではなくepsファイルとして出力したい場合は, setting.pltファイルの上の方(plotの行より上)に以下の命令を追加します.

set terminal postscript eps color
set output 'output.eps'

再び実行すると(今回はソースに変更点はないのでコンパイル,ビルドは必要ありません),ソースと同じフォルダにoutput.epsという名前のepsファイルが出来上がります.ポストスクリプトビューアのGSviewで表示させると以下のようになります.

fig2.jpg

この出力epsファイルをpdfに変換したものを下に置いておきます.

印刷したいときやTeXの文書にグラフを入れたいときはepsで出力します.ウィンドウ出力と違って縦横比もキチっときまります.大きく印刷したいときはプログラム中でプロットの刻み幅を増やすと滑らかな曲線になります(そのかわりファイルサイズ,計算時間ともに増えます).

Valid XHTML 1.1! home > コンピュータ > グラフ・解析ツール >
リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Modified by 物理のかぎプロジェクト PukiWiki 1.4.5_1 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-jiPowered by PHP 5.2.17HTML convert time to 0.079 sec.