数値解析演習 平成26年 7月16日 分割プログラミング // prog1.c // func1.h #include <stdio.h> #ifndef FUNC1 // 二重宣言をさせない double func1(double x) #define FUNC1 { // 関数の宣言 return 2*x; } extern double func1(double x); #endif int main() { double x = 5; printf(“f(%lf)=%lf¥n”, x, f(x));” ) // func1.c #include <stdio.h> #include “func1.h” double func1(double x) { return 2*x; } // main.c #include <stdio.h> #include “func1.h” int main() { double x = 5; printf(“f(%lf)=%lf¥n”, x, f(x));” ) コンパイルの仕方 $ gcc prog1.c $ gcc –c func1.c $ gcc func1.o main.c プログラムを分割すると良い点 1. func1.c に変更がない限り、func1.c は再コンパイルしなくてよい。 2. func1.c にある関数を他のプログラムに簡単に組み込むことができる。 今まで作った matUtil.c を matUtil.h と matUtil.c とに分割する。分割のサンプルファ イルが下記ページにあるので、参考にすること。 http://www.i.kyushu-u.ac.jp/~takano/math/ より、 matUtil.h (ヘッダファイル) matUtil.c (行列関数) main.c (メインプログラム) matrix.dat (行列データ) を新しいフォルダを作って、ダウンロードする。 コンパイルとそれぞれの実行は以下のようにする。 $ gcc –c matUtil.c // コンパイル済の matUtil.o を作成する $ gcc matUtil.o main.c // メインプログラムをコンパイルする。 $ ./a.out 1 // LU 分解 $ ./a.out 2 // 逆行列 $ ./a.out 3 // 共役勾配法 $ ./a.out 4 // ヤコビ法(連立方程式) $ ./a.out 5 // ガウスザイデル法 $ ./a.out 6 // ヤコビ法(固有値の計算) *** 最終レポート *** これまで演習で作成したプログラムをすべて関数にし、matUtil.c と matUtil.h を完成さ せて提出せよ。それぞれの関数の内容を説明するコメントをつけること。 提出先:[email protected] 締め切り:8月13日(水)17時
© Copyright 2024 ExpyDoc