数値計算法
c 言語を用いた数値計算とgnuplot を使ったグラフィック表示
工学部・知能機械工学科 2 年

後期 テキスト No. 1，Ver.13

担当教員：綴木 馴

はじめに（良く読むこと）
本講義の目的は，単純作業を淡々とこなすという無駄な作業を行うものではない．むしろ，このテキストによって与えられた，きっかけを基に，学生自ら問題点を探し出し，また，その問題解決のために自ら試行錯誤することで，真の実力を身につけることを目的としている．したがって，解説部分は極力詳細なものを付け加えた．これらの資料を基に c 言語による数値計
算とグラフィック表示の方法を自らの力を以て理解し，同時にそれらの有用性および問題点を見つけ出し，問題解決に取り組んで欲しい．
レポートを出すに当たっては，わざわざテキストを書き写すというような，無駄な時間と労力を費やす必要は全くない．むしろそのような時間があれば，有益な思考のための時間として使って頂きたい．
したがって，レポートを出すに当たって，このテキストと重複するところは，著者のホームページからダウンロードしたものを添付しても良いし，この実験テキストそのものをコピーしたものをレポートに添付してもかまわない．ただし，レポートは手書きではなく，TeX や Wordなどのワープロを使うことが望ましいレポートのスタイルは他の読者が読みやすいものであれば，自ら工夫したオリジナルな方法で作成して構わない．レポートの「書き方が分からない」，「最低限書くべきモノは何か？」等という問いが多いが，それこそ学生自ら考えるべき問題である．仕上げたレポートを初めて読む読者が，そのレポートを読んで，どういう演習を行ったのかが分かるレポートに仕上げればよい．
よって，結果や議論をまとめることには特に力を注いで欲しい．
次のページに実験の目的の概略をリストアップしておく．

1

講義の目的
講義の目的は以下の通りである．

目的 1．c 言語を用いて関数の数値計算能力を身につける．
目的 2．c 言語による計算結果をファイルに出力する．
目的 3．c 言語により出力されたファイルを gnuplot で読みとり，関数をグラフィック表示する．
目的 4．次に c 言語を用いずに，gnuplot を使って関数を直接グラフィック表示する．
目的 5．c 言語で出力されたデータによるグラフと，gnuplot により直接作成されたものを同時表示し一致することを確認する．
目的 6．さらに，その他の関数に対して同様のことを試みる．
目的 7．手際よい良い，レポート作成能力を身につける．
以上を以て，この授業に真摯に取り組み，演習・研究の能力の向上を目指す．

2

演習項目と手順の解説

2.1

sin 関数をファイルに出力するプログラムの作成

コンパイラには 何を用いても構わない．以下にファイルの入出力に関する書式の雛形を示しておく．これを参考にしてプログラムを作成する．

#include <stdio.h>#include <stdlib.h>#include <math.h>int main_m;
int main(int main_m){/*←ここまで決まり文句*/
double t, data; /*****←時刻を t，出力変数を data とした*****/
FILE*fp1_g; /*←ファイルのオープン*//*****ファイル名↓には自分の好きな名前を付けること*****/
fp1_g=fopen("ファイル名.dat","w");for(ヒント:t=?; t<?; t=t+0.01){↑↑↑↑↑↑↑↑↑↑「ここで数値計算を行う（自分で考える，ヒント：data = f(t);）」↓↓↓↓↓↓↓↓↓↓fprintf(fp1_g,"%lf \t %lf\n",t,data);/*****↑ファイルに計算結果となる出力変数を書き込む*****/}
fclose(fp1_g);/*←ファイルを閉じる*//*↓プログラムの終わりを締めくくる*/
return(main_m);}上記の f (t) には sin(t), cos(t), tan(t), exp(t) 等が使える．sin(t) 関数における x の範囲は −3 π ≤x ≤ 3 π とすること．ただしπ = 3.1415926535 と置くこと (πは全角文字なので変数として使えない)．出力されたファイルに正しい値が表示されているかどうか”ファイル名.dat”を開いて確認をとること．

2.2

gnuplot の設定

