2014年7月 16日

数値解析演習
平成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時