Gauss

Similar documents

C言語による数値計算プログラミング演習

XMPによる並列化実装2

sim98-8.dvi

LINEAR ALGEBRA I Hiroshi SUZUKI Department of Mathematics International Christian University


スライド 1

行列代数2010A

スライド 1

Gauss Strassen LU LU LU LU 22 5 Gauss LU

弾性定数の対称性について

‚æ4›ñ

QR

スライド 1

C による数値計算法入門 ( 第 2 版 ) 新装版 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 新装版 1 刷発行時のものです.

行列代数2010A

A common.h include #include <stdio.h> #include <time.h> #define MAXN int A[MAXN], n; double start,end; void inputdata(

1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() malloc 2 #include <stdio.h> #include

1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() 2 double *a[ ]; double 1 malloc() dou

joho12.ppt

II 2 3.,, A(B + C) = AB + AC, (A + B)C = AC + BC. 4. m m A, m m B,, m m B, AB = BA, A,, I. 5. m m A, m n B, AB = B, A I E, 4 4 I, J, K

PC Windows 95, Windows 98, Windows NT, Windows 2000, MS-DOS, UNIX CPU

c-all.dvi


第1章

2008 ( 13 ) C LAPACK 2008 ( 13 )C LAPACK p. 1

スライド 1

comment.dvi


(2016 2Q H) [ ] R 2 2 P = (a, b), Q = (c, d) Q P QP = ( ) a c b d (a c, b d) P = (a, b) O P ( ) a p = b P = (a, b) p = ( ) a b R 2 {( ) } R 2 x = x, y

#define N1 N+1 double x[n1] =.5, 1., 2.; double hokan[n1] = 1.65, 2.72, 7.39 ; double xx[]=.2,.4,.6,.8,1.2,1.4,1.6,1.8; double lagrng(double xx); main

[1] #include<stdio.h> main() { printf("hello, world."); return 0; } (G1) int long int float ± ±

(1) (2) (1) (2) 2 3 {a n } a 2 + a 4 + a a n S n S n = n = S n

数学Ⅱ演習(足助・09夏)

D D 1/2 L (LD 1/2 L ) A = LL T A P AP T = LDL T (P, L, D ) ( [2], [3] ) A 0 A = LDL T (L, D ) ( Cholesky ) A A = LL T (L ) ( Cholesky ) Trefethen and

: : : : ) ) 1. d ij f i e i x i v j m a ij m f ij n x i =

‚æ2›ñ C„¾„ê‡Ìš|

Taro-再帰関数Ⅱ(公開版).jtd

[ 1] 1 Hello World!! 1 #include <s t d i o. h> 2 3 int main ( ) { 4 5 p r i n t f ( H e l l o World!! \ n ) ; 6 7 return 0 ; 8 } 1:

AHPを用いた大相撲の新しい番付編成

/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v

(2018 2Q C) [ ] R 2 2 P = (a, b), Q = (c, d) Q P QP = ( ) a c b d (a c, b d) P = (a, b) O P ( ) a p = b P = (a, b) p = ( ) a b R 2 {( ) } R 2 x = x, y

