基礎数学の教科書 [2]p.82の[例題2]の関数
計算結果を描画するためには,
と
の値をファイルに保存する必要がある.ファイル
の取扱いは,教科書 [1]の10章に書かれており,詳細は
後に学習範する.ここでは,データの保存方法を簡単に述べる.
ファイルにデータを書き出すためには,(1)ファイル情報を格納する変数の用意,(2)ファ イルのオープン,(3)データの書き出し,(4)ファイルのクローズ--という一連の動作を 行う.実際には,リスト1のとおりで,ファイル操作に関する部分を 以下に示す.
   1 #include <stdio.h>
   2 
   3 double hogehoge(double x);                        // プロトタイプ宣言
   4 
   5 //============================================================================
   6 // メイン関数
   7 //============================================================================
   8 int main(void){
   9 
  10   FILE *out;                                      // ファイルの情報を格納
  11   int i, np;
  12   double x, dx, xmax, xmin;
  13 
  14   printf("xの最小値\t");                           // キーボード入力
  15   scanf("%lf", &xmin);
  16   printf("xの最大値\t");
  17   scanf("%lf", &xmax);
  18   printf("プロット点の数\t");
  19   scanf("%d", &np);
  20 
  21   dx = (xmax - xmin)/np;                          //データ間隔計算
  22 
  23   out=fopen("data.txt","w");                      //ファイルをオープン
  24 
  25   for(i=0; i<=np; i++){
  26     x = xmin + i*dx;
  27     fprintf(out, "%f\t%f\n", x, hogehoge(x));     //データの書き込み
  28   }
  29 
  30   fclose(out);                                    //ファイルをクローズ
  31 
  32   return 0;
  33 }
  34 
  35 //============================================================================
  36 //  プロットする数学関数
  37 //============================================================================
  38 double hogehoge(double x){
  39   double y;
  40 
  41   y=(3*x+2)/(x+2);
  42 
  43   return y;
  44 }
xの最小値 -20 xの最大値 20 プロット点の数 10000
このように実行すると,ファイル「data.txt」ができる.「emacs data.txt」とタ
イプして,ファイルの中身を見ると次にようになっている.第一列目が
,第二列目が
の値である.10001個の
の組ができている.このデータの組を線で結べば,グ
ラフができあがる.グラフ描画方法については,次節でのべる.
-20.000000 3.222222 -19.996000 3.222272 -19.992000 3.222321 -19.988000 3.222370 -19.984000 3.222420 -19.980000 3.222469 -19.976000 3.222519 -19.972000 3.222568 -19.968000 3.222618 -19.964000 3.222668 -19.960000 3.222717 -19.956000 3.222767 -19.952000 3.222816 -19.948000 3.222866 -19.944000 3.222916 この辺は長いので,途中省略 19.980000 2.818016 19.984000 2.818049 19.988000 2.818083 19.992000 2.818116 19.996000 2.818149 20.000000 2.818182
gnuplotを使って,先ほど作成したファイルの
データを図2のように
グラフ化してみよう.手順は,以下のとおりである.ただし,コマンドプロンプトである
$やgnuplot>はタイプしない.
![]()
$ gnuplot gnuplot> plot [-20:20] [-50:50] "data.txt" with line最初に,gnuplotを立ち上げている.すると,コマンドプロンプトがgnuplot>に変わ る.これは,gnuplotのコマンド入力待ちであることを示している.そこで, コマンド「plot」でグラフを描画する.plot以降は,次のような意味が ある. -4pt
これで,ファイルに保存されたデータをグラフ化できる.gnuplot を終わりたいときには, コマンド「exit」をタイプする.
少しばかり複雑な関数
![]()  | 
(2) | 
![]()  | 
(3) | |
| (4) | ||
| (5) | 
//============================================================================
//  数学関数
//============================================================================
double function(double x){
  double y;
  y=f(x)*g(x)+(f(x)+tan(x))/(g(x)+tan(x));
  return y;
}
//============================================================================
//  f(x)
//============================================================================
double f(double x){
  double y;
  y = x*x + sqrt(x) + x  + sin(x) + cos(x);
  return y;
}
//============================================================================
//  g(x)
//============================================================================
double g(double x){
  double y;
  y = x*x - sqrt(x*sin(x)) - 2*x  - sin(x) + 4*cos(x);
  return y;
}
   1 #include <stdio.h>
   2 
   3 void write_file(void);                       // プロトタイプ宣言
   4 
   5 //============================================================================
   6 // メイン関数
   7 //============================================================================
   8 int main(void){
   9 
  10   write_file();                              // 関数の呼出
  11 
  12   return 0;
  13 }
  14 
  15 //============================================================================
  16 // void型の関数
  17 //============================================================================
  18 void write_file(void){
  19   FILE *fuga;
  20 
  21   fuga = fopen("hello.txt", "w");            // ファイルのオープン
  22   
  23   fprintf(fuga, "Hello World !!!\n");        // ファイルへの書き出し
  24 
  25   fclose(fuga);                              // ファイルのクローズ
  26 }