Hm, da nemaš možda biblioteku
Lapak pri ruci? Možeš onda da upotrebiš njene potprograme
zgetrf i
zgetri za LU faktorizaciju i inverziju kompleksnih matrica (probni kôd u prilogu, fortran mi nije baš na ruku).
zgetrf pritom automatski premeće vrste pri eliminaciji.
Kod mene na Debijanu:
Code:
$ apt-get install liblapack-dev liblapack-doc
$ man zgetrf
$ man zgetri
$ gfortran lapack_test_matinv.f95 -llapack
$ ./a.out
A =
( 0.3162 0.4957*i) ( 0.5710 0.1861*i) ( 0.8777 0.8059*i)
( 0.3292 0.5304*i) ( 0.8459 0.8376*i) ( 0.0260 0.0697*i)
( 0.1035 0.6892*i) ( 0.1913 0.9955*i) ( 0.9950 0.7372*i)
pivoting:
swap 1 2
swap 2 2
swap 3 3
L\U =
( 0.3292 0.5304*i) ( 0.8459 0.8376*i) ( 0.0260 0.0697*i)
( 0.9418 -0.0116*i) ( -0.2354 -0.5930*i) ( 0.8524 0.7406*i)
( 1.0255 0.4414*i) ( 0.5223 -0.3093*i) ( 0.3248 0.5311*i)
A^-1 =
( -1.6646 -5.5931*i) ( 4.1295 -2.0745*i) ( 0.7524 5.4899*i)
( 0.1930 3.0004*i) ( -1.6761 -0.0050*i) ( 0.2025 -2.8357*i)
( -0.0138 0.9749*i) ( -1.4626 0.1170*i) ( 0.8380 -1.3704*i)
A * A^-1 =
( 1.0000 -0.0000*i) ( 0.0000 0.0000*i) ( -0.0000 0.0000*i)
( 0.0000 -0.0000*i) ( 1.0000 0.0000*i) ( -0.0000 0.0000*i)
( 0.0000 -0.0000*i) ( 0.0000 0.0000*i) ( 1.0000 0.0000*i)
Vidiš gore da su vrste 1 i 2 odmah zamenjene, pošto je
abs(A(1, 1)) manje od
abs(A(2, 1)).