prog numerically
TRANSCRIPT
-
7/27/2019 Prog Numerically
1/57
P r o g r a m s a n d L i s t i n g s
I n t r o d u c t i o n
I t i s t h e i n t e n t i o n i n t h i s A d d e n d a t o p r o v i d e t h e r e a d e r o f m y b o o k
\ N u m e r i c a l M e t h o d s f o r L a p l a c e T r a n s f o r m I n v e r s i o n " w i t h a v a r i -
e t y o f p r o g r a m s t o e v a l u a t e t h e i n v e r s e L a p l a c e t r a n s f o r m . T h e o n l y
r e q u i r e m e n t i s t h e a b i l i t y t o w r i t e s i m p l e F o r t r a n r o u t i n e s t o e v a l -
u a t e t h e t r a n s f o r m f u n c t i o n
f ( s ) . A s a g e n e r a l r u l e t h e p r o g r a m s
r e q u i r e t h e u s e o f d o u b l e p r e c i s i o n a r i t h m e t i c - t h i s i s p a r t i c u l a r l y
t h e c a s e w i t h N A G l i b r a r y r o u t i n e s - b u t b e c a u s e t h e e x t r a p o l a -
t i o n m e t h o d s u s e d i n v o l v e a l o t o f c a n c e l l a t i o n i t i s p r e f e r a b l e t o
w o r k w i t h m u l t i - p r e c i s i o n a r i t h m e t i c . I t h a s b e e n t h e p o l i c y o f t h e
a u t h o r t o i n d i c a t e d o u b l e / m u l t i p l e p r e c i s i o n v a r i a b l e s b y u s i n g t h e
t e r m r e a l , t h a t i s r e a l i n b o l d c h a r a c t e r s , a n d a l s o t o i n d i c a t e c o n -
s t a n t s o f t h i s f o r m b y w r i t i n g t h e m i n b o l d t y p e . T h u s 0 . 0 1 w o u l d
r e p r e s e n t 1 d - 2 i n d o u b l e p r e c i s i o n o r 1 q - 2 i n q u a d r u p l e p r e c i s i o n
a n d 1 0
1 0
w o u l d r e p r e s e n t 1 d - 1 0 o r 1 q - 1 0 . S i m i l a r l y , c o m p l e x r e p -
r e s e n t s d o u b l e / m u l t i p l e p r e c i s i o n c o m p l e x v a r i a b l e s . L i k e w i s e e x p
r e p r e s e n t s d e x p i n d o u b l e p r e c i s i o n a n d q e x p i n q u a d r u p l e p r e c i s i o n
a n d i n d i c a t e s t h a t t h e e x p o n e n t i a l o p e r a t i o n w i l l p r o d u c e n u m e r i c a l
r e s u l t s w h i c h a r e c o m p a t i b l e w i t h t h e v a r i a b l e d e c l a r a t i o n . S i m i -
l a r l y f o r s i n , c o s , a b s , o a t , a n d s o o n . F o r s o m e f u n c t i o n s w e
h a v e u s e d t h e g e n e r i c n a m e i n t h e p r o g r a m . E x a m p l e s o f t h i s a r e
m a x , m i n a n d i x w h e r e , d e p e n d i n g o n t h e c o m p u t e r u s e d a n d t h e
c o n t e x t w e m i g h t r e q u i r e d m a x 1 , d m i n 1 o r j i x r e s p e c t i v e l y | o r
s o m e s i m i l a r f u n c t i o n n a m e s .
W e n o w g i v e e x a m p l e s o f v a r i o u s p r o g r a m s a n d t h e i r s p e c i c a t i o n s .
I t s h o u l d b e b o r n e i n m i n d t h a t t h e p a r a m e t e r s n e e d e d t o o p e r a t e
s o m e p r o g r a m s n e e d c a r e f u l c h o o s i n g a n d i t w o u l d b e a d v i s a b l e t o
r e r u n t h e p r o g r a m s w i t h a l t e r n a t i v e p a r a m e t e r s e t t i n g s . W h i l e t h e
a u t h o r h a s a t t e m p t e d t o w r i t e o p t i m a l p r o g r a m s f o r r o u t i n e s w h i c h
h a v e n o t b e e n p u b l i s h e d t h i s o b j e c t i v e m i g h t n o t h a v e b e e n a c h i e v e d
i n a l l c a s e s . A d d i t i o n a l l y , t h e u s e r h a s t o b e a w a r e o f t h e f a c t , e s -
p e c i a l l y w h e n s u p p l y i n g
f ( s ) w h i c h i s t o b e e v a l u a t e d f o r c o m p l e x
v a l u e s o f s , o f t h e n e e d t o d e t e r m i n e t h e p r i n c i p a l v a l u e o f
f ( s ) .
A l s o i n c l u d e d i n t h i s C h a p t e r a r e t w o M a t h e m a t i c a p r o g r a m s . S o m e
a d d i t i o n a l M a t h e m a t i c a p r o g r a m s c a n b e f o u n d f r o m t h e p a c k a g e
L a p l a c e A n d z T r a n s f o r m s | s e e G r a f [ 5 ] . F u r t h e r d e t a i l s r e l a t i n g t o
t h e N A G p r o g r a m s c a n b e f o u n d a t t h e i r w e b s i t e [ 9 ] .
1
-
7/27/2019 Prog Numerically
2/57
P r o g r a m f o r W e e k s ' s m e t h o d
T h i s i s b a s e d o n t h e p a p e r b y G a r b o w e t a l [ 4 ] w h i c h d e t e r m i n e s a
L a g u e r r e s e r i e s a p p r o x i m a t i o n
~
f ( t ) t o f ( t ) o f t h e f o r m
~
f ( t ) = e
t
m 1
i = 0
a
i
e
b t = 2
L
i
( b t ) ; >
0
; b > 0
w h e r e
0
( = ) i s t h e a b s c i s s a o f t h e s i n g u l a r i t y o f
f ( s ) w h i c h i s f u r -
t h e s t f r o m
s = 0 . N A G r o u t i n e C 0 6 L B F c o m p u t e s t h e c o e c i e n t s
a
i
a n d t h e r o u t i n e C 0 6 L C F e v a l u a t e s t h e e x p a n s i o n f o r s p e c i e d t .
E n t r y / E x i t P a r a m e t e r s
1 . f | c o m p l e x f u n c t i o n t o b e s u p p l i e d b y u s e r . f m u s t r e t u r n
t h e v a l u e o f t h e L a p l a c e t r a n s f o r m
f ( s ) f o r g i v e n s .
2 . s i g m a o | r e a l . T h e v a l u e o f
0
.
3 . s i g m a | r e a l , t h e p a r a m e t e r o f t h e L a g u e r r e e x p a n s i o n . I t
i s r e p l a c e d b y
0
+ 0 : 7 o n e x i t i f <
0
.
4 . b | r e a l . I f b
-
7/27/2019 Prog Numerically
3/57
a r e t o b e r e a d i n t o t h e c o m p u t e r .
c T h i s i s a n a p p l i c a t i o n o f N A G L i b r a r y R o u t i n e s C 0 6 L B F / C 0 6 L C F
i n t e g e r n m a x , n o u t
p a r a m e t e r ( n m a x = 5 1 2 , n o u t = 6 )
r e a l b , e p s t o l , e x a c t , n v , p s e r r , s i g m a , s i g m a o , t
i n t e g e r i f a i l , j , m
r e a l a c o e f ( n m a x ) , e r r v e c ( 8 )
e x t e r n a l C 0 6 L B F , C 0 6 L C F
c o m p l e x f
e x t e r n a l f
s i g m a o = 0 . 1
e p s t o l = 0 . 0 0 0 0 1
i f a i l = 0
c a l l C 0 6 L B F ( f , s i g m a o , s i g m a , b , e p s t o l , n m a x , m , a c o e f , e r r v e c , i f a i l )
w r i t e ( n o u t , 9 9 9 ) ` n u m b e r o f c o e c i e n t s = ' , m
w r i t e ( n o u t , * ) ` t f ( t ) '
r e a d ( 5 , * ) n
c r e a d s n u m b e r o f v a l u e s o f t a t w h i c h f ( t ) r e q u i r e d
d o i = 1 , n
r e a d ( 5 , * ) t
c a l l C 0 6 L C F ( t , s i g m a , b , m , a c o e f , e r r v e c , n v , i f a i l )
w r i t e ( n o u t , 9 9 8 ) t , n v
e n d d o
s t o p
9 9 9 f o r m a t ( 1 x , a , i 6 )
9 9 8 f o r m a t ( 1 x , 1 p , d 1 0 . 2 , d 1 5 . 4 )
e n d
c o m p l e x f u n c t i o n f ( s )
c
f ( s ) i s t h e t r a n s f o r m o f J
0
( t )
c o m p l e x s , z
r e a l p r , p i , q r , q i
e x t e r n a l A 0 2 A A F
c T h e N A G r o u t i n e A 0 2 A A F e v a l u a t e s c o m p l e x s q u a r e r o o t s
z = s * s + 1
p r = r e a l ( z )
3
-
7/27/2019 Prog Numerically
4/57
p i = i m a g ( z )
c a l l A 0 2 A A F ( p r , p i , q r , q i )
z = c m p l e x ( q r , q i )
f = ( 1 . 0 ) / z
r e t u r n
e n d
4
-
7/27/2019 Prog Numerically
5/57
P a d e T a b l e C o n s t r u c t i o n b y m e t h o d o f L o n g m a n
T h e p r o g r a m L O N G P A D
G i v e n a s e r i e s
g ( s ) = a
0
+ a
1
s + a
2
s
2
+
+ a
n
s
n
+
t h e p r o g r a m L O N G P A D d e t e r m i n e s t h e P a d e a p p r o x i m a n t s
0
+
1
s +
+
p
s
p
0
+
1
s +
+
q
s
q
;
f o r 0
p ; q
[ ( n
1 ) = 2 ] :
E n t r y / E x i t P a r a m e t e r s
1 . n | i n t e g e r . T h i s s h o u l d b e a n o d d n u m b e r a n d d e c l a r e d a s a
p a r a m e t e r .
2 . a ( i ) | r e a l . T h e s e a r e t h e c o e c i e n t s i n t h e s e r i e s w h i c h h a v e
t o b e p r o v i d e d b y t h e u s e r .
3 . b ( i , j , k ) | r e a l a r r a y . O n e x i t w i l l c o r r e s p o n d t o t h e
k
o f
t h e [ i = j ] P a d e a p p r o x i m a n t .
4 . g ( i , j , k ) | r e a l a r r a y . O n e x i t w i l l c o r r e s p o n d t o t h e
k
o f
t h e [ i = j ] P a d e a p p r o x i m a n t | s e e L o n g m a n [ 7 ]
T h e p r o g r a m b e l o w c o m p u t e s t h e d i a g o n a l t e r m s i n t h e P a d e t a b l e
f o r t h e f u n c t i o n s
f ( s ) o f C h a p t e r 6 , x
3 .
c R e q u i r e s t h e c o e c i e n t s a
i
i n t h e T a y l o r s e r i e s e x p a n s i o n
p a r a m e t e r ( n = 1 1 )
r e a l a ( 0 : n ) , g ( 0 : n , 0 : n , 0 : n ) , b ( 0 : n , 0 : n , 0 : n ) , s i g
r e a d ( 5 , * ) s i g
a ( 0 ) = 1 . 0
a ( 1 ) = - 1 . 0
a ( 2 ) = ( 1 + s i g ) / 2
s i g = s i g / 2
d o i = 3 , n - 1
c a l l c o e ( i , s i g , a )
w r i t e ( 6 , * ) i , a ( i )
e n d d o
c a l l l o n g p a d ( n , a , b , g )
m = ( n - 1 ) / 2
5
-
7/27/2019 Prog Numerically
6/57
d o k = 0 , m
w r i t e ( 6 , * ) g ( m , m , k ) , b ( m , m , k )
e n d d o
s t o p
e n d
s u b r o u t i n e l o n g p a d ( n , a , b , g )
r e a l a ( 0 : n ) , g ( 0 : n , 0 : n , 0 : n ) , b ( 0 : n , 0 : n , 0 : n ) , x , c ( 0 : n )
i f ( n . l e . 2 5 ) g o t o 1 0 0
w r i t e ( 6 , * ) ` n t o o l a r g e ( > 2 5 ) '
s t o p
1 0 0 c ( 0 ) = 1 . 0
c ( 1 ) = - a ( 1 ) / a ( 0 )
d o i = 2 , n - 1
x = a ( i )
d o j = 1 , i - 1
x = x + c ( j ) * a ( i - j )
e n d d o
c ( i ) = - x / a ( 0 )
w r i t e ( 6 , * ) i , c ( i )
e n d d o
d o j = 0 , n - 1
d o k = 0 , j
g ( j , 0 , k ) = c ( k )
b ( 0 , j , k ) = a ( k )
e n d d o
e n d d o
d o i = 1 , n - 1
m = n - i
d o j = 0 , m
b ( i , j , 0 ) = a ( 0 )
e n d d o
e n d d o
d o j = 1 , n - 1
m = n - j
d o i = 0 , m
6
-
7/27/2019 Prog Numerically
7/57
g ( i , j , 0 ) = 1 . 0
e n d d o
e n d d o
d o i = 1 , n - 2
m = n - i
d o j = 1 , m
d o k = 1 , j
x = b ( i - 1 , j , k - 1 ) * b ( i - 1 , j + 1 , j + 1 ) / b ( i - 1 , j , j )
b ( i , j , k ) = b ( i - 1 , j + 1 , k ) - x
e n d d o
e n d d o
e n d d o
d o j = 1 , n - 2
m = n - j
d o i = 1 , m
d o k = 1 , i
x = g ( i , j - 1 , k - 1 ) * g ( i + 1 , j - 1 , i + 1 ) / g ( i , j - 1 , i )
g ( i , j , k ) = g ( i + 1 , j - 1 , k ) - x
e n d d o
e n d d o
e n d d o
r e t u r n
e n d
s u b r o u t i n e f a c t ( k , f a c )
r e a l f a c
f a c = 1 . 0
i f ( k . e q . 0 ) g o t o 1 0 0
d o j = 1 , k
f a c = j * f a c
e n d d o
1 0 0 r e t u r n
e n d
s u b r o u t i n e c o e ( k , s i g , a )
r e a l c ( k ) , a ( k ) , y , s i g
y = 1 . 0
7
-
7/27/2019 Prog Numerically
8/57
c a l l f a c t ( k , f a c )
c ( 0 ) = y / f a c
c a l l f a c t ( k - 2 , f a c )
c ( 1 ) = y / f a c
i f ( k . g t . 3 ) g o t o 1 0 0
c ( 2 ) = ( 3 * y ) / 2
g o t o 2 0 0
1 0 0 d o i = 2 , k - 1
c ( i ) = y
d o j = k - i + 2 , k + i - 2 , 2
c ( i ) = j * c ( i )
e n d d o
c a l l f a c t ( k - i - 1 , f a c )
c ( i ) = c ( i ) / f a c
c a l l f a c t ( i , f a c )
c ( i ) = c ( i ) / f a c
e n d d o
2 0 0 a ( k ) = c ( k - 1 )
d o i = k - 2 , 0 , - 1
a ( k ) = a ( k ) * s i g + c ( i )
e n d d o
d o i = 1 , k
a ( k ) = - 1 . 0 * a ( k )
e n d d o
r e t u r n
e n d
8
-
7/27/2019 Prog Numerically
9/57
P r o g r a m f o r S i d i ' s m e t h o d o f L a p l a c e I n v e r s i o n
T h i s p r o g r a m i s b a s e d o n t h e v a r i a t i o n o f S i d i ' s m e t h o d g i v e n i n
x5 . 3 . T h e u s e r h a s t o s u p p l y t w o f u n c t i o n s u b r o u t i n e s f u n 1 ( c , x , t , f )
a n d f u n 2 ( c , x , t , f ) . T h e f o r m e r w i l l w o r k o u t
f ( s ) f o r g i v e n t a n d
p l a c e i t i n l o c a t i o n f , w h e r e s = c + i t . T h e l a t t e r l i k e w i s e w o r k s o u t
a
f ( s ) . N u m e r i c a l i n t e g r a t i o n i s p e r f o r m e d b y m e a n s o f a G a u s s 6 4 -
p o i n t q u a d r a t u r e f o r m u l a f o r
1
0
g ( x ) d x =
6 4
1
w
i
g ( x
i
) . F o r s m a l l e r
t i t m i g h t b e p r e f e r a b l e t o u s e a h i g h e r o r d e r G a u s s i a n q u a d r a t u r e
f o r m u l a o r a n a d a p t i v e a p p r o a c h b a s e d o n t h e 6 4 - p o i n t f o r m u l a .
E n t r y / E x i t P a r a m e t e r s .
1 . t | a r e a l n u m b e r c o r r e s p o n d i n g t o t h e v a l u e a t w h i c h t h e i n -
v e r s e t r a n s f o r m i s r e q u i r e d .
2 . c | a r e a l p a r a m e t e r w h i c h h a s b e e n s e t a t 0 . 2 b u t m u s t b e
i n c r e a s e d t o e n s u r e t h a t c i s g r e a t e r t h a n t h e r e a l p a r t o f a n y s i n -
g u l a r i t y o f
f ( s ) .
3 . x | a r e a l v a r i a b l e w h i c h e q u a l s a
s . T h i s i s r e q u i r e d f o r t h e
f u n c t i o n s u b r o u t i n e s f u n 1 a n d f u n 2 .
4 . n | i n t e g e r , t h e n u m b e r o f p o i n t s u s e d b y t h e G a u s s q u a d r a t u r e
r u l e . T h e d e f a u l t v a l u e i s 6 4 . A c h a n g e i n n w o u l d r e q u i r e a n u p d a t e
o f t h e s u b r o u t i n e g a u s s ( n , x , w ) .
5 . m | i n t e g e r , t h e n u m b e r o f t e r m s u s e d i n t h e m W - e x t r a p o l a -
t i o n . T h e d e f a u l t v a l u e i s 4 0 b u t t h i s c a n b e a l t e r e d a s l o n g a s i t i s
n o t t o o d r a s t i c a l l y d i e r e n t .
6 . a | r e a l , o n e x i t s h o u l d b e a g o o d a p p r o x i m a t i o n t o t h e i n v e r s e
t r a n s f o r m i f i t a g r e e s w i t h b .
7 . b | r e a l , o n e x i t s h o u l d b e a g o o d a p p r o x i m a t i o n t o t h e i n v e r s e
t r a n s f o r m i f i t a g r e e s w i t h a .
I f a a n d b a r e n o t e q u a l t h e n t h e c a l c u l a t i o n s h o u l d b e r e p e a t e d w i t h
t h e \ c " q u a l i f y i n g t h e p r i n t i n s t r u c t i o n s u p p r e s s e d i n t h e s u b r o u t i n e
e x t r a p . I f t h e s u c c e s s i v e i t e r a t i o n s s h o w s o m e c o n s i s t e n c y f o r a , s a y ,
t h e n a c a n b e a c c e p t e d a s a n a p p r o x i m a t i o n t o t h e t r a n s f o r m . ( S e e
C h a p t e r 1 0 ) .
p a r a m e t e r ( n = 6 4 , m = 4 0 )
r e a l x ( n ) , w ( n ) , a , b , t , c , p i , x a , x b , g a , g b
r e a l p s i a ( 0 : m ) , f a ( 0 : m ) , z a ( 0 : m + 1 )
r e a l p s i b ( 0 : m ) , f b ( 0 : m ) , z b ( 0 : m + 1 )
p a r a m e t e r ( c = 0 . 2 )
9
-
7/27/2019 Prog Numerically
10/57
w r i t e ( 6 , * ) ` n = ' , n , ` m = ' , m , ` c = ' , c
p i = a c o s ( - 1 . 0 )
r e a d ( 5 , * ) t
d o i = 1 , m + 1
z a ( i - 1 ) = ( i * p i ) / t
z b ( i - 1 ) = z a ( i - 1 )
e n d d o
z a ( 0 ) = z a ( 0 ) / 2
c a l l g a u s s ( n , x , w )
f a ( 0 ) = 0
k = 0
p s i a ( k ) = 0
d o i = 1 , n
x a = k * z a ( 0 ) + z a ( 0 ) * x ( i )
c a l l f u n 1 ( c , x a , t , g a )
p s i a ( k ) = p s i a ( k ) + w ( i ) * g a
e n d d o
p s i a ( k ) = ( p i * p s i a ( k ) ) / 2
f b ( 0 ) = 0
p s i b ( k ) = 0
d o i = 1 , n
x b = k * z b ( 0 ) + z b ( 0 ) * x ( i )
c a l l f u n 2 ( c , x b , t , g b )
p s i b ( k ) = p s i b ( k ) + w ( i ) * g b
e n d d o
p s i b ( k ) = p i * p s i b ( k )
c w r i t e ( 6 , * ) k , p s i a ( k ) , p s i b ( k )
d o k = 1 , m
p s i a ( k ) = 0
p s i b ( k ) = 0
d o i = 1 , n
x a = ( 2 * k - 1 ) * z a ( 0 ) + 2 * z a ( 0 ) * x ( i )
x b = k * z b ( 0 ) + z b ( 0 ) * x ( i )
c a l l f u n 1 ( c , x a , t , g a )
p s i a ( k ) = p s i a ( k ) + w ( i ) * g a
c a l l f u n 2 ( c , x b , t , g b )
1 0
-
7/27/2019 Prog Numerically
11/57
p s i b ( k ) = p s i b ( k ) + w ( i ) * g b
e n d d o
p s i a ( k ) = p s i a ( k ) * p i
f a ( k ) = f a ( k - 1 ) + p s i a ( k - 1 )
p s i b ( k ) = p s i b ( k ) * p i
f b ( k ) = f b ( k - 1 ) + p s i b ( k - 1 )
c w r i t e ( 6 , * ) f a ( k ) , f b ( k )
e n d d o
c a l l e x t r a p ( m , p s i a , f a , z a , a )
a = 2 * a / p i
a = ( a * e x p ( c * t ) ) / t
w r i t e ( 6 , * ) ` a = ' , a
c a l l e x t r a p ( m , p s i b , f b , z b , b )
b = 2 * b / p i
b = ( b * e x p ( c * t ) ) / t
w r i t e ( 6 , * ) ` b = ' , b
s t o p
e n d
s u b r o u t i n e f u n 1 ( c , x , t , f )
c T h i s s u b r o u t i n e e v a l u a t e s
e
4
p
s
r e a l c , x , t , f , u , v
c o m p l e x s , w
s = c m p l e x ( c , x )
w = - 4 . 0 * s q r t ( s )
c s q r t d e n o t e s c o m p l e x s q u a r e r o o t
w = e x p ( w )
f = r e a l ( w )
f = f * c o s ( t * x )
r e t u r n
e n d
s u b r o u t i n e f u n 2 ( c , x , t , f )
c T h i s s u b r o u t i n e e v a l u a t e s a
e
4
p
s
r e a l c , x , t , f , u , v
c o m p l e x s , w
s = c m p l e x ( c , x )
w = - 4 . 0 * s q r t ( s )
1 1
-
7/27/2019 Prog Numerically
12/57
c s q r t d e n o t e s c o m p l e x s q u a r e r o o t
w = e x p ( w )
f = i m a g ( w )
f = - f * s i n ( t * x )
r e t u r n
e n d
s u b r o u t i n e e x t r a p ( m , p s i , f , z , a )
r e a l p s i ( 0 : m ) , f ( 0 : m ) , z ( 0 : m ) , p ( 0 : m ) , q ( 0 : m ) , a , b
d o j = 0 , m
p ( j ) = f ( j ) / p s i ( j )
q ( j ) = 1 . 0 / p s i ( j )
e n d d o
d o k = 1 , m
d o j = 0 , m - k
p ( j ) = p ( j + 1 ) - p ( j )
q ( j ) = q ( j + 1 ) - q ( j )
b = ( 1 . 0 / z ( j + k ) ) - ( 1 . 0 / z ( j ) )
p ( j ) = p ( j ) / b
q ( j ) = q ( j ) / b
e n d d o
a = p ( 0 ) / q ( 0 )
c w r i t e ( 6 , * ) a
c t h e w r i t e s t a t e m e n t i n p r e v i o u s l i n e s h o u l d b e r e i n s t a t e d
c i f t h e r e i s a s i g n i c a n t d i e r e n c e b e t w e e n t h e
c e s t i m a t e s ` a ' a n d ` b ' f o r t h e L a p l a c e t r a n s f o r m
e n d d o
r e t u r n
e n d
s u b r o u t i n e g a u s s ( n , x , w )
r e a l x ( n ) , w ( n )
x ( 1 ) = 0 . 9 9 9 6 5 2 5 2 0 8 6 7 8 8 6 0 6 9 7 2 8 4 5 2 8 1 2 1 7 2 8 1 8
w ( 1 ) = 0 . 0 0 0 8 9 1 6 4 0 3 6 0 8 4 8 2 1 6 4 7 3 6 4 8 0 3 9 5 7 2 4 8 9 8 3 4 4
x ( 2 ) = 0 . 9 9 8 1 7 0 0 5 8 3 8 5 9 7 7 6 3 9 6 7 3 4 6 2 2 5 0 3 3 8 2 0 0
w ( 2 ) = 0 . 0 0 2 0 7 3 5 1 6 6 3 0 2 8 1 2 3 3 8 1 7 6 4 3 7 6 7 8 6 4 2 7 6 5 3 0
x ( 3 ) = 0 . 9 9 5 5 0 6 6 8 5 7 3 8 3 7 2 1 6 0 3 6 9 6 9 1 1 9 1 7 2 1 6 5 2
w ( 3 ) = 0 . 0 0 3 2 5 2 2 2 8 9 8 4 4 8 9 1 8 1 4 2 8 0 5 8 6 8 0 1 9 9 9 8 9 5 3 1
x ( 4 ) = 0 . 9 9 1 6 6 8 1 2 6 9 4 2 3 1 2 9 5 8 4 6 5 6 4 9 6 5 1 0 7 8 4 1 6
1 2
-
7/27/2019 Prog Numerically
13/57
w ( 4 ) = 0 . 0 0 4 4 2 3 3 7 9 9 1 3 1 8 1 9 7 3 8 6 1 5 1 5 4 5 7 3 2 9 8 6 4 3 1 1
x ( 5 ) = 0 . 9 8 6 6 6 3 4 1 3 8 9 4 9 5 5 4 8 1 8 7 0 9 2 6 7 5 3 6 7 6 1 3 6
w ( 5 ) = 0 . 0 0 5 5 8 4 0 6 9 7 3 0 0 6 5 5 6 4 4 0 9 2 9 5 2 4 6 5 0 9 6 0 4 2 8 9
x ( 6 ) = 0 . 9 8 0 5 0 4 3 9 9 8 2 6 0 2 6 8 5 9 4 5 9 3 0 7 0 6 0 9 4 8 5 7 9
w ( 6 ) = 0 . 0 0 6 7 3 1 5 2 3 9 4 8 3 5 9 3 2 1 2 9 9 0 3 0 3 8 3 3 4 2 9 7 8 2 1 8
x ( 7 ) = 0 . 9 7 3 2 0 5 6 8 7 4 2 9 2 0 1 4 0 8 0 3 1 2 4 0 7 4 5 6 7 3 6 3 2
w ( 7 ) = 0 . 0 0 7 8 6 3 0 1 5 2 3 8 0 1 2 3 5 9 6 6 0 9 8 2 9 9 7 6 4 8 7 6 9 6 7 3
x ( 8 ) = 0 . 9 6 4 7 8 4 5 8 6 0 6 5 9 6 9 7 8 7 9 1 0 7 4 5 0 7 7 2 7 9 6 1 3
w ( 8 ) = 0 . 0 0 8 9 7 5 8 5 7 8 8 7 8 4 8 6 7 1 5 4 2 5 2 2 6 5 1 0 0 0 5 5 9 2 2 4
x ( 9 ) = 0 . 9 5 5 2 6 1 0 6 8 5 3 9 2 5 1 4 0 2 8 7 8 1 9 0 3 3 4 0 0 4 1 6 5
w ( 9 ) = 0 . 0 1 0 0 6 7 4 1 1 5 7 6 7 6 5 1 0 4 6 8 6 1 7 0 1 5 8 3 6 4 2 7 1 8 0
x ( 1 0 ) = 0 . 9 4 4 6 5 7 7 2 2 9 9 7 5 5 7 0 5 2 9 2 6 7 0 2 0 1 9 1 3 6 4 2 6
w ( 1 0 ) = 0 . 0 1 1 1 3 5 0 8 6 9 0 4 1 9 1 6 2 7 0 7 9 6 4 9 1 6 5 1 9 2 0 7 7 2 7
x ( 1 1 ) = 0 . 9 3 2 9 9 9 6 9 9 0 7 7 0 4 6 4 0 9 8 8 0 3 9 1 6 9 2 5 3 5 0 7 9
w ( 1 1 ) = 0 . 0 1 2 1 7 6 3 5 1 2 8 4 3 5 5 4 3 6 6 6 9 0 8 8 7 7 5 2 0 4 5 3 4 3 0
x ( 1 2 ) = 0 . 9 2 0 3 1 4 6 4 8 1 2 6 2 9 0 1 8 1 3 7 5 8 4 5 7 7 2 3 4 7 9 3 7
w ( 1 2 ) = 0 . 0 1 3 1 8 8 7 3 4 8 5 7 5 2 7 3 2 9 3 3 5 8 4 5 8 9 6 3 1 2 6 1 2 8 0
x ( 1 3 ) = 0 . 9 0 6 6 3 2 6 5 7 5 6 1 3 9 8 7 7 9 8 7 0 9 6 1 6 6 9 0 4 3 1 5 2
w ( 1 3 ) = 0 . 0 1 4 1 6 9 8 3 6 3 0 7 1 2 9 7 4 1 6 1 3 7 5 5 6 5 2 6 0 0 1 1 8 6 6
x ( 1 4 ) = 0 . 8 9 1 9 8 6 1 7 9 4 7 1 6 7 0 7 0 3 8 0 5 1 1 0 2 6 2 6 0 6 8 8 4
w ( 1 4 ) = 0 . 0 1 5 1 1 7 3 2 8 5 3 6 2 0 1 2 3 9 4 3 3 9 8 7 0 2 9 9 0 9 7 7 4 2 1
x ( 1 5 ) = 0 . 8 7 6 4 0 9 9 5 3 6 3 0 2 6 5 9 4 8 3 0 5 9 3 1 8 8 7 4 4 2 8 4 7
w ( 1 5 ) = 0 . 0 1 6 0 2 8 9 6 4 1 7 7 4 2 5 7 7 6 7 9 2 7 3 3 7 5 2 1 7 3 9 4 9 2 2
x ( 1 6 ) = 0 . 8 5 9 9 4 0 9 2 5 0 8 5 8 0 5 4 1 3 4 2 4 4 7 0 1 0 8 9 1 5 9 7 4
w ( 1 6 ) = 0 . 0 1 6 9 0 2 5 8 0 9 1 8 5 7 0 8 0 4 6 9 5 7 8 2 7 4 1 0 5 5 3 6 2 6 3
x ( 1 7 ) = 0 . 8 4 2 6 1 8 1 5 6 5 2 7 1 1 6 6 2 1 2 8 1 7 7 9 1 8 5 5 1 5 6 8 8
w ( 1 7 ) = 0 . 0 1 7 7 3 6 1 0 6 6 2 8 4 4 1 1 9 1 9 0 5 3 4 6 5 7 3 3 5 7 6 2 3 1 1
x ( 1 8 ) = 0 . 8 2 4 4 8 2 7 3 5 6 2 7 3 2 8 6 6 9 9 2 8 8 8 0 6 1 5 9 9 6 7 0 2
w ( 1 8 ) = 0 . 0 1 8 5 2 7 5 6 4 2 7 0 1 2 0 0 2 3 0 2 0 2 0 7 5 5 0 9 0 4 7 9 1 6 5
x ( 1 9 ) = 0 . 8 0 5 5 7 7 6 7 7 5 8 6 1 9 6 6 2 5 1 2 4 4 2 6 4 8 5 5 0 9 2 7 4
w ( 1 9 ) = 0 . 0 1 9 2 7 5 0 7 6 5 8 9 3 0 7 8 1 4 5 6 4 4 8 1 2 4 8 4 7 3 4 0 4 5 5
x ( 2 0 ) = 0 . 7 8 5 9 4 7 8 2 3 1 0 1 3 1 7 0 1 7 1 4 1 9 3 9 0 5 8 3 2 9 5 9 4
w ( 2 0 ) = 0 . 0 1 9 9 7 6 8 7 0 5 6 6 3 6 0 1 7 0 6 9 3 3 2 8 4 6 3 0 6 4 1 6 8 0 0
x ( 2 1 ) = 0 . 7 6 5 6 3 9 7 3 2 0 0 9 9 4 7 2 7 2 8 2 9 0 0 6 9 5 1 7 7 2 2 2 8
w ( 2 1 ) = 0 . 0 2 0 6 3 1 2 8 1 6 2 1 3 1 1 7 6 4 3 0 5 0 7 8 1 4 8 7 3 6 8 1 8 9 8
x ( 2 2 ) = 0 . 7 4 4 7 0 1 5 7 2 8 5 3 5 2 6 4 7 8 7 3 9 2 6 3 1 5 3 5 1 0 9 6 1
w ( 2 2 ) = 0 . 0 2 1 2 3 6 7 5 7 5 6 1 8 2 6 7 9 4 5 0 3 6 6 9 8 8 3 9 5 4 4 0 8 6 9
x ( 2 3 ) = 0 . 7 2 3 1 8 3 0 0 8 6 2 6 7 3 2 0 4 3 9 9 2 4 7 3 8 5 7 3 7 9 4 5 8
w ( 2 3 ) = 0 . 0 2 1 7 9 1 8 6 2 2 6 4 6 6 1 7 2 6 6 8 8 4 1 3 9 3 0 4 8 6 8 6 8 7 5
1 3
-
7/27/2019 Prog Numerically
14/57
x ( 2 4 ) = 0 . 7 0 1 1 3 5 0 7 8 9 8 1 9 9 5 8 0 1 8 4 7 8 8 3 3 8 5 6 3 0 0 7 9
w ( 2 4 ) = 0 . 0 2 2 2 9 5 2 7 9 0 8 1 8 7 8 2 8 1 5 3 0 0 6 7 3 5 5 0 1 5 4 7 2 4 1
x ( 2 5 ) = 0 . 6 7 8 6 1 0 0 7 9 1 6 8 8 3 4 0 5 7 9 7 5 2 2 1 3 0 7 5 2 3 1 0 1
w ( 2 5 ) = 0 . 0 2 2 7 4 5 8 1 3 9 6 3 7 0 9 0 7 2 2 3 9 8 8 5 4 9 8 4 8 5 6 3 4 5 6
x ( 2 6 ) = 0 . 6 5 5 6 6 1 4 3 5 9 9 5 1 0 5 4 7 8 0 7 8 7 5 6 3 4 9 2 8 0 0 7 8
w ( 2 6 ) = 0 . 0 2 3 1 4 2 3 9 8 2 9 0 6 5 7 2 0 8 6 4 7 9 7 6 6 2 4 6 1 6 1 3 0 6 2
x ( 2 7 ) = 0 . 6 3 2 3 4 3 5 8 1 1 0 4 3 8 3 7 0 8 1 8 6 9 8 2 0 8 6 2 5 5 0 1 0
w ( 2 7 ) = 0 . 0 2 3 4 8 4 0 9 1 4 0 8 1 0 5 0 0 8 6 6 2 6 6 3 1 4 2 8 7 7 2 9 0 5 6
x ( 2 8 ) = 0 . 6 0 8 7 1 1 8 2 1 8 7 0 0 0 3 5 4 2 0 7 4 8 2 4 3 7 4 4 9 4 4 1 1
w ( 2 8 ) = 0 . 0 2 3 7 7 0 0 8 2 8 5 7 4 1 5 1 5 4 3 3 1 1 4 1 1 0 3 4 7 2 1 1 1 6 0
x ( 2 9 ) = 0 . 5 8 4 8 2 2 2 1 0 2 1 1 9 9 6 4 0 9 0 1 8 6 5 6 8 1 4 8 7 4 1 3 5
w ( 2 9 ) = 0 . 0 2 3 9 9 9 6 9 4 2 9 8 2 2 9 1 5 3 8 6 4 0 6 3 0 8 9 9 3 5 6 7 3 0 1
x ( 3 0 ) = 0 . 5 6 0 7 3 1 4 0 9 6 4 8 0 6 0 2 7 7 2 3 5 1 8 8 2 3 1 7 4 6 1 2 4
w ( 3 0 ) = 0 . 0 2 4 1 7 2 3 8 1 1 1 7 4 0 1 4 7 8 5 8 4 8 8 4 7 6 3 5 7 9 0 0 8 9 0
x ( 3 1 ) = 0 . 5 3 6 4 9 6 5 6 0 8 9 3 8 9 9 5 1 9 7 2 4 7 7 1 4 7 0 9 7 0 1 6 9
w ( 3 1 ) = 0 . 0 2 4 2 8 7 7 3 3 7 2 0 7 5 1 7 1 3 4 6 7 3 9 9 5 3 3 3 9 1 9 8 9 0 5
x ( 3 2 ) = 0 . 5 1 2 1 7 5 1 4 6 3 3 1 7 1 2 2 1 6 2 5 4 4 7 7 9 2 1 4 2 6 8 5 8
w ( 3 2 ) = 0 . 0 2 4 3 4 5 4 7 8 5 0 4 5 6 9 8 6 0 1 9 1 6 8 2 6 9 5 3 6 7 3 7 4 9 7
j = n / 2
d o i = 1 , j
x ( j + i ) = 1 - x ( j - i + 1 )
w ( j + i ) = w ( j - i + 1 )
e n d d o
r e t u r n
e n d
1 4
-
7/27/2019 Prog Numerically
15/57
I m p l e m e n t a t i o n o f t h e d
( m )
- t r a n s f o r m a t i o n v i a t h e W
( m )
-
A l g o r i t h m
T h e W
( m )
- A l g o r i t h m i s a w a y o f i m p l e m e n t i n g t h e d
( m )
t r a n s f o r m a -
t i o n | s e e x
1 2 . 4 , F o r d a n d S i d i [ 3 ] a n d S i d i [ 1 0 ] .
E n t r y / E x i t P a r a m e t e r s .
1 . c f ( I ) | r e a l a r r a y w h i c h c o n t a i n t h e e l e m e n t s o f t h e s e r i e s t o
b e s u m m e d . I n t h e p r o g r a m w h i c h f o l l o w s t h e p r o g r a m i s a p p l i e d
t o t w o c a s e s o f s e r i e s s u m m a t i o n w h e r e t h e g e n e r a l t e r m s a r e r e -
s p e c t i v e l y ( 1 = n
3 = 2
+ 2 = n
2
) a n d ( c o s n ) = n a n d a l s o t o n d i n g t h e
l i m i t o f t h e P o s t - W i d d e r s e q u e n c e s r e l a t i n g t o
f ( s ) = 1 = ( s + 1 ) a n d
f ( s ) = 1 =
p
( s
2
+ 1 ) ( s e e x
8 . 1 ) .
2 m | i n t e g e r . m s p e c i e s t h e t r a n s f o r m a t i o n b e i n g u s e d a n d
m u s t l i e b e t w e e n 1 a n d m d i m ( m d i m i s u s u a l l y c h o s e n t o b e 6 ) . F o r
t h e t w o s e r i e s c o n s i d e r e d o n e s h o u l d t a k e m = 2 a n d w e c a n t a k e m = 1
f o r t h e P o s t - W i d d e r a p p l i c a t i o n s .
3 . l m a x | i n t e g e r w h i c h s p e c i e s t h e n u m b e r o f t e r m s o f t h e
s e r i e s t o b e c o m p u t e d a n d w h i c h m u s t b e l e s s t h a n l d i m .
4 . k a p p a | r e a l . T h i s m u s t b e !
1 : 0 a n d i s r e q u i r e d f o r a r i t h -
m e t i c p r o g r e s s i o n s a m p l i n g ( a p s ) .
5 . s i g m a | r e a l . T h i s m u s t b e !
1 . 0 a n d i s r e q u i r e d f o r g e o m e t r i c
p r o g r e s s i o n s a m p l i n g . s i g m a m u s t b e 1 f o r a p s t o b e i n v o k e d
6 . e p s d i v | r e a l . A s m a l l n u m b e r w h i c h i s u s e d i n t e s t i n g t h e
m a g n i t u d e o f t h e a p p r o x i m a t i o n a p p r o x ( j , p ) .
7 . a p p r o x ( j , p ) | r e a l a r r a y w i t h 0
j
l d i m , 0
p
l d i m .
T h e s e a p p r o x i m a t i o n s a r e r e t u r n e d b y t h e d
( m )
t r a n s f o r m a t i o n
8 . c f ( I ) | a f u n c t i o n s u b p r o g r a m w h i c h h a s t o b e s u p p l i e d b y
t h e u s e r . I n t h e c a s e o f t h e P o s t - W i d d e r a p p l i c a t i o n s t h e v a l u e o f t
r e q u i r e d i n t h e L a p l a c e i n v e r s i o n m u s t a l s o b e s u p p l i e d .
9 . n p | i n t e g e r g i v i n g t h e s p e c i c s e q u e n c e w h o s e l i m i t i s r e -
q u i r e d .
c I m p l e m e n t a t i o n o f t h e F o r d - S i d i W
( m )
- A l g o r i t h m
i m p l i c i t r e a l ( a - h , o - z )
p a r a m e t e r ( m d i m = 6 , l d i m = 5 0 , e p s d i v = 1 0
7 7
)
p a r a m e t e r ( n p = 2 , m = 2 , l m a x = 2 0 , i n c r = 1 , s i g m a = 1 . 3 )
d i m e n s i o n g ( m d i m ) , p s i a i ( 0 : l d i m , 2 , 2 ) , b i g p s i ( 0 : l d i m , m d i m , 2 )
d i m e n s i o n p s i g ( 0 : m d i m , 2 : m d i m + 1 , 2 ) , a p p r o x ( 0 : l d i m , 0 : l d i m )
e x t e r n a l m l t a g
1 5
-
7/27/2019 Prog Numerically
16/57
-
7/27/2019 Prog Numerically
17/57
-
7/27/2019 Prog Numerically
18/57
6 0 c o n t i n u e
d o 7 0 p = 1 , l
j = l - p
i f ( a b s ( p s i a i ( p , 2 , t e m p ) ) . g e . e p s d i v ) t h e n
a p p r o x ( j , p ) = p s i a i ( p , 1 , t e m p ) / p s i a i ( p , 2 , t e m p )
e l s e
a p p r o x ( j , p ) = 1 0
7 5
w r i t e ( 6 , 1 0 1 ) j , p
1 0 1 f o r m a t ( 1 x , ` a p p r o x ( ' , i 3 , ` , ' , i 3 , ` ) i s n o t d e n e d ' )
e n d i f
7 0 c o n t i n u e
j j = c u r
c u r = t e m p
t e m p = j j
8 0 c o n t i n u e
r e t u r n
e n d
s u b r o u t i n e m l t a g ( m , l , t , a , g )
i m p l i c i t r e a l ( a - h , o - z )
r e a l k a p p a
p a r a m e t e r ( l d i m = 5 0 )
d i m e n s i o n g ( m )
c o m m o n / s i g k a p / s i g m a , k a p p a
c o m m o n / r l / i r l ( 0 : l d i m )
i f ( s i g m a . e q . 1 . 0 ) t h e n
l s u m p = k a p p a * l + 1 0
1 0
l s u m = k a p p a * ( l + 1 ) + 1 0
1 0
e n d i f
i f ( s i g m a . g t . 1 . 0 ) t h e n
i f ( l . e q . 0 ) t h e n
l s u m p = 0
l s u m = 1
e l s e
l s u m = 1
l s u m p = 1
d o i = 1 , l
d o i = 0 , l s u m
1 8
-
7/27/2019 Prog Numerically
19/57
i r = s i g m a * l s u m + 1 0
1 0
i f ( i r . l e . l s u m ) t h e n
l s u m = l s u m + 1
e l s e
l s u m = i r
e n d i f
i f ( i . e q . l - 1 ) l s u m p = l s u m
e n d d o
e n d i f
e n d i f
i r l ( l ) = l s u m
i f ( l . e q . 0 ) a = 0
d o i = l s u m p + 1 , l s u m
a = a + c f ( i )
e n d d o
p = l s u m
t = 1 . 0 / p
d o k = 1 , m
g ( k ) = c f ( l s u m + k - 1 )
e n d d o
d o i = 2 , m
d o j = m , i , - 1
g ( j ) = g ( j ) - g ( j - 1 )
e n d d o
e n d d o
d o k = 1 , m
g ( k ) = g ( k ) * p
p = p * l s u m
e n d d o
d o k = 1 , m / 2
s t = g ( k )
g ( k ) = g ( m - k + 1 )
g ( m - k + 1 ) = s t
e n d d o
r e t u r n
e n d
f u n c t i o n c f ( I )
i m p l i c i t r e a l ( a - h , o - z )
1 9
-
7/27/2019 Prog Numerically
20/57
c o m m o n / n p / n p / t h e t a / t h e t a
a = o a t ( i )
i f ( n p . e q . 1 ) c f = 1 . 0 / a * * 1 . 5 + 2 . 0 / a * * 2
i f ( n p . e q . 2 ) c f = c o s ( a * t h e t a ) / a
i f ( n p . e q . 3 ) t h e n
t = 1 0 . 0
c v a l u e o f t f o r w h i c h i n v e r s e t r a n s f o r m i s r e q u i r e d
b = - ( a + 1 . 0 )
a 1 = a - 1
b 1 = - ( a + 1 )
i f ( i . g t . 1 ) g o t o 1 5 0
c f = ( 1 . 0 + ( t / a ) ) * * b
g o t o 1 0 0
1 5 0 c f = ( 1 + ( t / a ) ) * * b - ( 1 + ( t / a 1 ) ) * * b 1
1 0 0 e n d i f
i f ( n p . e q . 4 ) t h e n
t = 2 . 0
s = a / t
v = s * s + 1
w = 1 . 0 / s q r t ( v )
z = - ( s * w ) / v
s 1 = ( a - 1 ) / t
v 1 = s 1 * s 1 + 1
w 1 = 1 . 0 / s q r t ( v 1 )
z 1 = - ( s 1 * w 1 ) / v 1
i f ( i . g t . 1 ) g o t o 2 0 0
c f = - s * s * z
g o t o 2 5 0
2 0 0 b = 1 . 0
d o j = 1 , i - 1
b = j * b
e n d d o
d o j = 2 , i
y = - ( ( 2 * j - 1 ) * s * z + ( j - 1 ) * ( j - 1 ) * w ) / v
w = z
z = y
e n d d o
i f ( i . g t . 2 ) g o t o 3 0 0
y 1 = z 1
2 0
-
7/27/2019 Prog Numerically
21/57
g o t o 3 5 0
3 0 0 d o j = 2 , i - 1
y 1 = - ( ( 2 * j - 1 ) * s 1 * z 1 + ( j - 1 ) * ( j - 1 ) * w 1 ) / v 1
w 1 = z 1
z 1 = y 1
e n d d o
3 5 0 c f = ( - ( ( - s ) * * ( a + 1 ) ) / ( a * b ) ) * y + ( ( - s 1 ) * * a / b ) * y 1
2 5 0 e n d i f
r e t u r n
e n d
2 1
-
7/27/2019 Prog Numerically
22/57
P r o g r a m f o r C r u m p ' s M e t h o d
C r u m p ' s m e t h o d c o n s i s t s o f t h e a p p l i c a t i o n o f t h e e p s i l o n a l g o r i t h m
t o t h e s u m m a t i o n i n D u r b i n ' s F o u r i e r s e r i e s a p p r o x i m a t i o n
f ( t )%
e
c t
T
4
1
2
` f
f ( c )g
+
I
k = 1
&
f
c +
i k
T
'
c o s
k t
T
I
k = 1
a
&
f
c +
i k
T
'
s i n
k t
T
5
S e e r e f e r e n c e , C r u m p [ 2 ] .
E n t r y / E x i t p a r a m e t e r s
1 . F U N | a s u b r o u t i n e w h i c h e v a l u a t e s t h e r e a l a n d i m a g i n a r y
p a r t s o f
f ( s ) ( s e e s a m p l e p r o g r a m ) . T h i s m u s t b e d e c l a r e d a s e x -
t e r n a l i n t h e p r o g r a m w h i c h c a l l s C 0 6 L A F .
2 . n | i n t e g e r . n s i g n i e s t h e n u m b e r o f p o i n t s a t w h i c h t h e
i n v e r s e L a p l a c e t r a n s f o r m i s r e q u i r e d .
3 . t ( n ) | r e a l a r r a y . O n e n t r y 0 : 0
t ( 1 ) < t ( 2 )
-
7/27/2019 Prog Numerically
23/57
a l p h a b .
1 3 . n f e v a l | i n t e g e r . O n e x i t r e c o r d s t h e n u m b e r o f c a l l s m a d e
t o t h e s u b r o u t i n e F U N .
1 4 . w o r k ( 4 * m x t e r m + 2 ) | r e a l a r r a y . u s e d a s w o r k i n g s p a c e .
1 5 . i f a i l | i n t e g e r . O n e n t r y i f a i l m u s t b e s e t t o 0 , - 1 o r 1 . O n e x i t
i f a i l = 0 u n l e s s t h e r o u t i n e d e t e c t s a n e r r o r . S e e t h e N A G L i b r a r y
s p e c i c a t i o n f o r m o r e d e t a i l s r e g a r d i n g e r r o r i n d i c a t i o n s .
T h e N A G L i b r a r y s p e c i c a t i o n s h o u l d a l s o b e c o n s u l t e d f o r f u r t h e r
d e t a i l s o n A c c u r a c y a n d t h e c h o i c e o f a l p h a b a n d o t h e r p r e c a u t i o n s
w h i c h a r e a d v i s e d .
c P r o g r a m f o r C r u m p ' s m e t h o d
c U s e s N A G L i b r a r y r o u t i n e C 0 6 L A F
i n t e g e r n m a x , m x t e r m , n o u t
p a r a m e t e r ( n m a x = 2 0 , m x t e r m = 5 0 0 , n o u t = 6 )
r e a l a h i g h , a l o w , a l p h a b , r e l e r r , t f a c
i n t e g e r i , i f a i l , n , n a , n f e v a l , n t e r m s
r e a l e r r e s t ( n m a x ) , t ( n m a x ) , v a l i n v ( n m a x ) , w o r k ( 4 * m x t e r m + 2 )
e x t e r n a l C 0 6 L A F , F U N
r e a d ( 5 , * ) n
d o i = 1 , n
r e a d ( 5 , * ) t ( i )
e n d d o
w r i t e ( n o u t , * ) ` a l p h a b = ? '
r e a d ( 5 , * ) a l p h a b
w r i t e ( n o u t , * ) ` r e l e r r = ? '
r e a d ( 5 , * ) r e l e r r
w r i t e ( n o u t , * ) ` t f a c = ? '
r e a d ( 5 , * ) t f a c
w r i t e ( n o u t , * )
w r i t e ( n o u t , 9 9 9 ) ` m x t e r m = ' , m x t e r m , ` t f a c = ' , t f a c ,
+ ` a l p h a b = ' , a l p h a b , ` r e l e r r = ' , r e l e r r
i f a i l = - 1
c a l l C 0 6 L A F ( F U N , n , t , v a l i n v , e r r e s t , r e l e r r , a l p h a b , t f a c , m x t e r m ,
+ n t e r m s , n a , a l o w , a h i g h , n f e v a l , w o r k , i f a i l )
2 3
-
7/27/2019 Prog Numerically
24/57
i f ( i f a i l . g t . 0 . a n d . i f a i l . l t . 5 ) g o t o 6 0
w r i t e ( n o u t , * )
w r i t e ( n o u t , * ) ` t r e s u l t '
d o i = 1 , n
w r i t e ( n o u t , 9 9 8 ) t ( i ) , v a l i n v ( i )
e n d d o
w r i t e ( n o u t , 9 9 7 ) ` n t e r m s = ' , n t e r m s , ` n f e v a l = ' , n f e v a l ,
+ ` a l o w = ' , a l o w , ` a h i g h = ' , a h i g h , ` i f a i l = ' , i f a i l
c t e s t f o r l a r g e r v a l u e s o f c
r e l e r r = 1 : 0
3
t f a c = 0 . 8
w r i t e ( n o u t , * )
w r i t e ( n o u t , 9 9 9 ) ` m x t e r m = ' , m x t e r m , ` t f a c = ' , t f a c ,
+ ` a l p h a b = ' , a l p h a b , ` r e l e r r = ' , r e l e r r
i f a i l = - 1
c a l l C 0 6 L A F ( F U N , n , t , v a l i n v , e r r e s t , r e l e r r , a l p h a b , t f a c , m x t e r m ,
+ n t e r m s , n a , a l o w , a h i g h , n f e v a l , w o r k , i f a i l )
i f ( i f a i l . g t . 0 . a n d . i f a i l . l t . 5 ) g o t o 6 0
w r i t e ( n o u t , * )
w r i t e ( n o u t , * ) ` t r e s u l t '
d o i = 1 , n
w r i t e ( n o u t , 9 9 8 ) t ( i ) , v a l i n v ( i )
e n d d o
6 0 w r i t e ( n o u t , * )
w r i t e ( n o u t , 9 9 7 ) ` n t e r m s = ' , n t e r m s , ` n f e v a l = ' , n f e v a l ,
+ ` a l o w = ' , a l o w , ` a h i g h = ' , a h i g h , ` i f a i l = ' , i f a i l
9 9 9 f o r m a t ( 1 x , a , i 4 , a , f 6 . 2 , a , f 6 . 2 , a , 1 p , d 8 . 1 )
9 9 8 f o r m a t ( 1 x , f 4 . 1 , 7 x , f 9 . 6 )
9 9 7 f o r m a t ( 1 x , a , i 4 , a , i 4 , a , f 7 . 2 , a , f 7 . 2 , a , i 2 )
s t o p
e n d
s u b r o u t i n e F U N ( p r , p i , f r , )
2 4
-
7/27/2019 Prog Numerically
25/57
c e v a l u a t e s f ( s ) = 1 =
p
( s
2
+ 1 )
r e a l p r , p i , f r , , z r , z i
e x t e r n a l A 0 2 A A F
c N A G r o u t i n e A 0 2 A A F e v a l u a t e s t h e s q u a r e r o o t o f a c o m p l e x n u m b e r
e x t e r n a l A 0 2 A C F
c N A G r o u t i n e A 0 2 A C F e v a l u a t e s t h e i n v e r s e o f a c o m p l e x n u m b e r
f r = p r * p r - p i * p i + 1 . 0
= 2 . 0 * p r * p i
c a l l A 0 2 A A F ( f r , , z r , z i )
c a l l A 0 2 A C F ( 1 . 0 , 0 . 0 , z r , z i , f r , )
r e t u r n
e n d
2 5
-
7/27/2019 Prog Numerically
26/57
P r o g r a m f o r P o s t - W i d d e r m e t h o d
T h i s p r o g r a m a p p l i e s t h e r h o - a l g o r i t h m t o e x t r a p o l a t e t h e P o s t -
W i d d e r s e q u e n c e . A n o d d n u m b e r o f t e r m s a r e r e q u i r e d t o b e c a l -
c u l a t e d .
E n t r y / E x i t P a r a m e t e r s .
1 . m | i n t e g e r v a r i a b l e . I n t h e e x a m p l e p r o v i d e d b e l o w i f m = 1
t h e n t h e i n v e r s e t r a n s f o r m o f
f ( s ) = 1 = ( s + 1 ) i s f o u n d w h i l e m = 2
w i l l g i v e t h e i n v e r s e t r a n s f o r m f o r
f ( s ) = 1 =
p
( s
2
+ 1 ) :
2 . n | i n t e g e r v a r i a b l e . T h e n u m b e r o f t e r m s t o b e u s e d i n t h e
r h o a l g o r i t h m . n m u s t b e o d d a n d a m a x i m u m o f 4 5 .
3 . t | r e a l v a r i a b l e . T h e v a l u e o f t a t w h i c h t h e i n v e r s e t r a n s f o r m
i s r e q u i r e d .
4 . r h o 2 | a r e a l a r r a y . T h e c o n t e n t s o f t h e a r r a y a r e t h e n t e r m s
o f t h e P o s t - W i d d e r s e q u e n c e . T h e r o u t i n e w h i c h c a l c u l a t e s t h e s e -
q u e n c e m u s t b e p r o v i d e d b y t h e u s e r .
E a c h c y c l e o f t h e r h o - a l g o r i t h m w i l l b e p r i n t e d o u t a n d t h e n a l
r e s u l t p r i n t e d w i l l g i v e t h e e s t i m a t e f o r f ( t ) . T h e a c c u r a c y o f t h e
e s t i m a t e c a n b e g a u g e d b y c o m p a r i n g w i t h t h e a l t e r n a t e c y c l e w h i c h
p r e c e d e s i t .
r e a l r h o 1 ( 4 5 ) , r h o 2 ( 4 5 ) , a , b , c , d
r e a d ( 5 , * ) m
c m i n d i c a t e s t h e s e q u e n c e t o b e c o m p u t e d
c m = 1 ,
f ( s ) = 1 = ( s + 1 ) ; m = 2 ,
f ( s ) = 1 = ( s
2
+ 1 )
1 = 2
r e a d ( 5 , * ) n
c n m u s t b e o d d , n
4 5
c a l l r h o a l g ( m , n )
s t o p
e n d
s u b r o u t i n e r h o a l g ( m , n )
r e a l r h o 1 ( 4 5 ) , r h o 2 ( 4 5 ) , a
d o i = 1 , n
r h o 1 ( i ) = 0
e n d d o
i f ( m . e q . 1 ) g o t o 5 0
c a l l s e q u e n c e 2 ( n , r h o 2 )
2 6
-
7/27/2019 Prog Numerically
27/57
g o t o 1 0 0
5 0 c a l l s e q u e n c e 1 ( n , r h o 2 )
1 0 0 d o k = 1 , n - 1
d o i = 1 , n - k
r h o 1 ( i ) = r h o 1 ( i + 1 ) + o a t ( k ) / ( r h o 2 ( i + 1 ) - r h o 2 ( i ) )
w r i t e ( 6 , * ) r h o 1 ( i )
e n d d o
w r i t e ( 6 , * ) ` n e w c y c l e '
d o i = 1 , n - k
a = r h o 1 ( i )
r h o 1 ( i ) = r h o 2 ( i )
r h o 2 ( i ) = a
e n d d o
e n d d o
r e t u r n
e n d
s u b r o u t i n e s e q u e n c e 1 ( n , x )
r e a l x ( 4 5 ) , t , a , b
r e a d ( 5 , * ) t
d o i = 1 , n
a = o a t ( i )
b = - ( a + 1 )
x ( i ) = ( 1 + ( t / a ) ) * * b
w r i t e ( 6 , * ) x ( i )
e n d d o
r e t u r n
e n d
s u b r o u t i n e s e q u e n c e 2 ( n , x )
r e a l x ( 4 5 ) , u ( 0 : 4 5 ) , t , a , b , f , s , v , w
v = - 1 . 0
w = 1 . 0
r e a d ( 5 , * ) t
d o i = 1 , n
a = o a t ( i )
b = a + 1
s = a / t
w = w * v
2 7
-
7/27/2019 Prog Numerically
28/57
x ( i ) = w * ( s ) * * b
c a l l f a c ( i , f )
x ( i ) = x ( i ) / f
c a l l d e r i v ( i , s , u )
x ( i ) = x ( i ) * u ( i )
w r i t e ( 6 , * ) x ( i )
e n d d o
r e t u r n
e n d
s u b r o u t i n e f a c ( i , f )
r e a l f
f = 1 . 0
d o j = 1 , i
f = j * f
e n d d o
r e t u r n
e n d
s u b r o u t i n e d e r i v ( i , s , u )
r e a l r , s , t , u ( 0 : 4 5 )
t = s * s + 1
u ( 0 ) = 1 . 0 / s q r t ( t )
u ( 1 ) = - ( s / t ) * u ( 0 )
i f ( i . e q . 1 ) g o t o 1 0 0
d o j = 2 , i
r = o a t ( j )
u ( j ) = ( 2 * r - 1 ) * s * u ( j - 1 ) + ( r - 1 ) * ( r - 1 ) * u ( j - 2 )
u ( j ) = - u ( j ) / t
e n d d o
1 0 0 r e t u r n
e n d
2 8
-
7/27/2019 Prog Numerically
29/57
P r o g r a m f o r t h e H o n i g - H i r d e s m e t h o d f o r L a p l a c e I n v e r -
s i o n
T h i s p r o g r a m i s b a s e d o n t h e D u r b i n a p p r o a c h t o e v a l u a t i n g t h e
i n v e r s e L a p l a c e t r a n s f o r m b u t d i e r s f r o m t h e C r u m p m e t h o d b y
a p p l y i n g t h e K o r r e k t u r t e c h n i q u e o f A l b r e c h t a n d H o n i g t o r e d u c e
t h e d i s c r e t i z a t i o n e r r o r .
E n t r y / E x i t P a r a m e t e r s .
1 . f | a r e a l s u b r o u t i n e w h i c h e v a l u a t e s
f ( s ) g i v e n r e a l p a r a m e -
t e r s s r ( =
s ) a n d s i ( = a
s ) t h e r e s u l t s b e i n g i n d i c a t e d b y t h e r e a l
p a r a m e t e r s f r ( =
f ( s ) ) a n d ( = a
f ( s ) ) . T h i s s u b r o u t i n e m u s t b e
d e c l a r e d a s e x t e r n a l a n d s u p p l i e d b y t h e u s e r .
2 . t 1 , t n | r e a l p a r a m e t e r s w h i c h a r e r e s p e c t i v e l y l o w e r a n d
u p p e r b o u n d s o f t h e i n t e r v a l i n w h i c h f ( t ) i s t o b e a p p r o x i m a t e d .
3 . n | i n t e g e r v a r i a b l e , t h e n u m b e r o f v a l u e s t
k
; k = 1 ;
; n a t
w h i c h f ( t ) i s t o b e c o m p u t e d . N o t e t h a t
t
k
= t 1 + ( t n
t 1 ) k = ( n + 1 ) ;
s o t h a t i f w e r e q u i r e t
k
= 1 0 + k ; k = 1 ;
; 1 0 w e h a v e t o s e t
t 1 = 1 0 a n d t n = 2 1 .
4 . i m a n | i n t e g e r v a r i a b l e . I f i t i s s e t t o 0 a l l f u r t h e r p a r a m e t e r s
a r e s e t a u t o m a t i c a l l y ( e x c e p t n s 1 w h i c h h a s t o b e 6 0 ) . I f i t i s 1 a
m a n u a l c h o i c e o f t h e p a r a m e t e r s i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i k o r ,
c o n i s p o s s i b l e . I n t h e e x a m p l e b e l o w i m a n = 0 .
5 . i l a p i n | i n t e g e r v a r i a b l e . I f i l a p i n = 1 t h e a p p r o x i m a t i o n f o r -
m u l a i s a p p l i e d a t T = t w h i l e i f i l a p i n = 2 i t i s a p p l i e d a t T = t n ( o r
2 t n f o r t h e K o r r e k t u r t e r m s ) .
6 . i k o n v | i n t e g e r . I f i k o n v = 1 t h e m i n i m u m - m a x i m u m m e t h o d
i s i n v o k e d w h i l e i k o n v = 2 i n v o k e s t h e - a l g o r i t h m .
7 . n s 1 | i n t e g e r . T h e n u m b e r o f f u n c t i o n e v a l u a t i o n s o f
f ( s )
w h i c h a r e u s e d i n o r d e r t o e s t i m a t e f ( t ) . n s 1 = 6 0 i f i m a n = 0 .
8 . n s 2 | i n t e g e r . T h e n u m b e r o f f u n c t i o n e v a l u a t i o n s o f
f ( s ) u s e d
t o a p p r o x i m a t e t h e K o r r e k t u r t e r m .
9 . i c o n | i n t e g e r . I f i c o n = 0 t h e n t h e r e i s n o o p t i m a l c h o i c e o f
f r e e p a r a m e t e r s . I f i c o n = 1 t h e n t h e r e i s o p t i m a l c h o i c e o f f r e e p a -
r a m e t e r s f o r t = t
[ n = 2 ]
w h i l e i f i c o n = 2 t h e r e i s o p t i m a l c h o i c e o f f r e e
p a r a m e t e r s f o r t = t
k
.
1 0 . i k o r | i n t e g e r . I f i k o r = 0 t h e r e i s n o a p p l i c a t i o n o f t h e K o r -
r e k t u r m e t h o d o t h e r w i s e i t i s 1 .
2 9
-
7/27/2019 Prog Numerically
30/57
1 1 . c o n | r e a l . I f i c o n = 0 t h e n t h e f r e e p a r a m e t e r c i s d e t e r -
m i n e d f r o m c o n = c T .
1 2 . h ( 6 , n ) | a r e a l a r r a y w h i c h o n e x i t c o n t a i n s f ( t
k
) i n r o w 1 .
T h e s e c o n d r o w i s a w o r k a r e a . T h e t h i r d r o w c o n t a i n s t h e c o m p u t e d
o p t i m a l p a r a m e t e r c o n
o p t
= c
o p t
T f o r t = t
k
. T h e f o u r t h r o w g i v e s
t h e c o d e f o r t h e a c c e l e r a t i o n m e t h o d a d o p t e d ( 0 | n o a c c e l e r a t i o n
o f c o n v e r g e n c e , 1 | m i n i m a x , 2 | e p s i l o n a l g o r i t h m ( e p a l ) , 4 |
c u r v e t t i n g m e t h o d ( c f m ) , P = n s 1 + 2 | i n d i c a t e s o v e r o w i n e p a l
i f P!
4 . T h e f t h r o w c o n t a i n s t h e a b s o l u t e e r r o r c a l c u l a t e d b y f o r -
m u l a ( 3 3 ) i n t h e H o n i g - H i r d e s p a p e r a n d t h e s i x t h r o w c o n t a i n s
a c o n t r o l n u m b e r o f u p t o 6 d i g i t s w h i c h i s e x p l a i n e d i n H o n i g a n d
H i r d e s [ 6 ] .
1 3 . E ( 3 , n s 1 ) | a r e a l a r r a y u s e d a s w o r k i n g s p a c e .
1 4 . i o u t | i n t e g e r . R e f e r s t o t h e o u t p u t d e v i c e u s e d .
1 5 . i e r | i n t e g e r . P a r a m e t e r w h i c h i n d i c a t e s e r r o r i n t h e i n p u t
d a t a . I f i e r = 0 t h e r e i s n o e r r o r . O t h e r w i s e t h e e r r o r i s i n d i c a t e d
b y t h e p r i n t - o u t .
i n t e g e r n , i m a n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i e r , i o u t
p a r a m e t e r ( n = 1 0 , n s 1 = 6 0 , i m a n = 0 )
r e a l t 1 , t n , c o n , h ( 6 , n ) , e ( 3 , n s 1 )
e x t e r n a l f
r e a d ( 5 , * ) t 1 , t n
i o u t = 6
c a l l l a p i n ( f , t 1 , t n , n , i m a n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i k o r ,
+ c o n , h , e , i e r , i o u t )
d o i = 1 , n
t = t 1 + ( t n - t 1 ) * i / ( n + 1 )
w r i t e ( i o u t , * ) t , h ( 1 , n )
e n d d o
s t o p
e n d
s u b r o u t i n e l a p i n ( f , t 1 , t n , n , i m a n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n ,
+ i k o r , c o n , h , e , i e r , i o u t )
r e a l a b r n , a b s f , c o n , c o n o p t , c o n 1 , c o n 2 , d e l , e , f n , f n s 1
r e a l f r e a l , m a g , h , p i , r a c c , r n s u m , r n s u m k , t , t a , t b
r e a l t k , t n , t 0 , t 1 , v 1 , v 2 , w
3 0
-
7/27/2019 Prog Numerically
31/57
i n t e g e r h m o n o
e x t e r n a l f
d i m e n s i o n h ( 6 , n ) , e ( 3 , n s 1 )
c o m m o n / c l a p i n / t a , t b , t 0 , c o n o p t , a b s f , l v a l , h m o n o
c i n i t i a l i s e a r r a y h
d o i = 1 , n
d o j = 1 , 6
h ( j , i ) = 0 . 0
e n d d o
e n d d o
i e r = 0
i f ( t n . l t . t 1 ) i e r = 1
i f ( n . l t . 1 ) i e r = i e r + 1 0
i f ( i m a n . e q . 0 ) g o t o 1 0 0
i f ( i m a n . e q . 1 ) g o t o 1 1 0
i e r = i e r + 1 0 0
g o t o 1 2 0
c p a r a m e t e r s f o r i m a n = 0
1 0 0 i f ( n s 1 . n e . 6 0 ) i e r = i e r + 1 0 0 0 0 0
i f ( i e r . n e . 0 ) g o t o 1 2 0
i l a p i n = 1
i k o n v = 2
i c o n = 1
i k o r = 0
n s 2 = 0
g o t o 2 0 0
c i m a n = 1
1 1 0 i f ( i l a p i n . l t . 1 . o r . i l a p i n . g t . 2 ) i e r = i e r + 1 0 0 0
i f ( i k o n v . l t . 1 . o r . i k o n v . g t . 2 ) i e r = i e r + 1 0 0 0 0
i f ( n s 1 . l t . 1 . o r . ( n s 2 . l t . 1 . a n d . i k o r . e q . 1 ) ) i e r = i e r + 1 0 0 0 0 0
i f ( i c o n . l t . 0 . o r . i c o n . g t . 2 . o r . ( i c o n . e q . 2 . a n d . i l a p i n . e q . 2 ) )
+ i e r = i e r + 1 0 0 0 0 0 0
i f ( i k o r . l t . 0 . o r . i k o r . g t . 1 ) i e r = i e r + 1 0 0 0 0 0 0 0
i f ( i c o n . e q . 0 . a n d . c o n . l e . 0 . 0 ) i e r = i e r + 1 0 0 0 0 0 0 0 0
i f ( i e r . e q . 0 ) g o t o 2 0 0
3 1
-
7/27/2019 Prog Numerically
32/57
1 2 0 c a l l e r r o r ( i e r , t 1 , t n , n , i m a n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n ,
+ i k o r , c o n , i o u t )
r e t u r n
2 0 0 p i = 4 . 0 * a t a n ( 1 . 0 )
c o n 1 = 2 0 . 0
c o n 2 = c o n 1 - 2 . 0
a b s f = 0 . 0
j 3 = ( 3 - i c o n ) / 2 + n * ( i c o n / 2 )
t a = t 1
t b = t n
d o 8 3 0 l 3 = 1 , j 3
l v a l = l 3
h m o n o = 0
k o r 1 = i k o r
c c o m p u t a t i o n o f t h e o p t i m a l p a r a m e t e r s
2 1 0 i f ( i c o n - 1 ) 2 1 5 , 2 3 0 , 2 2 0
2 1 5 j u m p = 0
c a l l l a p i n 2 ( f , t 1 , t n , n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i k o r , c o n , h , e , j u m p )
g o t o 8 3 0
2 2 0 t a = t 1 + o a t ( l 3 ) * ( t n - t 1 ) / o a t ( n + 1 )
t b = t a
2 3 0 n h = n / 2
t = t a + ( t b - t a ) * o a t ( n h ) / o a t ( n + 1 )
t k = o a t ( 2 - i l a p i n ) * t + o a t ( i l a p i n - 1 ) * t b
c c o m p u t a t i o n o f t h e t r u n c a t i o n e r r o r ( r n s u m )
t 0 = t
c o n = c o n 1
j u m p = 1
c a l l l a p i n 2 ( f , t 1 , t n , n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i k o r , c o n , h , e , j u m p )
2 4 0 f n = h ( 1 , 1 3 )
f n s 1 = e ( 1 , n s 1 )
c o n = c o n 2
j u m p = 2
c a l l l a p i n 2 ( f , t 1 , t n , n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i k o r , c o n , h , e , j u m p )
2 5 0 i f ( f n . n e . h ( 1 , l 3 ) . a n d . f n s 1 . n e . e ( 1 , n s 1 ) ) g o t o 2 5 5
3 2
-
7/27/2019 Prog Numerically
33/57
c o n o p t = c o n
a b s f = 0 . 0
g o t o 3 2 0
2 5 5 r n s u m = t k * ( f n - h ( 1 , l 3 ) ) / e x p ( c o n 1 ) - e x p ( c o n 2 )
i f ( i l a p i n . e q . 2 ) g o t o 2 6 0
c c o m p u t a t i o n o f t h e a c c e l e r a t i o n f a c t o r ( d e l )
r a c c = t * ( f n s 1 - e ( 1 , n s 1 ) ) / ( e x p ( c o n 1 ) - e x p ( c o n 2 ) )
d e l = r n s u m / r a c c
2 6 0 i f ( i k o r . e q . 1 ) g o t o 2 8 0
c o p t i m a l p a r a m e t e r s ( M e t h o d A )
t 0 = 2 . 0 * t k + t
c o n = c o n 1 / 4 . 0
j u m p = 3
c a l l l a p i n 2 ( f , t 1 , t n , n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i k o r , c o n , h , e , j u m p )
2 7 0 f n = h ( 1 , l 3 )
c o n o p t = - t k / ( 2 . 0 * t k + t ) * l o g ( a b s ( r n s u m / ( t k * f n ) ) )
g o t o 3 1 0
c o p t i m a l p a r a m e t e r s f o r t h e K o r r e k t u r m e t h o d ( M e t h o d A )
2 8 0 t = 4 . 0 * t k + t
c o n = c o n 1 / 4 . 0
j u m p = 4
c a l l l a p i n 2 ( f , t 1 , t n , n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i k o r , c o n , h , e , j u m p )
2 9 0 f n = h ( 1 , l 3 )
t 0 = 8 . 0 * t k + t
j u m p = 5
c a l l l a p i n 2 ( f , t 1 , t n , n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i k o r , c o n , h , e , j u m p )
3 0 0 f n = f n - h ( 1 , l 3 )
c o n o p t = - t k / ( 4 . 0 * t k + t ) * l o g ( a b s ( r n s u m / ( t k * f n ) ) )
c o p t i m a l p a r a m e t e r s ( M e t h o d B )
3 1 0 i f ( i l a p i n . e q . 1 ) g o t o 3 1 5
a b s f = a b s ( e x p ( c o n o p t ) * r n s u m * 2 . 0 / t k )
g o t o 3 2 0
3 1 5 v 1 = c o n 1 / t
v 2 = c o n o p t / t
3 3
-
7/27/2019 Prog Numerically
34/57
w = p i * o a t ( n s 1 ) / t
c a l l f ( v 2 , w , f r e a l , m a g )
r n s u m k = r n s u m k * f r e a l
c a l l f ( v 1 , w , f r e a l , m a g )
r n s u m k = r n s u m k / f r e a l
a b r n = ( r n s u m k - r n s u m ) / ( v 2 - v 1 )
c o n o p t = - l o g ( a b s ( a b r n / t + r n s u m k ) / ( t * o a t ( i k o r * 2 + 2 ) * f n ) ) ) /
+ o a t ( 3 + 2 * i k o r )
v 1 = v 2
v 2 = c o n o p t / t
c a l l f ( v 2 , w , f r e a l , m a g )
r n s u m k = r n s u m k / f r e a l
a b s f = e x p ( c o n o p t ) / t * a b s ( r n s u m k ) +
+ a b s ( e x p ( - 2 . 0 * c o n o p t ) * f n * o a t ( i k o r - 1 )
+ e x p ( - 4 . 0 * c o n o p t ) * f n * o a t ( i k o r ) )
3 2 0 i f ( c o n o p t . l e . 0 . 0 ) c o n o p t = 1 . 0
j u m p = 6
c a l l l a p i n 2 ( f , t 1 , t n , n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i k o r , c o n , h , e , j u m p )
8 3 0 c o n t i n u e
r e t u r n
e n d
s u b r o u t i n e l a p i n 2 ( f , t 1 , t n , n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i k o r ,
+ c o n , h , e , j u m p )
c L a p l a c e i n v e r s i o n w i t h o p t i m a l p a r a m e t e r s
r e a l a , a b s f , b , c o n , c o n o p t , d e l t a , d i v i , e , e 1 , e 2 , e 3 , e i n s
r e a l f a k t o r , m a g , f r e a l , h , p i , p i t , p i t e , r a l , s u i m , s u r e
r e a l t a , t b , t e , t l , t m , t m 1 , t n , t t , t 0 , t 1 , x 1 , x 2 , x 3 , v , w , y 1 , y 2 , y 3
i n t e g e r r i c h t , r i c h t a , h m o n o
e x t e r n a l f
d i m e n s i o n h ( 6 , n ) , e ( 3 , n s 1 ) , e 3 ( 3 )
c o m m o n / c l a p i n / t a , t b , t 0 , c o n o p t , a b s f , l 3 , h m o n o
p i = 4 . 0 * a t a n ( 1 . 0 )
i f ( j u m p . e q . 0 ) g o t o 3 6 0
i f ( j u m p . l t . 6 ) g o t o 3 7 0
3 4
-
7/27/2019 Prog Numerically
35/57
t 0 = t a
t t = t b
i 1 = l 3
j 1 = ( 2 - i c o n ) * n + ( i c o n - 1 ) * l 3
c o n = c o n o p t
k o r 1 = i k o r
g o t o 3 8 0
3 6 0 t 0 = t 1
t t = t n
i 1 = 1
j 1 = n
k o r 1 = i k o r
j u m p = 6
g o t o 3 8 0
3 7 0 k o r 1 = 0
t t = t 0
i 1 = l 3
j 1 = l 3
3 8 0 d e l t a = ( t t - t 0 ) / o a t ( n + 1 )
n s u m = n s 1
c c o m p u t a t i o n o f t h e t - v a l u e s f r o m t 0 , t t
d o 8 0 5 k 2 = 1 , 2
i f ( i l a p i n . e q . 1 ) g o t o 4 2 0
t e = o a t ( k 2 ) * t t
v = c o n / t e
c a l l f ( v , 0 . 0 , f r e a l , m a g )
r a l = - 0 . 5 * f r e a l
p i t e = p i / t e
4 0 5 d o l = 1 , n s u m
w = o a t ( l - 1 ) * p i t e
c a l l f ( v , w , f r e a l , m a g )
e ( 2 , l ) = f r e a l
e ( 3 , l ) = m a g
e n d d o
3 5
-
7/27/2019 Prog Numerically
36/57
4 2 0 d o 8 0 0 k 1 = i 1 , j 1
t l = t 0 + o a t ( k 1 ) * d e l t a
i f ( i l a p i n . e q . 2 ) g o t o 4 4 0
i f ( k 2 . e q . 2 ) t l = 3 . 0 * t l
v = c o n / t l
f a k t o r = e x p ( v * t l ) / t l
c a l l f ( v , 0 . 0 , f r e a l , m a g )
r a l = - 0 . 5 * f r e a l
p i t = p i / t l
e i n s = 1 . 0
s u r e = 0 . 0
c m e t h o d o f D u r b i n
4 2 5 d o l = 1 , n s u m
w = o a t ( l - 1 ) * p i t
c a l l f ( v , w , f r e a l , m a g )
s u r e = s u r e + f r e a l * e i n s
e i n s = - e i n s
e ( 1 , l ) = f a k t o r * ( r a l + s u r e )
e n d d o
g o t o 4 6 0
4 4 0 i f ( k 2 . e q . 2 ) t l = t l + t e
f a k t o r = e x p ( v * t l ) / t e
s u r e = 0 . 0
s u i m = 0 . 0
d o l = 1 , n s u m
w = o a t ( l - 1 ) * p i t e
s u r e = s u r e + e ( 2 , l ) * c o s ( w * t l )
s u i m = s u i m + e ( 3 , l ) * s i n ( w * t l )
e ( 1 , l ) = f a k t o r * ( r a l + s u r e - s u i m )
e n d d o
c s e a r c h f o r s t a t i o n a r y v a l u e s
4 6 0 n m a x = n s u m * 2 / 3
m o n o t o = 0
k = 0
3 6
-
7/27/2019 Prog Numerically
37/57
r i c h t a = s i g n ( 1 . 5 , ( e ( 1 , n s u m ) - e ( 1 , n s u m - 1 ) ) )
d o l = 1 , n m a x
j = n s u m - 1
r i c h t = s i g n ( 1 . 5 , e ( 1 , j ) - e ( 1 , j - 1 ) ) )
i f ( r i c h t . e q . r i c h t a ) g o t o 5 0 0
k = k + 1
e 3 ( k ) = e ( 1 , j )
r i c h t a = r i c h t
i f ( k . e q . 3 ) g o t o 5 1 0
5 0 0 e n d d o
i f ( k . e q . 0 ) g o t o 7 0 0
h ( k 2 , k 1 ) = e ( 1 , n s u m )
i f ( k 2 . e q . 1 ) h ( 4 , k 1 ) = 0
g o t o 7 9 0
5 1 0 k e = 2
i f ( ( e 3 ( k e ) - e ( 1 , j ) ) * o a t ( r i c h t a ) . g t . 0 ) g o t o 5 6 0
j m i n = n s u m / 3
j m a x = j - 1
d o j j = j m i n , j m a x
j = j - 1
r i c h t = s i g n ( 1 . 5 , ( e ( 1 , j ) - e ( 1 , j - 1 ) ) )
i f ( r i c h t . e q . r i c h t a ) g o t o 5 4 0
r i c h t a = r i c h t
k e = 3 - k e
i f ( ( e 3 ( k e ) - e ( 1 , j ) ) * o a t ( r i c h t a ) . g t . 0 . 0 ) g o t o 5 6 0
5 4 0 e n d d o
5 5 0 m o n o t o = 1
i f ( i k o n v . e q . 2 ) g o t o 6 3 0
c m i n i m u m - m a x i m u m m e t h o d ( m i n i m a x )
5 6 0 h ( k 2 , k 1 ) = ( e 3 ( 1 ) + e 3 ( 3 ) ) / 4 . 0 + e 3 ( 2 ) / 2 . 0
i f ( k 2 . e q . 1 ) h ( 4 , k 1 ) = 1
g o t o 7 9 0
c e p s i l o n a l g o r i t h m ( e p a l )
6 3 0 k = 0
n s u m m 1 = n s u m - 1
e 2 = e ( 1 , 1 )
d o l = 1 , n s u m m 1
3 7
-
7/27/2019 Prog Numerically
38/57
e 1 = e ( 1 , 1 )
t m = 0 . 0
l p 1 = l + 1
d o m = 1 , l
m m = l p 1 - m
t m 1 = e ( 1 , m m )
d i v i = e ( 1 , m m + 1 ) - e ( 1 , m m )
i f ( a b s ( d i v i ) . g t . 1 : 0
2 0
) g o t o 6 4 0
k = 1
g o t o 6 7 0
6 4 0 e ( 1 , m m ) = t m + 1 . 0 / d i v i
t m = t m 1
e n d d o
e 2 = e 1
e n d d o
6 7 0 i f ( a b s ( e 1 ) . g t . a b s ( e 2 ) e 1 = e 2
i f ( a b s ( e ( 1 , 1 ) ) . g t . a b s ( e 1 ) ) e ( 1 , 1 ) = e 1
h ( k 2 , k 1 ) = e ( 1 , 1 )
i f ( k 2 . e q . 1 ) h ( 4 , k 1 ) = k + 2
g o t o 7 9 0
c c u r v e t t i n g ( c f m )
7 0 0 x 1 = o a t ( n s u m ) - 2 . 0
x 2 = o a t ( n s u m ) - 1 . 0
x 3 = o a t ( n s u m ) - 0 . 0
y 1 = e ( 1 , n s u m - 2 )
y 2 = e ( 1 , n s u m - 1 )
y 3 = e ( 1 , n s u m )
b = ( ( y 3 - y 1 ) * x 3 * x 3 * ( x 1 + x 2 ) / ( x 1 - x 3 )
+ - ( y 2 - y 1 ) * x 2 * x 2 * ( x 1 + x 3 ) / ( x 1 - x 2 ) ) / ( x 3 - x 2 )
a = ( ( y 2 - y 1 ) - b * ( x 1 - x 2 ) / ( x 1 * x 2 ) ) * ( x 2 * x 2 * x 1 * x 1 ) / ( x 1 * x 1 - x 2 * x 2 )
h ( k 2 , k 1 ) = y 1 - ( a / x 1 + b ) / x 1
m o n o t o = 1
i f ( k 2 . e q . 1 ) h ( 4 , k 1 ) = 3
7 9 0 h ( 3 , k 1 ) = c o n
h ( 5 , k 1 ) = a b s f
h m o n o = h m o n o + k 2 * m o n o t o * 1 0 * * ( 6 - j u m p )
3 8
-
7/27/2019 Prog Numerically
39/57
i f ( j u m p . l t . 6 ) g o t o 8 0 0
h ( 6 , k 1 ) = o a t ( ( 2 - k 2 ) * h m o n o +
+ o a t ( k 2 - 1 ) * ( o a t ( 2 * m o n o t o ) + h ( 6 , k 1 ) )
h m o n o = h m o n o / 1 0 * 1 0
8 0 0 c o n t i n u e
i f ( k o r 1 . e q . 0 ) r e t u r n
i f ( k 2 . e q . 2 ) g o t o 8 1 0
n s u m = n s 2
8 0 5 c o n t i n u e
c K o r r e k t u r m e t h o d
8 1 0 f a k t o r = - e x p ( - 2 . 0 * c o n )
d o k = i 1 , j 1
h ( 1 , k ) = h ( 1 , k ) + f a k t o r * h ( 2 , k )
e n d d o
r e t u r n
e n d
s u b r o u t i n e e r r o r ( i e r , t 1 , t n , n , i m a n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i k o r ,
* c o n , i o u t )
r e a l t 1 , t n , c o n
w r i t e ( i o u t , 1 ) i e r , t 1 , t n , n , i m a n , i l a p i n , i k o n v , n s 1 , n s 2 , i c o n , i k o r , c o n
1 f o r m a t ( / / / 1 4 h * * * e r r o r * * * , 8 x , 5 h i e r = , i 1 2 / /
* 1 0 h t 1 * , d 1 0 . 3 , 1 8 x , 1 2 h 1 * t n
-
7/27/2019 Prog Numerically
40/57
e n d
s u b r o u t i n e f ( s r , s i , f r , )
c e v a l u a t e s f u n c t i o n 1 = ( s
2
+ 1 )
r e a l s r , s i , f r , , a
f r = s r * s r - s i * s i + 1 . 0
= 2 * s r * s i
a = f r * f r + *
f r = f r / a
= - / a
r e t u r n
e n d
4 0
-
7/27/2019 Prog Numerically
41/57
P r o g r a m f o r T a l b o t ' s m e t h o d
T h i s i s a s u b - p r o g r a m o f A l g o r i t h m 6 8 2 b y M u r l i a n d R i z z a r d i [ 8 ] .
I t o m i t s a s e c t i o n o f t h e M u r l i - R i z z a r d i p r o g r a m w h i c h d e a l s w i t h
e s s e n t i a l s i n g u l a r i t i e s . R e a d e r s s h o u l d b e w a r n e d t h a t s o m e o f t h e
v a r i a b l e n a m e s u s e d b y M u r l i a n d R i z z a r d i h a v e b e e n c h a n g e d t o b e
m o r e c o n s i s t e n t w i t h t h e v a l u e s u s e d i n t h e t e x t a n d i n t h e o r i g i n a l
T a l b o t p a p e r . E x a m p l e s a r e c o n l a m , c o n s i g , a n d c o n n u a n d t v a l u e
w h i c h h a v e b e c o m e l a m , s i g , n u a n d t v a l .
E n t r y / E x i t p a r a m e t e r s
1 . a p | a c o m p l e x s u b r o u t i n e w h i c h e v a l u a t e s
f ( s ) f o r c o m -
p l e x a r g u m e n t s . T h i s s u b r o u t i n e m u s t b e s u p p l i e d b y t h e r e a d e r .
2 . n v | a r e a l f u n c t i o n w h i c h e v a l u a t e s t h e f u n c t i o n f ( t ) a t
t h e g i v e n d a t a p o i n t s f o r s o m e k n o w n t e s t f u n c t i o n . T h i s w i l l g i v e
a m e a s u r e o f c o n d e n c e w h e n o p e r a t i n g t h e p r o g r a m w i t h f ( t ) u n -
k n o w n . I n t h i s s i t u a t i o n t a k e f ( t ) e q u a l t o 1 . 0 .
3 . s i n g s | t h i s r o u t i n e m u s t r e t u r n t h e n u m b e r o f s i n g u l a r i t i e s ,
t h e i r l o c a t i o n a n d m u l t i p l i c i t y . T h e r e i s a r e s t r i c t i o n a s t h e n u m b e r
o f s i n g u l a r i t i e s m a y n o t e x c e e d 2 4 .
4 . n t | i n t e g e r . T h e n u m b e r o f d a t a p o i n t s a t w h i c h t h e L a p l a c e
t r a n s f o r m i s r e q u i r e d .
5 . v t | r e a l a r r a y o f d i m e n s i o n n t . D a t a t o b e s u p p l i e d b y t h e
u s e r . I n t h e e x a m p l e b e l o w d a t a v a l u e s a r e 0 : 5 ;
; 6 4 : 0 .
6 . n o s i n g | i n t e g e r . T h e n u m b e r o f s i n g u l a r i t i e s o f t h e f u n c t i o n
f ( s ) w i t h n o n - n e g a t i v e i m a g i n a r y p a r t s .
7 . s i n g r e | r e a l a r r a y o f d i m e n s i o n
2 4 . T h i s a r r a y c o n t a i n s
t h e r e a l p a r t s o f t h e s i n g u l a r i t i e s .
8 . s i n g i m | r e a l a r r a y o f d i m e n s i o n
2 4 . T h i s a r r a y c o n t a i n s
t h e i m a g i n a r y p a r t s o f t h e s i n g u l a r i t i e s .
9 . m u l t s i | i n t e g e r a r r a y . T h i s a r r a y r e c o r d s t h e m u l t i p l i c i t y o f
e a c h s i n g u l a r i t y .
F o r e x a m p l e , i f
f ( s ) = 1 = ( s
1 )
3
[ ( s
0 : 5 )
2
+ 4 ] , w e w o u l d s e t
n o s i n g = 3 ,
s i n g r e ( 1 ) = 1 , s i n g i m ( 1 ) = 0 , m u l t s i ( 1 ) = 2 ;
s i n g r e ( 2 ) = 0 . 5 , s i n g i m ( 2 ) = 2 , m u l t s i ( 2 ) = 0 ;
s i n g r e ( 3 ) = 0 . 5 , s i n g i m ( 3 ) = - 2 , m u l t s i ( 3 ) = 0 ;
i n t h e s u b r o u t i n e s i n g s .
1 0 . i n v f | r e a l . T h e c o m p u t e d v a l u e o f f ( t ) .
1 1 . n o p t s | i n t e g e r . T h e n u m b e r o f p o i n t s u s e d i n t h e T a l b o t
s u m m a t i o n a s c o m p u t e d b y t h e s u b r o u t i n e t a p a r .
4 1
-
7/27/2019 Prog Numerically
42/57
1 2 . i c | i n t e g e r . T h e m a c h i n e d e c i m a l p r e c i s i o n u s e d b y T a l b o t ' s
m e t h o d .
1 2 a . i d | a n i n t e g e r b e t w e e n 1 a n d i c + 2 .
1 3 . i e r | i n t e g e r . T h i s i s a n e r r o r i n d i c a t o r . i e r = 0 i n d i c a t e s
n o r m a l t e r m i n a t i o n . i e r = 1 i n d i c a t e s t h a t t h e o u t p u t v a l u e o f t h e
s u b r o u t i n e n v c a u s e s o v e r o w a n d a s c a l e d v a l u e o f f ( t ) i s r e t u r n e d .
1 4 . p s e r r | r e a l . T h i s i s t h e r a t i o o f a b s o l u t e e r r o r / ( e
t
) .
1 5 . e r r o r | r e a l . T h i s i s t h e r e l a t i v e ( R ) e r r o r w h e n t h e v a l u e
p r o d u c e d b y n v i s g r e a t e r t h a n 1 . O t h e r w i s e i t i s t h e a b s o l u t e e r r o r
( A ) .
i m p l i c i t r e a l ( a - h , o - z )
r e a l l a m , n u , i n v f
r e a l n v , f v , t t , e r r o r , p s e r r , d i n v f , d e m a x , d 2 m a c h
r e a l r 1 m a c h ( 3 ) , r 1
c t h e m a c h i n e c o n s t a n t s r 1 m a c h ( * ) a r e d e n e d b y M u r l i a n d R i z z a r d i
c | t h i s p r o g r a m g i v e s t h e I E E E 7 5 4 s p e c i c a t i o n f o r t h e s e c o n s t a n t s
e x t e r n a l a p
c o m p l e x a p
c h a r a c t e r * 1 a l f a
d i m e n s i o n s i n g r e ( 2 4 ) , s i n g i m ( 2 4 ) , m u l t s i ( 2 4 ) , v t ( 8 )
d a t a n d i m / 2 4 /
d a t a v t / 0 . 5 , 1 . 0 , 2 . 0 , 4 . 0 , 8 . 0 , 1 6 . 0 , 3 2 . 0 , 6 4 . 0 /
d a t a d 2 m a c h / Z ` 7 f e f f f f f f f f f f f f f ' /
c d 2 m a c h i s t h e d o u b l e l e n g t h v e r s i o n o f r 1 m a c h ( 2 )
d a t a r 1 m a c h ( 2 ) / Z ` 7 f 7 f f f f f ' /
d a t a r 1 m a c h ( 3 ) / Z ` 3 3 8 0 0 0 0 0 ' /
n t = 8
i c = - i x ( l o g 1 0 ( r 1 m a c h ( 3 ) ) * 3 . / 4 . )
d e m a x = l o g ( d 2 m a c h )
e m a x = l o g ( r 1 m a c h ( 2 ) )
c a l l s i n g s ( n d i m , s i n g r e , s i n g i m , m u l t s i , n o s i n g )
w r i t e ( 6 , 2 0 0 ) ( s i n g r e ( k ) , s i n g i m ( k ) , m u l t s i ( k ) , k = 1 , n o s i n g )
d o 2 i t = 1 , n t
t v a l = v t ( i t )
t t = d b l e ( t v a l )
i f ( t v a l . g t . d e m a x ) t h e n
f v = 0 . 0
4 2
-
7/27/2019 Prog Numerically
43/57
e l s e
f v = n v ( t v a l )
e n d i f
i f ( a b s ( f v ) . g t . 1 . 0 ) t h e n
a l f a = ` R '
e l s e
a l f a = ` A '
e n d i f
d o 3 i d = 1 , i c + 2
c a l l t a p a r ( t v a l , i d , n o s i n g , s i n g r e , s i n g i m , m u l t s i , i c ,
* l a m , s i g , n u , n o p t s )
i f ( i d . e q . 1 ) t h e n
i f ( t v a l . g t . d e m a x ) t h e n
w r i t e ( 6 , * ) t v a l , l a m , s i g , n u
e l s e
w r i t e ( 6 , * ) t v a l , l a m , s i g , n u , f v
e n d i f
e n d i f
c a l l t s u m ( a p , l a m , s i g , n u , n o p t s , t v a l , i n v f , i e r )
i f ( i e r . e q . 0 ) t h e n
p s e r r = ( f v - i n v f ) / e x p ( t t * s i g )
i f ( a l f a . e q . ` R ' ) t h e n
e r r o r = ( f v - i n v f ) / f v
e l s e
e r r o r = f v - i n v f
e n d i f
w r i t e ( 6 , * ) i d , n o p t s , i n v f , p s e r r , e r r o r , a l f a
e l s e
w r i t e ( 6 , * ) i d , n o p t s , i n v f , i e r
i f ( t v a l . g t . e m a x . a n d . t v a l . l t . d e m a x ) t h e n
d i n v f = l a m / n o p t s * e x p ( t t * s i g ) * i n v f
p s e r r = ( f v - d i n v f ) / e x p ( t t * s i g )
e r r o r = ( f v - d i n v f ) / f v
w r i t e ( 6 , * ) d i n v f , p s e r r , e r r o r , a l f a
e n d i f
e n d i f
3 c o n t i n u e
4 3
-
7/27/2019 Prog Numerically
44/57
2 c o n t i n u e
s t o p
2 0 0 f o r m a t ( ` s i n g u l a r i t i e s a n d t h e i r m u l t i p l i c i t i e s ' /
* ( 2 ( 2 x , e 1 2 . 6 ) , 2 x , I 2 ) )
e n d
s u b r o u t i n e t a p a r ( t v a l , d e c d i g , n o s i n g , s i n g r e , s i n g i m , m u l t s i , i c ,
* l a m , s i g , n u , n o p t s )
c T h i s s u b r o u t i n e e v a l u a t e s t h e g e o m e t r i c a l p a r a m e t e r s
c l a m ( b d a ) , s i g ( m a ) a n d n u f o r t h e T a l b o t c o n t o u r a n d t h e
c a c c u r a c y p a r a m e t e r ( n o p t s )
i m p l i c i t r e a l ( a - h , o - z )
r e a l l a m , n u
r e a l p i
l o g i c a l c a s o 1
i n t e g e r i c , d e c d i g , d d
d i m e n s i o n s i n g r e ( n o s i n g ) , s i n g i m ( n o s i n g ) , m u l t s i ( n o s i n g )
d a t a p i / 0 . 0 /
i f ( p i . e q . 0 . 0 ) p i = 4 . * a t a n ( 1 . 0 )
c a s o 1 = . t r u e .
o m e g a = 0 . 4 * ( i c + 1 )
s i g 0 = 0 . 0
p m a x = s i n g r e ( 1 )
k m a x = 1
i f ( n o s i n g . e q . 1 ) g o t o 3
d o j = 1 , n o s i n g
i f ( s i n g r e ( j ) . g t . p m a x ) p m a x = s i n g r e ( j )
i f ( m u l t s i ( j ) . g t . m u l t s i ( k m a x ) ) k m a x = j
e n d d o
3 i f ( p m a x . g t . s i g 0 ) s i g 0 = p m a x
r d = 0 . 0
s i d = 0 . 0
t e t d = p i
d o 7 j = 1 , n o s i n g
i f ( s i n g i m ( j ) . l e . 0 . 0 ) g o t o 7
c a s o 1 = . f a l s e .
4 4
-
7/27/2019 Prog Numerically
45/57
e t a j = a t a n 2 ( - s i n g r e ( j ) + s i g 0 , s i n g i m ( j ) )
t e t j = e t a j + p i / 2 .
r j = s i n g i m ( j ) / t e t j
i f ( r d . g e . r j ) g o t o 7
r d = r j
t e t d = t e t j
i d = j
7 c o n t i n u e
i f ( c a s o 1 ) g o t o 8
s r d = s i n g r e ( i d ) - s i g 0
s i d = s i n g i m ( i d )
m d = m u l t s i ( i d )
v = s i d * t v a l
o m e g a = m i n ( o m e g a + v / 2 . 0 , 2 . 0 * ( i c + 1 ) / 3 . 0 )
i f ( 1 . 8 * v . g t . o m e g a * t e t d ) g o t o 9
c a s o 1 = . t r u e .
8 l a m = o m e g a / t v a l
s i g = s i g 0
n u = 1 . 0
g o t o 1 0
9 c a s o 1 = . f a l s e .
p k = 1 . 6 + 1 2 . 0 / ( v + 2 5 . 0 )
= 1 . 0 5 + 1 0 5 0 . / m a x ( 5 5 3 . 0 , 8 0 0 . 0 - v )
p m u = ( o m e g a / t v a l + s i g 0 - p m a x ) / ( p k / - 1 . 0 / t a n ( ) )
l a m = p k * p m u /
s i g = p m a x - p m u / t a n ( )
n u = s i d / p m u
1 0 n 1 = 0
e = ( 2 . 3 * d e c d i g + o m e g a ) / ( l a m + t v a l )
i f ( e . g t . 4 . 4 ) g o t o 1 1
u n r o = ( 1 6 . 0 + 4 . 3 * e ) / ( 2 4 . 8 - 2 . 5 * e )
g o t o 1 3
1 1 i f ( e . g t . 1 0 . 0 ) g o t o 1 2
u n r o = ( 5 0 . 0 + 3 . 0 * e ) / ( 1 2 9 . 0 / e - 4 . 0 )
g o t o 1 3
1 2 u n r o = ( 4 4 . 0 + 1 9 . 0 * e ) / ( 2 5 6 . 0 / e + 0 . 4 )
4 5
-
7/27/2019 Prog Numerically
46/57
1 3 n 1 = l a m * t v a l * ( u n r o + ( n u - 1 . 0 ) / 2 . 0 )
n 1 = n 1 + 1
n 0 = 0
n 2 = 0
i f ( s i d . e q . 0 . 0 ) g o t o 1 5
d d = d e c d i g + 2 * m i n ( m d - 1 , 1 ) + m d / 4
i f ( . n o t . c a s o 1 . o r . ( m d . e q . 0 ) ) g o t o 1 4
p = s r d / l a m
q = s i d / l a m
c a l l i n v p c ( p , q , t e t d , u , p i )
i f ( u . l e . 0 . 0 ) g o t o 1 4
n 0 = ( 2 . 3 * d d + s r d * t v a l ) / u
n 0 = n 0 + 1
1 4 g a m m = ( s i g - s i g 0 ) / l a m
y = v / 1 0 0 0 . 0
e t a = m i n ( 1 . 7 8 , 1 . 2 3 6 + 0 . 0 0 6 4 * ( 1 . 7 8 * * d d ) )
e t a = e t a * ( 1 . 0 9 - y * ( 0 . 9 2 - 0 . 8 * y ) )
n 2 = e t a * n u * ( 2 . 3 * d d + o m e g a ) / ( 3 . 0 + 4 . 0 * g a m m + 1 . 0 / e x p ( g a m m ) )
n 2 = n 2 + 1
n o p t s = m a x ( n 0 , n 1 )
n o p t s = m a x ( n 2 , n o p t s )
r e t u r n
1 5 d d = d e c d i g + 2 * m i n ( m u l t s i ( k m a x ) - 1 , 1 ) + m u l t s i ( k m a x ) / 4
n 2 = ( 2 . 3 * d d + o m e g a ) / 2 . 0
n 2 = n 2 + 1
i c m 1 = i c - 1
i f ( d d . l t . i c m 1 ) g o t o 1 7
q = 0 . 0
d o 1 6 l = 1 , n o s i n g
i f ( m u l t s i ( l ) . e q . 0 ) g o t o 1 6
d d = d e c d i g + 2 * m i n ( m u l t s i ( l ) - 1 , 1 ) + m u l t s i ( l ) / 4
s r d = s i n g r e ( l ) - s i g 0
i f ( . n o t . ( d d . g e . i c m 1 . a n d . s r d . l t . 0 . 0 ) ) g o t o 1 6
p = s r d / l a m
c a l l i n v p c ( p , q , t e t d , u , p i )
i f ( u . l e . 0 . 0 ) g o t o 1 6
n 0 l = ( 2 . 3 * d d + t v a l * s r d ) / u
4 6
-
7/27/2019 Prog Numerically
47/57
i f ( n 0 l . g t . n 0 ) n 0 = n 0 l
1 6 c o n t i n u e
n 0 = n 0 + 1
1 7 n o p t s = m a x ( n 0 , n 1 )
n o p t s = m a x ( n 2 , n o p t s )
r e t u r n
e n d
s u b r o u t i n e t s u m ( a p , l a m , s i g , n u , n o p t s , t v a l , n v , i e r )
c T h i s r o u t i n e g i v e s t h e t r a p e z o i d a l r u l e a p p r o x i m a t i o n
c f o r t h e i n v e r s e L a p l a c e t r a n s f o r m
i m p l i c i t r e a l ( a - h , o - z )
r e a l l a m , n u
r e a l p i
e x t e r n a l a p
c o m p l e x a p , s ,
r e a l r 1 m a c h ( 2 ) , r 1
d a t a r 1 m a c h ( 1 ) / Z ' 0 0 8 0 0 0 0 0 ' /
d a t a r 1 m a c h ( 2 ) / Z ' 7 f 7 f ' /
d a t a p i / 0 . 0 /
e l i m = l o g ( r 1 m a c h ( 1 ) )
i f ( p i . e q . 0 . 0 ) p i = 4 . 0 * a t a n ( 1 . 0 )
p i o v n = p i / o a t ( n o p t s )
i e r = 0
t a u = l a m * t v a l
p s i = p i o v n * t a u * n u
c = c o s ( p s i )
b r = 0
b i = 0
d b r = 0
d b i = 0
n m 1 = n o p t s - 1
n v = 0
i f ( n m 1 . e q . 0 ) g o t o 5
c R e i n s c h a l g o r i t h m
i f ( c . g t . 0 ) g o t o 2
c C a s e c o s ( p s i )
0
u = 4 . 0 * c o s ( p s i / 2 ) * * 2
4 7
-
7/27/2019 Prog Numerically
48/57
d o k = n m 1 , 1 , - 1
t h e t a = k * p i o v n
a l p h a = t h e t a * c o s ( t h e t a ) / s i n ( t h e t a )
b e t a = t h e t a + a l p h a * ( a l p h a - 1 . 0 ) / t h e t a
s r = l a m * a l p h a + s i g
s i = l a m * n u * t h e t a
s = c m p l x ( s r , s i )
= a p ( s )
g = r e a l ( )
h = i m a g ( )
a r g = a l p h a * t a u
i f ( a r g . l e . e l i m ) t h e n
e a t = 0 . 0
e l s e
e a t = e x p ( a r g )
e n d i f
b r = d b r - b r
b i = d b i - b i
d b r = u * b r - d b r + e a t * ( g * n u - h * b e t a )
d b i = u * b i - d b i + e a t * ( h * n u + g * b e t a )
e n d d o
b r = d b r - b r
b i = d b i - b i
d b r = u * b r - d b r
g o t o 4
c C a s e c o s ( p s i ) > 0
2 u = - 4 . 0 * s i n ( p s i / 2 ) * * 2
d o k = n m 1 , 1 , - 1
t h e t a = k * p i o v n
a l p h a = t h e t a * c o s ( t h e t a ) / s i n ( t h e t a )
b e t a = t h e t a + a l p h a * ( a l p h a - 1 . 0 ) / t h e t a
s r = l a m * a l p h a + s i g
s i = l a m * n u * t h e t a
s = c m p l x ( s r , s i )
= a p ( s )
g = r e a l ( )
h = i m a g ( )
a r g = a l p h a * t a u
4 8
-
7/27/2019 Prog Numerically
49/57
i f ( a r g . l e . e l i m ) t h e n
e a t = 0 . 0
e l s e
e a t = e x p ( a r g )
e n d i f
b r = d b r + b r
b i = d b i + b i
d b r = u * b r + d b r + e a t * ( g * n u - h * b e t a )
d b i = u * b i + d b i + e a t * ( h * n u + g * b e t a )
e n d d o
b r = d b r + b r
b i = d b i + b i
d b r = u * b r + d b r
c e n d o f R e i n s c h a l g o r i t h m
4 n v = d b r - b r * u / 2 . 0 - b i * s i n ( p s i )
5 s r = l a m + s i g
s = c m p l x ( s r )
= a p ( s )
g = r e a l ( )
n v = ( n v + n u * e x p ( t a u ) * g / 2 . 0 )
i f ( n v . e q . 0 . 0 ) r e t u r n
i f ( n v . g t . 0 . 0 ) t h e n
s i g n u m = 1 . 0
e l s e
s i g n u m = - 1 . 0
e n d i f
c o s t = l o g ( r 1 m a c h ( 2 ) )
o f = s i g * t v a l + l o g ( l a m * a b s ( n v ) / n o p t s )
i f ( o f . g t . c o s t ) t h e n
i e r = 1
w r i t e ( 6 , * ) ` i e r = ' , i e r
e l s e
n v = e x p ( o f ) * s i g n u m
e n d i f
r e t u r n
e n d
4 9
-
7/27/2019 Prog Numerically
50/57
s u b r o u t i n e i n v p c ( p , q , t h e t a , u , p i )
i m p l i c i t r e a l ( a - h , o - z )
r = p * p + q * q
r = s q r t ( r )
x = 1 3 . 0 / ( 5 . 0 - 2 * p - q - 0 . 4 5 * e x p ( p ) )
y = 2 * p i - x
k = 1
1 0 0 c o n t i n u e
a n g = y - t h e t a
s = s i n ( a n g )
c = c o s ( a n g )
b = q - y
e = - b / s
a r g = e / r
i f ( a r g . l e . 0 . 0 ) t h e n
u = - 1 . 0
g o t o 2 0 0
e n d i f
u = l o g ( a r g )
g = p + b * c / s + u
d y = b * g / ( 1 . 0 + e * ( e - 2 . 0 * c ) )
i f ( a b s ( d y ) . l t . 0 . 0 0 0 1 ) g o t o 2 0 0
i f ( k . g e . 1 0 0 ) g o t o 2 0 0
k = k + 1
y = y + d y
g o t o 1 0 0
2 0 0 c o n t i n u e
r e t u r n
e n d
c o m p l e x f u n c t i o n a p ( s )
c o m p l e x s , a , b , I
a p = l o g ( s ) / s
r e t u r n
e n d
s u b r o u t i n e s i n g s ( n d i m , s i n g r e , s i n g i m , m u l t s i , n o s i n g )
i m p l i c i t r e a l ( a - h , o - z )
d i m e n s i o n s i n g r e ( n d i m ) , s i n g i m ( n d i m ) , m u l t s i ( n d i m )
5 0
-
7/27/2019 Prog Numerically
51/57
n o s i n g = 1
s i n g r e ( 1 ) = 0 . 0
s i n g i m ( 1 ) = 0 . 0
m u l t s i ( 1 ) = 0
r e t u r n
e n d
r e a l f u n c t i o n n v ( t )
r e a l a
w r i t e ( 6 , * ) ` t = ' , t
a = d b l e ( t )
n v = - 0 . 5 7 7 2 1 5 6 6 4 9 0 1 5 3 2 8 6 - l o g ( a )
r e t u r n
e n d
5 1
-
7/27/2019 Prog Numerically
52/57
M a t h e m a t i c a p r o g r a m f o r T a l b o t ' s m e t h o d
T h i s p r o g r a m i s t a k e n f r o m A b a t e a n d V a l k o [ 1 ] . W e r e p r o d u c e t h i s
p r o g r a m a n d g i v e t h e r e s u l t s w h e n
f ( s ) = 1 = ( s
3
8 ) i n C h a p t e r 1 0 .
F T [ F ; t ; M ] : = M o d u l e [ f n p , r , S , t h e t a , s i g m a g ,
n p = M a x [ M , $ M a c h i n e P r e c i s i o n ] ; r = S e t P r e c i s i o n [ 2 M / ( 5 t ) , n p ] ;
S = r t h e t a ( C o t [ t h e t a ] + I ) ;
s i g m a = t h e t a + ( t h e t a C o t [ t h e t a ] - 1 ) C o t [ t h e t a ] ;
( r / M ) P l u s @ @ A p p e n d [ T a b l e [ R e [ E x p [ t S ] ( 1 + I s i g m a ) F [ S ] ] ,
ft h e t a , P i / M , ( M - 1 ) P i / M , P i / M
g] ,
( 1 / 2 ) E x p [ r t ] F [ r ] ] ]
W h e n
f ( s ) = 1 = ( s
3
8 ) a n d w e r e q u i r e t h e i n v e r s e t r a n s f o r m f o r
t = 0 : 5 ; 1 ;
; 2
6
w e n e e d t o i m p l e m e n t t h e a b o v e w i t h t h e
i n s t r u c t i o n
D o [ P r i n t [ F T [
1
#
3
8
& , 2
k
, 3 0 0 ] ] , f
k , - 1 , 6 g
]
M a t h e m a t i c a p r o g r a m f o r G a v e r ' s m e t h o d
A b a t e a n d V a l k o g i v e a w e b r e f e r e n c e f o r t h e i r G W R ( G a v e r W y n n
r h o ) a l g o r i t h m . T h e p r o g r a m b e l o w w a s w r i t t e n i n d e p e n d e n t l y b y
m y c o l l e a g u e D r . R . B e h r e n d .
F [ f , n , t , M ] : = M o d u l e
n p , a , n p = M a x [ M , $ M a c h i n e P r e c i s i o n ] ;
a = S e t P r e c i s i o n
L o g [ 2 ]
t
, n p
;
( 2 n ) !
n ! ( n 1 ) !
a S u m [ (
1 )
k
B i n o m i a l [ n , k ] f [ ( k + n ) a ] , f
k , 0 , n g
]
R [ f , i , 0 , t , M ] : = R [ f , i , 0 , t , M ] = 0 ;
R [ f , i , 1 , t , M ] : = R [ f , i , 1 , t , M ] = F [ f , i , t , M ] ;
R [ f , i , k , t , M ] : = R [ f , i , k , t , M ]
= R [ f , i + 1 , k - 2 , t , M ] +
k - 1
R [ f , i + 1 , k - 1 , t , M ] - R [ f , i , k - 1 , t , M ]
T h u s i f w e w a n t e d t o e v a l u a t e t h e i n v e r s e t r a n s f o r m o f 1 = ( s
2
+ 1 )
f o r t = 0 : 5 ; 1 ;
; 2
6
w e n e e d t o i m p l e m e n t t h e a b o v e w i t h t h e
i n s t r u c t i o n
5 2
-
7/27/2019 Prog Numerically
53/57
D o [ P r i n t [ R [
1
#
2
+ 1
& , 1 , 7 5 , 2
k
, 3 0 0 ] ] , f
k , - 1 , 6 g
]
5 3
-
7/27/2019 Prog Numerically
54/57
P r o g r a m f o r A p p l i c a t i o n 1
G a v e r ' s m e t h o d
c U s e s G a v e r m e t h o d i n c o n j u n c t i o n w i t h t h e - a l g o r i t h m
c R e q u i r e s i n p u t o f o d d i n t e g e r n
4 5
c R e q u i r e s i n p u t o f v a r i a b l e t
c R e q u i r e s a f u n c t i o n s u b r o u t i n e f u n c t ( s , f ) t o
c e v a l u a t e t h e L a p l a c e t r a n s f o r m
f ( s ) f o r r e a l s .
i n t e g e r n
r e a d ( 5 , * ) n
c a l l g a v e r ( n )
s t o p
e n d
s u b r o u t i n e g a v e r ( n )
r e a l r h o 1 ( 4 5 ) , r h o 2 ( 4 5 ) , a
m = n / 2
i f ( n . e q . 2 * m ) g o t o 1 0 0
d o i = 1 , n
r h o 1 ( i ) = 0
e n d d o
c a l l s e q u e n c e ( n , r h o 2 )
d o k = 1 , n - 1
d o i = 1 , n - k
r h o 1 ( i ) = r h o 1 ( i + 1 ) + o a t ( k ) / ( r h o 2 ( i + 1 ) - r h o 2 ( i ) )
w r i t e ( 6 , * ) r h o 1 ( i )
e n d d o
w r i t e ( 6 , * ) ` n e w c y c l e '
d o i = 1 , n - k
a = r h o 1 ( i )
r h o 1 ( i ) = r h o 2 ( i )
r h o 2 ( i ) = a
e n d d o
e n d d o
g o t o 2 0 0
1 0 0 w r i t e ( 6 , * ) ` E r r o r , n n o t o d d '
2 0 0 r e t u r n
5 4
-
7/27/2019 Prog Numerically
55/57
-
7/27/2019 Prog Numerically
56/57
1 0 0 y 0 = x * x * x - ( ( s + 4 ) / 3 ) * x * x + ( 1 . 0 / 3 . 0 )
y 1 = 3 * x * x - 2 * ( ( s + 4 ) / 3 ) * x
z =