You are on page 1of 30

&

: .
: .
. : 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)

! EPANALITPIKI METHODOS: MEXRIS OTOU TO SFALMA GINEI


!MIKROTERO
! TOU 0.005 'H OI EPANALIPSEIS KSEPERASOUN TO ORIO
! KMAX
DO WHILE (ERR>DBLE(0.0005) .AND. IND<KMAX)
DO I = 1,3 ! LOOP STA STOIXEIA TOU DIANYSMATOS X
TEMP = B(I) ! ARXIKOPOIHSH
DO J = 1,I-1 ! LOOP STA STOIXEIA THS EN LOGW
!PROSEGGISIS
TEMP = TEMP - A(I,J)*X(J)
END DO ! TELOS J LOOP
DO K = I+1,3 ! LOOP STA STOIXEIA THS PROIGOUMENIS
!PRSEGGISIS
TEMP = TEMP - A(I,K)*X0(K)
END DO ! TELOS K LOOP
! EURESH PROSEGGISIS GIA TO X(I)
X(I) = (OMEGA/A(I,I))*TEMP + (DBLE(1) OMEGA)*X0(I)
END DO ! TELOS I LOOP
! ELEGXOS SFALMATOS
ERR = ABS(X(1) - X0(1)) ! SFALMA GIA THN PROSEGGISH TOU
! PRWTOU STOIXEIOU TOU DIANYSMATOS
DO I = 1,3 ! ELEGXOS GIA TA YPOLOIPA
E = ABS( X(I) - X0(I) )
IF (E>ERR) THEN
ERR = E ! KRATA TO MEGALYTERO SFALMA
END IF
END DO
! AUKSISI TIMHS METRHTH EPANALIPSEWN
3

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')

! EPANALITPIKI METHODOS: MEXRIS OTOU TO SFALMA GINEI


MIKROTERO
! TOU 0.005 'H OI EPANALIPSEIS KSEPERASOUN TO ORIO
! KMAX
DO II = 0,32
! ENIMERWSI PARAMETROU
OMEGA = DBLE(0.2 + 0.05*II)
! ARXIKI PROSEGGISI LYSIS - DIPLI AKRIVEIA
X0 = (/DBLE(0),DBLE(0),DBLE(0)/)
! DEIKTIS EPANALIPSEON
IND = 1
! SFALMA: ARXIKOPOIHSH ME THN TIMH 10 - AUTHAIRETA
ERR = DBLE(10)
DO WHILE (ERR>DBLE(0.0005) .AND. IND<KMAX)
DO I = 1,3 ! LOOP STA STOIXEIA TOU DIANYSMATOS X
TEMP = B(I) ! ARXIKOPOIHSH
DO J = 1,I-1 ! LOOP STA STOIXEIA THS EN LOGW
PROSEGGISIS
TEMP = TEMP - A(I,J)*X(J)
END DO ! TELOS J - LOOP
DO K = I+1,3 ! LOOP STA STOIXEIA THS PROIGOUMENIS
PRSEGGISIS
TEMP = TEMP - A(I,K)*X0(K)
END DO ! TELOS K - LOOP
! EURESH PROSEGGISIS GIA TO X(I)
X(I) = (OMEGA/A(I,I))*TEMP + (DBLE(1) - OMEGA)*X0(I)
END DO ! TELOS I - LOOP
! ELEGXOS SFALMATOS
ERR = ABS(X(1) - X0(1)) ! SFALMA GIA THN PROSEGGISH
TOU
5

! PRWTOU STOIXEIOU TOU DIANYSMATOS


DO I = 1,3 ! ELEGXOS GIA TA YPOLOIPA
E = ABS( X(I) - X0(I) )
IF (E>ERR) THEN
ERR = E ! KRATA TO MEGALYTERO SFALMA
END IF
END DO
! AUKSISI TIMHS METRHTH EPANALIPSEWN
IND = IND + 1
! ENIMERWSI TOU X0 - PANTA ISO ME THN
! PROIGOUMENI PROSEGGISH
X0 = X
END DO
! EMFANISI APOTELESMATWN SE ARXEIO
IF (IND>=KMAX) THEN ! H METHODOS DE SYGKLINE
WRITE(3,*) " H METHODOS DE SYGKLINE. "
ELSE
! EMFANISI TIMIS PARAMETROU
WRITE(3,'(A,F7.5)') "OMEGA = ", OMEGA
DO I = 1,3 ! EMFANISI APOTELESMATWN
WRITE(3,*) X(I)
END DO
WRITE(3,'(A,I2,A)') "H LYSH VRETHIKE SE ",IND - 1,"
EPANALIPSEIS"
WRITE(3,*) ! EMFANISH KENOU
END IF
END DO ! II - LOOP
END PROGRAM SOR_METHOD_MULTI

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:

Gauss Seidel SOR =1


. 1 1.05 1.45 SOR
Gauss Seidel.

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.
\. .

%%% ASKISI 2 - DIAGONAL %%%


