基礎数学の教科書 [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 }