28
Παράδειγμα #5 ΕΠΙΛΥΣΗ ΓΡΑΜΜΙΚΩΝ & ΜΗ ΓΡΑΜΜΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΕΠΙΜΕΛΕΙΑ: Σ. Βαρούτης 1. Το παρακάτω αλγεβρικό τρι-διαγώνιο σύστημα έχει προκύψει από την επίλυση μιας συνήθους διαφορικής εξίσωσης που περιγράφει την θερμοκρασιακή κατανομή σε μία ράβδο με αδιάστατο μήκος 1 0 x : N, , 1,2, i . . . . . . , B . A T . T T T - - - - N N i 0 0 0 2 1 1 2 1 1 2 1 1 2 1 1 2 1 2 1 Οι άγνωστοι του συστήματος Ν i , 1 i , αντιστοιχούν στις θερμοκρασίες της ράβδου στα ισαπέχοντα σημεία 0<x i <1, , ενώ οι ποσότητες A και B είναι οι θερμοκρασίες στα δύο άκρα της ράβδου x=0 και x=1 αντίστοιχα. Να λυθεί το τρι-διαγώνιο σύστημα με τις μμεθόδους: (i) Απαλοιφή Gauss (ii) Παραγοντοποίηση LU (iii) Cholesky (iv) Αλγόριθμο Thomas (v) Jacobi (vi) Gauss-Seidel (vii) S.O.R και (viii) S.S.O.R. Η επιλογή των παραμέτρων και ο αριθμός των εξισώσεων είναι ελεύθερη. Για την ακριβή επίλυση του προβλήματος απαιτείται η επίλυση του προβλήματος για τρεις διαφορετικές τιμές του Ν που να διαφέρουν τουλάχιστον κατά μία τάξη μεγέθους (Ενδεικτικά 3, 30 και 300). Τέλος να γίνει ολοκληρωμένη και πλήρης σύγκριση των μεθόδων.

Παράδειγμα5-ΣυστήματαΑλγεβρικώνΕξισώσεων

Embed Size (px)

DESCRIPTION

ΣυστήματαΑλγεβρικώνΕξισώσεων