% katharismos othonis - mnimis - plots
clear all
clc
close all
% orismos diastasewn
len = 10; % apo to 2^3 ws to 2^12 - 10 diaforetika megethi pinaka
% apothikefsi ekthetwn
powers = zeros(1,10);
% apothikefsi xronou
time = zeros(1,10);
for ii = 1:len
powers(ii) = 2^(ii+2);
% dhmiourgia diagwniwn tou pinaka A
main_diag = 1:powers(ii); % A(n,n) = n
up_diag = (1/2)*ones(1,powers(ii)-1); % 1 stoixeio ligotero
low_diag = (1/2)*ones(1,powers(ii)-2); % 2 stoixeia ligotera
% dhmiourgia pinaka A
A = diag(main_diag);
% prosthesi ypoloipwn diagwniwn
A = A + diag(up_diag,1);

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

% plottarisma xronou - diastasis pinaka


loglog(powers,time); grid on; hold on
xlabel(' Diastasi pinaka')
ylabel(' Xronos se seconds')
title(' Xronos VS Diastasi pinaka')

O
. . 2

. 2:

Gauss Jordan
, n
,
sparse () ,
. sparse
spdiags,
. .

%%% LYSH ME XRHSH PINAKA SPARSE


for ii = 1:len
main_diag = 1:powers(ii);
up_diag = (1/2)*ones(1,powers(ii));
low_diag = (1/2)*ones(1,powers(ii));
D = zeros(powers(ii),3);
D(:,1) = low_diag;
D(:,2) = main_diag;
D(:,3) = up_diag;
% xrhsh synarthshs spdiags gia ton tetragwniko pinaka
A = spdiags(D,[-2,0,1],powers(ii),powers(ii));
% xrhsh synarthshs sparse gia to deksi melos
B = sparse(ones(powers(ii),1));
tic;
x = A\B;
time(ii) = toc;
end
% plottarisma xronou
loglog(powers,time,'k')
legend('diag','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 )

4: cosa , cos( a+ ) , sina , sin(a+ ) .


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

FX(X0) ! PINAKAS F(X)


JX(X0) ! IAKWVIANOS PINAKAS
SOLVE_GJ(J,F,4) !
X0 Y ! STHN EPILYSH DE MPHKE ARNHTIKO PROSHMO STO
DIANYSMA DIORTHWNETAI EDW

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

F(1) = DBLE(3)*X(1) + DBLE(4)*X(1)*X(2) - &


&DBLE(4)*X(3)*X(4) - DBLE(2)
F(2) = DBLE(3)*X(3) + DBLE(4)*X(1)*X(4) + &
&DBLE(4)*X(2)*X(3) - DBLE(6)
F(3) = X(1)**2 + X(3)**2 - DBLE(1)
F(4) = X(2)**2 + X(4)**2 - DBLE(1)
END FUNCTION FX

! EURESI IAKWVIANOU PINAKA


FUNCTION JX(X) RESULT(J)
IMPLICIT NONE
DOUBLE PRECISION, INTENT(IN) :: X(4)
DOUBLE PRECISION :: J(4,4)
J(1,1)
J(1,2)
J(1,3)
J(1,4)
J(2,1)
J(2,2)
J(2,3)
J(2,4)
J(3,1)
J(3,2)
J(3,3)
J(3,4)
J(4,1)
J(4,2)
J(4,3)
J(4,4)

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

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

! EPILYSI SYSTIMATOS A*X = B


FUNCTION SOLVE_GJ(A,B,N) RESULT(X) ! GAUSS JORDAN
IMPLICIT NONE

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)

a = 0.7327 = 41.98 , = 0.8957 = 51.32


. 4 & . 5 .

. 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
%
%
%
%

EISODOS: X OI TETHMENES SHMEIWN PAREMVOLIS


Y OI TETAGMENES -//BC DIANYSMA ME 2 STOIXEIA, TIS SYNORIAKES SINTHIKES
XX DIANYSMA ME DIAMERISI TOU X

% ELEGXOS ORTHOTITAS EISODOU


if ~(length(x) == length(y))

19

end

disp(' Lathos dedomena. ')


yy = [];
return

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

xlocal = x(i:i+1); ylocal = y(i:i+1);


xxlocal = xx(find(xx<=x(i+1) & xx>x(i)));
lenxx = length(xxlocal);
qlocal = q(i:i+1);
yy(yyind+1:yyind+lenxx) = splineform(xlocal,ylocal,xxlocal,qlocal);
yyind = yyind+lenxx;

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

% ELEGXOS KWDIKA SPLINES


clear
clc
close all
% ELEGXOS SYNARTISIS 5X.^3+3X.^2-X+5
% STO DIASTHMA 1,2
f = @(x) 5*x.^3 + 3*x.^2 - x + 5;
x = 1:2;
y = f(x);
t = [20,71];
xx = 1:.05:2; % 20 SHMEIA YPOLOGISMOU THS TIMHS THS SYNARTISIS
yy = splineCode(x,y,t,xx);
plot(xx,yy);hold on; plot(xx,f(xx),'or'); grid on
legend('Spline','Polywnymikh kampylh')
title('y = 5x^3+3x^2-x+5')
disp(max(abs(f(xx)-yy)))


p ( x ) = 5x 3+3x 2x+5, x [1,2 ] . O
20 71 . . 6
spline, .

. 6: p ( x ) = 5x 3+3x 2x+5, x [1,2 ]


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

. 10: spline Runge


. 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

You might also like