Wst˛ep do SciPy
Transkrypt
Wst˛ep do SciPy
Wstep ˛ do SciPy Janusz Szwabiński [email protected] Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.1/29 Wstep ˛ do SciPy Kilka uwag ogólnych Macierze Układy równań liniowych Równania nieliniowe Interpolacja Całkowanie numeryczne Przykłady (z list zadań) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.2/29 Wymagania gcc/g77 Python (2.1.x, 2.2x lub 2.3.x) z obsługa˛ biblioteki zlib Numerical Python ( 23.5) biblioteki Atlas i FFTW (wydajność!) WxPython, PyGist, Gnuplot F2PY Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.3/29 Pierwsze kroki zasoby w sieci http://www.scipy.org sposoby importowania >>> from s c i p y import >>> import s c i p y pomoc >>> s c i p y . i n f o ( s c i p y . o p t i m i z e . fmin ) kod źródłowy funkcji >>> s c i p y . s o u r c e ( s c i p y . o p t i m i z e . fmin ) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.4/29 Moduły dostepne ˛ w pakiecie cluster algorytmy klasteryzacji danych cow pakiet do programowania równoległego fftpack domyślny pakiet FFT fftw pakiet do FFT oparty o bibliotek˛e FFTW ga algorytmy genetyczne gplt pakiet do wykresów w Gnuplocie integrate całkowanie numeryczne interpolate interpolacja io funkcje wejścia/wyjścia linalg algebra liniowa optimize zagadnienia optymalizacji plt pakiet do wykresów w WxPython Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.5/29 signal przetwarzanie sygnałów special funkcje specjalne stats funkcje statystyczne xplt pakiet do wykresów w Gist Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.6/29 Macierze Tworzenie macierzy >>> A1= s c i p y . mat ( ’ [ 1 3 5 ; 2 5 1 ; 2 3 8 ] ’ ) >>> A1 Matrix ( [ [ 1 , 3 , 5 ] , [2 , 5 , 1] , [2 , 3 , 8]]) >>> A2= s c i p y . mat ( ’ [ 5 3 5 ; 2 3 1 ; 4 3 1 ] ’ ) Dodawanie macierzy >>> A1+A2 Matrix ( [ [ 6 , 6 , 10] , [ 4, 8, 2] , [ 6, 6, 9]]) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.7/29 Mnożenie przez skalar >>> 2 A1 Matrix ( [ [ 2 , 6 , 10] , [ 4 , 10 , [ 4, 2] , 6 , 16]]) Mnożenie macierzy >>> A1 A2 Matrix ( [ [ 3 1 , 2 7 , 1 3 ] , [24 , 24 , 16] , [48 , 39 , 2 1 ] ] ) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.8/29 Macierz odwrotna >>> A = s c i p y . mat ( ’ [ 1 3 5 ; 2 5 1 ; 2 3 8 ] ’ ) >>> B = A. I >>> A B Matrix ( [ [ 1 . 0 0 0 0 0 0 0 0 e +00 , 5.55111512e 17 , 4.85722573e 17] , [ 1.38777878 e 16 , 1 . 0 0 0 0 0 0 0 0 e +00 , 7.63278329e [ 2.22044605 e 16 , 5.55111512e 1.00000000e +00]]) 17 , 17] , >>> C= s c i p y . l i n a l g . inv (A) >>> A C Matrix ( [ [ 00 , 1.00000000e 6.93889390 e 17 , 1.04083409e 16] , [ 2.77555756 e 16 , 1 . 0 0 0 0 0 0 0 0 e +00 , 1.31838984e 16] , [ 3.33066907 e 16 , 0 . 0 0 0 0 0 0 0 0 e +00 , 1.00000000e +00]]) >>> s c i p y . round (A C) array ( [ [ 1 . , 0. , 0.] , [ 0. , 1. , 0.] , [ 0. , 0. , 1.]]) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.9/29 Wyznacznik macierzy >>> A = s c i p y . mat ( ’ [ 1 3 5 ; 2 5 1 ; 2 3 8 ] ’ ) >>> s c i p y . l i n a l g . det (A) 25.000000000000004 Norma macierzy >>> A = s c i p y . mat ( ’ [ 1 5 2 ; 2 4 1 ; 3 6 2 ] ’ ) >>> s c i p y . l i n a l g . norm (A, 2 ) 9.918391609146008 >>> s c i p y . l i n a l g . norm (A, 1 ) 15 >>> s c i p y . l i n a l g . norm (A, s c i p y . i n f ) 11 Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.10/29 Wartości i wektory własne >>> A = s c i p y . mat ( ’ [ 1 5 2 ; 2 4 1 ; 3 6 2 ] ’ ) >>> l a , v = s c i p y . l i n a l g . e i g (A) >>> l 1 , l 2 , l 3 = l a >>> p r i n t l 1 , l 2 , l 3 (7.95791620491+0 j ) ( 1.25766470568+0 j ) ( 0 . 2 9 9 7 4 8 5 0 0 7 6 7 + 0 j ) >>> p r i n t v [ : , 0 ] [ 0.5297175 0.44941741 0.71932146] >>> p r i n t v [ : , 1 ] [ 0.90730751 0.28662547 0.30763439] >>> p r i n t v [ : , 2 ] [ 0.28380519 0.39012063 0.87593408] Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.11/29 Rozkład LU >>> A = s c i p y . mat ( ’ [ 1 3 5 ; 2 5 1 ; 2 3 8 ] ’ ) >>> P , L ,U = s c i p y . l i n a l g . l u (A) >>> P array ( [ [ 0 . , 1. , 0.] , [ 0. , 0. , 1.] , [ 1. , 0. , 0.]]) >>> L array ( [ [ 1 . , 0. , 0. ], [ 1. , 1. , 0. ], 0.25 , 1. ]]) [ 0.5 , >>> U array ( [ [ 2 . , 5. , 1. ], [ 0. , 2. , 7. ], [ 0. , 0. , 6.25]]) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.12/29 Układy równań liniowych >>> A = s c i p y . mat ( ’ [ 1 3 5 ; 2 5 1 ; 2 3 8 ] ’ ) >>> b = s c i p y . mat ( ’ [ 1 0 ; 8 ; 3 ] ’ ) >>> A. I b Matrix ( [ [ 9.28] , [ 5.16] , [ 0.76]]) >>> s c i p y . l i n a l g . s o l v e (A, b ) # l e p s z a metoda array ( [ [ 9.28] , [ 5.16] , [ 0.76]]) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.13/29 Równania nieliniowe >>> def fun ( x ) : ... return x 2 2 ... >>> s c i p y . o p t i m i z e . f s o l v e ( fun , 1 ) 1.4142135623730947 Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.14/29 Interpolacja >>> x = s c i p y . arange ( 0 , 2 s c i p y . p i + s c i p y . p i /4 ,2 s c i p y . p i /8) >>> y = s c i p y . s i n ( x ) >>> t c k = s c i p y . i n t e r p o l a t e . s p l r e p ( x , y , s =0) >>> xnew = s c i p y . arange ( 0 , 2 s c i p y . pi , s c i p y . p i /50) >>> ynew = s c i p y . i n t e r p o l a t e . s p l e v ( xnew , tck , der =0) >>> s c i p y . g p l t . p l o t ( xnew , ynew , ’w l ’ , x , y , ’w p ’ ) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.15/29 Całkowanie numeryczne >>> def fun ( x ) : ... r e t u r n s c i p y . exp( x x ) ... >>> wynik = s c i p y . i n t e g r a t e . quad ( fun , scipy . Inf , scipy . Inf ) [ 0 ] >>> dokladny_wynik = s c i p y . s q r t ( s c i p y . p i ) >>> wynik dokladny_wynik 2.2204460492503131 e 16 Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.16/29 Przykłady (z list zadań) 1 2 1 1 2 3 1 2 4 1 0 1 1 0 1 0 Znajdź rozkład LU macierzy Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.17/29 >>> import s c i p y >>> A= s c i p y . mat ( ’ [ 0 1 2 1; 1 2 3 1 ; 2 4 1 0 ; 1 1 0 1] ’) >>> P , L ,U = s c i p y . l i n a l g . l u (A) >>> P array ( [ [ 0 . , 0. , 1. , 0.] , [ 0. , 0. , 0. , 1.] , [ 0. , 1. , 0. , 0.] , [ 1. , 0. , 0. , 0.]]) >>> L array ( [ [ 1 . , 0. , 0. , 0. ], 0.5 , 1. , 0. , 0. ], [ 0.5 , 0. , 1. , 0. ], [ 0. , 0.33333333 , 0.73333333 , 1. ]]) [ Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.18/29 >>> U array ( [ [ 2 . , 4. , 1. , 0. ], [ 0. , 3. , 0.5 , 1. ], [ 0. , 0. , 2.5 , 1. ], [ 0. , 0. , 0. , 2.06666667]]) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.19/29 4 1 4 9 16 1 8 27 64 2 Oblicz b A x̃ numerycznym 1 16 81 256 ∞, x 10 44 3 2 1 Rozwia˛ż układ równań . 190 gdzie x̃ jest rozwiazaniem ˛ Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.20/29 >>> import s c i p y >>> A = s c i p y . mat ( ’ [ 1 2 3 4 ; 1 4 9 1 6 ; 1 8 27 6 4 ; 1 16 81 2 5 6 ] ’ ) >>> b = s c i p y . mat ( ’ [ 2 ; 1 0 ; 4 4 ; 1 9 0 ] ’ ) >>> r e s = s c i p y . l i n a l g . s o l v e (A, b ) >>> r e s array ( [ [ 1.] , [ 1.] , [ 1.] , [ 1.]]) >>> norma = s c i p y . l i n a l g . norm ( b A r e s , s c i p y . i n f ) >>> norma 0.0 Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.21/29 W tabeli podana jest liczba ludności na Ziemi w latach 1850-2025 (szacowanie): rok 1850 1950 1960 1970 1985 2000 2025 ludność (mld) 1,402 2,486 3,014 3,683 4,842 6,127 8,177 Wyznacz interpolujac ˛ a˛ funkcj˛e sklejana˛ Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.22/29 >>> import s c i p y >>> from MyData import # p a t r z p y t h o n _ i n t r o . pdf >>> dane=Data ( ) >>> dane . f r e a d ( ’ lud . dat ’ ) >>> s p l i n e = s c i p y . i n t e r p o l a t e . s p l r e p ( dane . x , dane . y ) >>> xnew = s c i p y . arange ( 1 8 5 0 , 2 0 2 5 , 1 ) >>> ynew = s c i p y . i n t e r p o l a t e . s p l e v ( xnew , s p l i n e ) >>> s c i p y . g p l t . p l o t ( xnew , ynew , , dane . x , dane . y ) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.23/29 9 dane f. sklejana 8 7 6 5 4 3 2 1 0 1840 1860 1880 1900 1920 1940 1960 1980 2000 2020 2040 Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.24/29 2π 0 exp 2 1/2 sin x 1 2π Oblicz całk˛e dx >>> import s c i p y >>> def fun ( x ) : ... r e t u r n s c i p y . exp ( s c i p y . s i n ( x )/ s c i p y . s q r t ( 2 ) ) / ( 2 s c i p y . p i ) ... >>> c a l k a = s c i p y . i n t e g r a t e . quad ( fun , 0 , 2 s c i p y . p i ) >>> c a l k a ( 1 . 1 2 8 9 6 0 9 2 9 4 5 4 1 9 0 2 , 7 . 4 2 9 0 7 0 8 8 9 8 6 4 7 6 1 2 e 09) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.25/29 3x Ustal punkt, w którym przecinaja˛ si˛e krzywe y oraz y e x >>> import s c i p y >>> def fun ( x ) : ... r e t u r n s c i p y . exp ( x) 3 x ... >>> pp = s c i p y . o p t i m i z e . f s o l v e ( fun , 1 ) >>> pp 0.61906128673594507 >>> fun ( pp ) 0.0 Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.26/29 18x3 38x2 57x 9x4 14 Znajdź pierwiastki rzeczywiste równania 0 >>> import s c i p y >>> w i e l = s c i p y . poly1d ( [ 9 , 1 8 , 3 8 , 57 ,14]) >>> p r i n t w i e l 4 3 2 9 x + 18 x + 38 x >>> f o r x i n w i e l . r : ... 57 x + 14 # w i e l . r zawiera w s z y s t k i e p i e r w i a s t k i i f x . imag ==0: p r i n t x ... (0.666666666667+0 j ) (0.333333333333+0 j ) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.27/29 Jest dana macierz hermitowska 2i 1 3i 2 2 i 2 2i 3 3 i 1 2i 2 i 1 3i 2 2i 3 i 1 1 i 1 A 1 i 4 Znajdź wartości i wektory własne macierzy A Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.28/29 >>> import s c i p y >>> A = s c i p y . mat ( ’ [ 1 1 1 j 1 2 j 1 3 j ; 1+1 j 2 2 1 j 2 2 j ; 1+2 j 2+1 j 3 3 1 j ; 1+3 j 2+2 j 3+1 j 4 ] ’ ) >>> l a , v= s c i p y . l i n a l g . e i g (A) >>> f o r l i n l a : p r i n t l ... (10.3993569323 ( 1 . 2 9 6 6 5 8 7 9 2 1 7e 17 j ) 1 . 2 2 1 5 6 5 5 3 5 8 3 + 1 . 3 6 6 9 9 8 1 5 5 7 8 e 16 j ) ( 0 . 5 1 8 6 6 7 1 7 0 8 0 7 + 1 . 4 6 0 8 9 1 2 6 5 7 e 16 j ) (0.303541432686 4 . 0 7 9 1 4 2 1 5 5 2 6 e 17 j ) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński – p.29/29