<s> """<STR_LIT>""" <EOL> """<STR_LIT>""" <EOL> import numpy as np <EOL> import scipy . linalg as linalg <EOL> from FDExplicitEu import FDExplicitEu <EOL> class FDImplicitEu ( FDExplicitEu ) : <EOL> def _setup_coefficients_ ( self ) : <EOL> self . a = <NUM_LIT:0.5> * ( self . r * self . dt * self . i_values - <EOL> ( self . sigma ** <NUM_LIT:2> ) * self . dt * ( self . i_values ** <NUM_LIT:2> ) ) <EOL> self . b = <NUM_LIT:1> + ( self . sigma ** <NUM_LIT:2> ) * self . dt * ( self . i_values ** <NUM_LIT:2> ) + self . r * self . dt <EOL> self . c = - <NUM_LIT:0.5> * ( self . r * self . dt * self . i_values + <EOL> ( self . sigma ** <NUM_LIT:2> ) * self . dt * ( self . i_values ** <NUM_LIT:2> ) ) <EOL> self . coeffs = np . diag ( self . a [ <NUM_LIT:2> : self . M ] , - <NUM_LIT:1> ) + np . diag ( self . b [ <NUM_LIT:1> : self . M ] ) + np . diag ( self . c [ <NUM_LIT:1> : self . M - <NUM_LIT:1> ] , <NUM_LIT:1> ) <EOL> def _traverse_grid_ ( self ) : <EOL> """<STR_LIT>""" <EOL> P , L , U = linalg . lu ( self . coeffs ) <EOL> aux = np . zeros ( self . M - <NUM_LIT:1> ) <EOL> for j in reversed ( range ( self . N ) ) : <EOL> aux [ <NUM_LIT:0> ] = np . dot ( - self . a [ <NUM_LIT:1> ] , self . grid [ <NUM_LIT:0> , j ] ) <EOL> x1 = linalg . solve ( L , self . grid [ <NUM_LIT:1> : self . M , j + <NUM_LIT:1> ] + aux ) <EOL> x2 = linalg . solve ( U , x1 ) <EOL> self . grid [ <NUM_LIT:1> : self . M , j ] = x2 <EOL> if __name__ == "<STR_LIT:__main__>" : <EOL> from FDImplicitEu import FDImplicitEu <EOL> option = FDImplicitEu ( <NUM_LIT:50> , <NUM_LIT:50> , <NUM_LIT:0.1> , <NUM_LIT> / <NUM_LIT> , <NUM_LIT> , <NUM_LIT:100> , <NUM_LIT:100> , <EOL> <NUM_LIT:100> , False ) <EOL> print option . price ( ) <EOL> option = FDImplicitEu ( <NUM_LIT:50> , <NUM_LIT:50> , <NUM_LIT:0.1> , <NUM_LIT> / <NUM_LIT> , <NUM_LIT> , <NUM_LIT:100> , <NUM_LIT:100> , <EOL> <NUM_LIT> , False ) <EOL> print option . price ( ) </s>