1 return main() { main main C 1 戻り値の型 関数名 引数 関数ブロックをあらわす中括弧 main() 関数の定義 int main(void){ printf("hello World!!\n"); return 0; 戻り値 1: main() 2.2 C main

USB ID TA DUET 24:00 DUET XXX -YY.c ( ) XXX -YY.txt() XXX ID 3 YY ID 5 () #define StudentID 231

:30 12:00 I. I VI II. III. IV. a d V. VI

離散最適化基礎論 第 11回 組合せ最適化と半正定値計画法

kiso2-09.key


C言語による数値計算プログラミング演習

Part () () Γ Part ,

2012 A, N, Z, Q, R, C

C言語によるアルゴリズムとデータ構造

Taro-再帰関数Ⅲ(公開版).jtd

+ 1 ( ) I IA i i i 1 n m a 11 a 1j a 1m A = a i1 a ij a im a n1 a nj a nm.....

I. Backus-Naur BNF : N N 0 N N N N N N 0, 1 BNF N N 0 11 (parse tree) 11 (1) (2) (3) (4) II. 0(0 101)* (

実際の株価データを用いたオプション料の計算

C 2 / 21 1 y = x 1.1 lagrange.c 1 / Laglange / 2 #include <stdio.h> 3 #include <math.h> 4 int main() 5 { 6 float x[10], y[10]; 7 float xx, pn, p; 8 in

n (1.6) i j=1 1 n a ij x j = b i (1.7) (1.7) (1.4) (1.5) (1.4) (1.7) u, v, w ε x, ε y, ε x, γ yz, γ zx, γ xy (1.8) ε x = u x ε y = v y ε z = w z γ yz

(Basic Theory of Information Processing) 1

1 Ricci V, V i, W f : V W f f(v ) = Imf W ( ) f : V 1 V k W 1

all.dvi

Informatics 2014


P06.ppt

構造と連続体の力学基礎

tuat1.dvi

ii

d ϕ i) t d )t0 d ϕi) ϕ i) t x j t d ) ϕ t0 t α dx j d ) ϕ i) t dx t0 j x j d ϕ i) ) t x j dx t0 j f i x j ξ j dx i + ξ i x j dx j f i ξ i x j dx j d )


8 / 0 1 i++ i 1 i-- i C !!! C 2

x h = (b a)/n [x i, x i+1 ] = [a+i h, a+ (i + 1) h] A(x i ) A(x i ) = h 2 {f(x i) + f(x i+1 ) = h {f(a + i h) + f(a + (i + 1) h), (2) 2 a b n A(x i )

I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) + x * x + x x (4) * *

Informatics 2015

1 4 2 EP) (EP) (EP)

16 B

:30 12:00 I. I VI II. III. IV. a d V. VI

ver Web

