Παράδειγμα #6 ΕΠΙΛΥΣΗ ΑΛΓΕΒΡΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΕΠΙΜΕΛΕΙΑ: Σ. Μισδανίτης 1. Διατυπώστε ένα γραμμικό σύστημα 5 εξισώσεων με 5 αγνώστους και επιλύστε το με τις παρακάτω μεθόδους: i. Απαλοιφή Gauss με πλήρη οδήγηση ii. Παραγοντοποίηση LU iii. Jacobi iv. Gauss Seidel v. SOR Σε κάθε περίπτωση σχολιάστε τη μέθοδο και με βάση τα αποτελέσματα συγκρίνετε τις μεθόδους. Επιλέγουμε να λύσουμε το 5x5 σύστημα 4 2 1 2 1 1 5 1 3 2 A 1 2 6 2 1 4 1 2 8 2 1 2 4 2 5 και 5 3 b 12 4 21 κάνοντας χρήση Mathematica LinearSolve[a,b] με 4 2 1 2 1 1 5 1 3 2 a 1 2 6 2 1 4 1 2 8 2 1 2 4 2 5 5 3 b 12 4 21 παίρνουμε τα αποτελέσματα 7189 792, 401 33, 1291 264 373 10627,, 66 792 N[%] {{9.07702},{-12.1515},{-4.89015},{5.65152},{13.4179}} 1
Επομένως x 1 =9.07702, x 2 =-12.15151, x 3 =-4.89015, x 4 =5.65152, x 5 =13.41793 Στη συνέχεια επιλύουμε το παραπάνω σύστημα με διαφορετικούς αλγορίθμους και πηγαίους κώδικες: i. Απαλοιφή Gauss με πλήρη οδήγηση Πρόγραμμα 1: Απαλοιφή Gauss με πλήρη οδήγηση Program Gauss_Jordan USE DFPORT implicit none doubleprecision,allocatable::a(:,:),x(:) integer,allocatable::tx(:) integer::n=5,i,j,k,status real::t,pivot,s,tim,ta(2) allocate(a(n,n+1),x(n),tx(n)) a(1,:)=(/4.,2.,1.,2.,-1.,5./) a(2,:)=(/1.,5.,-1.,3.,2.,-3./) a(3,:)=(/1.,2.,-6.,2.,-1.,12./) a(4,:)=(/4.,1.,2.,-8.,2.,-4./) a(5,:)=(/1.,2.,4.,-2.,5.,21./) do i=1,n TX(i)=i call print_table k=1 do while (k<=n) pivot=find_pivot(3,k) if (pivot==0) then print*, 'Pivot = 0. Gauss elimination can not continue' stop do j=k,n+1 a(k,j)=a(k,j)/pivot do i=k+1,n t=a(i,k) do j=k,n+1 a(i,j)=a(i,j)-a(k,j)*t 2
call print_table k=k+1 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) x(i)=a(i,n+1)-s do i=1,n print*,'x(',tx(i),')= ',x(i) tim = ETIME(TA) print*, 'Program has used', tim, 'seconds of CPU time.' Contains subroutine print_table integer::i print*, '----------------------------------------------------------' do i=1,n print*, a(i,:) 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 if (maxi/=k) then do j=1,n+1 temp=a(k,j) a(k,j)=a(maxi,j) a(maxi,j)=temp 3
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 if (maxi/=k) then do j=1,n+1 temp=a(k,j) a(k,j)=a(maxi,j) a(maxi,j)=temp if (maxj/=k) then do i=1,n temp=a(i,k) a(i,k)=a(i,maxj) a(i,maxj)=temp t=tx(k) TX(k)=TX(maxj) TX(maxj)=t print*,'after pivoting' call print_table do i=1,n print*, TX(i) find_pivot=max end function find_pivot end 4
Τα αποτελέσματα του προγράμματος εμφανίζονται στην οθόνη του υπολογιστή. Τα βήματα που εκτελεί ο κώδικας φαίνονται παρακάτω x 1 x 2 x 3 x 4 x 5 4 2 1 2-1 5 1 5-1 3 2-3 1 2-6 2-1 12 4 1 2-8 2-4 1 2 4-2 5 21 x 4 x 2 x 3 x 1 x 5-8 1 2 4 2-4 3 5-1 1 2-3 2 2-6 1-1 12 2 2 1 4-1 5-2 2 4 1 5 21 x 4 x 2 x 3 x 1 x 5 1-0.125-0.25-0.5-0.25 0.5 0 5.375-0.25 2.5 2.75-4.5 0 2.25-5.5 2-0.5 11 0 2.25 1.5 5-0.5 4 0 1.75 3.5 0 4.5 22 x 4 x 3 x 2 x 1 x 5 1-0.25-0.125-0.5-0.25 0.5 0-5.5 2.25 2-0.5 11 0-0.25 5.375 2.5 2.75-4.5 0 1.5 2.25 5-0.5 4 0 3.5 1.75 0 4.5 22 x 4 x 3 x 2 x 1 x 5 1-0.25-0.125-0.5-0.25 0.5 0 1-0.4090-0.3636 0.0909-2 0 0 5.2727 2.4090 2.7727-5 0 0 2.8636 5.5454-0.6363 7 0 0 3.1818 1.2727 4.1818 29 5
x 4 x 3 x 1 x 2 x 5 1-0.25-0.5-0.125-0.25 0.5 0 1-0.3636-0.4090 0.0909-2 0 0 5.5454 2.8636-0.6363 7 0 0 2.4090 5.2727 2.7727-5 0 0 1.2727 3.1818 4.1818 29 x 4 x 3 x 1 x 2 x 5 1-0.25-0.5-0.125-0.25 0.5 0 1-0.3636-0.4090 0.0909-2 0 0 1 0.5163-0.1147 1.2622 0 0 0 4.0286 3.0491-8.0409 0 0 0 2.5245 4.3278 27.3934 x 4 x 3 x 1 x 5 x 2 1-0.25-0.5-0.25-0.125 0.5 0 1-0.3636 0.0909-0.4090-2 0 0 1-0.1147 0.5163 1.2622 0 0 0 4.3278 2.5245 27.3934 0 0 0 3.0491 4.0286-8.0409 x 4 x 3 x 1 x 5 x 2 1-0.25-0.5-0.25-0.125 0.5 0 1-0.3636 0.0909-0.4090-2 0 0 1-0.1147 0.5163 1.2622 0 0 0 1 0.5833 6.3295 0 0 0 0 2.25-27.341 x 4 x 3 x 1 x 5 x 2 1-0.25-0.5-0.25-0.125 0.5 0 1-0.3636 0.0909-0.4090-2 0 0 1-0.1147 0.5163 1.2622 0 0 0 1 0.5833 6.3295 0 0 0 0 1-12.151 Ο κώδικας δίνει σαν αποτελέσματα x 1 =9.07701, x 2 =-12.15151, x 3 =-4.89015, x 4 =5.65151, x 5 =13.41792 και ο χρόνος που χρειάστηκε είναι 7.8125 10-2 sec. 6
ii. Παραγοντοποίηση LU Πρόγραμμα 2: Παραγοντοποίηση LU Program LU real*8, pointer :: A(:,:) real*8, pointer :: B(:) real*8, pointer :: temp(:) integer,pointer :: INDX(:) integer d, rc character*12 input, output character*8 s! input data file name from screen print *,' ' write(*,50,advance='no'); read *, s J=0 do I=1,LEN(s) if(s(i:i)<>' ') J=J+1!J=real length of string s input=s(1:j)//'.dat' output =s(1:j)//'.lst'! open input and output files open(unit=1,file=input,status='old') open(unit=2,file=output,status='unknown') read(1,*) n!size of given linear system allocate(a(n,n),stat=ialloc) allocate(b(n),stat=ialloc) allocate(temp(n+1),stat=ialloc) allocate(indx(n),stat=ialloc) write(2,60) n a(1,:)=(/4.,2.,1.,2.,-1./) a(2,:)=(/1.,5.,-1.,3.,2./) a(3,:)=(/1.,2.,-6.,2.,-1./) a(4,:)=(/4.,1.,2.,-8.,2./) a(5,:)=(/1.,2.,4.,-2.,5./) 7
b(1)=5. b(2)=-3. b(3)=12. b(4)=-4. b(5)=21. write(2,*) 'A=' do i=1,n write(2,15) (a(i,j),j=1,n) write(2,*) ' ' write(2,*) 'B=' do i=1,n write(2,20) b(i)!call LU decomposition routine call LUDCMP(A,n,INDX,D,rc)!call appropriate solver if previous return code is ok if (rc.eq.0) then call LUBKSB(A,n,INDX,B)!print results or error message if (rc.eq.1) then write(2,*) ' The system matrix is singular, no solution!' else write(2,*) ' ' write(2,*) ' System solution:' write(2,*) if(n<10) then do i=1, n write(2,200) i,b(i) else do i=1, 9 write(2,200) i,b(i) do i=10, n write(2,201) i,b(i) end if end if 8
! section fin Close(2) Write(*,*) ' Results in file ',output,'.' stop 15 format(f10.6,x,f10.6,x,f10.6,x,f10.6,x,f10.6) 20 format(f10.6) 50 format(' Input data file name (without.dat): ') 60 format(/' N = ',I2/) 200 format(' X',I1,' = ',F12.6) 201 format(' X',I2,'= ',F12.6)! stop! END Contains Subroutine LUDCMP(A,N,INDX,D,CODE)!LU decomposition PARAMETER(NMAX=100,TINY=1.5D-16) REAL*8 AMAX,DUM, SUM, A(N,N),VV(NMAX) INTEGER CODE, D, INDX(N) D=1; CODE=0 DO I=1,N AMAX=0.d0 DO J=1,N IF (DABS(A(I,J)).GT.AMAX) AMAX=DABS(A(I,J)) END DO! j loop IF(AMAX.LT.TINY) THEN CODE = 1 RETURN END IF VV(I) = 1.d0 / AMAX END DO! i loop DO J=1,N DO I=1,J-1 SUM = A(I,J) DO K=1,I-1 SUM = SUM - A(I,K)*A(K,J) END DO! k loop A(I,J) = SUM END DO! i loop AMAX = 0.d0 9
DO I=J,N SUM = A(I,J) DO K=1,J-1 SUM = SUM - A(I,K)*A(K,J) END DO! k loop A(I,J) = SUM DUM = VV(I)*DABS(SUM) IF(DUM.GE.AMAX) THEN IMAX = I AMAX = DUM END IF END DO! i loop IF(J.NE.IMAX) THEN DO K=1,N DUM = A(IMAX,K) A(IMAX,K) = A(J,K) A(J,K) = DUM END DO! k loop D = -D VV(IMAX) = VV(J) END IF INDX(J) = IMAX IF(DABS(A(J,J)) < TINY) A(J,J) = TINY IF(J.NE.N) THEN DUM = 1.d0 / A(J,J) DO I=J+1,N A(I,J) = A(I,J)*DUM END DO! i loop END IF END DO! j loop RETURN END subroutine LUDCMP 10
Subroutine LUBKSB(A,N,INDX,B)!Back substitution REAL*8 SUM, A(N,N),B(N) INTEGER INDX(N) II = 0 DO I=1,N LL = INDX(I) SUM = B(LL) B(LL) = B(I) IF(II.NE.0) THEN DO J=II,I-1 SUM = SUM - A(I,J)*B(J) END DO! j loop ELSE IF(SUM.NE.0.d0) THEN II = I END IF B(I) = SUM END DO! i loop DO I=N,1,-1 SUM = B(I) IF(I < N) THEN DO J=I+1,N SUM = SUM - A(I,J)*B(J) END DO! j loop END IF B(I) = SUM / A(I,I) END DO! i loop RETURN END subroutine LUBKSB End Program LU Τα αποτελέσματα του προγράμματος τυπώνονται σε ένα αρχείο.lst το οποίο έχει το ίδιο όνομα με το αρχείο εισόδου που εισάγουμε σε.dat μορφή. Η έξοδος του Προγράμματος 2 μας δίνει x 1 =9.07702, x 2 =-12.15151, x 3 =-4.89015, x 4 =5.65151, x 5 =13.41792 και ο χρόνος που χρειάστηκε είναι 7.8125 10-2 sec. 11
iii. Jacobi (αρχική εκτίμηση: x 1 =x 2 =x 3 =x 4 =x 5 =0) Πρόγραμμα 3: Jacobi program jacobi implicit none real,allocatable,dimension(:):: A(:,:),B(:),X(:),init integer:: i,j,k,n,m print *,'dwse arithmo agnwstwn' read *, N allocate(a(n,n),b(n),x(n)) a(1,:)=(/4.,2.,1.,2.,-1./) a(2,:)=(/1.,5.,-1.,3.,2./) a(3,:)=(/1.,2.,-6.,2.,-1./) a(4,:)=(/4.,1.,2.,-8.,2./) a(5,:)=(/1.,2.,4.,-2.,5./) b(1)=5. b(2)=-3. b(3)=12. b(4)=-4. b(5)=21. print *,'dwse max arithmo epanalipsewn' read *, M do 30 i=1,n X(i)=0 30 continue call jacobi(a,b,x,m,k) 12
if (k-1==m) then print *,'den exoume siglisi istera apo',m,'epanalipseis' else print *,'istera apo',k,'epanalipseis exoume ta eksis apotelesmata:' print *, (X(i),i=1,N) Deallocate(A,B,X) contains SUBROUTINE jacobi(a,b,xold,m,k) real::a(:,:),b(:),xold(:),sum1,xnew(size(b)),norm,eps integer::i,k,m eps=1.e-6 do k=1,m do i=1,size(b) sum1=0.0 sum1=sum(a(i,:i-1)*xold(:i-1)) sum1=sum1+sum(a(i,i+1:n)*xold(i+1:n)) Xnew(i)=(-sum1+B(i))/A(i,i) norm=0.0 norm=maxval(abs(xnew-xold)/xnew) if (norm<eps) exit Xold=Xnew endsubroutine jacobi end Η εκτέλεση του προγράμματος 3 μας επιστρέφει τα ακόλουθα αποτελέσματα x 1 =9.07698, x 2 =-12.15147, x 3 =-4.89014, x 4 =5.65149, x 5 =13.41789, ενώ για την επίτευξη κριτηρίου σχετικού σφάλματος 10-6 χρειάστηκαν 55 επαναλήψεις. O χρόνος που χρειάστηκε για την επίτευξη σύγκλισης είναι 0.140625 sec. 13
iv. Gauss Seidel (αρχική εκτίμηση: x 1 =x 2 =x 3 =x 4 =x 5 =0) Πρόγραμμα 4: Gauss Seidel program Gauss_Seidel implicit none real,allocatable,dimension(:):: A(:,:),B(:),X(:),init integer:: i,j,k,n,m print *,'dwse arithmo agnwstwn' read *, N allocate(a(n,n),b(n),x(n)) a(1,:)=(/4.,2.,1.,2.,-1./) a(2,:)=(/1.,5.,-1.,3.,2./) a(3,:)=(/1.,2.,-6.,2.,-1./) a(4,:)=(/4.,1.,2.,-8.,2./) a(5,:)=(/1.,2.,4.,-2.,5./) b(1)=5. b(2)=-3. b(3)=12. b(4)=-4. b(5)=21. print *,'dwse max arithmo epanalipsewn' read *, M do 30 i=1,n X(i)=0 30 continue call gauss_seidel(a,b,x,m,k) if (k-1==m) then print *,'den exoume siglisi istera apo',m,'epanalipseis' else print *,'istera apo',k,'epanalipseis exoume ta eksis apotelesmata:' print *, (X(i),i=1,N) Deallocate(A,B,X) contains SUBROUTINE gauss_seidel(a,b,xold,m,k) real::a(:,:),b(:),xold(:),sum1,xnew(size(b)),norm,eps 14
integer::i,k,m eps=1.e-6 do k=1,m do i=1,size(b) sum1=0.0 sum1=sum(a(i,:i-1)*xnew(:i-1)) sum1=sum1+sum(a(i,i+1:n)*xold(i+1:n)) Xnew(i)=(-sum1+B(i))/A(i,i) norm=0.0 norm=maxval(abs(xnew-xold)/xnew) if (norm<eps) exit Xold=Xnew endsubroutine gauss_seidel end Η εκτέλεση του προγράμματος 4 μας επιστρέφει τα ακόλουθα αποτελέσματα x 1 =9.07700, x 2 =-12.15149, x 3 =-4.89015, x 4 =5.65150, x 5 =13.41792, ενώ για την επίτευξη κριτηρίου σχετικού σφάλματος 10-6 χρειάστηκαν 26 επαναλήψεις. O χρόνος που χρειάστηκε για την επίτευξη σύγκλισης είναι 0.109375 sec. v. SOR (αρχική εκτίμηση: x 1 =x 2 =x 3 =x 4 =x 5 =0) Πρόγραμμα 5: SOR program SOR implicit none real,allocatable,dimension(:):: A(:,:),B(:),X(:),init integer:: i,j,k,n,m,w print *,'dwse arithmo agnwstwn' read *, N 15
print *,'dwse sintelesti varititas(w):' read *,w allocate(a(n,n),b(n),x(n)) a(1,:)=(/4.,2.,1.,2.,-1./) a(2,:)=(/1.,5.,-1.,3.,2./) a(3,:)=(/1.,2.,-6.,2.,-1./) a(4,:)=(/4.,1.,2.,-8.,2./) a(5,:)=(/1.,2.,4.,-2.,5./) b(1)=5. b(2)=-3. b(3)=12. b(4)=-4. b(5)=21. print *,'dwse max arithmo epanalipsewn' read *, M do 30 i=1,n X(i)=0 30 continue call sor1(a,b,x,m,k) if (k-1==m) then print *,'den exoume siglisi istera apo',m,'epanalipseis' else print *,'istera apo',k,'epanalipseis exoume ta eksis apotelesmata:' print *, (X(i),i=1,N) Deallocate(A,B,X) contains SUBROUTINE sor1(a,b,xold,m,k) real::a(:,:),b(:),xold(:),sum1,xnew(size(b)),norm,eps integer::i,k,m eps=1.e-6 do k=1,m do i=1,size(b) sum1=0.0 sum1=sum(a(i,:i-1)*xnew(:i-1)) sum1=sum1+sum(a(i,i+1:n)*xold(i+1:n)) Xnew(i)=w*((-sum1+B(i))/A(i,i)) + (1-w)*Xold(i) 16
norm=0.0 norm=maxval(abs(xnew-xold)/xnew) if (norm<eps) exit Xold=Xnew endsubroutine sor1 end Η εκτέλεση του προγράμματος 5 για 1.1 1.9 και κριτήριο σχετικού σφάλματος 10-6 μας δίδει x 1 =9.07700, x 2 =-12.15149, x 3 =-4.89015, x 4 =5.65150, x 5 =13.41792, σε 26 επαναλήψεις. O χρόνος που χρειάστηκε για την επίτευξη σύγκλισης είναι 0.109375 sec. Σημειώνεται πρώτον ότι ο αριθμός των επαναλήψεων είναι ο ίδιος για όλες τις παραπάνω τιμές των παραμέτρων χαλάρωσης και δεύτερον ότι ο ίδιος αριθμός επαναλήψεων απαιτείται και στην Gauss Seidel ( 1). Το γεγονός ότι η μέθοδος SOR δεν βελτιώνει την σύγκλιση της επαναληπτικής διαδικασίας οφείλεται στο ότι το σύστημα που επιλέξαμε δεν είναι diagonally dominant. Σύγκριση αποτελεσμάτων O Πίνακας 1 παρουσιάζει συγκεντρωτικά τα αποτελέσματα που έδωσαν οι μέθοδοι που χρησιμοποιήθηκαν για την επίλυση του γραμμικού συστήματος. Οι τιμές των άγνωστων συντελεστών είναι πολύ κοντά μεταξύ τους. Ο αριθμός επαναλήψεων των Gauss-Seidel και SOR σε σύγκριση με τις αντίστοιχες επαναλήψεις της Jacobi επαληθεύουν την αναμενόμενη γρήγορη σύγκλιση και επομένως την μικρότερη φασματική ακτίνα του πίνακα επανάληψης. Πίνακας 1: Συγκεντρωτικά αποτελέσματα Μέθοδος x 1 x 2 x 3 x 4 x 5 Iterations CPU time Mathematica 9.07702-12.15151-4.89015 5.65152 13.41792 - - Απ. Gauss 9.07701-12.15151-4.89015 5.65151 13.41792-0.078125 LU 9.07702-12.15151-4.89015 5.65152 13.41792-0.078125 Jacobi 9.07700-12.15149-4.89015 5.65150 13.41792 55 0.140625 Gauss-Seidel 9.07700-12.15149-4.89015 5.65150 13.41792 26 0.109375 SOR 9.07700-12.15149-4.89015 5.65150 13.41792 26 0.109375 17
2. Διατυπώστε ένα μη γραμμικό σύστημα 3 εξισώσεων με 3 αγνώστους και επιλύστε το με τη μέθοδο Newton. Επιλέγουμε να λύσουμε το σύστημα 2x 3x 4x 1 2 3 1 2 3 5x 2x x 7 2 1 2 3 9x 5x 9 5 2 3 Για την επίλυση του μη γραμμικού συστήματος 3x3 κατασκευάζουμε σε Mathematica έναν κώδικα ο οποίος κάνει χρήση της μεθόδου Newton. To Πρόγραμμα 6 που χρησιμοποιήθηκε για την επίλυση του παραπάνω συστήματος φαίνεται παρακάτω. Πρόγραμμα 6: Μέθοδος Newton για μη γραμμικά συστήματα f 2x1 2 3x2 3 4x31, 5x1 2x2 2 x3 7, 9 x2 5x3 5 9; xpar={x1, x2, x3}; x0={1,1,1}; MIT=10; err 10 6 ; J=Table[D[f[[i]],xpar[[j]]],{i,Length[f]}, {j,length[f]}]//simplify; Print["Πί J(x)=",J//MatrixForm]; Πί Jx 4x1 9x2 2 4 5 4x2 1 0 9 25 x3 4 k=0; curerr=100; While[curerr>err, k=k+1; If[k>MIT,Break[]]; Print["----------------------------------------------- "]; Print["Εά:",k]; roule=table[xpar[[i]]x0[[i]],{i,length[f]}]; Jx0=J/.roule//N; Print["Πί J(xo)=",Jx0//MatrixForm]; Fx0=-f/.roule; Print["Πί F(x0)=",Fx0//MatrixForm ]; 18
Αριθμητική Ανάλυση Εργασία #2 dx=linearsolve[jx0,fx0]//n; Print["dx",k-1,"=",dx]; x0=x0+dx; Print["x",k,"=",x0]; curerr=max[abs[100*dx/(x0+dx)]]//n; Print["Error=",curerr];] Κατά την εκτέλεση του Προγράμματος 6, με αρχική εκτίμηση x 1 =x 2 =x 3 =1 παίρνουμε σε κάθε επανάληψη τα εξής αποτελέσματα -------------------------------------------------------- Εά: 1 4. 9. 4. Πί Jxo 5. 4. 1. 0. 9. 25. 0 Πί Fx0 11 5 dx 0 = {-1.66916,0.562895,-0.402642} x 1 = {-0.669156,1.56289,0.597358} Error= 206.785% -------------------------------------------------------- Εά: 2 2.67662 21.9838 4. Πί Jxo 5. 6.25158 1. 0. 9. 3.18331 8.95888 Πί Fx0 0.633701 5.44637 dx 1 = {-0.460104,-0.511645,-0.264369} x 2 = {-1.12926,1.05125,0.332989} Error= 385.262% -------------------------------------------------------- Εά: 3 4.51704 9.94614 4. Πί Jxo 5. 4.205 1. 0. 9. 0.307369 3.70379 Πί Fx0 0.523561 0.481722 dx 2 = {-0.141025,-0.0834961,0.877586} x 3 = {-1.27028,0.967754,1.21057} Error= 42.0267% -------------------------------------------------------- - 19 -
Αριθμητική Ανάλυση Εργασία #2 Εά: 4 5.08114 8.42893 4. Πί Jxo 5. 3.87102 1. 0. 9. 53.6916 0.10399 Πί Fx0 0.0139432 12.7093 dx 3 = {-0.0785996,-0.159373,-0.209995} x 4 = {-1.34888,0.808381,1.00058} Error= 26.562% -------------------------------------------------------- Εά: 5 5.39554 5.88132 4. Πί Jxo 5. 3.23352 1. 0. 9. 25.058 0.221438 Πί Fx0 0.0507996 3.28994 dx 4 = {-0.0784513,-0.159866,-0.0738744} x 5 = {-1.42734,0.648515,0.926705} Error= 32.7159% -------------------------------------------------------- Εά: 6 5.70934 3.78514 4. Πί Jxo 5. 2.59406 1. 0. 9. 18.4377 0.185991 Πί Fx0 0.0511143 0.253899 dx 5 = {-0.0334276,-0.0752786,0.0229751} x 6 = {-1.46076,0.573236,0.949681} Error= 15.1175% -------------------------------------------------------- Εά: 7 5.84305 2.9574 4. Πί Jxo 5. 2.29295 1. 0. 9. 20.3353 0.0340305 Πί Fx0 0.0113337 0.0215317 dx 6 = {-0.00602087,-0.0155352,0.00581674} x 7 = {-1.46678,0.557701,0.955497} Error= 2.86539% -------------------------------------------------------- - 20 -
Αριθμητική Ανάλυση Εργασία #2 Εά: 8 5.86714 2.79928 4. Πί Jxo 5. 2.2308 1. 0. 9. 20.8381 0.00130637 Πί Fx0 0.000482684 0.00145788 dx 7 = {-0.000245562,-0.000668663,0.000218834} x 8 = {-1.46703,0.557033,0.955716} Error= 0.120185% -------------------------------------------------------- Εά: 9 5.86812 2.79257 4. Πί Jxo 5. 2.22813 1. 0. 9. 20.8572 2.36389 10 6 Πί Fx0 8.94221 10 7 2.08924 10 6 dx84.09324 10 7, 1.14339 10 6, 3.93212 10 7 x 9 = {-1.46703,0.557031,0.955717} Error= 0.000205266% -------------------------------------------------------- Εά: 10 5.86812 2.79256 4. Πί Jxo 5. 2.22813 1. 0. 9. 20.8572 6.8896 10 12 Πί Fx0 2.61469 10 12 6.74794 10 12 dx91.21519 10 12, 3.38925 10 12, 1.13895 10 12 x 10 = {-1.46703,0.557031,0.955717} Error6.08449 10 10 % ---------------------------------------------------------------------------------------------------------- Μετά από 10 επαναλήψεις και με κριτήριο σύγκλισης 10-6 προκύπτουν οι τιμές x 1.46703, x 0.557031, x 0.955717 και με σφάλμα 6.08449 10-10 1 2 3-21 -