http://150.55.136.242/lecture06/program2/gnuplot.exe から gnuplot.exe をダウンロード＆保存し，自己解凍（実行）する．自己解凍したフォルダを開けば図 1 のような Window が現れる．

図 1: wgpl+w32 フォルダを開いたところ
ここで，「wgnuplot.exe」を実行すると図 2 のような画面が現れる．

図 2: wgnuplot.exe を開いたところ
次にフォントの設定を行う．画面を右クリックすると，図 3 のような画面が現れるので，「ChooseFont..」をクリックする．「Choose Font..」を選択すると図 4 のような画面が現れる．図 4 に習って「Terminal」を選択する．その他は自分の好きなセッティングにしても良い．

2.3

gnuplot によるデータの読み込みと描画

それでは，実際に c 言語で作成した sin(x) のデータファイルを読み込み実際に描画する．まず，gnuplot> plot図 3: 画面の任意の場所を右クリックしたところ

図 4: 「Choose Font..」を選択したところと入力する．plot の後に半角スペースを入れること．次にデータの読み込みを行う．図 5 のよ
うに「Plot」→「Data Filename...」を選ぶと，図 6 のような画面が現れる．ここで c 言語で出力したファイル名を選び，最後にエンターキーを押せば新しい Window が開き目的の関数が描画される．画面が見にくい場合は，「Styles」→「Data Style」→「Lines」を選ぶと良い．

2.4

gnuplot による直接的な描画法

ここまでは教育的配慮を考えて，sin 関数をあえて c 言語で計算させる方法を取り扱ったが，ここでは，c 言語を用いずに gnuplot に元々備わっている関数を用いて，直接 sin 関数を描画する手段を用いる．gnuplot に元々目的の関数が備わっている場合は，その機能を用いる方がはる
かに簡単に関数を描画することが可能であるが，備わっている関数は限定されているので，本来は 2.1 項から 2.3 項までの c 言語を用いた一連の手段のほうが一般的である．
それでは実際に gnuplot の関数を用いて sin(x) を描画する．図 7 のように

gnuplot> plot sin(x)と入力する．
すると，図 8 のような画面が現れるはずである．gnuplot を使えば簡単に描画できることがよく分かる．

図 5: データを読み込もうとしているところ．

図 6: データファイルを選択する画面

2.5

データと直接描かれた関数の同時表示

gnuplot は複数の関数を同時に描画することができる，例えば，2.3 項と 2.4 項で表示した関数を同時に描画できる．方法としては，2.3 項の方法でデータファイルを読み込んだ後，リーターンを押さずに「,」（半角のカンマ）を打った後に sin(x) と打てば２つのグラフを同時に描画できる．実験がうまく行っていればこれら二つのグラフは一致するはずである．
他にも
gnuplot> plot sin(x),cos(2*x),tan(x)と打つことで同時に３つの関数を見ることができる．図 9 参照．

2.6

その他の関数と課題

課題として，sin(x) だけでなく cos(x)，tan(x)，exp(−x2 )，log(x)，x2 ，x3 ，x4 等も試してみよ．これらは必ず，c 言語によるデータファイルで出力したものと，gnuplot で出力したものを重ねて出力すること．
また，円や楕円を描を描くにはどうすればよいかも考えよ．そして楕円と円について c 言語によるデータファイルで出力したものと，gnuplot で出力したものを重ねて出力せよ．基本的にはいかなる関数であろうが，この c 言語と gnuplot を組み合わせれば描くことができる．これらの手法は，将来必ず役に立つのでなるべく多くの関数に挑戦し，自分のためにも，しっかり身につけておくこと．その他，疑問に思うことは自ら方法を考え，自ら調査せよ．失敗しても良いので，得られた結果を全て報告すること．

図 7: 入力の様子．

図 8: plot sin(x) と入力した場合．

3

参考word 等を用いてレポートを書くにあたって，目的の Window 画面を Word に貼り付ける方法について説明する．まず，目的の Window をアクティブにした状態で，「Ctrl」＋「Alt」＋「Print Screen」を押すことでクリップボードに保存される．この状態で Word の画面に戻り，「Ctrl」＋「v」を押すことで貼り付けることができる．

図 9: plot sin(x),cos(2*x),tan(x) と入力した場合．