2017 p vs. TDGL 4 Metropolis Monte Carlo equation of continuity s( r, t) t + J( r, t) = 0 (79) J s flux (67) J (79) J( r, t) = k δf δs s( r,

1. 1 BASIC PC BASIC BASIC BASIC Fortran WS PC (1.3) 1 + x 1 x = x = (1.1) 1 + x = (1.2) 1 + x 1 = (1.

j x j j j + 1 l j l j = x j+1 x j, n x n x 1 = n 1 l j j=1 H j j + 1 l j l j E

橡Pro PDF

Informatics 2010.key

2 [1] 7 5 C 2.1 (kikuchi-fem-mac ) input.dat (cat input.dat type input.dat ))

PowerPoint Presentation

資料

xy n n n- n n n n n xn n n nn n O n n n n n n n n

並列計算の数理とアルゴリズム サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 初版 1 刷発行時のものです.

v v = v 1 v 2 v 3 (1) R = (R ij ) (2) R (R 1 ) ij = R ji (3) 3 R ij R ik = δ jk (4) i=1 δ ij Kronecker δ ij = { 1 (i = j) 0 (i

Krylov (b) x k+1 := x k + α k p k (c) r k+1 := r k α k Ap k ( := b Ax k+1 ) (d) β k := r k r k 2 2 (e) : r k 2 / r 0 2 < ε R (f) p k+1 :=

第7章 有限要素法のプログラミング

1 (bit ) ( ) PC WS CPU IEEE754 standard ( 24bit) ( 53bit)

C¥×¥í¥°¥é¥ß¥ó¥° ÆþÌç

数値計算法

Taro-リストⅢ(公開版).jtd


A11 (1993,1994) 29 A12 (1994) 29 A13 Trefethen and Bau Numerical Linear Algebra (1997) 29 A14 (1999) 30 A15 (2003) 30 A16 (2004) 30 A17 (2007) 30 A18

kiso2-06.key

11042 計算機言語7回目 サポートページ:

all.dvi

Microsoft Word - C.....u.K...doc

Transcription:

15 1 LU LDL T 6 : 1g00p013-5

1 6 1.1....................................... 7 1.2.................................. 8 1.3.................................. 8 2 Gauss 9 2.1..................................... 10 2.2 Gauss............................... 10 2.3.................................. 11 2.4 Gauss........................ 12 2.5...................................... 15 3 LU 16 3.1..................................... 17 3.2 LU................................ 17 3.3 LU........................... 21 3.4...................................... 23 4 Cholesky 24 4.1..................................... 25 4.2 Cholesky............................... 25 1

4.3 Cholesky.......................... 26 4.4...................................... 27 5 LDL T 28 5.1..................................... 29 5.2 LDL T.............................. 29 5.3................................ 31 5.4 LDL T......................... 32 5.5...................................... 35 6 36 6.1..................................... 37 6.2............................. 37 6.3......................... 37 6.4...................................... 39 7 40 7.1..................................... 41 7.2....................................... 41 7.3...................................... 42 8 43 8.1..................................... 44 8.2....................................... 44 8.3....................................... 44 8.4...................................... 45 46 48 2

A 49 3

6.1......................... 37 4

7.1 LU LDL T.................. 41 5

1 6

1.1 1 LDL T A A 1 1 LU LDL T 7

1.2 1 LU LDL T 1.3 2, Gauss 3,Gauss LU 4,LDL T Cholesky. 5,LDL T 6, 7, 8,. 8

2 Gauss 9

2.1 Gauss LU 2.2 Gauss x 1, x 2, x 3 a 11 x 1 + a 12 x 2 + a 13 x 3 = b 1 (2.1) a 21 x 1 + a 22 x 2 + a 23 x 3 = b 2 (2.2) a 31 x 1 + a 32 x 2 + a 33 x 3 = b 3 (2.3) 2x 1 + 5x 2 + 7x 3 = 23 (2.4) 4x 1 + 13x 2 + 20x 3 = 58 (2.5) 8x 1 + 29x 2 + 50x 3 = 132 (2.6) Gauss (2.4) (2.5) (2.6) 2x 1 + 5x 2 + 7x 3 = 23 (2.7) 13x 2 + 20x 3 = 12 (2.8) 29x 2 + 50x 3 = 40 (2.9) (2.8) (2.9). 2x 1 + 5x 2 + 7x 3 = 23 (2.10) 3x 2 + 6x 3 = 12 (2.11) 10 4x 3 = 4 (2.12)

Gauss (2.12) x 3 = 1 (2.11) x 2 = (12 6x 3 )/3 = (12 6 1)/3 = 2 (2.10) x 1 = (23 5x 2 7x 3 )/2 = (23 5 2 7 1)/2 = 3 a ii 0 2.3 Gauss a 11 0 a 21 x 1 + a 22 x 2 + a 23 x 3 = b 2 a 11 x 1 + a 12 x 2 + a 13 x 3 = b 1 a 31 x 1 + a 32 x 2 + a 33 x 3 = b 3 a 21 0 ( a 31 ) 11

0 a 11 0 x 1 a 12,,a 1n a 12,,a 1n a 11 a 12,,a 1n a 11 2.4 Gauss a 11 x 1 + a 12 x 2 + a 13 x 3 = b 1 a 21 x 1 + a 22 x 2 + a 23 x 3 = b 2 a 31 x 1 + a 32 x 2 + a 33 x 3 = b 3 k = 1, 2,..., n 1 k i (i = k + 1,..., n) (A b) = (A (1) b (1) ) (A (1) b (1) ) (A (2) b (2) ) (A (k) b (k) ) (A (k+1) b (k+1) ) (A (n) b (n) ) A (n) = u 11 u 12 u 1n u 22 u 2n.... 0 u nn, b(n) = y A (k) = (a (k) ij ), b (k) = (b (k) i ) Gauss 12

k = 1, 2,..., n 1 Gauss i = k + 1, k + 2,..., n m ik = a (k) ik /a(k) kk j = k + 1, k + 2,..., n b (k+1) i a (k+1) ij = b (k) i = a (k) ij m ik b (k) k m ik a (k) kj 1 a (1) 11 x 1 + a (1) 12 x 2 + + a (1) 1,n 1x n 1 + a (1) 1n x n = b (1) 1 a (2) 22 x 2 + + a (2) 2,n 1x n 1 + a (2) 2n x n = b (2) 2. a (n 1) n 1,n 1x n 1 + a (n 1) n 1,nx n a (n) nn x n = b (n 1) n 1 = b (n) n x n = b(n) n a (n) nn (2.13) 2 x n 1 x k = b(k) k a (k) k,k+1 x k+1 a (k) k,k+2 x k+2 a (k) kn x n a (k) kk (2.14) x 1 C 13

for (i=1;i<=n;i++){ pivot = a[i][i]; Gauss C for (j=i+1;j<=n;j++){ p=a[j][i]/pivot; a[j][i]=0.0; for (k=i+1;k<=n;k++) a[j][k] -= p*a[i][k]; b[j] -= p*b[i]; x[n] = b[n]/a[n][n]; for (i=n-1;i>=1;i--){ x[i]=b[i]; for (j=i+1;j<=n;j++) x[i] -= a[i][j]*x[j]; x[i] /= a[i][i]; / (n i) + (n i)(n i + 1) + (n i) + 1 = (n i)(n i + 3) + 1 / (n i)(n i + 1) + 1 + (n i 1) = (n i)(n i + 2) / n 1 1 + [(n i)(n i + 3) + 1] = 1 + (n 2 2ni + i 2 + 3n 3i + 1) i=1 n 1 i=1 14

n 1 = 1 + (n 2 n 1 + 3n + 1) 1 (2n + 3) i=1 = 1 + (n 2 + 3n 1)(n 1) (2n + 3) + (n 1)n(2n 1) 6 / n 1 i=1 (n i)(n i + 2) = n 1 i=1 = (n 2 + 2n) (n 2 2ni + i 2 + 2n 2i) n 1 i=1 n 1 1 (2n + 2) = (n 2 + 2n)(n 1) (2n + 2) = 2n3 + 3n 2 5n 6 i=1 i=1 = 2n3 + 6n 2 3n 6 i + n 1 i 2 i=1 (n 1)n 2 + i + n 1 i 2 i=1 (n 1)n 2 (n 1)n(2n 1) 6 n 3 /3 n 3 /3 1 Gauss O(n 3 ) 2.5 Gauss LU 15

3 LU 16

3.1 Gauss LU LU 3.2 LU Ax = b x = A 1 b Gauss b Gauss M 1 = 1 m 21 1 0 m 31 0 1...... m n1 0 0 1 A (1) = A M 1 A (1) = A (2) = a (1) 11 a (1) 12 a (1) 1n 0 a (2) 22 a (2) 2n...... 0 a (2) n2 a (2) nn 17

M 1 A (1) k 1 0 1.... 0 0 0 1 M K =, m jk = a (k) jk.. m k+1,k 1 /a(k) kk (3.1).. m k+2,k 0.......... 0 0 m n,k 0 1 k = 1, 2,..., n 1 Gauss i = k + 1, k + 2,..., n m ik = a (k) ik /a(k) kk j = k + 1, k + 2,..., n b (k+1) i a (k+1) ij = b (k) i = a (k) ij m ik b (k) k m ik a (k) kj M k A (k) = A (k+1) (3.2) M n 1 M n 2...M 2 M 1 A = A (n) 18

= U = a (1) 11 a (1) 12 a (1) 13 a (1) 1n a (2) 22 a (2) 23 a (2) 2n 0 a (1) 33 a (3) 3n.... a (n) nn (3.3) U 0 M n 1 M n 2...M 1 b = b (n) = b (1) 1 b (2) 2. b (n) n (3.4) Ax = b 3.3 U Ux = b (n) (3.5) M k 1 0 1.... 0 Mk 1 0 0 1 =.. m k+1,k 1.. m k+2,k 0.......... 0 0 m n,k 0 1, m jk = a (k) jk /a(k) kk (3.6) M k I L Mk 1 L = M 1 1 M 1 2...M 1 n 1 (3.7) 19

1 m 21 1 0 m 31 m 32 1 L =......... 1 m n1 m n2 m n3 m n,n 1 1, m jk = a (k) jk /a(k) kk (3.8) L 3.3 3.7 Gauss A A = LU (3.9) L U A LU A LU L,U Ax = b Ax = b LUx = b y Ly = b (3.10) Ux = y (3.11) x Ly = b m kk = 1 y 1 = b 1 k = 2, 3,..., n y k = b k k 1 j=1 m kj y j Ux = y 20

x n = y n /a (n) nn k = n 1, n 2,..., 1 n x k = y k a (k) kj x j j=k+1 /a (k) kk 3.3 LU 3 3 A A = 2 5 7 4 13 20 8 29 50 Gauss 2 5 7 0 3 6 0 0 4 0 0 2 5 7 A = 2 3 6 4 3 4 b A L U 21

A L U 2 5 7 1 0 0 2 5 7 4 13 20 = 2 1 0 0 3 6 8 29 50 4 3 1 0 0 4 (3.12) A L U LU LU for( i = 1; i <= n; i++ ){ for( j = 1; j <= n; j++ ){ LU C if( i == j ){ l[i][j] = 1; else{ l[i][j] = 0; u[i][j] = a[i][j]; for( i = 1; i <= n; i++ ){ for( j = i+1; j <= n; j++ ){ l[j][i] = u[j][i] / u[i][i]; for( k = i; k <= n; k++ ){ u[j][k] = u[j][k] - u[i][k] * l[j][i]; Gauss a[1][1] 0 a[1][1] a[2][1] a kk a[k][k] 0 0 a kk 22

3.4 Gauss LU Cholesky 23

4 Cholesky 24

4.1 LU A Cholesky 4.2 Cholesky A A = S T S 1 A LDL T Cholesky A > 0 a (k) kk D 1 2 = a (1) 11 0 a (2) 22... 0 a (n) nn (4.1) S = D 1 2 L T A A = S T S (4.2) A S s 11 s 12 s 1n s 22 s 2n S =.... 0 s nn S T S ij a ij (4.3) s 1i s ij + s 2i s 2j + + s ii s ij = a ij, (i j) (4.4) 25

s ii = a ii s ij = (a ij i 1 k=1 i 1 k=1 s 2 ki, (s 11 = a 11 ) s ki s kj )/s ii, (s 1j = a 1j /s 11 ) (4.5) s 11 = a 11 s 12, s 13,..., s 1n, s 22, s 23,... S S S T y = b, Sx = y Ax = b A 4.3 Cholesky Cholesky s ii = a ii s ij = (a ij i 1 k=1 i 1 k=1 s 2 ki, (s 11 = a 11 ) s ki s kj )/s ii, (s 1j = a 1j /s 11 ) (4.6) C 26

for (i = 1; i <= n; i++) { s = a[i][i]; for (k = 1; k < i; k++) s -= sqr(l[i][k]); if (s < 0) { Cholesky C exit(0); L[i][i] = sqrt(s); for (j =i + 1; j <= n; j++) { s = a[j][i]; for (k = 1; k < i; k++) s -= L[j][k] * L[i][k]; L[j][i] = s / L[i][i]; 4.4 A Cholesky LDL T 27

5 LDL T 28

5.1 A Cholesky LDL T 5.2 LDL T A LU U U U = DV (5.1) D = a (1) 11 0 a (2) 22 0 a (3) 33... a (n) nn (5.2) V = 1 v 12 v 13 v 1n 1 v 23 v 2n 1 v 3n 0.... 1, v kj = a (k) kj /a(k) kk, k < j (5.3) A A t = A (n k) (n k) Gauss 1 29

A (k) s = a (k) kk a (k) k+1,k. a (k) nk a (k) k,k+1 a (k) kn a (k) k+1,k+1 a (k) k+1,n..... a (k) n,k+1 a (k) nn (5.4) A (k) s = A (k)t s (5.5) a (k) ij = a (k) ji, k i, j n (5.6) k 1 a ij = a (k 1) ij a(k 1) i,k 1 a (k 1) k 1,k 1 a (k 1) = a (k 1) a (k) = a (k) αβ βα ij ji a (k 1) k 1,j (5.7) A = A T a (1) αβ = a(1) βα A v kj = a(k) kj a (k) kk = a(k) jk a (k) kk = m jk (5.8) V L V = L T (5.9) A A A = LDL T (5.10) A LDL T 30

5.3 A LDL T D ii d i = a (i) ii L ij l ij A = LDL T LDL T A k=1,2,...,n i l kj d j l ij = a ki i = 1, 2,..., k 1 j=1 k l ki d i l ki = a kk i=1 l ii = 1 d 1 = a 11 k = 2, 3,..., n LDL T i = 1, 2,..., k 1 i 1 l ki = a ki l kj l ij d j /d i d k = a kk j=1 k 1 lkid 2 i i=1 0 d 1 = a 11 l 21, d 2, l 31, l 32, d 3,... D L A LDL T Ax = LDL T x = Ly, y = DL T x Ly = b, DL T x = y Ax = b 31

5.4 LDL T LDL T 1 1 2x 1 + x 2 + x 3 = 8 (5.11) x 1 + 3x 2 + 2x 3 = 11 (5.12) x 1 + 2x 2 + 4x 3 = 16 (5.13) 2 1 1 x 1 1 3 2 = x 2 1 2 4 x 3 8 11 16 (5.14) Ax = b (5.15) A LDL T A = LDL T (5.16) 1 d 11 1 l 21 l 31 = l 21 1 d 22 1 l 32 (5.17) l 31 l 32 1 d 33 1 d 11 d 11 l 21 d 11 l 31 = d 11 d 11 l21 2 + d 22 d 11 l 21 l 31 + d 22 l 32 (5.18) d 11 d 11 l 21 l 31 + d 22 l 32 d 11 l31 2 + d 22 l32 2 + d 33 1 2 1 0.5 0.5 = 0.5 1 2.5 1 0.6 (5.19) 0.5 0.6 1 2.6 1 32

LU AX = b LDL T x = b LDL T x = b (5.20) DL T x = y (5.21) Ly = b (5.22) 1 0.5 1 0.5 0.6 1 = y 1 y 2 y 3 8 11 16 (5.23) y 1 y 2 y 3 = 8 7 7.8 (5.24) DL T x = y 2 2.5 2.6 1 0.5 0.5 1 0.6 1 x 1 x 2 x 3 = 8 7 7.8 (5.25) 2 1 1 2.5 1.5 2.6 x 1 x 2 x 3 = 8 7 7.8 (5.26) 33

x 1 x 2 x 3 = 2 1 3 (5.27) L D d 11 = a 11, l j1 = a j1 /d 1 (j = 2,..., n) d 22 = a 22 d 11 l 2 21, l j2 = (a 2j d 11 l 21 l j1 /d 22 )(j = 3,..., n) d 33 = a 33 d 11 l 2 31 d 22 l 2 32, l j3 = (a 3j d 11 l 31 l j1 d 2 l 32 l j2 )/d 33 (j = 4,..., n) d[1]=a[1][1]; for(k=2;k<=n;k++){ s=0;t=0; for(i=1;i<=k-1;i++){ LDL T C for(j=1;j<=i-1;j++){ s+=l[k][j]*l[i][j]*d[j]; l[k][i]=(a[k][i] - s)/d[i]; for(i=1;i<=k-1;i++){ t+=l[k][i]*l[k][i]*d[i]; d[k]=a[k][k]-t ; 34

5.5 A LDL T LU LDL T 35

6 36

6.1 C LU LDL T. 6.2,,. CPU memory OS Celeron 2.0GHz 512MB Windows XP cygwin+gcc 6.1: 6.3 LU 1. LDL T A 2. A a 11 2,3,...,n 37

A = 1 2 3 n 2 2 3 n 3 3 3 n...... n n n n n n A 3. A x x i = i, (i = 1,..., n) 4. Ax = b b 5. A LU 6. Ly = b y 7. Ux = y x 8. 5 7 LDL T 1. A, x, b LU 2. A LDL T 3. Ly = b y 4. DL T x = y x 5. 2 4 38

6.4 C LU LDL T 39

7 40

7.1 C LU LDL T 7.2 100 1000 0.006 "LU.txt" "LDLT.txt" 0.005 0.004 time 0.003 0.002 0.001 0 100 200 300 400 500 600 700 800 900 1000 dimension 7.1: LU LDL T 100,LDL T 0.000008 LU 0.000015 1000 LU n 3 /3 + O(n 2 ) LDL T n 3 /6 + O(n 2 ) 41

7.3 C LU LDL T 42

8 43

8.1 8.2 2, Gauss 3,Gauss LU 4,LDL T Cholesky. 5,LDL T 6, 7, 8.3 A LDL T LU 44

8.4 LU LDL T LU n 3 /3 + O(n 2 ) LDL T n 3 /6 + O(n 2 ) LDL T LU 45

46

,,..,,. 47

[1] :,, 2003, [2] :, 1999 [3] :,, 2002, [4] G.H.Golub and C.F.Van Loan: Matrix Computations,Johns Hopkins,1996 48

Appendix A 49

///////////////LDL^T_Factorization/////////////// #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000 /* */ int main(void); int main(void){ int i,j,k; double s; double t; double sum; static double a[n+1][n+1]; static double b[n+1]; static double w[n+1][n+1]; static double x[n+1]; static double y[n+1]; static double l[n+1][n+1]; static double d[n+1]; static double ld[n+1][n+1]; unsigned long t1,t2 ; /*a_{11 a[1][1] */ /*A */ for(i=1;i<=n;i++){ for(j=i;j<=n;j++){ a[i][j]=j; for(j=i-1;j>=1;j--){ a[i][j]=a[j][i]; /* X */ 50

for(i=1;i<=n;i++){ x[i]=i; /*Ax=b B */ for(i=1;i<=n;i++){ for(k=1,sum=0;k<=n;k++){ sum+=a[i][k]*x[k]; b[i] = sum; /* */ for(i=1;i<=n;i++){ x[i]=0; t1=clock(); /* LDL^T */ /*L */ for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(i==j){ else{ l[i][j]=1; l[i][j]=0; d[1]=a[1][1]; for(k=2;k<=n;k++){ for(i=1;i<=k-1;i++){ for(j=1,s=0;j<=i-1;j++){ 51

s+=l[k][j]*l[i][j]*d[j]; l[k][i]=(a[k][i] - s)/d[i]; for(i=1,t=0;i<=k-1;i++){ t+=l[k][i]*l[k][i]*d[i]; d[k]=a[k][k]-t ; /* LDL^T */ for(i=1;i<=n;i++){ y[i]=b[i]; for(j=1;j<i;j++){ y[i]-=l[i][j]*y[j]; /* DL^T*x=y */ /*DL^T */ for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ for(i=n;i>=1;i--){ w[i][j]=d[i]*l[j][i]; x[i]=y[i]; for(j=n;j>i;j--){ x[i]-=w[i][j]*x[j]; x[i]/=w[i][i]; t2=clock(); /*l[j][i] ^ */ 52

printf(" ; %f[ms]\n", (t2-t1)/1000000.0 ); return(0); ///////////////LU_Factorization/////////////// #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000 int main(void); int main(void){ int i,j,k; double s,t,sum; static double a[n+1][n+1]; static double b[n+1]; static double u[n+1][n+1]; static double w[n+1][n+1]; static double x[n+1]; static double y[n+1]; static double l[n+1][n+1]; static double d[n+1]; static double ld[n+1][n+1]; unsigned long t1,t2 ; /*a_{11 a[1][1] */ /*A */ for(i=1;i<=n;i++){ for(j=i;j<=n;j++){ a[i][j]=j; for(j=i-1;j>=1;j--){ a[i][j]=a[j][i]; 53

/* X */ for(i=1;i<=n;i++){ x[i]=i; /*Ax=b B */ for(i=1;i<=n;i++){ for(k=1,sum=0;k<=n;k++){ sum+=a[i][k]*x[k]; b[i] = sum; /* */ for(i=1;i<=n;i++){ x[i]=0; t1=clock(); /* LU */ for( i = 1; i <= N; i++ ){ for( j = 1; j <= N; j++ ){ if( i == j ){ l[i][j] = 1; else{ l[i][j] = 0; u[i][j] = a[i][j]; for( i = 1; i <= N; i++ ){ for( j = i+1; j <= N; j++ ){ l[j][i] = u[j][i] / u[i][i]; for( k = i; k <= N; k++ ){ u[j][k] = u[j][k] - u[i][k] * l[j][i]; 54

for(i=1;i<=n;i++){ y[i]=b[i]; for(j=1;j<i;j++){ y[i]-=l[i][j]*y[j]; for(i=n;i>=1;i--){ x[i]=y[i]; for(j=n;j>i;j--){ x[i]-=u[i][j]*x[j]; x[i]/=u[i][i]; t2=clock(); printf(" ; %f[ms]\n", (t2-t1)/1000000.0 ); return(0); 55