Professional Documents
Culture Documents
Εργασία Αριθμητικής Ανάλυσης
Εργασία Αριθμητικής Ανάλυσης
: .
: .
. : 2015 2016
1: SOR
) ()
2 1 0
1
1 2 1 x = 1
0 1 2
3
SOR.
SOR Gauss Seidel,
. ,
, .
xi
(k)
= (1) x i
i1
+
bi Aij x j(k) Aij x j(k1)
Aii
j=1
j=i+1
(k1 )
k i
x = ( x i ) , i = 1, , n
= 1 Gauss Seidel.
= 1.2 .
Fortran,
.
PROGRAM SOR_METHOD
IMPLICIT NONE
DOUBLE PRECISION :: OMEGA, TEMP, ERR, E
INTEGER :: KMAX, IND, I, J, K
DOUBLE PRECISION, DIMENSION(3) :: X0, B, X
DOUBLE PRECISION, DIMENSION(3,3) :: A
! ORIO EPANALIPSEON
KMAX = 100
! DEIKTIS EPANALIPSEON
IND = 1
! PARAMETROS METHODOU SOR
OMEGA = DBLE(1.2)
! ARXIKI PROSEGGISI LYSIS - DIPLI AKRIVEIA
X0 = (/DBLE(0),DBLE(0),DBLE(0)/)
2
! DEKSIA MELOS
B = (/DBLE(1),DBLE(-1),DBLE(3)/)
! TETRAGWNIKOS PINAKAS - 3 x 3
A = RESHAPE( (/DBLE(2),DBLE(-1),DBLE(0),DBLE(-1),DBLE(2),
&
& DBLE(-1),DBLE(0),DBLE(-1),DBLE(2)/), (/3,3/) )
! SFALMA: ARXIKOPOIHSH ME THN TIMH 10 - AUTHAIRETA
ERR = DBLE(10)
IND = IND + 1
! ENIMERWSI TOU X0 - PANTA ISO ME THN
! PROIGOUMENI PROSEGGISH
X0 = X
END DO ! EKSWTERIKO LOOP
! ANOIGMA ARXEIOU GIA APOTHIKEFSI APOTELESMATWN
OPEN(3,FILE = 'ASKISI_1.TXT')
! EMFANISI APOTELESMATWN SE ARXEIO
IF (IND>=KMAX) THEN ! H METHODOS DE SYGKLINE
WRITE(3,*) " H METHODOS DE SYGKLINE. "
ELSE
WRITE(3,'(A,F3.1)') "OMEGA = ",OMEGA
DO I = 1,3 ! EMFANISI APOTELESMATWN
WRITE(3,'(F7.5)') X(I)
END DO
WRITE(3,'(A,I2,A)') "H LYSH VRETHIKE SE ",IND 1," &
&EPANALIPSEIS"
END IF
END PROGRAM SOR_METHOD
O 'ASKISI_1.TXT' '
. ,
:
OMEGA = 1.2
1.00022
1.00012
2.00005
H LYSH VRETHIKE SE
7 EPANALIPSEIS
x = (1, 1, 2)T .
, 7 .
,
= 0.2+0.05i , i = 1, , 32 . ,
32 .
PROGRAM SOR_METHOD_MULTI
IMPLICIT NONE
DOUBLE PRECISION :: ERR, E, TEMP, OMEGA
INTEGER :: KMAX, IND, I, J, K, II
DOUBLE PRECISION, DIMENSION(3) :: B, X, X0
DOUBLE PRECISION, DIMENSION(3,3) :: A
! ORIO EPANALIPSEON
KMAX = 100
! DEKSIA MELOS
B = (/DBLE(1),DBLE(-1),DBLE(3)/)
! TETRAGWNIKOS PINAKAS - 3 x 3
A = RESHAPE( (/DBLE(2),DBLE(-1),DBLE(0),DBLE(-1),DBLE(2),
&
& DBLE(-1),DBLE(0),DBLE(-1),DBLE(2)/), (/3,3/) )
! ANOIGMA ARXEIOU GIA APOTHIKEFSI APOTELESMATWN
OPEN(3,FILE = 'ASKISI_1_MULTI.TXT')
ASKISI_1_MULTI.TXT
.
OMEGA = 0.20000
0.99476806610986312
0.99283821821640095
1.9950982647635715
H LYSH VRETHIKE SE 83 EPANALIPSEIS
OMEGA = 0.25000
0.99603418893167095
0.99462193171294133
1.9963533795757764
H LYSH VRETHIKE SE 68 EPANALIPSEIS
OMEGA = 0.30000
0.99672584714845525
0.99560383903017813
1.9970486671599761
H LYSH VRETHIKE SE 57 EPANALIPSEIS
OMEGA = 0.35000
0.99728610875458001
0.99639452085108349
1.9976050110447170
H LYSH VRETHIKE SE 49 EPANALIPSEIS
... . 1
. 1:
2:
Matlab
.
1 1/2 0
0
0 0
0
2 1/2 0
0 0
1/ 2 0
3 1/2 0 0
=
.
.
.
0
0 1/2 0 n
b n
1.
#0 ),
#1( ' ) #-2( ' )
n = 23, 24 , , 212 .
diag Matlab.
\. .
end
A = A + diag(low_diag,-2);
% deksio melos grammikou systhmatos
B = ones(1,powers(ii)); % pinakas - grammi
% epilysh systymatos
tic;
x = A\B';
time(ii) = toc; % krata to xrono ektelesis
O
. . 2
. 2:
Gauss Jordan
, n
,
sparse () ,
. sparse
spdiags,
. .
. 2.
. 3: sparse
sparse
. sparse
,
. . 3,
10
,
,
.
3:
Newton Raphson
F ( x ) = 0 ,
x = ( x 1, x 2, , x n) F (x ) = ( f 1( x ) , f 2 (
x ), , f n ( x )) .
Newton Raphson
.
x (k ) = x(k 1) J 1 (
x (k1) ) F (x (k1) ) , k 1
J ( x ) , J ij = x ( f i)
j
, x 0
Newton Raphson
. , 3
, (0,0) , 4 ,
.
' 1
M = ( 2,6)
.
.
:
f 1 (a , ) = 3cosa+4cos(a+ )2 (x )
f 2 (a , ) = 3sina+4sin (a+ )6 (y )
f 1 (a , ) = 3cosa+4cosacos4sinasin2
f 2 (a , ) = 3sina+4sinacos+4cosasin6
(x )
(y )
1 ,
.
11
cosa , cos , sina , sin .
,
cos 2 x+sin2 x = 1
f 3 (a , ) = cos a+sin a1
f 4 (a , ) = cos 2 +sin2 1
T
T
(cosa , cos , sina , sin ) = ( x 1, x 2, x 3, x 4 ) =
x .
f 1 (x ) = 3x 1 +4x 1 x 2 4x3 x 4 2
f 2 (
x ) = 3x 3 +4x1 x 4 4x 3 x 2 6
f 3 (x ) = x 12+ x 32 1
f 4 (x ) = x 2 +x 4 1
F (x ) = ( f 1(x ) , f 2 (
x ), f 3 (
x ), f 4 (x ))T :
3+4x 2 4x 1 4x 4 4x 3
4x 4
4x 3 3+4x 3 4x 1
J ( x ) =
2x1
0
2x 3
0
0
2x 2
0
2x 4
Newton Raphson
J 1( x )F (x ) .
F ( x )
, J (x )y = F ( x ) . ,
y = J 1F ,
.
,
x (k ) = x(k 1) +y .
Fortran ,
.
, ,
x 0 = (cosa 0, cos 0, sina0, sin 0)T = (1, 0, 0, 1)T
12
PROGRAM NRSYS
IMPLICIT NONE
INTEGER :: INDMAX, IND, I
DOUBLE PRECISION :: ERR,E
DOUBLE PRECISION, DIMENSION(4) :: F, X0, Y, X
DOUBLE PRECISION, DIMENSION(4,4) :: J
LOGICAL :: FLAG
! ORIO EPANALIPSEWN
INDMAX = 200
! METAVLITI APOTHIKEFSIS SFALMATOS
ERR = DBLE(1)
! ARXIKI PROSEGGISI LYSIS:
! RAVDOS (L=3) ORIZONTIA, RAVDOS (L=4) KATHETI
X0 = (/DBLE(1),DBLE(0),DBLE(0),DBLE(1)/)
IND = 0 ! DEIKTIS EPANALIPSEWN
FLAG = .TRUE. ! FALSE AN DE VRETHIKE LYSI
DO ! EPANALIPTIKI DIADIKASIA EURESIS LYSIS
F
J
Y
X
!
=
=
=
=
F
IND = IND + 1
! TERMATISMOS AN KEPERASTIKE TO ORIO
IF (IND>INDMAX) THEN
FLAG = .FALSE.
EXIT ! TERMATISMOS TOU LOOP
END IF
! EKTIMISI SFALMATOS
ERR = ABS(X(1) - X0(1))
DO I = 2,4
E = ABS(X(I) - X0(I))
IF (E>ERR) THEN
ERR = E
END IF
END DO
13
! ELEGXOS SYGKLISIS
IF (ERR<0.0005) THEN
EXIT
END IF
X0 = X
END DO ! KYRIO LOOP
! APOTHIKEFSI LYSIS SE ARXEIO
OPEN (10, FILE = 'ASKISI_3.TXT')
IF (.NOT.(FLAG)) THEN ! H METHODOS APETYXE
WRITE(*,'(A)') "TO ORIO EPANALIPSEWN KSEPERASTIKE"
write(10,*) IND
ELSE
WRITE(*,'(A)') "EPITYXIS EPILYSI"
WRITE(10,*) " "
DO I = 1,4
WRITE(10,'(A,I1,A,F6.4)') "X(",I,") = ",X(I)
END DO
WRITE(10,'(A,I2)') "EPANALIPSEIS: ",IND
END IF
CONTAINS
! SYNARTISEIS: PINAKAS F, PINAKAS J, EPILYSI SYSTIMATOS
! J(X)*Y = -F(X)
!--------------------------------------------------------END PROGRAM NRSYS
DBLE()
, .
' .
! EURESI PINAKA F
FUNCTION FX(X) RESULT(F)
IMPLICIT NONE
DOUBLE PRECISION, INTENT(IN) :: X(4)
DOUBLE PRECISION :: F(4)
! X(1) = COS(A), X(2) = COS(B)
! X(3) = SIN(A), X(4) = SIN(B)
14
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
DBLE(3) + DBLE(4)*X(2)
DBLE(4)*X(1)
-DBLE(4)*X(4)
-DBLE(4)*X(3)
DBLE(4)*X(4)
DBLE(4)*X(3)
DBLE(4)*X(2) + DBLE(3)
DBLE(4)*X(1)
DBLE(2)*X(1)
DBLE(0)
DBLE(2)*X(3)
DBLE(0)
DBLE(0)
DBLE(2)*X(2)
DBLE(0)
DBLE(2)*X(4)
END FUNCTION JX
F (x ) J ( x )
Gauss. y ,
.
.
15
INTEGER, INTENT(IN) :: N
DOUBLE PRECISION, INTENT(INOUT) :: A(N,N), B(N)
DOUBLE PRECISION :: X(N), COEF, TEMP
INTEGER :: I,J,K,II,JJ,IBACK,IAUX
DOUBLE PRECISION, ALLOCATABLE ::
DO I = 1,N
K = I
DO J = I+1,N
IF(ABS(A(J,I))>ABS(A(K,I))) THEN ! ANTALLAGI GRAMMWN
K = J
END IF
END DO
! ANTALLAGI GRAMMWN A(I,:) ME A(K,:)
DO II = 1,N
TEMP = A(I,II)
A(I,II) = A(K,II)
A(K,II) = TEMP
END DO
!ANTALLAGI STOIXEIWN DIANYSMATOS B
TEMP = B(K)
B(K) = B(I)
B(I) = TEMP
! AFAIRESI GRAMMWN
DO JJ = I+1,N
COEF = A(JJ,I)/A(I,I) ! SYNTELESTIS POU APOTHIKEUETAI
A(JJ,I) = COEF
A(JJ,I+1:N) = A(JJ,I+1:N) - COEF*A(I,I+1:N)
B(JJ) = B(JJ) - COEF*B(I)
END DO
END DO ! VROXOS ME DEIKTH I
! PISW ANTIKATASTASI
X(N) = B(N)/A(N,N)
DO IBACK = N-1,1,-1
X(IBACK) = B(IBACK)
DO IAUX = IBACK+1,N
X(IBACK) = X(IBACK) - X(IAUX)*A(IBACK,IAUX)
END DO
X(IBACK) = X(IBACK)/A(IBACK,IBACK)
END DO
END FUNCTION SOLVE_GJ
16
ASKISI_3.TXT .
X(1) = 0.7434
X(2) = 0.6250
X(3) = 0.6689
X(4) = 0.7806
EPANALIPSEIS:
, 5 .
0.0005.
x = (cosa , cos , sina , sin)T = (0.7434, 0.6250, 0.6689, 0.7806)
. 4: . ,
(2,6)
17
. 5:
4: Spline
spline,
Hermite (
).
x = (x 1, x 2, , x n ) , ,
y = ( y 1, y 2, , y n ) , = ( 1, 2)
a = x 1< x 2<< x n = b
spline
[a , b] ,
[ xi , x i+1 ], i = 1, , n1
.
spline
x m+1 x
xx m
+ y m+1
+h m2 q m F (1t)+h m2 q m+1 F (t) , m = 1, , n1
hm
hm
h m = x m +1 x m
xx m
t =
hm
s( x) = y m
18
t 3t
F ( t) =
6
q m
n .
: i)
ii) . iii)
. iv)
i) iii)
. n2
. 2
, n
q m , m = 1, , n
:
y2 y1
1 :
h1
y
ym
y y m1
e m1 q m1 +(d m1 +d m ) qm +e m q m+1 = m+1
m
, m = 2, , n1
hm
h m1
: .
y y n1
e n1 q n1 +d n1 q n = n n
:
hn1
hm
hm
dm =
em =
, m = 1, , n1
3,
6
d 1 q1 +e 1 q 2 =
Matlab spline
.
'
(, )
.
function yy = splineCode(x,y,BC,xx)
%%% KATASKEUH SPLINE POU PAREMVALLEI TA SHMEIA (X,Y)
% ME SYNORIAKES SYNTHIKES HERMITE
%
%
%
%
19
end
yy = zeros(size(xx));
npoints = length(x);
% TRIDIAGWNIOS PINAKAS - ARXIKOPOIHSH DIAGWNIWN TOU
main_diag = zeros(npoints,1);
up_diag = main_diag;
low_diag = main_diag;
rhs = main_diag; % DEKSI MELOS
% EURESI STOIXEIWN DIAGWNIWN
main_diag(1) = (x(2)-x(1))/3;
up_diag(1) = 0.5*main_diag(1);
rhs(1) = (y(2) - y(1))/(x(2) - x(1)) - BC(1);
rhs(npoints) = BC(2) - (y(npoints)-y(npoints-1))/(x(npoints)-x(npoints-1));
main_diag(npoints) = (x(npoints)-x(npoints-1))/3;
low_diag(npoints) = 0.5*main_diag(npoints);
for i = 2:npoints-1
h_1 = x(i) - x(i-1);
h_2 = x(i+1) - x(i);
dy_1 = y(i) - y(i-1);
dy_2 = y(i+1) - y(i);
low_diag(i) = h_1/6;
main_diag(i) = (h_1+h_2)/3;
up_diag(i) = h_2/6;
rhs(i) = (dy_2/h_2) - (dy_1/h_1);
end
% ADJUST DIAGONALS FOR SPDIAGS USE
% low_diag: LAST ELEMENT WILL BE REJECTED
low_diag(1:npoints-1) = low_diag(2:npoints);
low_diag(npoints) = 0;
% up_diag: 1ST ELEMENT WILL BE REJECTED
up_diag(2:npoints) = up_diag(1:npoints-1);
D = [low_diag,main_diag,up_diag]; % SPARSE MATRIX
A = spdiags(D,-1:1,npoints,npoints);
Q = A\rhs; % q-COEFFICIENTS
% FIND CURVE [XX,YY]
yy = findSpline(x,y,xx,Q);
.
q m , m = 1, , n findSpline
spline.
20
function yy = findSpline(x,y,xx,q)
yy = zeros(size(xx));
n = length(x);
yy(1) = splineform(x(1:2),y(1:2),x(1),q(1:2));
yyind = 1;
for i = 1:n-1
end
findSpline xx
splineform(x,y,xx,q)
spline
function yy = splineform(x,y,xx,q)
% X,Y,Q CONTAIN 2 ELEMENTS
% XX IS A VECTOR WITH VALUES X(1),...,X(N)
h = x(2) - x(1);
t = (xx - x(1))/h;
F = @(t) (t.^3 - t)/6; % FUNCTION HANDLE
yy = y(1)*(1-t) + y(2)*t + h^2*q(1)*F(1-t) + h^2*q(2)*F(t);
splineform spline
[ xi , x i+1 ], i = 1, , n1 .
.
spline, [ xi , x i+1 ], i = 1, , n1
.
splineCode, ( ) ,
,
. .
21
p ( x ) = 5x 3+3x 2x+5, x [1,2 ] . O
20 71 . . 6
spline, .
22
spline
, 7.1054e-15, .
splineCode .
. Runge
Runge,
1
f (x) =
, x[1,1] n = 32, 64,128, 256, 512
1+25x 2
.
.
% SYNARTISI RUNGE
clear
clc
close all
f = @(x) 1./(1 + 25*x.^2);
t = [50/26^2,-50/26^2]; % PRWTI PARAGWGOS STA AKRA
xx = linspace(-1,1,1000);
fxx = f(xx);
max_error = zeros(1,5);% ARXIKOPOIHSH DIANYSMATOS POU PERIEXEI TO SFALMA
%PAREMVOLIS GIA KATHE PLITHOS KOMVWN
n = 16;
for ii = 1:5
n = n*2;
x = -1:(2/n):1;
y = f(x);
yy = splineCode(x,y,t,xx); % PAREMVOLI ME KYVIKI
max_error(ii) = max(abs(fxx yy)); % SFALMA
max_error_runge(ii) = 15000*(5*h^4)/384;% THEWRHTIKO SFALMA
figure
plot(xx,yy);hold on;
plot(xx,fxx,'--r');
grid on
legend(['Spline(',num2str(n),' shmeia paremvolis)'],'Synartisi Runge')
end
figure
loglog(2.^[5:9],max_error,'-*k');grid on; title('Sfalma')
loglog(2.^[5:9],max_error_runge,':*k'); legend(' Pragmatiko sfalma',' Thewrhtiko
megisto sfalmatos')
% LOGOS SFALMATOS
for jj = 1:4
err(jj) = max_error(jj+1)/max_error(jj);
end
figure
semilogy(err,'-*k'); title('Logos sfalmatwn');grid on
23
. 7: Runge
. 8:
7. 8 .
. 7 . . 8 ,
24
. 9: Runge 32
( ). . 8
64 32,
128 64 ...
spline
5h 4 (4)
f s
f . ,
384
f (4 ) . ,
spline
. h
.
Runge
2
4
15000(1250x +3125x )
(4 )
f ( x) =
x=0 15000.
2 5
(1+25x )
. 10 Runge
, . 7.
.
,
spline.
25
. Spline
spline
. (0,0) , (1,1) , (8,1) , (10,0)
( ) Hermite tan (80 )/tan(25 )
.
: ,
.
,
.
.
,
Hermite (
). ,
.
. spline
. 11
26
. 11:
, 1 2.
.
(0,0), (0.035,0 .25) , (0.131,0 .620) , (0.342,0 .898) , ( 0.578,0.979) , (0.764,0 .991) , (1,1)
. 12:
2 ,
27
,
, (tan (80 ) , 0) .
. 12
,
(1,1) , (8,1)
.
. 13:
, 8<x <10 (8,1) , (10,0)
(0,tan (25 )) .
. 13
.
,
. 14. .
28
. 14: .
% ISALOS
clear
close all
clc
figure
axis equal
grid on
hold on
% PRYMNH - PROSTHESI SHMEIWN
x_1 = [0,0.035,0.131,0.342,0.578,0.764,1];
y_1 = [0,0.25,0.620,0.898,0.979,0.991,1];
t_1 = [tand(80),0];
xx_1 = linspace(0,1,100);
yy_1 = splineCode(x_1,y_1,t_1,xx_1);
plot(xx_1,yy_1)
plot(x_1,y_1,'*r')
% PARALLHLO TMHMA
x_2 = [1,8];
y_2 = [1,1];
t_2 = [0,0];
xx_2= linspace(1,8,100);
yy_2 = splineCode(x_2,y_2,t_2,xx_2);
plot(xx_2,yy_2); plot(x_2,y_2,'*r');
% PRWRA
x_3 = [8,10];
y_3 = [1,0];
t_3 = [0,-tand(25)];
xx_3 = linspace(8,10,100);
yy_3 = splineCode(x_3,y_3,t_3,xx_3);
plot(xx_3,yy_3); plot(x_3,y_3,'*r')
29
% PLOT SEPERATELY
figure
plot(xx_1,yy_1); hold on; plot(x_1,y_1,'*r'); grid on; title('Prymnh')
figure
plot(xx_2,yy_2); hold on; plot(x_2,y_2,'*r'); grid on; title('Parallhlo tmhma')
figure
plot(xx_3,yy_3); hold on; plot(x_3,y_3,'*r'); grid on; title('Prwra')
30