Professional Documents
Culture Documents
SHMEIWSEIS
SHMEIWSEIS
2007
1 2
/
, . . . .
:
Bairstow, ( )
n- ,
Crout Cholesky, ,
Krylov,
.
&
Gauss.
FORTRAN 90/95.
2007
1. Bairstow
Bairstow
n-
f ( x) = an x n + an 1 x n 1 + an 2 x n 2 + ..... + a2 x 2 + a1 x + a0 = 0
(1.1)
, (1.1) , ,
. , .
,
1 = = y + zi
2 = = y zi
(1.2)
(1.1),
g ( x) = ( x )( x ) = x 2 ( + ) x +
(1.3)
f(x). , (1.1)
(1.4)
b(x) n-2 ,
g(x) .
(1.1) , - g(x).
g(x) f(x). E,
, g1(x), ,
g2(x), b1(x) f(x). , g3(x),
b2(x), ...
f ( x ) = g1 ( x ) g 2 ( x) [b2 ( x)] = g1 ( x ) g 2 ( x) [g 3 ( x) b3 ( x )] = g1 ( x ) g 2 ( x) g 3 ( x)
(b3,n6 x
n 6
+ b3,n7 x
n 7
(1.5)
(1.2) (1.3), ,
g ( x ) = x 2 + px + q
p = 2 y , q = y + z
2
(1.6)
pk qk
gk(x) f(x), (1.5).
k .
, p q,
, p q,
. p q (
) f ( x) g ( x) , r(x). (1.4)
, ,
f ( x ) = g ( x ) b( x ) + r ( x ) =
= ( x 2 + px + q ) (bn2 x n2 + bn3 x n3 + ..... + b2 x 2 + b1 x + b0 ) + ( Rx + S )
(1.7)
r(x) = Rx + S (, ,
g(x), ). p q (
) , ,
r(x) .
r ( x ) = Rx + S 0 R , S
(1.8)
f ( x) =
bn2 x n +
+
(bn3 + pbn2 ) x n1 +
( pb0 + qb1 + R ) x
( qb0 + S )
x (1.1) (1.9)
(1.9)
*
an1 = bn3 + pbn2
bn3 = an1 pbn2 qbn1
b = a pb qb
b = a pb qb
a3 = b1 + pb2 + qb3
3
2
3
a2 = b0 + pb1 + qb2
b0 = a2 pb1 qb2
a1 =
pb0 + qb1 + R
R = a1 pb0 qb1
S = a0
qb0
a0 =
qb0 + S
an = bn2
(1.10)
bn = bn 1 = 0
bk = ak + 2 pbk +1 qbk + 2 , k = (n 2), (n 3),.....,2,1,0
(1.11)
R S ,
R = a1 pb0 qb1
S = a0 qb0
(1.12)
R = R ( p, q ) 0
S = S ( p, q ) 0
(1.13)
(1.8), = 0,
p q, p q ,
R = R( p + p, q + q) = 0
S = S ( p + p, q + q) = 0
(1.14)
(1.14) Taylor, ,
R
R
q
p +
q
p
S
S
p +
q
S ( p + p , q + q ) = 0 S ( p , q ) +
p
q
R ( p + p , q + q ) = 0 R ( p , q ) +
(1.15)
(1.15) p q.
,
R
p
S
p
R
p
p
q
S
p
R
R ( p, q )
q p
S q
S ( p, q )
q
1
R
R ( p, q )
q R( p, q)
= [ A]1
S S ( p, q )
S ( p, q )
q
(1.16)
p q (1.16)
p q,
pi +1 = pi + p
(1.17)
qi +1 = qi + q
i . p q.
, (1.8),
p , q
p 0 , q 0
(1.18)
, (1.16),
R
R
S
S
,
,
,
p
q
p
q
(1.12) p q , (1.11)
bi = bi(p,q),
b
R
b
= b0 p 0 q 1
p
p
p
S
b
= q 0
p
p
R
b
b
= b1 p 0 q 1
q
q
q
S
b
= b0 q 0
q
q
,
,
(1.19)
(1.19) R S
p q, b0 b1 p q.
, (1.11) p q
bk
b
b
= bk +1 p k +1 q k + 2
p
p
p
bk
b
b
= bk + 2 p k +1 q k + 2
q
q
q
(1.20)
k = (n 2), (n 3),.....,2,1,0 . c = b p d = b q
bk
p = ck = bk +1 pck +1 qck + 2
, k = (n 2), (n 3),.....,2,1,0
bk = d = b pd qd
k
k +2
k +1
k +2
q
(1.21)
(1.21) ck dk.
ck dk, bk+1 bk+2,
. ,
, k = n 2:
bn 2
= cn 2 = bn 1 pcn 1 qcn
p
bn 2
= d n 2 = bn pd n 1 qd n
q
(1.22)
bn = bn1 = 0
bn bn1 bn bn1
=
=
= 0 cn = cn1 = d n = d n1 = 0
=
p
q
q
p
(1.23)
cn 2 = d n 2 = 0
(1.24)
bk +1
p = ck +1 = bk + 2 pck + 2 qck + 3
, k = (n 3), (n 4),.....,2,1,0
bk = d = b pd qd
k
k +2
k +1
k +2
q
(1.25)
bn 2
= cn 2 = bn 1 pcn 1 qcn
p
bn 3
= d n 3 = bn 1 pd n 2 qd n 1
q
(1.26)
d k = ck +1 , k = (n 3), (n 4),.....,2,1,0
(1.27)
bn bn 1
p = p = cn = cn 1 = 0
bk
= ck = bk +1 pck +1 qck + 2 , k = (n 2), (n 3),.....,2,1,0
bk
= d k = ck +1
(1.28)
(1.28), (1.19) R S p q
R
= b0 pc0 qc1
p
S
= qc0
p
,
,
R
= b1 pc1 qc2
q
S
= b0 qc1
q
(1.29)
c0, c1 c2 ck (28),
k = n - 2. , p q p q ,
(1.16).
E p q (
)
.
(1.1) (.. Newton-Raphson,
) (1.1),
p q
. , ,
p q ( p = q = 0).
I , ,
/ (round off errors)
( )
. (1.8) (1.18),
, .
p q ,
(1.16), .
f(x) .
( ) ,
f ( i ) , i = 1,2,3,....., n
(1.30)
i (1.1) . (1.30)
,
p q i j
(1.30). (1.30)
ai (1.1). , , ,
p q .
,
(1.30)
p q, .
R S p q,
(1.8) p q,
p q
p q . (1.8)
(.. 10-12 ).
(1.18). , (1.14), (1.18)
(1.8).
, /,
.
1. (1.16)
0 det[ A] det[ A] = 0
(1.31)
2. (1.6)
0 p 2 4q p 2 4q = 0
(1.32)
3. (1.2)
0 z z = 0
(1.33)
,
BAIRSTOW ( FORTRAN 90/95) .
Bairstow
1:
p q.
2:
bk b(x), (1.11).
3:
R S r(x), (1.12).
4:
(1.8). ,
11.
5:
c0, c1 c2 (1.28).
6:
R S p q (1.29).
7:
(1.16) (1.31).
.
8:
p q (1.16).
9:
p q (1.17).
10:
(1.18). ,
2 p q 9.
11:
(1.6)
(1.32).
12:
(1.6).
13:
(1.33) .
14:
b(x)
3 ,
2 - b(x)
f(x) (-)
2. p q 9. 2 1
/ 15.
15:
(1.30) .
,
, 1 p q
(1.30). ,
.
,
. 1
n
. 2
b
. 3
0.00000
0.00000
0.00000
0.00000
0.00000
0.00000
-17
0.00000
0.00000
0.00000
0.00000
0.00000
0.00000
124
1.00000
0.00000
1.00000
0.00000
1.00000
0.00000
-508
-17.00000
-1.00000
-15.38304
-1.00000
-14.13201
-1.00000
1035
124.00000
17.00000
97.40375
13.76607
80.16487
11.26402
-875 -508.00000
-124.00000
-324.00534
-73.42208
-231.38640
-44.55511
p1 = -1.61696
q1 = 1.72244
p2 = -2.86799
q2 = 3.30466
p3 = -3.67811
q3 = 4.48732
. 7 & 8
n
0.00000
0.00000
-17
0.00000
0.00000
124
1.00000
0.00000
-508
-13.00000
-1.00000
1035
67.00000
9.00000
-875
-175.00000
-26.00000
p7,8 = -4.00000
q7,8 = 5.00000
4, 5 6 .
A p = -4 q = 5. g(x)
g ( x) = x 2 + px + q = x 2 4 x + 5 = 0 x1, 2 = 2 i
H
b( x) = x 3 13x 2 + 67 x 175 = 0
f(x). p, q
, p = -4 q = 5.
,
10
. 1
n
. 2
b
. 3
0.00000
0.00000
0.00000
0.00000
0.00000
0.00000
-13
0.00000
0.00000
0.00000
0.00000
0.00000
0.00000
67
1.00000
0.00000
1.00000
0.00000
1.00000
0.00000
-175
-9.00000
-1.00000
-6.92000
-1.00000
-7.01500
-1.00000
p1 = -6.08000
q1 = 20.60000
p2 = -5.98500
q2 = 25.00620
p3 = -5.99995
q3 = 24.99983
. 5 & 6
n
0.00000
0.00000
-13
0.00000
0.00000
67
1.00000
0.00000
-175
-7.00000
-1.00000
p5,6 = -6.00000
q5,6 = 25.00000
4 .
, p = -6 q = 25. E
g(x)
g ( x ) = x 2 + px + q = x 2 6 x + 25 = 0 x3, 4 = 3 4i
,
b( x ) = x 7 = 0
x5 = 7
11
P : p.
Q : q.
TOLPQRS : (1.8) (1.18).
TOLDETS : (1.31).
TOLDETR : (1.32).
TOLC : (1.33).
TOLFX : (1.30).
NITMAX : ax. p q.
NCYCMAX : ax. .
ISORT : :
1 = , 2 = .
IPRINT1 : :
0 = , -1 = , 1= .
IPRINT2 : :
0 = , 1 = .
H :
NREAL : .
NCOMPL : .
: NREAL + NCOMPL = n.
[XR]NDEG : y
( (1.2) ). NREAL
NREAL .
, ISORT.
NCOMPL y
.
y2 + z2, z ,
(1.2). .
[XIM]NDEG : z
( (1.2) ). NREAL
. NCOMPL
z . [XR]NDEG.
[FXR]NDEG : f() NREAL
. NCOMPL
f()
, f()
12
.
[FXIM]NDEG :
f() .
NREAL .
KSOLVE : (1.30):
0 = , 1 = .
, BAIRSTOW POLYR POLYC
f() , .
SORTR SORTC
, .
,
.
PROGRAM TEST
!
!
!
!
!
==================================================================
|
ROOTS OF POLYNOMIALS
|
==================================================================
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(0:100),XR(100),XIM(100),FXR(100),FXIM(100)
!
!
!
!
!
!
!
READ (1,*) NDEG
DO I=NDEG,0,-1
READ (1,*) A(I)
END DO
READ (1,*) P,Q
READ (1,*) TOLPQRS,TOLDETS,TOLDETR,TOLC,TOLFX
READ (1,*) NITMAX,NCYCMAX,ISORT,IPRINT1,IPRINT2
!
!
!
!
!
!
END
!
DATA
5
1.00
-17.00
124.00
-508.00
1035.00
-875.00
0.00 0.00
1.00D-14 1.00D-80 1.00D-07
1.00D-07 1.00D-07
100 3 1 -1 1
13
T
f(X) =
+
+
+
+
+
Cycle No.
Cycle No.
0.100000E+01
-.170000E+02
0.124000E+03
-.508000E+03
0.103500E+04
-.875000E+03
X**
X**
X**
X**
X**
1 - Division No.
1 - Division No.
5
4
3
2
1
+
+
+
+
+
1 - Total Iterations
2 - Total Iterations
8
6
==========================================================
Real Roots (Unsorted)
==========================================================
Root No.
1
= 0.700000E+01
f() = -.284217E-11
==========================================================
Complex Roots (Unsorted)
==========================================================
Root No.
1
= 0.200000E+01 +
f() = 0.227374E-12 +
0.100000E+01 i
-.568434E-13 i
Root No.
2
= 0.200000E+01 +
f() = 0.227374E-12 +
-.100000E+01 i
0.568434E-13 i
Root No.
3
= 0.300000E+01 +
f() = 0.454747E-12 +
0.400000E+01 i
0.852651E-12 i
Root No.
4
= 0.300000E+01 +
f() = 0.454747E-12 +
-.400000E+01 i
-.852651E-12 i
==========================================================
Real Roots (Sorted)
==========================================================
Root No.
1
= 0.700000E+01
f() = -.284217E-11
==========================================================
Complex Roots (Sorted)
==========================================================
Root No.
1
= 0.200000E+01 +
f() = 0.227374E-12 +
0.100000E+01 i
-.568434E-13 i
Root No.
2
= 0.200000E+01 +
f() = 0.227374E-12 +
-.100000E+01 i
0.568434E-13 i
Root No.
3
= 0.300000E+01 +
f() = 0.454747E-12 +
-.400000E+01 i
-.852651E-12 i
Root No.
4
= 0.300000E+01 +
f() = 0.454747E-12 +
0.400000E+01 i
0.852651E-12 i
BAIRSTOW, POLYR,
POLYC, SORTR SORTC.
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
==================================================================
|
SUBROUTINE TO FIND ALL REAL & COMPLEX ROOTS
|
|
OF AN n-th DEGREE POLYNOMIAL EQUATION
|
|
|
|
f(X) = anX**n + an-1X**n-1 + ..... + a2X**2 + a1X + ao = 0, |
|
|
|
where: n > 2
|
|
|
|
BAIRSTOW METHOD
|
|
|
|
Developed by M. G. Sfakianakis
|
|
University of Patras, 2001
|
|
|
==================================================================
-----------------------------------------------------------------Variable Description
-------------------NDEG
[A]ndeg
[AA]ndeg
P
Q
[B]ndeg
[C]ndeg
TOLPQRS
TOLDETS
TOLDETR
TOLC
TOLFX
NITMAX
NCYCMAX
ISORT
IPRINT1
IPRINT2
: Polynomial Degree, n.
: Matrix of polynomial coefficients ao,a1,a2,..,an-1,an
Note that:
A(0)=ao, A(1)=a1,..., A(NDEG-1)=an-1, A(NDEG)=an.
: A copy of the original coefficients ao,a1,a2,...,an
: Initial estimation for p.
: Initial estimation for q.
: Matrix of polynomial coefficients
bo,b1,b2,..,bn-1,bn. Note that:
B(0)=Bo, B(1)=B1,..., B(NDEG-1)=Bn-1, B(NDEG)=Bn.
: Matrix of sequence ck terms
co,c1,c2,..,cn-1,cn. Note that:
C(0)=co, C(1)=c1,..., C(NDEG-1)=cn-1, C(NDEG)=cn.
: Tolerance to check if |p|<= & |q|<= , or, if
|R|<= & |S|<= .
: Tolerance to check if system determinant |a| <= .
: Tolerance to check if determinant |p**2-4q| <= .
: Tolerance to check for y+zi if |z|<= .
: Tolerance to check if |f()|<= .
: Max. permissible no. of iterations within a solytion
cycle.
: Max. permissible no. of solution cycles.
: Code for sorting (1=ascending order, 2=descending
order).
: Print code for printing intermidiate results
(0=No print, -1=partial print, 1=full print).
: Print code for printing final results
&
&
!
IMPLICIT REAL*8 (A-H,O-Z)
!
DIMENSION
&
!
!
!
!
!
!
!
!
14
A(0:NDEG),AA(0:NDEG),B(0:NDEG),C(0:NDEG),XR(NDEG), &
XIM(NDEG),FXR(NDEG),FXIM(NDEG)
COMPLEX*16 ZROOT
-----------------------------------------------------------------PRINT A MESSAGE IF ORDER NDEG<=2. THEN RETURN
-----------------------------------------------------------------IF (NDEG<=2) WRITE (*,"(/'***** Problem is of order n<=2'/)")
IF (NDEG<=2) RETURN
-----------------------------------------------------------------PRINT ALL DATA
!
!
------------------------------------------------------------------
1000
!
&
&
&
&
NREAL
DET
XR(NREAL)
NIT = 0
NIT = NIT + 1
!
&
&
&
&
!
!
!
!
!
25
!
!
!
!
!
!
!
!
DO I=N-2,0,-1
B(I) = A(I+2) - P*B(I+1) - Q*B(I+2)
END DO
-----------------------------------------------------------------CHECK IF REMAINDER Rx+S=0 (INITIAL GUESSES FOR p & q CORRECT)
------------------------------------------------------------------
&
&
!
!
!
!
!
IF (DABS(R)<=TOLPQRS.AND.DABS(S)<=TOLPQRS.AND.IPRINT1==1) &
WRITE (*,"(/'R = ',E12.6,' S = ',E12.6//
&
'Remainder Rx+S -> 0')") R,S
IF (DABS(R)<=TOLPQRS.AND.DABS(S)<=TOLPQRS) GO TO 20
DO I=N-2,0,-1
C(I) = -B(I+1) - P*C(I+1) - Q*C(I+2)
END DO
IF (IPRINT1==1) WRITE (*,
&
"(/'--- ------------ -----------&
' n
a
b
&
'--- ------------ -----------IF (IPRINT1<=0) GO TO 101
NREAL
XR(NREAL)
------------'/
c
'/
------------')")
!
!
!
!
!
101
&
&
DRDP
DRDQ
DSDP
DSDQ
!
!
!
!
!
=
=
=
=
&
&
&
&
IF (IPRINT1==-1) &
WRITE (*,"('Cycle No. ',I3,' - Division No. ',I3,
&
' - Total Iterations ',I3)") NCYCLE,NDIV,NIT
DO I=N,0,-1
A(I) = B(I)
END DO
GO TO 2000
KOD
NREAL
XR(NREAL)
= 1
= NREAL + 1
= -B(0)/B(1) ; ROOT = XR(NREAL)
IF (DET) 41,42,42
!
41
DET
DSQRT(-DET)
IF (DET==0.00)
&
WRITE (*,"(/'***** Error in Subroutine Bairstow *****'/
&
'***** System for p & q: det = 0 *****')")
IF (DET==0.00) STOP
DP
DQ
0.00D+00
0.00D+00
0.00D+00
0.00D+00
0.00D+00
0.00D+00
GO TO (31,32), N
NCOMPL
= NCOMPL + 1
XR(NDEG+1-NCOMPL)
= -0.50*B(1)/B(2)
XIM(NDEG+1-NCOMPL) = 0.50*DET/B(2)
IF (DABS(XR(NDEG+1-NCOMPL))<=TOLC) XR(NDEG+1-NCOMPL) = 0.00D+00
IF (DABS(XIM(NDEG+1-NCOMPL))<=TOLC) XIM(NDEG+1-NCOMPL) = 0.00D+00
ZROOT
= DCMPLX(XR(NDEG+1-NCOMPL),XIM(NDEG+1-NCOMPL))
=
=
=
=
=
=
KOD = 0
N
= N - 2
!
32
IF (DABS(FXR1)>TOLFX.OR.DABS(FXR2)>TOLFX.OR.
&
DABS(FXZR1)>TOLFX.OR.DABS(FXZR2)>TOLFX.OR.
&
DABS(FXZIM1)>TOLFX.OR.DABS(FXZIM2)>TOLFX) KSOLVE = 0
FXR1
FXR2
FXZR1
FXZR2
FXZIM1
FXZIM2
DRDP
DRDQ
DSDP
DSDQ
NREAL + 1
0.50*(-P-DET) ; ROOT = XR(NREAL)
!
31
=
=
DO I=N,0,-1
WRITE (*,'(I3,3(2X,E12.6))') I,A(I),B(I),C(I)
END DO
NREAL + 1
DSQRT(DET)
0.50*(-P+DET) ; ROOT = XR(NREAL)
&
&
&
=
=
=
!
!
!
!
!
!
22
!
!
!
!
!
DSQRT(-DET)
NCOMPL
= NCOMPL + 1
XR(NDEG+1-NCOMPL)
= -0.50*P
XIM(NDEG+1-NCOMPL) = 0.50*DET
IF (DABS(XR(NDEG+1-NCOMPL))<=TOLC) XR(NDEG+1-NCOMPL) = 0.00D+00
IF (DABS(XIM(NDEG+1-NCOMPL))<=TOLC) XIM(NDEG+1-NCOMPL) = 0.00D+00
ZROOT
= DCMPLX(XR(NDEG+1-NCOMPL),XIM(NDEG+1-NCOMPL))
NCOMPL
= NCOMPL + 1
XR(NDEG+1-NCOMPL)
= -0.50*P
XIM(NDEG+1-NCOMPL) = -0.50*DET
IF (DABS(XR(NDEG+1-NCOMPL))<=TOLC) XR(NDEG+1-NCOMPL) = 0.00D+00
IF (DABS(XIM(NDEG+1-NCOMPL))<=TOLC) XIM(NDEG+1-NCOMPL) = 0.00D+00
ZROOT
= DCMPLX(XR(NDEG+1-NCOMPL),XIM(NDEG+1-NCOMPL))
NDIV = 0
NDIV = NDIV + 1
2000
!
DO I=0,NDEG
AA(I) = A(I)
END DO
N
= NDEG
NREAL = 0
NCOMPL = 0
DO I=1,NDEG
FXR(I) = 1.00D+99 ; FXIM(I) = 1.00D+99
END DO
!
!
!
!
!
-----------------------------------------------------------------INITIALIZE VARIABLES
------------------------------------------------------------------
DET
NCYCLE = 0
NCYCLE = NCYCLE + 1
KSOLVE = 1
3000
!
!
!
!
!
!
IF (DET) 21,22,22
!
21
!
!
!
!
!
!
10
IF (IPRINT1==0) GO TO 10
NCOMPL
= NCOMPL + 1
XR(NDEG+1-NCOMPL)
= -0.50*B(1)/B(2)
XIM(NDEG+1-NCOMPL) = -0.50*DET/B(2)
IF (DABS(XR(NDEG+1-NCOMPL))<=TOLC) XR(NDEG+1-NCOMPL) = 0.00D+00
IF (DABS(XIM(NDEG+1-NCOMPL))<=TOLC) XIM(NDEG+1-NCOMPL) = 0.00D+00
ZROOT
= DCMPLX(XR(NDEG+1-NCOMPL),XIM(NDEG+1-NCOMPL))
= (A22*R - A12*S)/DET
= -(A21*R - A11*S)/DET
-----------------------------------------------------------------UPDATE p & q
------------------------------------------------------------------
P = P + DP
Q = Q + DQ
!
IF (IPRINT1==1) &
&
WRITE (*,"(/' End with:
p = ',E12.6,'
q = ',E12.6)") P,Q
!
!
-----------------------------------------------------------------!
CHECK, FOR THE UPDATED p & q, IF |p| <= & |q| <= .
!
ALTERNATIVELY, CHECK IF THE REMAINDER TERMS |R| <= & |S| <=
!
(Uncomment the criterion you want to use)
!
-----------------------------------------------------------------!
!+++++
IF (IPRINT1==1) WRITE (*,"(/52(1H=))")
IF ((DABS(DP)>TOLPQRS.OR.DABS(DQ)>TOLPQRS).AND.NIT<NITMAX) &
&
GO TO 1000
!+++++
!
R = A(1) - P*B(0) - Q*B(1)
!
S = A(0) - Q*B(0)
!
IF (IPRINT1==1) WRITE (*,"(/52(1H=))")
!
IF ((DABS(R)>TOLPQRS.OR.DABS(S)>TOLPQRS).AND.NIT<NITMAX) &
!
&
GO TO 1000
!+++++
!
!
-----------------------------------------------------------------!
FOR THE LAST UPDATED p & q, CALCULATE THE TWO ROOTS OF
!
x**2+px+q = 0. FOR THESE ROOTS COMPUTE THE VALUE OF f(x)
!
-----------------------------------------------------------------!
20
FXR1
= 0.00D+00
FXR2
= 0.00D+00
FXZR1 = 0.00D+00
FXZR2 = 0.00D+00
FXZIM1 = 0.00D+00
FXZIM2 = 0.00D+00
!
DET = P**2 - 4.00*Q
!
42
!
!
15
= NREAL + 1
= 0.50*(-B(1)+DET)/B(2) ; ROOT = XR(NREAL)
NREAL
XR(NREAL)
!
!
!
!
!
= DSQRT(DET)
NREAL
XR(NREAL)
!
!
!
!
!
30
DET
= NREAL + 1
= 0.50*(-B(1)-DET)/B(2) ; ROOT = XR(NREAL)
IF (DABS(FXR1)>TOLFX.OR.DABS(FXR2)>TOLFX.OR.
&
DABS(FXZR1)>TOLFX.OR.DABS(FXZR2)>TOLFX.OR.
&
DABS(FXZIM1)>TOLFX.OR.DABS(FXZIM2)>TOLFX) KSOLVE = 0
-----------------------------------------------------------------PRINT THIS SET OF ROOTS (UNSORTED)
-----------------------------------------------------------------IF (IPRINT1==0) GO TO 40
WRITE (*,"(/58(1H=)/'Real Roots (Unsorted)'/58(1H=))")
DO I=1,NREAL
WRITE (*,"('Root No. ',I3,'
= ',E12.6,'
f() = ', &
&
!
!
!
!
!
!
!
!
40
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
INDEXC = 0
FXMINC = 1.00D+99
DO I=NREAL+1,NDEG
FX = 0.50*(DABS(FXR(I)) + DABS(FXIM(I)))
IF (FX<=FXMINC) INDEXC = I
IF (FX<=FXMINC) FXMINC = FX
END DO
&
&
IF ((NREAL>1.AND.(INDEXR1==0.OR.INDEXR2==0)).OR.(NCOMPL>1.AND. &
INDEXC==0))
&
WRITE (*,"(/'***** ERROR: Cannot find a best pair of roots'/)")
IF ((NREAL>1.AND.(INDEXR1==0.OR.INDEXR2==0)).OR.(NCOMPL>1.AND. &
&
INDEXC==0)) STOP
KOD = 1
IF (FXMINC<FXMINR1.AND.FXMINC<FXMINR2) KOD = 2
GO TO (51,52), KOD
P = -(XR(INDEXR1)+XR(INDEXR2))
Q = XR(INDEXR1)*XR(INDEXR2)
GO TO 60
!
52
RETURN
END
==================================================================
|
SUBROUTINE TO SORT THE ELEMENTS OF AN ARRAY [X] IN
|
|
ASCENDING OR DESCENDING ORDER.
|
|
A SECOND ARRAY [FX] (DEPENDED ON [X]) IS ALSO REARRANGED
|
|
|
|
Developed by M. G. Sfakianakis
|
|
University of Patras, 2001
|
|
|
==================================================================
-----------------------------------------------------------------Variable Description
-------------------[X]n : Array of dimension n for ordering.
[FX]n : Array of dimension n for rearrangement. It depends on [X].
N
: Array dimension.
KORD : Sort order code: (1=ascending, 2=descending)
------------------------------------------------------------------
P = -2.00*XR(INDEXC)
Q = (XR(INDEXC)**2) + (XIM(INDEXC)**2)
DIMENSION X(N),FX(N)
!
IF (NCYCLE<NCYCMAX.AND.KSOLVE==0) GO TO 3000
1
2
!
30
!
20
IF (IPRINT2==0) GO TO 70
TEMPX
X(I)
X(J)
= X(I)
= X(J)
= TEMPX
TEMPFX = FX(I)
FX(I) = FX(J)
FX(J) = TEMPFX
CONTINUE
END DO
END DO
RETURN
END
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
DO I=1,N-1
DO J=I+1,N
GO TO (1,2), KORD
IF (X(I)-X(J)) 20,20,30
IF (X(I)-X(J)) 30,20,20
IF (NCYCLE==NCYCMAX.AND.KSOLVE==0)
&
WRITE (*,"(/'***** Not very good solution *****'/)")
RETURN
END
==================================================================
|
SUBROUTINE TO COMPUTE THE POLYNOMIAL VALUE FOR A
|
|
REAL VARIABLE
|
|
|
|
f(X) = anX**n + an-1X**n-1 + ..... + a2X**2 + a1X + ao = 0, |
|
|
|
Developed by M. G. Sfakianakis
|
|
University of Patras, 2001
|
|
|
==================================================================
==================================================================
|
SUBROUTINE TO SORT THE ELEMENTS OF ARRAYS [X1] & [X2] IN
|
|
ASCENDING OR DESCENDING ORDER ACCORDING TO THE MODULE
|
|
mod = Sqrt[x1**2 + x2**2]
|
|
ARRAYs [FX1] & [FX2] (DEPENDED ON [X1] & [X2] RESPECTIVELY) |
|
ARE ALSO REARRANGED
|
|
|
|
Developed by M. G. Sfakianakis
|
|
University of Patras, 2001
|
|
|
==================================================================
-----------------------------------------------------------------Variable Description
-------------------[X1]n : Array of dimension n for rearrangement.
[X2]n : Array of dimension n for rearrangement.
[FX1]n : Array of dimension n for rearrangement. It depends on
[X1].
[FX2]n : Array of dimension n for rearrangement. It depends on
[X2].
N
: Array dimension.
KORD
: Sort order code: (1=ascending, 2=descending)
-----------------------------------------------------------------SUBROUTINE SORTC (X1,X2,FX1,FX2,N,KORD)
DIMENSION X1(N),X2(N),FX1(N),FX2(N)
DIMENSION A(0:N)
!
!
FX = A(N)
DO I=N,1,-1
FX = FX*X + A(I-1)
END DO
FXZR = DREAL(FZ)
FXZIM = DIMAG(FZ)
FZ = DCMPLX(A(N),DUM)
DO I=N,1,-1
TERM = DCMPLX(A(I-1),DUM)
FZ
= FZ*Z + TERM
END DO
!
!
!
!
!
!
!
!
!
!
!
!
DUM = 0.00D+00
!
!
70
DIMENSION A(0:N)
COMPLEX*16 Z,FZ,TERM
!
INDEXR2 = 0
FXMINR2 = 1.00D+99
DO I=1,NREAL
IF (I==INDEXR1) GO TO 45
IF (DABS(FXR(I))<=FXMINR2) INDEXR2 = I
IF (DABS(FXR(I))<=FXMINR2) FXMINR2 = DABS(FXR(I))
CONTINUE
END DO
!
51
INDEXR1 = 0
FXMINR1 = 1.00D+99
DO I=1,NREAL
IF (DABS(FXR(I))<=FXMINR1) INDEXR1 = I
IF (DABS(FXR(I))<=FXMINR1) FXMINR1 = DABS(FXR(I))
END DO
!
!
!
!
!
==================================================================
|
SUBROUTINE TO COMPUTE THE POLYNOMIAL VALUE FOR A
|
|
COMPLEX VARIABLE
|
|
|
|
f(X) = anX**n + an-1X**n-1 + ..... + a2X**2 + a1X + ao = 0, |
|
|
|
where: X = Z = a + bi
|
|
|
|
Developed by M. G. Sfakianakis
|
|
University of Patras, 2001
|
|
|
==================================================================
DO I=0,NDEG
A(I) = AA(I)
END DO
45
!
60
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
E12.6)") I,XR(I),FXR(I)
END DO
1
2
!
30
RETURN
END
!
20
!
!
16
DO I=1,N-1
XXI = DSQRT((X1(I)**2)+(X2(I)**2))
DO J=I+1,N
XXJ = DSQRT((X1(J)**2)+(X2(J)**2))
GO TO (1,2), KORD
IF (XXI-XXJ) 20,20,30
IF (XXI-XXJ) 30,20,20
TEMPX1
X1(I)
X1(J)
= X1(I)
= X1(J)
= TEMPX1
TEMPX2
X2(I)
X2(J)
= X2(I)
= X2(J)
= TEMPX2
TEMPFX1 = FX1(I)
FX1(I) = FX1(J)
FX1(J) = TEMPFX1
TEMPFX2 = FX2(I)
FX2(I) = FX2(J)
FX2(J) = TEMPFX2
CONTINUE
END DO
END DO
RETURN
END
2.1 Crout
,
,
Crout
, (Lower) (Upper) (LUDecomposition).
. :
[]nxn
a11
a
21
...
a n1
a12
a 22
...
an2
0
l 22
...
ln2
0 u11
... 0 0
u12
u 22
...
0
... u1n
... u 2 n
2.1.1)
... ...
... u nn
[ A]nxn [ x]n = [b]n ([ L]nxn [U ]nxn ) [ x]n = [ L]nxn ([U ]nxn [ x]n ) = [b]n
(2.1.2)
[ y ]n = [U ]nxn [ x]n
(2.1.3)
[y]n
[ L]nxn [ y ]n = [b]n
(2.1.4)
[x]n
[U ]nxn [ x]n = [ y ]n
(2.1.5)
. ,
(2.1.4)
y1 =
b1
l11
i 1
1
yi = bi lij y j , i = 2,3,..., n
lii
j =1
(2.1.5)
17
(2.1.6)
xn =
yn
unn
1
xi = yi
uii
(2.1.7)
uij x j , i = n 1, n 2,...,1
j = i +1
[L]nxn [U]nxn
(2.1.1), , ij []nxn.
aij i- [L]nxn
j- [U]nxn.
(2.1.8)
lii = 1 , i = 1,2,3,....., n
(2.1.9)
(, uii , lii). ,
(2.1.8), a1j
[]nxn ( (2.1.1) (2.1.9) )
[a11
a12
(2.1.10)
, [U]nxn
[]nxn. A (2.1.8)
ai1 i > 1, []nxn ( a11
(2.1.10) ),
a21
l21
a21 l21u11
l
a l u
31 1 a31
31 31 11
a41 = l41u11 l41 =
a41
u11
.....
.....
..... .....
an1
ln1
an1 ln1u11
(2.1.11)
, [U]nxn
[L]nxn,
[]nxn.
18
(2.1.8)
a2j j > 1, []nxn (
a21 (2.1.11) ),
(2.1.8) ai2 i > 2,
[]nxn ( a22
).
T
a22
l 21u12 + u 22
u 22
a22 l21u12
a
l u + u
u
a l u
23
23 = 21 13
23 = 23 21 13
.....
.................
.....
.................
a2 n
l21u1n + u 2 n
u 2 n
a2 n l 21u1n
a32 l31u12 + l32 u 22
l32
a l u + l u
42 = 41 12 42 22 l 42 = 1
..... ....................
..... u 22
an 2 ln1u12 + ln 2 u 22
l n 2
(2.1.12)
a32 l31u12
a l u
42 41 12
.................
an 2 ln1u12
(2.1.13)
,
.
a11
a
21
a31
...
an1
a32
...
an 2
a12
a22
2n-1
2n-2
0
0
1
...
ln3
6
... 0
u11 u12
0 u
... 0
22
... 0 , 0
0
... ...
... ...
0
... 1
0
2n-1
2n-2
, n2 (2.1.8),
2n-1
., 1 uij
, 2 lij , 3 uij ,
...
19
, .
uij lij urj r
[U]nxn
r 1
(2.1.14)
k =1
lir r [L]nxn
lir =
1
urr
r 1
(2.1.15)
(2.1.14) (2.1.15) r, r =
1,2,..,n. i r = 1 (;).
u l (2.1.14)
(2.1.15), urj lir
r, r.
/,
ij (2.1.14) (2.1.15)
, lij uij.
[L]nxn [U]nxn /.
LUDCMP
[]nxn
[ A] nxn
u12
u11
l
u 22
21
l 31
l 32
l 42
= l 41
...
...
l n 1,1 l n 1, 2
l
ln2
n1
u13
u14
... u1,n 1
u 23
u 24
... u 2,n 1
u 33
u 34
... u 3,n 1
l 43
u 44
... u 4,n 1
...
...
... ...
l n 1,3
l n 1, 4
... u n 1,n 1
ln3
ln4
... l n ,n 1
20
u 2 n
u 3n
u 4n
...
u n 1,n
u nn
u1n
(2.1.16)
[L]nxn [U]nxn,
lii = 1, i = 1,2,,n.
2.1.1
3 1 2 x1 7
1
2
3 x2 = 14
2 2 1 x3 5
[]3x3
Crout. (14) (15) .
[ A]3x 3
3 1 2
= 1
2
3
2 2 1
(1) - r = 1
(3) - r = 2
(5) - r = 3
(2)
(4)
r=1 r=2
(2.1.14) r = 1 u1 j = a1 j - 0 = a1 j
(2.1.15) r = 1 li1 =
j = 1 u11 = 3
, j = 1,2,3 j = 2 u12 = 1
j = 3 u = 2
13
1
(ai1 0) = ai1
u11
u11
(2.1.14) r = 2 u 2 j = a 2 j
2 1=1
l
k =1
2k
i = 2 l 21 = 3
, i = 2,3
i = 3 l = 2
31
3
u kj = a 2 j -l 21u1 j , j = 2 ,3
1
7
j = 2 u 22 = a 22 l 21u12 = 2 3 ( 1) u 22 = 3
j = 3 u = a l u = 3 1 2 u = 7
23
23
21 13
23
3
3
(2.1.15) r = 2 li 2 =
2 1=1
1
1
(a32 l31u12 ) =
ai 2 lik u k 2 , i = 3 l32 =
u 22
u 22
k =1
21
3
2
4
= 2 (1) l32 =
7
3
7
(2.1.14) r = 3 u 3 j = a3 j
31= 2
k =1
k =1
2
4 7
= a33 (l31u13 + l32 u 23 ) = 1 2 + u 33 = 1
7 3
3
[ L]3 x 3
0
0
3 1 2
1
= 1 3
1
0 , [U ]3 x 3 = 0 7 3 7 3
0 0 1
2 3 4 7 1
[L]3x3[U]3x3 (2.1.1).
(2.1.6) (2.1.4).
y1 =
b1 7
= y1 = 7
l11 1
yi =
1
lii
i 1
i lij y j , i = 2,3,..., n
j =1
2 1=1
1
1
1
1
35
i = 2 y2 = b2 l2 j y j = (b2 l21 y1 ) = 14 7 y2 =
l22
1
3
3
j =1
l22
3 1= 2
1
2
1
1
4 35
i = 3 y3 = b3 l3 j y j = [b3 (l31 y1 + l32 y2 )] = 5 7 +
l33
1
7 3
j =1
3
l33
y3 = 3
(2.1.7) (2.1.5).
x3 =
y3 3
=
x3 = 3
u33 1
xi =
1
uii
yi
n =3
u x
j = i +1
ij
, i = 2,1
n =3
1
1
( y2 u23 x3 ) = 3 35 7 3 x2 = 2
i = 2 x2 =
y2 u 2 j x j =
7 3 3
u22
j = 2 + 1= 3
u22
n =3
1
1
i
x
y
u1 j x j =
1
u11
3
j =1+1= 2
u11
22
x1 1
[ x]3 x1 = x2 = 2
x3 3
[]nxn -
[][x]=[b],
[b] [x]
. , aij*
, n
a11 a12 a13 ... a1n a11* a12* a13* ... a1*n 1 0 0 ... 0
*
a
*
*
*
21 a 22 a 23 ... a 2 n a 21 a 22 a 23 ... a 2 n 0 1 0 ... 0
*
*
*
a31 a32 a33 ... a3n a31
a32
a33
... a3*n = 0 0 1 ... 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
*
a n1 a n 2 a n 3 ... a nn a n*1 a n* 2 a n*3 ... a nn
0 0 0 ... 1
3
1
4444244443 14444244443 14442444
[ A ]nxn
1
[ A ]nxn
a11
a
21
a31
...
a n1
a12
a13
a 22
a32
...
an 2
a 23
a33
...
an3
[ I ]nxn
a11
a
21
a31
...
a n1
a12
a 22
a32
...
a13
a 23
a33
...
a11
a
21
a31
...
a n1
a12
a 22
a32
a13
a 23
a33
...
an2
...
an3
23
(2.1.17)
2.1.2
2.1.1.
(2.1.17)
*
*
*
3 1 2 a12 0
3 1 2 a13 0
3 1 2 a11 1
*
*
*
1
2
3 a 23
2
3 a 22
2
3 a 21
= 0 , 1
= 1 , 1
= 0
*
*
*
2 2 1 a31 0
2 2 1 a32 0
2 2 1 a33 1
Crout 2.1.1.
[ A]
1
3x 3
1
4 / 7 5 / 7
= 1
1
1
6 / 7 4 / 7 1
.
L-U
n
(2.1.18)
j =1
2.1.3
2.1.1
7
A 3 x 3 = 3 (1) = 7
3
Crout FORTRAN 90/95
LUDCMP FORTRAN 90/95.
(8 bytes). - []nxn
(2.1.14-16),
.
(2.1.1) (2.1.16),
.
:
[]NPxNP : [] nxn.
N, NP : n [].
24
[INDX]NP : M ,
(2.1.15) ().
D : 1
.
FORTRAN 90/95
LUBKSB FORTRAN 90/95.
(8 bytes). (2.1.2)
(2.1.3)-(2.1.7). - []nxn
(2.1.16) LUDCMP.
:
[]NPxNP : [] nxn.
N, NP : LUDCMP.
[INDX]NP : LUDCMP.
[B]NP : bi
(2.1.2). , []NP
[x]n, bi .
,
:
: []nxn[x]n = [b]n
A :
.............................
CALL LUDCMP (A,N,NP,INDX,D)
CALL LUBKSB (A,N,NP,INDX,B)
.............................
bi
LUBKSB []n.
: []-1nxn
(2.1.17).
......................................
DIMENSION A(NP,NP),A1(NP,NP),INDX(NP)
......................................
N = NP
DO I=1,N
DO J=1,N
A1(I,J) = 0.00
END DO
A1(I,I) = 1.00
END DO
25
[]nxn
(2.1.18).
...............................
CALL LUDCMP (A,N,NP,INDX,D)
DET = 1.00D+00
DO J=1,N
DET = DET*A(J,J)
END DO
...............................
DET.
LUDCMP LUBKSB.
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
==================================================================
| SUBROUTINE TO PERFORM THE L-U DECOMPOSITION ON A REAL MATRIX
|
|
|
|
CROUT METHOD
|
|
|
| Original routine from the book:
|
|
Numerical Recipes, The Art of Scientific Computing (FORTRAN |
|
Version). By: W.H. Press, et al, 1992 ed.
|
|
|
| FORTRAN 90/95 modification by: M. G. Sfakianakis
|
|
M.G. Sfakianakis, University of Patras, 2001
|
|
|
==================================================================
-----------------------------------------------------------------Variable Description
-------------------[A]NPxNP : Matrix to be decomposed.
NP, N
: Physical matrix dimension, n.
[INDX]NP : Records the row permutation effected by the partial
pivoting.
D
: Output as +1 or 1 depending on whether the number of
row interchanges is even or odd, respectively.
------------------------------------------------------------------
17
!
!
18
!
!
19
!
!
!
11
!
!
!
12
!
!
!
13
!
14
!
!
!
15
!
!
16
!
!
DO 11 J=1,N
IF (DABS(A(I,J))>AAMAX) AAMAX = DABS(A(I,J))
CONTINUE
IF (AAMAX==0.00D+00) WRITE (*,"(/2(/A)/A,I5)") &
& ' *************** ERROR ***************',
&
& ' SUBROUTINE LUDCMP : Singular Matrix',
&
& '
ROW No. : ',I
IF (AAMAX==0.00) STOP
VV(I)=1.00/AAMAX
CONTINUE
DO 19 J=1,N
DO 14 I=1,J-1
SUM = A(I,J)
DO 13 K=1,I-1
SUM = SUM - A(I,K)*A(K,J)
CONTINUE
A(I,J) = SUM
CONTINUE
AAMAX = 0.00D+00
DO 16 I=J,N
SUM = A(I,J)
DO 15 K=1,J-1
SUM = SUM - A(I,K)*A(K,J)
CONTINUE
A(I,J) = SUM
DUM
= VV(I)*DABS(SUM)
IF (DUM>=AAMAX) THEN
IMAX = I
AAMAX = DUM
ENDIF
CONTINUE
IF (J/=IMAX) THEN
26
DO 17 K=1,N
DUM
= A(IMAX,K)
A(IMAX,K) = A(J,K)
A(J,K)
= DUM
CONTINUE
D
= -D
VV(IMAX) = VV(J)
ENDIF
INDX(J) = IMAX
IF (A(J,J)==0.00) A(J,J) = TINY
IF (J/=N)
THEN
DUM = 1.00/A(J,J)
DO 18 I=J+1,N
A(I,J) = A(I,J)*DUM
CONTINUE
ENDIF
CONTINUE
RETURN
END
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
==================================================================
|
SUBROUTINE TO SOLVE A SET OF N LINEAR EQUATIONS [A][X]=[B]
|
|
WHERE [A] IS IN DECOMPOSED FORM OF THE TYPE L-U
|
|
|
|
CROUT METHOD (continued for system solution)
|
|
|
| Original routine from the book:
|
|
Numerical Recipes, The Art of Scientific Computing (FORTRAN |
|
Version). By: W.H. Press, et al, 1992 ed.
|
|
|
| FORTRAN 90/95 modification by: M. G. Sfakianakis
|
|
M.G. Sfakianakis, University of Patras, 2001
|
|
|
==================================================================
!
11
!
-----------------------------------------------------------------Variable Description
--------------------
12
!
!
13
!
14
!
DIMENSION A(NP,NP),INDX(NP),B(NP)
II = 0
DO 12 I=1,N
LL
= INDX(I)
SUM
= B(LL)
B(LL) = B(I)
IF (II/=0) THEN
DO 11 J=II,I-1
SUM = SUM - A(I,J)*B(J)
CONTINUE
ELSE IF (SUM/=0.00) THEN
II = I
ENDIF
B(I) = SUM
CONTINUE
DO 14 I=N,1,-1
SUM = B(I)
DO 13 J=I+1,N
SUM = SUM - A(I,J)*B(J)
CONTINUE
B(I) = SUM/A(I,I)
CONTINUE
RETURN
END
2.2 Cholesky
H Cholesky []nxn
.
(2.2.1)
[]n.
1
[ A] nxn [ x] n = [b] n [ x] n = [ A] nxn
[b] n
(2.2.2)
[]nxn
.
a11
a
21
...
a n1
a12
a 22
...
an2
0
l 22
...
ln2
0 l11 l 21
... 0 0 l 22
... l n1
... l n 2
... ...
... l nn
(2.2.3)
27
l = a
11
= a11
l112
11
l 21 = a12 l11
= a12
l11l 21
......................................
.....................
l n1 = a1n l11
= a1n
l11l n1
2
2
= a 22 l 22 = a 22 l 212
l 21 + l 22
............................
......................................
= a2n
l 21l n1 + l 22 l n 2
l n 2 = (a 2 n l 21l n1 ) l 22
......................................
.................................
2
2
2
n 1
l n1 + l n 2 + ..... + l nn = a nn
l nn = a nn l nj2
j =1
(2.2.4)
(2.2.4)
i 1
l ki =
a ki lij l kj
j =1
l ii
, i = 1,2,....., k 1
(2.2.5)
k 1
l kk = a kk l kj2
(2.2.5)
j =1
1
[ A] nxn = [ L] nxn [ L]Tnxn [ A] nxn
= [ L] nxn [ L]Tnxn
= [ L]Tnxn
1
1
[ L] nxn
= [ L] nxn
1
[ L] nxn
(2.2.6)
[]nxn
[L]nxn (;). E []nxn
[L]nxn
l11
l
21
...
l n1
0
l 22
...
ln2
0 x11
... 0 x 21
28
0
x 22
...
xn 2
0 1
... 0 0
=
... ... ...
... x nn 0
...
0 ... 0
1 ... 0
... ... ...
0 ... 1
(2.2.7)
(2.2.7)
[]nxn, (2.1.17). n
(2.1.4),
x1k =
b1k
l11
i 1
bik l ij x jk , i = 2,3,..., n
j =1
0 , i k
bik =
1 , i = k
xik =
1
l ii
(2.2.8)
(2.2.8) - (2.1.6)
(2.2.7) k =1,2,..,n. O []nxn
(2.2.8). ,
(2.2.8) i=k,k+1,..,n.
(2.2.8)
(2.2.7)
1 l , k = 1
x1k = 11
, k = 2,3,....., n
0
, i = 2,3,..., k 1
0
1
xik = 1 l ij x jk , i = k
l ii j =1
i 1
1 l x , i = k + 1, k + 2,..., n
lii j =1 ij jk
2.2.1
Cholesky
3
4 x1 30
1 2
2 29 36 43 x 340
2 =
a11 = 1 l11 = 1
29
(2.2.9)
a 2i
a
2
, i = 1 l 21 = 21 = l 21 = 2
l ii
l11 1
(2.2.5) k = 2 l 2i =
(2.2.5) k = 2 l 22 =
a 22 l 212 = 29 2 2 l 22 = 5
i 1
(2.2.5) k = 3 l 3i =
a3i lij l 3 j
(2.2.5) k = 3 l33 =
j =1
l ii
a31 3
l 31 = l = 1 l 31 = 3
11
, i = 1,2
l = a32 l 21l 31 = 36 2 3 l = 6
32
32
l 22
5
i 1
(2.2.5) k = 4 l 4i =
a 4i lij l 4 j
j =1
l ii
, i = 1,2,3
l = a 41 = 4 l = 4
41
41 l11 1
a l l
43 2 4
l 42 = 42 21 41 =
l 42 = 7
5
l 22
a 43 l 3 j l 4 j
a l l l l
126 3 4 6 7
j =1
l =
= 43 31 41 32 42 =
l 43 = 9
43
l 33
l 33
8
l 44 = 10
[ L] 4 x 4
1
2
=
3
0
0
6 8 0
7 9 10
0 0
5 0
(2.2.9) [L]4x4.
k = 1 x11 =
1 1
= x11 = 1
l11 1
30
1
1
2
i = k + 1 = 2 x 21 = l 21 x11 = 2 1 x 21 =
5
5
l 22
1
1
i = k + 2 = 3 x31 = l3 j x j1 = (l31 x11 + l32 x 21 ) =
l33 j =1
l33
1
3
2
k =1
= 3 1 + 6 x31 =
8
40
5
1
1
i = k + 3 = n = 4 x 41 = l 4 j x j1 = (l 41 x11 + l 42 x 21 + l 43 x31 ) =
l
l
44 j =1
44
1
21
2
3
= 4 1 + 7 + 9 x 41 =
10
400
5
40
k = 2 x12 = 0
1
1
1
i = k = 2 x 22 = l [1 l 21 x12 ] = 5 (1 2 0 ) x 22 = 5
22
1 2
1
1
1
1
3
i
k
x
l3 j x j 2 = (l 31 x12 + l32 x 22 ) = 3 0 + 6
=
+
=
32
5
8
l 33 j =1
l 33
3
k =2
x32 =
20
1 3
1
i = k + 2 = n = 4 x 42 = l l 4 j x j 2 = l (l 41 x12 + l 42 x 22 + l 43 x32 ) =
44 j =1
44
1
1
1
3
= 4 0 + 7 + 9 x 42 =
10
5
200
20
k = 3 x13 = 0
i = 2 x = 0
23
1
1
(1 l31 x13 l32 x23 ) = 1 (1 3 0 6 0)
1
i = k = 3 x33 =
l3 j x j 3 =
l 33 j =1
8
l33
1
x33 =
k =3
8
1 3
1
i = k + 1 = n = 4 x 43 = l 4 j x j 3 = (l 41 x13 + l 42 x 23 + l 43 x33 ) =
l 44 j =1
l 44
1
1
9
= 4 0 + 7 0 + 9 x 43 =
10
8
80
k = 4 x14 = 0
31
i = 2 x 24 = 0
i = 3 x = 0
34
k = 4 i = k = 4 x 44 = 1 1 l 4 j x j 4 = 1 (1 l 41 x14 l 42 x 24 l 43 x34 ) =
l 44 j =1
l 44
1
1
= (1 4 0 7 0 9 0 ) x 44 =
10
10
[ L] 41x 4 = [ X ] 4 x 4
1
0
0
0
2 5
15
0
0
=
3 40 3 20
18
0
21 400 1 200 9 80 1 10
(2.2.9) []4x4
[ A] 41x 4 = [ L] 41x 4
[ L] 41x 4
[ A] 41x 4
1
0
0
0
1 2 5 3 40 21 400
0
15
0
0
1 5 3 20
1 200 2 5
.
=
0
18
0
0
18
9 80 3 40 3 20
0
0
1 10 21 400 1 200 9 80 1 10
0
1 10 0
21 400 0
1 200 0
9 80 0
x1
30 186941 160000 5479 80000 111 32000 21 4000 30
x
4x4
x3
906 111 32000
181 6400
291 16000
9 800 906
1 10 0 1452
21 400 0
1 200 0
9 80 0
1452
x4
x1 1
x 2
2 =
x3 3
x 4 4
32
2.3 krylov
, , ..: A = [ A]
H Krylov
[]nxn,
a11
a 21
~ ~
~
~
~ ~
A X = X A I X = 0
~
~
A I = a31
X 0
..........
a n1
a12
a 22
a32
a13
...
a1n
a 23
...
a33 ...
a2n
a3n
=0
a n3
... a nn
(2.3.1)
Krylov
(2.3.1) -
P ( ) = p n n + p n 1n 1 + p n 2 n 2 + ..... + p 2 2 + p1 + p 0 = 0 , p n = 1
(2.3.2)
pi aij [A]nxn
, , Leverrier.
B Cayley-Hamilton , A ,
.
~
~
~
~
~
~
P ( A) = A n + p n 1 A n 1 + p n 2 A n 2 + ..... + p 2 A 2 + p1 A + p 0 = 0
(2.3.3)
Y ( 0 )
~
Y ( 0)
y1( 0 )
(0)
y
= 2 0
.....
(0)
y n
(2.3.4)
(2.3.3) Y ( 0 )
~ ~
~
~
~ ~
~ ~
~
~
~
A n Y ( 0 ) + p n 1 A n 1 Y ( 0 ) + p n 2 A n 2 Y ( 0 ) + ..... + p 2 A 2 Y ( 0 ) + p1 A Y ( 0 ) + p 0Y ( 0) = 0 (2.3.5)
, Y ( k )
33
~ ~
~
Y ( k ) = A k Y ( 0 ) , k = 1,2,....., n
(2.3.6)
, Y ( k ) Y ( 0 ) A
k- .
(2.3.6) (2.3.5)
~
~
~
~
~
~
Y ( n ) + p n 1Y ( n 1) + p n 2Y ( n 2) + ..... + p 2Y ( 2 ) + p1Y (1) + p 0Y ( 0 ) = 0
~
~
~
~
~
~
p n 1Y ( n 1) + p n 2Y ( n 2 ) + ..... + p 2Y ( 2 ) + p1Y (1) + p 0Y ( 0 ) = Y ( n )
(2.3.7)
(2.3.7) Y ( m ) , m=0,1,2,..,n
y1( n 1)
( n 1)
y2
y 3( n 1)
........
y ( n 1)
n
y1( n 2 )
y 2( n 2 )
y 3( n 2 )
........
y n( n 2 )
y1( n )
... y1( 0 ) p n 1
(n)
... y 2( 0 ) p n 2
y2
(0)
... y 3 p n 3 = y 3( n )
(2.3.8)
pm , m=0,1,2,..,n-1
(2.3.2). (2.3.8)
Y ( k ) (2.3.6).
A , o () . ,
(2.3.8) ,
pm . ,
- - Y ( 0 ) .
,
Krylov
Leverrier.
Krylov
Krylov
(2.3.9) (2.3.10).
(2.3.6) k
~
k = 1 Y (1)
~ ~
~
~
k = 2 Y ( 2) = A 2 Y ( 0) = A
~ ~
~
~
k = 3 Y ( 3) = A 3 Y ( 0 ) = A
(A~ Y~ )
(A~ A~ Y~ )
34
(0)
(0)
~ ~
= A Y ( 0)
~ ~
= A Y (1)
~ ~
= A Y ( 2)
(2.3.9)
...................................................................................................
~ ~
~ ~ ~
~ ~ ~ ~
~
k = k Y ( k ) = A k Y ( 0 ) = A 1
A 4
A
4
4
3
A Y ( 0 ) = A Y ( k 1)
42
k 1
(2.3.9)
(2.3.1) i
~
X (i ) i=1,2,..,n,
~ ~
A X (i )
~ ~
A 2 X (i ) = i
~ ~
A3 X (i ) = i2
(A~ X~ ) = X~
(A~ X~ ) = X~
(i )
(i )
i i
(i )
2
i i
(i )
~
= i X ( i )
~
= i2 X (i )
~
= 3i X (i )
(2.3.10)
..................................................................
~ ~
~ ~
~
~
A k X (i ) = ki 1 A X (i ) = ki 1i X (i ) = ki X ( i )
X ( m ) , m=1,2,..,n n
(2.3.1), , Y ( 0 ) Krylov,
.
Y ( 0)
~
~
~
~
~
Y ( 0 ) = c1 X (1) + c 2 X ( 2) + ..... + c n 1 X ( n 1) + c n X ( n )
(2.3.11)
ci, i=1,2,..,n
(2.3.11).
(2.3.11) A
~ ~
~ ~
~ ~
~ ~
~ ~
A Y ( 0 ) = c1 A X (1) + c 2 A X ( 2 ) + ..... + c n 1 A X ( n 1) + c n A X ( n )
(2.3.12)
~
~
~
~
~
Y (1) = c11 X (1) + c22 X ( 2) + ..... + cn 1n 1 X ( n 1) + cnn X ( n )
(2.3.11)
, (2.3.11) A
(2.3.9) (2.3.10)
~ ~
~ ~
~ ~
~ ~
~ ~
A Y (1) = c11 A X (1) + c 2 2 A X ( 2) + ..... + cn 1 n 1 A X ( n 1) + c n n A X ( n )
~
~
~
~
~
Y ( 2) = c112 X (1) + c2 22 X ( 2) + ..... + cn12n1 X ( n1) + cn 2n X ( n )
~
(2.3.11)
Y ( m ) , m < n-1,
A , n-1
35
~
~
~
~
~
Y ( n1) = c11n1 X (1) + c2 n21 X ( 2) + ..... + cn1nn11 X ( n1) + cn nn1 X ( n )
(2.3.11)
(2.3.13)
....................................................................................................
(2.3.13)
L Y ( m ) q m ,i
(2.3.13) m=n-1,n-2,..,2,1,0 q n 1,i = 1
~ ~
~
~
~
~
~
L = Y ( n 1) + q n 2,i Y ( n 2 ) + q n 3,i Y ( n 3) + ..... + q 2,i Y ( 2 ) + q1,i Y (1) + q 0,i Y ( 0 )
,
(2.3.14)
(2.3.14)
~
Y ( m ) ,
m=n-1,n-2,..,2,1,0, (2.3.11)
~ ~
~
~
~
~
~
L = Y ( n 1) + qn 2,iY ( n 2 ) + qn 3,iY ( n 3) + ..... + q2,iY ( 2 ) + q1,iY (1) + q0,iY ( 0 ) =
~
~
~
~
= c1i (1 ) X (1) + c2i (2 ) X ( 2 ) + ..... + cn 1i (n 1 ) X ( n 1) + cni (n ) X ( n )
(2.3.15)
i ( )
i ( ) =
P ( )
, i = 1,2,....., n
i
(2.3.16)
P() (2.3.2),
i ( j ) = 0 , j i
(2.3.16)
P( ) = ( i ) i ( ) = i ( ) i i ( )
P ( ) = i ( ) + i( ) i i( ) = i ( ) + ( i ) i( )
P (i ) = i (i ) + (i i ) i( )
i (i ) = P (i )
36
(2.3.16)
(2.3.16,) (2.3.15)
~ ~
~
~
~
~
~
~
L = Y ( n 1) + q n 2,i Y ( n 2) + q n 3,i Y ( n 3) + ..... + q 2,i Y ( 2 ) + q1,i Y (1) + q 0,i Y ( 0) = ci i (i ) X (i )
~
ci X ( i ) =
1
~
~
~
~
~
~
Y ( n 1) + q n 2,i Y ( n 2 ) + q n 3,i Y ( n 3) + ..... + q 2,i Y ( 2) + q1,i Y (1) + q 0,i Y ( 0)
P ( i )
] (2.3.17)
i = 1,2,....., n
~
, X ( i ) i
(2.3.17) ci.
Y ( m ) , m=n-1,n-2,,2,1,0, (2.3.6)
(2.3.9), P (i )
(2.3.2) =i.
qm,i m=n-2,n-3,,2,1,0 i=1,2,,n.
(2.3.16) (2.3.2) (2.3.13)
P ( ) = ( i )i ( ) n + pn 1n 1 + pn 2n 2 + ..... + p22 + p1 + p0 =
p n2
p2
p0
p0 = i q0,i
q0,i = i q1,i + p1
p1 = q0,i i q1,i
p = q q
2
1, i
i 2, i
q1,i = i q2,i + p2
................................. ....................................................
q k ,i = i q k +1,i + p k +1
k = (n 2), (n 3),.....,2,1,0
q
n 1,i = 1
(2.3.18)
, qm,i , m=n-2,n-3,,2,1,0
(2.3.18) i, i=1,2,..,n.
37
ci X ( i ) (2.3.17)
.
1.
(c x ) + (c x ) + ..... + (c x ) + (c x )
= c (x ) + (x ) + ..... + (x ) + (x )
~
ci X ( i ) =
(i ) 2
i 1
(i ) 2
1
(i ) 2
2
(i ) 2
2
(i ) 2
n 1
(i ) 2
n 1
(i ) 2
n
(2.3.19)
(i ) 2
n
x1(i )
ci x1(i )
(i )
(i )
x2
1
1
~ (i )
c i x 2
=
=
c X =
~ (i )
..... c X~ (i ) i
.......
ci X
i
(i )
(i )
x n
ci x n
~
X (i )
(2.3.20)
2. , ,
+1.
[
[
]
]
(i )
(i )
(i )
(i )
x max
, x max
x min
= max x1(i ) , x 2(i ) ,....., x n(i)1 , x n(i )
x max
(i )
x abs ,max = (i )
(i )
(i )
(i )
= min x1(i ) , x 2(i ) ,....., x n(i)1 , x n(i )
x min
x min , x max x min
(2.3.21)
x1(i )
(i )
x
1
1
~
= 2 = (i )
ci X ( i ) = ( i )
..... x abs ,max
x abs ,max
(i )
x n
~
X (i )
ci x1(i )
(i )
cx
i 2
.......
(i )
ci x n
(2.3.22)
(2.3.20) (2.3.22)
ci ci X ( i ) ,
(2.3.17), .
~
Anxn , -
[~
X ( k ) , X ( m ) , k m 1 (k,m) n, n ,
(X~ )
(k ) T
~
X (m) = 0 , k m , 1 k n , 1 m n
38
(2.3.23)
(m,n). (2.3.23)
(2.3.17).
2.3.1
Krylov
A4 x 4
(2.3.1).
~
A4 x 4
1
2
=
3
2 3 4
1 2 3
2 1 2
3 2 1
(2.3.4)
~
Y (0)
1
0
=
0
0
(2.3.9)
~ ~
~
Y (1) = A Y ( 0 )
1
2
=
3
2
1
2
3
3
2
1
2
4 1 1
3 0 2
=
2 0 3
1 0 4
1
2
=
3
2
1
2
3
3
2
1
2
4 1 30
3 2 22
=
2 3 18
1 4 20
~ ~
~
Y ( 3) = A Y ( 2 )
1
2
=
3
2
1
2
3
3
2
1
2
4 30 208
1
2
3 22 178
~ ~
~
, Y ( 4 ) = A Y ( 3) =
=
3
2 18 192
1 20 242
4
2
1
2
3
3
2
1
2
4 208 2108
3 178 1704
=
2 192 1656
1 242 1992
~ ~
~
, Y ( 2 ) = A Y (1)
(2.3.8)
208
178
192
242
30
22
18
20
1
2
3
4
1 p3
2108
1704
0 p 2
=
1656
0 p1
0 p 0
1992
39
p3 = 4 , p 2 = 40 , p1 = 56 , p 0 = 20
, - (2.3.2)
P ( ) = 4 43 402 56 20 = 0
(.. Bairstow)
-
k = n 1 = 4 1 = 3
q3,1 = 1
k = n2 = 42 = 2
k = n 3 = 43=1
k = n4= 44= 0
c1 X (1) (2.3.17)
~
c1 X (1) =
1
~
~
~
~
Y (3) + q 2,1Y ( 2) + q1,1Y (1) + q 0,1Y ( 0) =
P (1 )
1235.881984
208
30
1
1
178
22
2
242
20
4
0
0.299029
0.245145
=
0.245145
0.299029
i=1 i=2,3,4
~
c2 X ( 2)
0.073223
0.200971
0.426777
0.176777
0.245145
~ ( 4 ) 0.176777
~ ( 3)
=
, c4 X =
, c3 X =
0.176777
0.245145
0.176777
0.073223
0.200971
0.426777
40
ci X ( i ) ,
(2.3.19) (2.3.10)
~
X (1)
0.546835
0.270598
0.448298
0.653281
0.448298
0.653281
0.546835
, X~ ( 2) =
, X~ (3) =
, X~ ( 4) = 0.270598
=
0.448298
0.653281
0.546835
0.270598
0.546835
0.270598
0.448298
0.653281
, (2.3.21) (2.3.22)
~
X (1)
1
1
0.414214
0.819804
0.819804
1
1
~ ( 4 ) 0.414214
~ ( 3)
~ ( 2)
=
, X =
, X =
, X =
0.819804
0.414214
1
1
1
1
0.414214
0.819804
, A4 x 4
(2.3.23) . .., X ( 2 ) X ( 4)
(X~ )
( 2) T
~
X ( 4)
0.414214
=0
= [ 0.414214 1 1 0.414214]
0.414214
,
.
FORTRAN 90/95
FORTRAN 90/95
(2.3.1).
(8 bytes).
EIGENR
:
() Leverrier .
LEVERRIER (. ),
() Bairstow - .
BAIRSTOW. E
BAIRSTOW |1|< |2|< .....< |n|, SORTR
,
41
() Krylov.
KRYLOV (. ). EIGENR KRYLOV
Krylov.
:
~
N : n A
nxn .
~
[]Nx : A
nxn (2.3.1).
[L]N : n 1, 2, ..., n.
[0]N : - Y~ ( 0 ) Krylov.
~ (i )
[]Nx : nxn X
.
.
, , ...
~
~ ~
TOLLX : << : A
I X <
KSOLVEL : 0 1
, .
KSOLVE : 0 1
, X ( i ) .
KODLX : , :
1=
2= ci X ( i )
3= X (i )
.
4= X (i )
.
IPRINTLX : K , :
0=
1=
2= ci X ( i )
3= X ( i )
.
4= X ( i )
.
42
==================================================================
|
SUBROUTINE TO FIND ALL REAL EIGENVALUES & EIGENVECTORS
|
|
OF A REAL MATRIX [A]nxn
|
|
|
| 1. Characteristic Polynomial by the Leverrier Method
|
| 2. Eigenvalues (roots) of the Characteristic Polynomial by the |
|
Bairstow Method
|
| 3. Eigenvectors by the Krylov Method
|
|
|
|
Developed by M. G. Sfakianakis
|
|
University of Patras, 2001
|
|
|
==================================================================
-----------------------------------------------------------------Variable Description
-------------------N
[A]nxn
[L]n
[Y0]n
[X]nxn
:
:
:
:
:
TOLLX
KSOLVEL
:
:
KSOLVEX
KODLX
IPRINTLX
............................................................
All the following variables are those of the Bairstow Method
............................................................
P
Q
TOLPQRS
TOLDETS
TOLDETR
TOLC
TOLFX
NITMAX
NCYCMAX
ISORT
!
!
!
!
!
!
IPRINT1
&
&
!
!
!
!
!
!
!
!
!
!
!
!
KSOLVEL = KSOLVE
!
!
&
!
!
!
!
!
!
!
IF (KODLX==1) RETURN
-----------------------------------------------------------------3. COMPUTE EIGENVECTORS BY THE KRYLOV METHOD
-----------------------------------------------------------------TOLLX = TOLFX
CALL KRYLOV (N,A,L,CPOL,Y0,X,TOLLX,KSOLVEX,KODLX,IPRINTLX)
!
DEALLOCATE (CPOL)
!
RETURN
END
LEVERRIER
EIGENR
Leverrier.
, LUDCMP LUBKSB
.
:
~
N : n A
nxn .
~
[]Nx : A
nxn (2.3.1).
[CPOL]0:N : n p0, p1, p2, , pn
.
LEVERRIER.
43
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
==================================================================
| SUBROUTINE TO COMPUTE CHARACTERISTIC POLYNOMIAL COEFFICIENTS |
|
OF A REAL MATRIX [A]nxn
|
|
|
|
Leverrier Method
|
|
|
|
Developed by M. G. Sfakianakis
|
|
University of Patras, 2001
|
|
|
==================================================================
-----------------------------------------------------------------Variable Description
-------------------N
[A]nxn
[CPOL]0:n
!
!
!
!
!
!
DO I=1,N
DO J=1,N
S2(I,J) = 0.00D+00
IF (I==J) S2(I,J) = I
END DO
END DO
!
DO J=1,N-1
DO I=J+1,N
S2(I,J) = S(I-J)
END DO
END DO
!
ALLOCATE (S(N),ANEW(N,N),APREV(N,N))
DO I=1,N
DO J=1,N
ANEW(I,J) = A(I,J)
END DO
END DO
!
!
!
!
!
DO M=1,N
DO I=1,N
S(I) = -S(I)
END DO
-----------------------------------------------------------------SOLVE LEVERRIER'S SYSTEM
-----------------------------------------------------------------NP = N
!
IF (M==1) GO TO 10
DO I=1,N
DO J=1,N
ANEW(I,J) = 0.00D+00
DO K=1,N
ANEW(I,J) = ANEW(I,J) + APREV(I,K)*A(K,J)
END DO
END DO
END DO
!
10
END DO
DEALLOCATE (ANEW,APREV)
ALLOCATE
(S2(N,N))
!
!
!
!
!
!
DO I=1,N
DO J=1,N
APREV(I,J) = ANEW(I,J)
END DO
END DO
!
DO I=N,0,-1
IF (I==N) CPOL(I) = 1.00D+00
IF (I<N) CPOL(I) = S(N-I)
END DO
!
DEALLOCATE (S)
S(M) = 0.00D+00
DO I=1,N
S(M) = S(M) + ANEW(I,I)
END DO
!
RETURN
END
!
KRYLOV EIGOUT
KRYLOV EIGENR
Anxn Krylov.
, EIGOUT - L
.
: N, A, L, CPOL, Y0, X, TOLLX,
KSOLVEX, KODLX, IPRINTLX EIGENR
LEVERRIER.
KRYLOV EIGOUT.
44
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
==================================================================
|
SUBROUTINE TO FIND ALL REAL EIGENVECTORS OF A REAL MATRIX
|
|
[A]nxn
|
|
|
|
Eigenvectors by the Krylov Method
|
|
|
|
Developed by M. G. Sfakianakis
|
|
University of Patras, 2001
|
|
|
==================================================================
-----------------------------------------------------------------Variable Description
-------------------N
[A]nxn
[L]n
[CPOL]n
:
:
:
:
!
!
!
!
!
!
!
!
!
!
DEALLOCATE (QPOL,Y)
!
!
!
!
!
-----------------------------------------------------------------NORMALIZE EIGENVECTORS
-----------------------------------------------------------------GO TO (10,20,30), KODLX-1
!
20
DO J=1,N
LENGTH = 0.00D+00
DO I=1,N
LENGTH = LENGTH + (X(I,J)**2)
END DO
LENGTH = DSQRT(LENGTH)
DO I=1,N
IF (LENGTH/=0.00) X(I,J) = X(I,J)/LENGTH
END DO
END DO
GO TO 10
!
!
!
!
!
!
ALLOCATE (ANEW(N,N),APREV(N,N),Y(N,0:N-1))
DO I=1,N
DO J=1,N
ANEW(I,J) = A(I,J)
END DO
Y(I,0) = Y0(I)
END DO
!
100
DO M=1,N-1
IF (M==1) GO TO 100
DO I=1,N
DO J=1,N
ANEW(I,J) = 0.00D+00
DO K=1,N
ANEW(I,J) = ANEW(I,J) + APREV(I,K)*A(K,J)
END DO
END DO
END DO
DO I=1,N
Y(I,M) = 0.00D+00
DO J=1,N
Y(I,M) = Y(I,M) + ANEW(I,J)*Y0(J)
END DO
END DO
DO I=1,N
DO J=1,N
APREV(I,J) = ANEW(I,J)
END DO
END DO
!
!
!
!
!
!
!
!
!
!
!
!
!
END DO
!
!
!
!
!
10
!
!
!
!
!
!
!
!
!
!
!
!
DEALLOCATE (ANEW,APREV)
FI = 0.00D+00
DO J=N,2,-1
FI = FI + J*CPOL(J)*(L(I)**(J-1))
END DO
FI = FI + CPOL(1)
!
!
!
!
!
DO J=1,N
AMAX = -1.00D+99
DO I=1,N
AMAX = DMAX1(AMAX,DABS(X(I,J)))
IF (AMAX==DABS(X(I,J))) INDEX = I
END DO
AMAX = X(INDEX,J)
DO I=1,N
IF (AMAX/=0.00) X(I,J) = X(I,J)/AMAX
END DO
END DO
!
30
&
IF (IVEC==0)
&
WRITE (*,"(/'***** Try another initial vector y(0)')")
-----------------------------------------------------------------CHECK SOLUTION [A-iI][Xi] <=
-----------------------------------------------------------------WRITE (*,*)
IERR = 0
DO K=1,N
KSOLVEX = 1
DO I=1,N
SUM = 0.00D+00
DO J=1,N
SUM = SUM + A(I,J)*X(J,K)
END DO
DIF = SUM - L(K)*X(I,K)
IF (DABS(DIF)>TOLLX) KSOLVEX = 0
END DO
IF (KSOLVEX==0) IERR = IERR + 1
IF (KSOLVEX==0)
&
&
WRITE (*,"('***** ERROR: Wrong Eigenvector No.: ',I10)") K
END DO
KSOLVEX = 1
IF (IERR/=0) KSOLVEX = 0
!
&
!
-----------------------------------------------------------------2. COMPUTE COEFFICIENTS qi OF POLYNOMIAL i()
------------------------------------------------------------------
RETURN
END
!
QPOL(N-1) = 1.00D+00
DO J=N-2,0,-1
QPOL(J) = L(I)*QPOL(J+1) + CPOL(J+1)
END DO
45
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
==================================================================
|
SUBROUTINE TO PRINT ALL REAL EIGENVALUES & EIGENVECTORS OF
|
|
A REAL MATRIX [A]nxn
|
|
|
|
Called by Subroutines: EIGENR & KRYLOV
|
|
|
|
Developed by M. G. Sfakianakis
|
|
University of Patras, 2001
|
|
|
==================================================================
DO I=1,N5
!
&
&
:
:
:
:
DO J=K5-5+1,K5
IF (IPRINTLX==2)
&
WRITE (TEMP,'(A1,I10,A2,I10,A1)') 'c',J,'[X',J,']'
IF (IPRINTLX>=3)
&
WRITE (TEMP,'(A2,I10,A1)') '[X',J,']'
NCHAR = LEN_TRIM(TEMP)
NCHR = 0
DO K=1,NCHAR
IF (TEMP(K:K)/=' ') NCHR = NCHR + 1
IF (TEMP(K:K)/=' ') COMM(J)(NCHR:NCHR) = TEMP(K:K)
END DO
COMM(J)(NCHR+1:NCHAR) = ' '
END DO
!
SUBROUTINE EIGOUT (N,L,X,IPRINTLX)
IF (IPRINTLX==0) RETURN
IF (IPRINTLX>1) GO TO 10
!
!
!
!
!
WRITE (*,"(/'
n',3X,5(A12,2X))") (COMM(J),J=K5-5+1,K5)
WRITE (*,"('-----',3X,5(A12,2X))") ('------------',J=K5-5+1,K5)
!
DO J=5*N5+1,N
IF (IPRINTLX==2)
&
WRITE (TEMP,'(A1,I10,A2,I10,A1)') 'c',J,'[X',J,']'
IF (IPRINTLX>=3)
&
&
WRITE (TEMP,'(A2,I10,A1)') '[X',J,']'
NCHAR = LEN_TRIM(TEMP)
NCHR = 0
DO K=1,NCHAR
IF (TEMP(K:K)/=' ') NCHR = NCHR + 1
IF (TEMP(K:K)/=' ') COMM(J)(NCHR:NCHR) = TEMP(K:K)
END DO
COMM(J)(NCHR+1:NCHAR) = ' '
END DO
&
!
IF (IPRINTLX==1) RETURN
!
IF (IPRINTLX==2)
&
WRITE (*,"(/76(1H=)/'NON-NORMALIZED EIGENVECTORS c[X]'/ &
76(1H=))")
IF (IPRINTLX==3)
&
WRITE (*,"(/76(1H=)/'NORMALIZED EIGENVECTORS [X] BY LENGTH'/ &
&
76(1H=))")
IF (IPRINTLX==4)
&
WRITE (*,"(/76(1H=)/'NORMALIZED EIGENVECTORS [X] BY UNITY'/ &
&
76(1H=))")
WRITE (*,"(/'
n',3X,5(A12,2X))") (COMM(J),J=5*N5+1,N)
WRITE (*,"('-----',3X,5(A12,2X))") ('------------',J=5*N5+1,N)
ALLOCATE (COMM(N))
&
END DO
WRITE (*,"(/76(1H=)/'EIGENVALUES'/76(1H=)
&
//'EIGENVALUE No.
'/
&
'-------------------------')")
DO I=1,N
WRITE (*,'(I8,9X,E12.6)') I,L(I)
END DO
DO J=1,N
WRITE (*,'(I5,3X,5(E12.6,2X))') J,(X(J,K),K=K5-5+1,K5)
END DO
!
!
!
!
!
10
!
K5 = K5 + 5
-----------------------------------------------------------------Variable Description
-------------------N
[A]nxn
[L]n
[X]nxn
N5
= 1.00*N/5.00
NREST = N - 5*N5
K5
= 0
DO J=1,N
WRITE (*,'(I5,3X,5(E12.6,2X))') J,(X(J,K),K=5*N5+1,N)
END DO
DEALLOCATE (COMM)
!
!
46
RETURN
END
3. Gauss
&
f(x)
i=n
+1
I = f ( x)dx wi f ( xi )
1
i =1
n
x i2
-x
xi
-1
-xi
+xi
wi
0.577350269189626
1.000000000000000
0.000000000000000
0.774596669241483
0.888888888888889
0.555555555555556
0.339981043584856
0.861136311594053
0.652145154862546
0.347854845137454
0.000000000000000
0.538469310105683
0.906179845938664
0.568888888888889
0.478628670499366
0.236926885056189
0.238619186083197
0.661209386466265
0.932469514203152
0.467913934572691
0.360761573048139
0.171324492379170
0.000000000000000
0.405845151377397
0.741531185599394
0.949107912342759
0.417959183673469
0.381830050505119
0.279705391489277
0.129484966168870
0.183434642495650
0.525532409916329
0.796666477413627
0.960289856497536
0.362683788378362
0.313706645877887
0.222381034453374
0.101228536290376
0.000000000000000
0.324253423403809
0.613371432700590
0.836031107326636
0.968160239507626
0.330239355001260
0.312347077040003
0.260610696402935
0.180648160694857
0.081274388361574
0.148874338981631
0.433395394129247
0.679409568299024
0.865063366688985
0.973906528517172
0.295524224714753
0.269266719309996
0.219086362515982
0.149451349150581
0.066671344308688
10
47
+1
+x
:
t
gm 10
m
I=
1
e
dt
c 0
n=2
n=3
n=4
n=5
n=6
48
289.4351
290.0145
289.4393
289.4352
289.4351
289.4351