Next: A. MATLAB で Householder
Up: 3.1 C 言語版
Previous: 3.1 C 言語版
1 /*
2 * test-lu.c --- 三重対角行列係数の連立1次方程式を解く trilu(), trisol()
3 * のテスト
4 * コンパイル&リンク: gcc -o test-lu test-lu.c trid-lu.c
5 * trid-lu.c, trid-lu.h の入手は以下の URL で
6 * http://www.math.meiji.ac.jp/~mk/program/linear/trid-lu.c
7 * http://www.math.meiji.ac.jp/~mk/program/linear/trid-lu.h
8 */
9
10 #define NDIM 100
11
12 #include <stdio.h>
13 #include <math.h>
14 #include "trid-lu.h"
15
16 int main()
17 {
18 int i, n, nm1;
19 double al[NDIM],ad[NDIM],au[NDIM],b[NDIM],x[NDIM];
20 n = 10; nm1 = n - 1;
21 /* 係数行列 A */
22 ad[0] = 2.0; au[0] = -1.0;
23 for (i = 1; i < nm1; i++) {
24 al[i] = -1.0; ad[i] = 2.0; au[i] = - 1.0;
25 }
26 al[nm1] = - 1.0; ad[nm1] = 2.0;
27 /* 解 x */
28 for (i = 0; i < n; i++)
29 x[i] = i;
30 /* 右辺 */
31 b[0] = ad[0] * x[0] + au[0] * x[1];
32 for (i = 1; i < nm1; i++)
33 b[i] = al[i] * x[i-1] + ad[i] * x[i] + au[i] * x[i+1];
34 b[nm1] = al[nm1] * x[nm1-1] + ad[nm1] * x[nm1];
35 /* A を LU分解する */
36 trilu(n, al, ad, au);
37 /* 後退代入して連立1次方程式 A x=b を解く */
38 trisol(n, al, ad, au, b);
39 /* 結果を表示する */
40 for (i = 0; i < n; i++)
41 printf("%f\n", b[i]);
42 return 0;
43 }
oyabun% make
gcc -O -W -Wall -c -o test-trid-lu.o test-trid-lu.c
gcc -O -W -Wall -o test-trid-lu test-trid-lu.o trid-lu.o
oyabun% ./test-trid-lu
-0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
oyabun%
|
Next: A. MATLAB で Householder
Up: 3.1 C 言語版
Previous: 3.1 C 言語版
Masashi Katsurada
平成17年8月22日