Citation preview

  • #5 &

    : .

    1. - 10 x :

    N,,1,2,i

    . . .

    . . .

    ,

    B

    .

    A

    T

    .T

    TT

    --

    -

    -

    N

    N

    i

    0

    0

    0

    21121

    121

    12112

    1

    2

    1

    i, 1 i , 0

  • Gauss Gauss

    . Gauss . Gauss . , .

    LU A L

    U . L U A LU . L U y : Ax b LUx b Ly b , Ux y . y x .

    Cholesky A ,

    LU , TU L . . Cholesky .

    bAx bAx .

    Thomas Thomas

    .

  • , Thomas Cholesky, , , , ( 210N ). Fourier (Fast Fourier Transform, FFT). () (Singular Value Decomposition, SVD).

    , . . ( ). . Ax b . Qx

    1 1 1 1

    Ax b Ax Qx Qx b Qx Q A x b

    x Q Q A x Q b I Q A x Q b

    1n nx Gx k (4.3.2)

    n , 1G I Q A , 1k Q b nx 1nx

    n 1n . 0x (4.3.2). x

  • ,

    1

    max1

    n ni i

    ni

    x xx

    ,

    (4.3.3) max .

    1max

    n ni ix x (4.3.3)

    21 max

    1

    Nn n

    i ii

    x x

    . (4.3.3)

    G . n n nx x ,

    n nx x , (4.3.4)

    1 2 02n n n nG G G . (4.3.5) (4.3.4) n :

    0 0nn nG G . (4.3.6) G . 1G 1G , G G . , 1G . 1G .

  • G ( Q ) G (4.3.2).

    . A Ax b A D L U , D , L U , A . Jacobi (J), Gauss Seidel (GS), Successive Over Relaxation (SOR) Symmetric Successive Over Relaxation (SSOR) :

    Jacobi 1 1 1n nx D L U x D b

    11

    1 Nn ni i ij j

    jiij i

    x b a xa

    Gauss Seidel 1 11n nx D L Ux D L b

    11 11 1

    1 i Nn n ni i ij j ij j

    j j iii

    x b a x a xa

    S.O.R

    1 11 1n nx D L U D x D L b

  • 11 11 1

    1 1i N

    n n n ni i ij j ij j i

    j j iii

    x b a x a x xa

    , 20 . 1 , ( 3 4 1 2). =1 S.O.R Gauss-Seidel.

    Conjugate Gradient (CG) (Minimal Residual, MINRES Generalized Minimal Residual, GMRES). , (Multigrid Methods).

    . 10A 100B 1.0e-06. .

  • 1 2 30 300 . 2 10 .

    x Gauss

    LU Cholesky

    Thomas

    Jacobi 2414

    G-S 1220

    S.O.R 990

    (=1.5)

    0 10 10 10 10 10 10 10 0.0332 12.90323 12.90322 12.90323 12.90322 12.90319 12.90319 12.90312 0.0664 15.80645 15.80645 15.80647 15.80644 15.80639 15.80639 15.80625 0.0997 18.70968 18.70967 18.70971 18.70966 18.70958 18.70958 18.70937 0.1329 21.61290 21.61289 21.61294 21.61289 21.61278 21.61278 21.6125 0.1661 24.51613 24.51611 24.51617 24.51611 24.51598 24.51598 24.51564 0.1993 27.41935 27.41933 27.4194 27.41933 27.41917 27.41917 27.41877 0.2326 30.32258 30.32256 30.32263 30.32256 30.32237 30.32237 30.32191 0.2658 33.22581 33.22578 33.22586 33.22578 33.22557 33.22557 33.22506 0.2990 36.12903 36.129 36.12908 36.129 36.12877 36.12877 36.12821 0.3322 39.03226 39.03223 39.03231 39.03223 39.03197 39.03197 39.03137 0.3654 41.93548 41.93545 41.93554 41.93545 41.93518 41.93518 41.93454 0.3987 44.83871 44.83868 44.83876 44.83868 44.83839 44.83839 44.83772 0.4319 47.74194 47.7419 47.74199 47.7419 47.7416 47.7416 47.7409 0.4651 50.64516 50.64513 50.64522 50.64513 50.64481 50.64481 50.64409 0.4983 53.54839 53.54835 53.54845 53.54836 53.54803 53.54803 53.54729 0.5316 56.45161 56.45157 56.45167 56.45158 56.45125 56.45125 56.45049 0.5648 59.35484 59.35479 59.3549 59.35481 59.35447 59.35447 59.35371 0.5980 62.25806 62.25802 62.25812 62.25804 62.25769 62.25769 62.25693 0.6312 65.16129 65.16125 65.16134 65.16126 65.16092 65.16092 65.16016 0.6645 68.06452 68.06447 68.06456 68.06449 68.06415 68.06415 68.0634 0.6977 70.96774 70.96769 70.96778 70.96772 70.96738 70.96738 70.96666 0.7309 73.87097 73.87091 73.87101 73.87095 73.87062 73.87062 73.86993 0.7641 76.77419 76.77413 76.77425 76.77418 76.77386 76.77386 76.77322 0.7973 79.67742 79.67736 79.67747 79.67741 79.67712 79.67712 79.67653 0.8306 82.58065 82.58059 82.5807 82.58064 82.58037 82.58037 82.57985 0.8638 85.48387 85.48383 85.48392 85.48388 85.48363 85.48363 85.48317 0.8970 88.38710 88.38706 88.38715 88.38711 88.38689 88.38689 88.38651 0.9302 91.29032 91.2903 91.29037 91.29033 91.29016 91.29016 91.28986 0.9635 94.19355 94.19353 94.19359 94.19356 94.19344 94.19344 94.19322 0.9957 97.09677 97.09676 97.0968 97.09678 97.09672 97.09672 97.0966

    1 100 100 100 100 100 100 100

    1: 30 .

  • x Gauss

    LU Cholesky

    Thomas

    Jacobi 89715

    G-S

    47315

    S.O.R 19021

    (=1.5)

    0 10 10 10 10 10 10 10 0.0323 10.29900 10.29899 10.29904 10.29901 10.29357 10.29478 10.29748 0.0645 13.28904 13.28893 13.28946 13.28908 13.2294 13.24269 13.2723 0.0968 16.27907 16.27887 16.27986 16.27917 16.16588 16.19115 16.24735 0.1290 19.26910 19.26882 19.27026 19.26926 19.10358 19.1406 19.22278 0.1613 22.25914 22.25876 22.2606 22.25936 22.04308 22.09149 22.19873 0.1935 25.24917 25.24871 25.25095 25.24948 24.98493 25.04422 25.1754 0.2258 28.23920 28.2387 28.24122 28.2396 27.92965 27.99922 28.15288 0.2581 31.22924 31.22865 31.23147 31.22973 30.87772 30.95684 31.13131 0.2903 34.21927 34.21856 34.22179 34.21987 33.82962 33.91744 34.11084 0.3226 37.20930 37.20846 37.21214 37.21 36.78572 36.88137 37.09153 0.3548 40.19934 40.19834 40.20232 40.20015 39.74643 39.84883 40.07345 0.3871 43.18937 43.18826 43.19242 43.19032 42.71207 42.8201 43.05679 0.4194 46.17940 46.17816 46.18264 46.18042 45.68284 45.79547 46.04163 0.4516 49.16944 49.16806 49.17278 49.17054 48.6591 48.77503 49.02801 0.4839 52.15947 52.15802 52.163 52.16062 51.64094 51.7589 52.01591 0.5161 55.14950 55.14795 55.15331 55.15071 54.62841 54.74711 55.00533 0.5484 58.13953 58.13787 58.14371 58.14087 57.62152 57.73986 57.99628 0.5806 61.12957 61.1277 61.13454 61.13093 60.62023 60.73692 60.98876 0.6129 64.11960 64.11756 64.12525 64.121 63.62453 63.73825 63.98266 0.6452 67.10963 67.10733 67.11584 67.11119 66.63422 66.74368 66.97789 0.6774 70.09967 70.09703 70.10625 70.10137 69.64908 69.75301 69.97464 0.7097 73.08970 73.08691 73.0966 73.09141 72.66902 72.76606 72.97292 0.7419 76.07973 76.07694 76.08685 76.08135 75.69354 75.78265 75.97272 0.7742 79.06977 79.06715 79.0769 79.07128 78.72209 78.8027 78.97389 0.8065 82.05980 82.05744 82.06656 82.0612 81.75441 81.8254 81.97602 0.8387 85.04983 85.04766 85.05598 85.05116 84.79019 84.85052 84.97888 0.8710 88.03987 88.03801 88.04519 88.04101 87.82865 87.87778 87.98246 0.9032 91.02990 91.02837 91.03418 91.03069 90.8694 90.90695 90.98672 0.9355 94.01993 94.0188 94.02302 94.02042 93.91201 93.93725 93.99118 0.9677 97.00997 97.00935 97.01161 97.01018 96.95567 96.96836 96.99564

    1 100 100 100 100 100 100 100

    2: 300 .

  • Iterations (N=30) Iterations(N=300)

    0.1 12452 405660 0.3 4394 178699 0.5 2516 111547 0.7 1650 77184 0.8 1367 65078 1 950 47315 1.2 663 33858 1.4 445 23598 1.6 273 15033 1.8 111 7595 1.9 134 4033 1.95 281 2315 1.99 1676 1500 1.995 3659 3011 1.997 6171 4817 1.999 18663 13848

    3: S.O.R

    10e-06.

    Time(s) (N=30) Time(s) (N=300)

    0.1 0.65 1780 0.3 0.25 790 0.5 0.125 485 0.7 0.125 337 0.8 0.0156 283 1 0.0625 205 1.2 0.047 147 1.4 0.0315 102 1.6 0.0156 65 1.8 0.0156 32 1.9 0.0156 17 1.95 0.0156 9 1.99 0.08 6 1.995 0.125 13 1.997 0.2 20 1.999 0.85 60

    4: S.O.R

    10e-06.

    Iterations (N=30) Iterations(N=300)

    0.1 1406 10755 0.3 805 6066 0.5 568 4523 0.7 426 3645 0.8 373 3317 1 288 2783 1.2 219 2348 1.4 162 1967 1.6 110 1601 1.8 58 1168 1.9 70 839 1.95 156 590 1.99 714 904 1.995 1397 1506 1.997 2327 2409 1.999 6977 6925

    3:

    S.O.R 10e-03.

    Time(s) (N=30) Time(s) (N=300)

    0.1 0.0603 49 0.3 0.0468 27 0.5 0.0313 20 0.7 0.0156 16.5 0.8 0.0313 15 1 0.0313 12 1.2 0.0313 10.5 1.4 0.0156 9 1.6 0.0313 7.5 1.8 0.0156 5 1.9 0.0156 4 1.95 0.0468 2.5 1.99 0.0468 4 1.995 0.0938 7 1.997 0.11 10.5 1.999 0.31 31

    4:

    S.O.R 10e-03 .

  • 0150030004500600075009000

    1050012000135001500016500180001950021000

    0.1 0.3 0.5 0.7 0.8 1 1.2 1.4 1.6 1.8 1.9 1.95

    1.991.9

    951.9

    971.9

    99

    =30(eps=1.0e-06)N=30(eps=1.0e-03)

    1: S.O.R 30 .

    1

    10

    100

    1000

    10000

    100000

    1000000

    0.1 0.3 0.5 0.7 0.8 1 1.2 1.4 1.6 1.8 1.9 1.95

    1.991.9

    951.9

    971.9

    99

    =300(eps=1.0e-06)N=300(eps=1.0e-03)

    2: S.O.R 300 .

  • 5 .

    CPU time(sec) eps=1.0e-03

    CPU time(sec)

    eps=1.0e-06

    Gauss 0.5 0.5 Gauss 0.47 0.47 Gauss 0.7 0.7

    LU 3 (???) 3 (???) Cholesky 0.3 0.3 Thomas 0.03 0.03 Jacobi 10 184

    Gauss-Seidel 5 87 S.O.R(opt=1.99) 4 6

    5: 300 .

  • 2. Gauss

    ) 1

    500050

    yx

    .yx. )

    1100200

    yxyx

    .

    ) : :

    111

    5010050 ..

    :

    5010050

    111..

    / 1 (-0.005) 2. :

    4974870

    49509950111

    .y..

    5025120.x .

    : :

    111

    5010050 ..

    :

    5010050

    111..

    / 1 (-0.005) 2. :

    490990111

    ..

    490.y 510.x

  • ) :

    111

    1002001

    :

    1002001111

    / 1 (-1) 2:

    99199111

    4974870.y 5025120.x .

    : :

    111

    1002001

    :

    1002001111

    / 1 (-1) 2. :

    99200111

    490.y 510.x .

    3. ( / / ) Gauss Gauss .

    Gauss . Gauss

  • 3 2 3 233 3n n n n O n /- .

    . ,

    1 21

    12

    n

    i

    n ni O n

    4. bx D L U , Jacobi, GS SOR bMNxMx kk 111 M N D , L U .

    ULD bAx bxULD .

    Jacobi bDxULDxbxULDxbxULD kk 111

    bNxx kk 1 Jacobi DM J ULN J .

    Gauss-Seidel bDLUxDLxbUxxDLbxULD kk 111

  • bNxx kk 1 Gauss-Seidel DLM GS UNGS .

    SOR Gauss-Seidel . bxUDxD kk L 11 bLDxUDLDx kk 111 1

    bNxx kk 1

    SOR LDM SOR UDN SOR 1 .

    5. : 08

    0232

    31212

    21211

    xxx,xfxxx,xf

    Newton

    k

    k

    kk

    )f,f(Jxff

    xff

    xx21

    2

    22

    2

    11

    1

    k

    k

    kk

    )f,f(J

    fxf

    fxf

    yy21

    21

    2

    11

    1

    1

    J ,

    22

    21

    21 3311xx

    f,fJ .

    Mathematica x1 0., x2 2. x1 2., x2 0. 2 . Fortran 90/95:

  • program NumAnal_5 implicit none real(8)::f,g,x1,x2,x1_old,x2_old,gx,gy,jac,s1,s2,tol,fx,fy integer::i,n,maxiter print*,'Give initial x1 and x2' read*,x1,x2 n=0 tol=1.0e-9 maxiter=1000 do i=1,maxiter n=n+1 x1_old=x1 x2_old=x2 f=x1_old+x2_old-2. g=(x1_old)**3+(x2_old)**3-8. fx=1.0 fy=1.0 gx=3*(x1_old**2) gy=3*(x2_old**2) jac=fx*gy-gx*fy s1=(f*gy-g)/jac s2=(g-f*gx)/jac x1=x1_old-s1 x2=x2_old-s2

    if(abs(1.-(x1_old/x1)).le.tol.And.abs(1.&-(x2_old/x2)).le.tol)then

    goto 100 endif enddo 100 write(*,*)x1,x2,n end program NumAnal_5 10-9, .

    1x 2x 5, 4 2.0 0.0 10

    -1, 3 0.0 2.0 7

  • 6. Newton-Raphson ():

    P .

    5, 3-2004_.pdf,

    .

  • 18

    1 (i) Gauss. program NumAnal_1i ! implicit none real(8),allocatable, dimension(:,:)::A real(8),allocatable, dimension(:)::X integer::i,j,k,i1,k1,N=30 real(8)::T1=10.,T2=100. allocate(A(N,N+1),X(N)) A=0.0 Do i=1,N A(i,i)=-2. Enddo Do i=1,N-1 A(i,i+1)=1. Enddo Do i=2,N A(i,i-1)=1. Enddo A(1,N+1)=-T1 A(N,N+1)=-T2 Do k=1,N k1=k+1 Do j=k1,N+1 A(k,j)=A(k,j)/A(k,k) Enddo If(k==N)exit Do i=k1,N Do j=k1,N+1 A(i,j)=A(i,j)-A(i,k)*A(k,j) Enddo Enddo Enddo X(N)=A(N,N+1) Do k=2,N i=(N+1)-k X(i)=A(i,N+1) i1=i+1 Do j=i1,N X(i)=X(i)-A(i,j)*X(j) Enddo

  • 19

    Enddo Do i=1,size(X) write(*,*) X(i) Enddo End program NumAnal_1i

    Program Gauss ! implicit none doubleprecision,allocatable::A(:,:),X(:) integer,allocatable::TX(:) integer::n=1000,i,j,k,status real::t,pivot,s,tim allocate(A(n,n+1),X(n),TX(n)) if (status/=0) Stop 'Not enough memory' open(1,file='Info.dat') A=0.0 Do i=1,N A(i,i)=-2. Enddo Do i=1,N-1 A(i,i+1)=1. Enddo Do i=2,N A(i,i-1)=1. Enddo A(1,N+1)=-10. A(N,N+1)=-100. do i=1,n TX(i)=i end do k=1 do while (k

  • 20

    do j=k,n+1 a(k,j)=a(k,j)/pivot end do do i=k+1,n t=a(i,k) do j=k,n+1 a(i,j)=a(i,j)-a(k,j)*t end do end do k=k+1 end do x(n)=a(n,n+1) do i=n-1,1,-1 s=0 do j=i+1,n s=s+a(i,j)*x(j) end do x(i)=a(i,n+1)-s end do do i=1,n write(1,*),x(i) end do call CPU_TIME(tim) print*, 'Program has used', tim, 'seconds of CPU time.' Contains subroutine print_table integer::i do i=1,n print*, a(i,:) end do end subroutine print_table real function find_pivot(s,k) integer,intent(IN)::s,k integer::i,maxi,maxj,t real::max,temp if (s==1) then ! No pivoting max=a(k,k) elseif (s==2) then ! Partial Pivoting max=a(k,k) maxi=k do i=k,n if (abs(a(i,k))>abs(max)) then max=a(i,k) maxi=i

  • 21

    endif end do if (maxi/=k) then do j=1,n+1 temp=a(k,j) a(k,j)=a(maxi,j) a(maxi,j)=temp end do endif elseif (s==3) then ! Full Pivoting max=a(k,k) maxi=k maxj=k do i=k,n do j=k,n if (abs(a(i,j))>abs(max)) then max=a(i,j) maxi=i maxj=j endif end do end do if (maxi/=k) then do j=1,n+1 temp=a(k,j) a(k,j)=a(maxi,j) a(maxi,j)=temp end do endif if (maxj/=k) then do i=1,n temp=a(i,k) a(i,k)=a(i,maxj) a(i,maxj)=temp end do t=TX(k) TX(k)=TX(maxj) TX(maxj)=t endif endif find_pivot=max end function find_pivot end

  • 22

    (ii) LU. program NumAnal_1ii implicit none real, allocatable, dimension(:,:)::u,l,a real, allocatable, dimension(:)::x,y real::T1,T2,g,f integer::i,j,n,k T1=-100. T2=-1000. n=3 allocate(u(n+1,n),l(n+1,n),a(n+1,n),x(n),y(n)) a=0.0;u=0.0;l=0.0 a(1,1)=-2;a(2,1)=1 Do i=2,n-1 a(i,i)=-2 a(i-1,i)=1 a(i+1,i)=1 Enddo a(n,n)=-2;a(n-1,n)=1 a(n+1,1)=T1;a(n+1,n)=T2 u=0;l=0 do i=1,n do j=1,n g=0.;f=0. do k=2,i g=l(k-1,j)*u(j,k-1)+g f=l(j,k-1)*u(k-1,j)+f enddo l(i,j)=a(i,j)-g u(j,i)=(a(j,i)-g)/l(i,i) enddo l(n+1,i)=a(n+1,i) enddo y=0.;y(1)=l(n+1,1)/l(1,1) do i=2,n g=0. do k=1,i-1 g=l(k,i)*y(i-1)+g enddo y(i)=(1/l(i,i))*(l(n+1,i)-g) enddo do i=1,n u(n+1,i)=y(i) enddo x=0.;x(n)=u(n+1,n)

  • 23

    do j=1,n-1 i=n-j g=0. do k=i,n-1 g=u(k+1,i)*x(i+1)+g enddo x(i)=u(n+1,i)-g enddo write(*,*)x end program NumAnal_1ii (iii) Cholesky program NumAnal_1iii implicit none real, allocatable, dimension(:,:)::a real, allocatable, dimension(:)::x,b real::T1,T2 integer::i,j,n n=300 ; T1=10.0 ; T2=100.0 open(1,file='Info.dat') allocate(a(n,n),x(n),b(n)) a=0.0;b=0.0 b(1)=-T1;b(n)=-T2 Do i=1,n-1 a(i,i+1)=1. Enddo Do i=2,n a(i,i-1)=1. Enddo Do i=1,n a(i,i)=-2. Enddo call cholesky(a,b,n,x) Do i=1,n write(1,*)x(i) enddo end program NumAnal_1iii subroutine cholesky(A,B,n,X) implicit none integer n,i,j,k,f real::A(n,n),B(n),L(n,n),U(n,n),Y(n),X(n) f=1;U=0;A=-A;B=-B

  • 24

    Do while (f

  • 25

    d(1)=-T1 d(n)=-T2 v(1)=-2 Do i=2,n v(i)=-2-(1./v(i-1)) Enddo g(1)=d(1)/v(1) Do i=2,n g(i)=(d(i)-g(i-1))/v(i) Enddo x(n)=g(n) Do i=n-1,1,-1 x(i)=g(i)-x(i+1)/v(i) Enddo Do i=1,n write(*,*)x(i) Enddo end program NumAnal1iv (v) Jacobi. program NumAnal_1v implicit none real, allocatable, dimension(:,:)::a real, allocatable, dimension(:)::b,x,x1,e real::s,er,T1,T2,eps integer::i,j,iter,n,maxiter n=3 T1=100. T2=1000. maxiter=1.0e+6 eps=1.0e-09 allocate(a(n,n),b(n),x(n),x1(n),e(n)) x1=1. b=0.0 a=0.0 b(1)=-T1 b(n)=-T2 Do i=1,n-1 a(i,i+1)=1. Enddo Do i=2,n a(i,i-1)=1. Enddo

  • 26

    Do i=1,n a(i,i)=-2 Enddo Do iter=1,maxiter Do i=1,n s=0. Do j=1,n if (j/=i)then s=s+a(i,j)*x1(j) Endif Enddo x(i)=(b(i)/a(i,i))-(s/a(i,i)) e(i)=abs((x(i)-x1(i))/x(i)) if(e(i)>eps)then er=e(i) endif Enddo If(er

  • 27

    a(i,i+1)=1. Enddo Do i=2,n a(i,i-1)=1. Enddo Do i=1,n a(i,i)=-2 Enddo Do iter=1,maxiter er=0.0 Do i=1,n s=0. z=0. if (i/=n)then do j=1+i,n s=s+a(i,j)*x1(j) enddo Endif if(i/=1)then do j=1,i-1 z=z+a(i,j)*x(j) enddo endif x(i)=(b(i)/a(i,i))-(s/a(i,i))-z/a(i,i) e(i)=abs((x(i)-x1(i))/x(i)) if(e(i)>eps)then er=e(i) endif Enddo If(er

  • 28

    T2=1000. w=1.1 maxiter=1000 epsilon=1.0e-6 allocate(a(n,n),eps(n),x_old(n),sam(n),s(n),x(n),b(n)) b=0.0 b(1)=-T1 b(n)=-T2 a=0.0 Do i=1,n-1 a(i,i+1)=1. Enddo Do i=2,n a(i,i-1)=1. Enddo Do i=1,n a(i,i)=-2 Enddo x=0.0 Do l=1,maxiter do i=1,n x_old(i)=x(i) sam=0. s=0 do j=i+1,n sam(i)=sam(i)-a(i,j)*x_old(j) enddo do j=1,i-1 s(i)=s(i)-a(i,j)*x(j) enddo x(i)=(w*(sam(i)+s(i)+b(i))+(1-w)*a(i,i)*x(i))/a(i,i) eps(i)=(x(i)-x_old(i))/x(i) if (eps(i)>error)then error=eps(i) endif enddo if (error