SymPy czyli matematyka w Pythonie



Podobne dokumenty
SymPy matematyka symboliczna w Pythonie

Wspomaganie obliczeń matematycznych. dr inż. Michał Michna

dr inż. Michał Michna WSPOMAGANIE OBLICZEŃ MATEMATYCZNYCH

Wspomaganie obliczeń matematycznych. dr inż. Michał Michna

Pakiety matematyczne. Matematyka Stosowana. dr inż. Krzysztof Burnecki

Adam Wójs <adam[shift+2]wojs.pl> git --wprowadzenie

Wykresy i interfejsy użytkownika

Równania liniowe i nieliniowe

Obliczenia inżynierskie. oprogramowanie matematyczne

Obliczenia Naukowe. Wykład 11:Pakiety do obliczeń: naukowych i inżynierskich Przegląd i porównanie. Bartek Wilczyński

Rozproszony system kontroli wersji GIT. Piotr Macuk

Elementy metod numerycznych - zajęcia 9

Jak usprawnić tworzenie i zarządzanie stroną na drupalu. Maciej Łukiański

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

Język ludzki kod maszynowy

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

Równania różniczkowe zwyczajne

Open Source w służbie developerom

Komputerowe Wspomaganie Obliczeń. dr Robert Kowalczyk

Programowanie obiektowe

WYMAGANIA EDUKACYJNE NA POSZCZEGÓLNE OCENY MATEMATYKA STOSOWANA - KLASA II I. POWTÓRZENIE I UTRWALENIE WIADOMOŚCI Z ZAKRESU KLASY PIERWSZEJ

Odniesienie do kierunkowych efektów kształcenia Zna podstawowe możliwości pakietu Matlab

Analiza Algebra Podstawy programowania strukturalnego. Podstawowe wiadomości o funkcjach Podstawowe wiadomości o macierzach Podstawy programowania

WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI 1. Zalecana znajomość matematyki odpowiadająca maturze na poziomie podstawowym

Egzamin z Metod Numerycznych ZSI, Grupa: A

Wstęp do programowania

Wstęp do JUNG. Omówione elementy wykorzystane w Edge Color Project

KARTA PRZEDMIOTU. 1. NAZWA PRZEDMIOTU: Algebra liniowa (ALL010) 2. KIERUNEK: MATEMATYKA. 3. POZIOM STUDIÓW: I stopnia 4. ROK/ SEMESTR STUDIÓW: I/1

GIT. System Kontroli wersji GIT. Rafał Kalinowski

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Git rozproszony system kontroli wersji

Analiza Algebra Podstawy programowania strukturalnego. Podstawowe wiadomości o funkcjach Podstawowe wiadomości o macierzach Podstawy programowania

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie I

Zaawansowany kurs języka Python

Spis treści. Przedmowa... 9

WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI 1. Zalecana znajomość matematyki odpowiadająca maturze na poziomie podstawowym

Wykład z okazji dnia liczby π

Próbny egzamin z matematyki dla uczniów klas II LO i III Technikum. w roku szkolnym 2012/2013

Obliczenia Symboliczne

Odniesienie symbol I [1] [2] [3] [4] [5] Efekt kształcenia

SCENARIUSZ LEKCJI. TEMAT LEKCJI: Projektowanie rozwiązania prostych problemów w języku C++ obliczanie pola trójkąta

Egzamin z Metod Numerycznych ZSI, Egzamin, Gr. A

Programowanie funkcyjne w Pythonie

Kierunek: Matematyka Poziom studiów: Studia II stopnia Forma i tryb studiów: Stacjonarne

Wykład Ćwiczenia Laboratorium Projekt Seminarium Liczba godzin zajęć zorganizowanych w Uczelni 30 30

AiRZ-0531 Analiza matematyczna Mathematical analysis

Wykład 7 - Inne moduły wspierające obliczenia numeryczne

Opis efektów kształcenia dla programu kształcenia (kierunkowe efekty kształcenia) WIEDZA. rozumie cywilizacyjne znaczenie matematyki i jej zastosowań

Całka nieoznaczona, podstawowe wiadomości

Ćwiczenie 4. Matlab - funkcje, wielomiany, obliczenia symboliczne

ROZKŁAD MATERIAŁU NAUCZANIA KLASA 1, ZAKRES PODSTAWOWY

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Testy jednostkowe Wybrane problemy testowania metod rekurencyjnych

WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI 1. Zalecana znajomość matematyki odpowiadająca maturze na poziomie podstawowym

MATHCAD Obliczenia symboliczne

Wykorzystanie programów komputerowych do obliczeń matematycznych, cz. 2/2

Wykorzystanie programów komputerowych do obliczeń matematycznych

Algorytmy i struktury danych

Python wstęp do programowania dla użytkowników WCSS

Wykorzystanie programów komputerowych do obliczeń matematycznych, cz. 2/2

Programowanie w języku Python. Grażyna Koba

Co zostanie wypisane na ekranie? (1)

Nowa podstawa programowa przedmiotu informatyka w szkole ponadpodstawowej

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

CVS system kontroli wersji

Repozytorium Uniwersytetu Jagiellońskiego

Technologie cyfrowe semestr letni 2018/2019

PWSZ w Tarnowie Instytut Politechniczny Elektrotechnika

Sphinx - system dokumentacji dla Pythona

Rok akademicki: 2013/2014 Kod: EIB s Punkty ECTS: 6. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

PRZEWODNIK PO PRZEDMIOCIE

Metody numeryczne w przykładach

Projekt przejściowy 2015/2016 BARTOSZ JABŁOŃSKI, TOMASZ JANICZEK

Programowanie dynamiczne

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

KIERUNKOWE EFEKTY KSZTAŁCENIA


wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

KARTA KURSU (realizowanego w module specjalności) Metody numeryczne

5. Całka nieoznaczona

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

Internetowa ogólnopolska baza informatycznych projektów badawczych otwartej innowacji Platforma współpracy SPINACZ 1/46

Metody numeryczne. materiały do wykładu dla studentów

Excel w obliczeniach naukowych i inżynierskich. Wydanie II.

KARTA PRZEDMIOTU. 1. NAZWA PRZEDMIOTU: Analiza zespolona. 2. KIERUNEK: Matematyka. 3. POZIOM STUDIÓW: I stopnia 4. ROK/ SEMESTR STUDIÓW: II/4

Rozkład materiału nauczania

KLASA II LO Poziom rozszerzony (wrzesień styczeń)

Python. Skąd taka nazwa? Kurs systemu UNIX 1

GEODEZJA I KARTOGRAFIA I stopień (I stopień / II stopień) Ogólnoakademicki (ogólnoakademicki / praktyczny)

REFERAT PRACY DYPLOMOWEJ

Symulacja obliczeń kwantowych

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Zaawansowany kurs języka Python

Wstęp do programowania

Kurs rozszerzony języka Python

Transkrypt:

SymPy czyli matematyka w Pythonie Mateusz Paprocki <mattpap@gmail.com> Wrocław University of Technology University of Nevada, Reno 8 października 2010

Plan prezentacji Matematyka w Pythonie Wprowadzenie do SymPy Architektura systemu Przykłady zastosowań Sesja interaktywna Plany na przyszłość 2 z 24

Matematyka w Pythonie Python: add, sub, mul, div,... math: biblioteka numeryczna jedynie funkcje rzeczywiste logarytmy i funkcja wykładnicza funkcje trygonometryczne i hiperboliczne NumPy & SciPy biblioteki numeryczne działania na macierzach funkcje rzeczywiste i zespolone optymalizacja, interpolacja,... Swiginac, Pynac, Sage,..., SymPy 3 z 24

Matematyka w Pythonie Python: add, sub, mul, div,... math: biblioteka numeryczna jedynie funkcje rzeczywiste logarytmy i funkcja wykładnicza funkcje trygonometryczne i hiperboliczne NumPy & SciPy biblioteki numeryczne działania na macierzach funkcje rzeczywiste i zespolone optymalizacja, interpolacja,... Swiginac, Pynac, Sage,..., SymPy 3 z 24

Matematyka w Pythonie Python: add, sub, mul, div,... math: biblioteka numeryczna jedynie funkcje rzeczywiste logarytmy i funkcja wykładnicza funkcje trygonometryczne i hiperboliczne NumPy & SciPy biblioteki numeryczne działania na macierzach funkcje rzeczywiste i zespolone optymalizacja, interpolacja,... Swiginac, Pynac, Sage,..., SymPy 3 z 24

Matematyka w Pythonie Python: add, sub, mul, div,... math: biblioteka numeryczna jedynie funkcje rzeczywiste logarytmy i funkcja wykładnicza funkcje trygonometryczne i hiperboliczne NumPy & SciPy biblioteki numeryczne działania na macierzach funkcje rzeczywiste i zespolone optymalizacja, interpolacja,... Swiginac, Pynac, Sage,..., SymPy 3 z 24

Dlaczego SymPy? Istnieje wiele systemów matematycznych: Systemy komercyjne: Mathematica, Maple, Magma,... Systemy Open Source: AXIOM, GiNaC, Maxima, PARI, Sage, Singular, Yacas,... Problemy: wszystkie wymyślają swój własny język programowania musimy się takiego języka nauczyć (często bywają uciążliwe) podział na jądro systemu oraz bibliotekę matematyczną wyjątki: GiNaC and Sage wszystkie wymagają kompilacji niekorzystne w użyciu interaktywnym 4 z 24

Dlaczego SymPy? Istnieje wiele systemów matematycznych: Systemy komercyjne: Mathematica, Maple, Magma,... Systemy Open Source: AXIOM, GiNaC, Maxima, PARI, Sage, Singular, Yacas,... Problemy: wszystkie wymyślają swój własny język programowania musimy się takiego języka nauczyć (często bywają uciążliwe) podział na jądro systemu oraz bibliotekę matematyczną wyjątki: GiNaC and Sage wszystkie wymagają kompilacji niekorzystne w użyciu interaktywnym 4 z 24

Dlaczego SymPy? Istnieje wiele systemów matematycznych: Systemy komercyjne: Mathematica, Maple, Magma,... Systemy Open Source: AXIOM, GiNaC, Maxima, PARI, Sage, Singular, Yacas,... Problemy: wszystkie wymyślają swój własny język programowania musimy się takiego języka nauczyć (często bywają uciążliwe) podział na jądro systemu oraz bibliotekę matematyczną wyjątki: GiNaC and Sage wszystkie wymagają kompilacji niekorzystne w użyciu interaktywnym 4 z 24

Co to jest SymPy? SymPy jest to biblioteka pisana w Pythonie do wykonywania: obliczeń symbolicznych np. wyznaczanie pochodnych, całek, sum, granic, szeregów obliczeń algebraicznych np. wyznaczanie izomorfizmów ciał algebraicznych obliczeń numerycznych np. rozwiązywanie równań nieliniowych 5 z 24

Co to jest SymPy? SymPy jest to biblioteka pisana w Pythonie do wykonywania: obliczeń symbolicznych np. wyznaczanie pochodnych, całek, sum, granic, szeregów obliczeń algebraicznych np. wyznaczanie izomorfizmów ciał algebraicznych obliczeń numerycznych np. rozwiązywanie równań nieliniowych 5 z 24

Co to jest SymPy? SymPy jest to biblioteka pisana w Pythonie do wykonywania: obliczeń symbolicznych np. wyznaczanie pochodnych, całek, sum, granic, szeregów obliczeń algebraicznych np. wyznaczanie izomorfizmów ciał algebraicznych obliczeń numerycznych np. rozwiązywanie równań nieliniowych 5 z 24

Co to jest SymPy? SymPy jest to biblioteka pisana w Pythonie do wykonywania: obliczeń symbolicznych np. wyznaczanie pochodnych, całek, sum, granic, szeregów obliczeń algebraicznych np. wyznaczanie izomorfizmów ciał algebraicznych obliczeń numerycznych np. rozwiązywanie równań nieliniowych 5 z 24

Przykładowa sesja z SymPy import sympy i definicja symboli >>> from sympy import * >>> var ( x,y ) całkowanie oraz upraszczanie wyrażeń >>> f = (x - tan (x)) / tan (x)**2 + tan (x) >>> integrate (f, x) log (1 + tan (x)**2)/2 - x/ tan (x) - x**2/2 >>> ratsimp (_. diff (x)) == f True rozkład wielomianów na czynniki >>> factor (x**2 + y**2, extension =I) (x - I*y)*(x + I*y) wyznaczanie wartości funkcji specjalnych >>> gamma ( pi ). evalf (n=30) 2.28803779534003241795958890906 6 z 24

Przykładowa sesja z SymPy import sympy i definicja symboli >>> from sympy import * >>> var ( x,y ) całkowanie oraz upraszczanie wyrażeń >>> f = (x - tan (x)) / tan (x)**2 + tan (x) >>> integrate (f, x) log (1 + tan (x)**2)/2 - x/ tan (x) - x**2/2 >>> ratsimp (_. diff (x)) == f True rozkład wielomianów na czynniki >>> factor (x**2 + y**2, extension =I) (x - I*y)*(x + I*y) wyznaczanie wartości funkcji specjalnych >>> gamma ( pi ). evalf (n=30) 2.28803779534003241795958890906 6 z 24

Przykładowa sesja z SymPy import sympy i definicja symboli >>> from sympy import * >>> var ( x,y ) całkowanie oraz upraszczanie wyrażeń >>> f = (x - tan (x)) / tan (x)**2 + tan (x) >>> integrate (f, x) log (1 + tan (x)**2)/2 - x/ tan (x) - x**2/2 >>> ratsimp (_. diff (x)) == f True rozkład wielomianów na czynniki >>> factor (x**2 + y**2, extension =I) (x - I*y)*(x + I*y) wyznaczanie wartości funkcji specjalnych >>> gamma ( pi ). evalf (n=30) 2.28803779534003241795958890906 6 z 24

Przykładowa sesja z SymPy import sympy i definicja symboli >>> from sympy import * >>> var ( x,y ) całkowanie oraz upraszczanie wyrażeń >>> f = (x - tan (x)) / tan (x)**2 + tan (x) >>> integrate (f, x) log (1 + tan (x)**2)/2 - x/ tan (x) - x**2/2 >>> ratsimp (_. diff (x)) == f True rozkład wielomianów na czynniki >>> factor (x**2 + y**2, extension =I) (x - I*y)*(x + I*y) wyznaczanie wartości funkcji specjalnych >>> gamma ( pi ). evalf (n=30) 2.28803779534003241795958890906 6 z 24

Założenia projektu biblioteka pisana w Pythonie bez nowego środowiska, języka,... działa od razu na dowolnej platformie moduły nie Pythonowe mogą być opcjonalne prostota architektury relatywnie mała baza kodu źródłowego łatwość w rozbudowie na dowolnym poziomie szeroka funkcjonalność obsługa najważniejszych działów matematyki wspieranie zaawansowanych metod i algorytmów optymalizacja wydajności w Cythonie opcjonalnie, jako dodatek do wersji interpretowanej liberalna licencja: BSD duża swoboda w użytkowaniu SymPy 7 z 24

Założenia projektu biblioteka pisana w Pythonie bez nowego środowiska, języka,... działa od razu na dowolnej platformie moduły nie Pythonowe mogą być opcjonalne prostota architektury relatywnie mała baza kodu źródłowego łatwość w rozbudowie na dowolnym poziomie szeroka funkcjonalność obsługa najważniejszych działów matematyki wspieranie zaawansowanych metod i algorytmów optymalizacja wydajności w Cythonie opcjonalnie, jako dodatek do wersji interpretowanej liberalna licencja: BSD duża swoboda w użytkowaniu SymPy 7 z 24

Założenia projektu biblioteka pisana w Pythonie bez nowego środowiska, języka,... działa od razu na dowolnej platformie moduły nie Pythonowe mogą być opcjonalne prostota architektury relatywnie mała baza kodu źródłowego łatwość w rozbudowie na dowolnym poziomie szeroka funkcjonalność obsługa najważniejszych działów matematyki wspieranie zaawansowanych metod i algorytmów optymalizacja wydajności w Cythonie opcjonalnie, jako dodatek do wersji interpretowanej liberalna licencja: BSD duża swoboda w użytkowaniu SymPy 7 z 24

Założenia projektu biblioteka pisana w Pythonie bez nowego środowiska, języka,... działa od razu na dowolnej platformie moduły nie Pythonowe mogą być opcjonalne prostota architektury relatywnie mała baza kodu źródłowego łatwość w rozbudowie na dowolnym poziomie szeroka funkcjonalność obsługa najważniejszych działów matematyki wspieranie zaawansowanych metod i algorytmów optymalizacja wydajności w Cythonie opcjonalnie, jako dodatek do wersji interpretowanej liberalna licencja: BSD duża swoboda w użytkowaniu SymPy 7 z 24

Założenia projektu biblioteka pisana w Pythonie bez nowego środowiska, języka,... działa od razu na dowolnej platformie moduły nie Pythonowe mogą być opcjonalne prostota architektury relatywnie mała baza kodu źródłowego łatwość w rozbudowie na dowolnym poziomie szeroka funkcjonalność obsługa najważniejszych działów matematyki wspieranie zaawansowanych metod i algorytmów optymalizacja wydajności w Cythonie opcjonalnie, jako dodatek do wersji interpretowanej liberalna licencja: BSD duża swoboda w użytkowaniu SymPy 7 z 24

SymPy w liczbach 2006 teraz 100 autorów 150 tysięcy linii kodu 500 klas 8000 funkcji 17 tysięcy testów czas wykonania: 8 minut (Atom 1.6) 11 prezentacji na konferencjach i warsztatach 16 projektów w Google Summer of Code oraz Google Highly Open Participation Contest jedna praca dyplomowa 8 z 24

SymPy w liczbach 2006 teraz 100 autorów 150 tysięcy linii kodu 500 klas 8000 funkcji 17 tysięcy testów czas wykonania: 8 minut (Atom 1.6) 11 prezentacji na konferencjach i warsztatach 16 projektów w Google Summer of Code oraz Google Highly Open Participation Contest jedna praca dyplomowa 8 z 24

SymPy w liczbach 2006 teraz 100 autorów 150 tysięcy linii kodu 500 klas 8000 funkcji 17 tysięcy testów czas wykonania: 8 minut (Atom 1.6) 11 prezentacji na konferencjach i warsztatach 16 projektów w Google Summer of Code oraz Google Highly Open Participation Contest jedna praca dyplomowa 8 z 24

Informacje kontaktowe Strona główna projektu: www.sympy.org Strony dodatkowe: docs.sympy.org wiki.sympy.org live.sympy.org Lista mailingowa: sympy@googlegroups.com Kanał IRC: #sympy na FreeNode Repozytorium git: git clone git://github.com/sympy/sympy.git 9 z 24

Informacje kontaktowe Strona główna projektu: www.sympy.org Strony dodatkowe: docs.sympy.org wiki.sympy.org live.sympy.org Lista mailingowa: sympy@googlegroups.com Kanał IRC: #sympy na FreeNode Repozytorium git: git clone git://github.com/sympy/sympy.git 9 z 24

Informacje kontaktowe Strona główna projektu: www.sympy.org Strony dodatkowe: docs.sympy.org wiki.sympy.org live.sympy.org Lista mailingowa: sympy@googlegroups.com Kanał IRC: #sympy na FreeNode Repozytorium git: git clone git://github.com/sympy/sympy.git 9 z 24

Organizacja pracy korzystamy z systemu SCM git jedno główne repozytorium (GitHub) tylko jedna gałąź master każdy twórca ma własny fork na GitHubie zazwyczaj wiele gałęzi żeby zacząć pracę z jedną z gałęzi: git remote add github git://github.com/mattpap/sympy-polys.git git fetch github git branch --track polys11 github/polys11 korzystamy z mechanizmu pull request do łączenia gałęzi testy zawsze muszą wykonywać się poprawnie używamy buildbotów do testowania różnych konfiguracji 10 z 24

Organizacja pracy korzystamy z systemu SCM git jedno główne repozytorium (GitHub) tylko jedna gałąź master każdy twórca ma własny fork na GitHubie zazwyczaj wiele gałęzi żeby zacząć pracę z jedną z gałęzi: git remote add github git://github.com/mattpap/sympy-polys.git git fetch github git branch --track polys11 github/polys11 korzystamy z mechanizmu pull request do łączenia gałęzi testy zawsze muszą wykonywać się poprawnie używamy buildbotów do testowania różnych konfiguracji 10 z 24

Organizacja pracy korzystamy z systemu SCM git jedno główne repozytorium (GitHub) tylko jedna gałąź master każdy twórca ma własny fork na GitHubie zazwyczaj wiele gałęzi żeby zacząć pracę z jedną z gałęzi: git remote add github git://github.com/mattpap/sympy-polys.git git fetch github git branch --track polys11 github/polys11 korzystamy z mechanizmu pull request do łączenia gałęzi testy zawsze muszą wykonywać się poprawnie używamy buildbotów do testowania różnych konfiguracji 10 z 24

Organizacja pracy korzystamy z systemu SCM git jedno główne repozytorium (GitHub) tylko jedna gałąź master każdy twórca ma własny fork na GitHubie zazwyczaj wiele gałęzi żeby zacząć pracę z jedną z gałęzi: git remote add github git://github.com/mattpap/sympy-polys.git git fetch github git branch --track polys11 github/polys11 korzystamy z mechanizmu pull request do łączenia gałęzi testy zawsze muszą wykonywać się poprawnie używamy buildbotów do testowania różnych konfiguracji 10 z 24

Organizacja pracy korzystamy z systemu SCM git jedno główne repozytorium (GitHub) tylko jedna gałąź master każdy twórca ma własny fork na GitHubie zazwyczaj wiele gałęzi żeby zacząć pracę z jedną z gałęzi: git remote add github git://github.com/mattpap/sympy-polys.git git fetch github git branch --track polys11 github/polys11 korzystamy z mechanizmu pull request do łączenia gałęzi testy zawsze muszą wykonywać się poprawnie używamy buildbotów do testowania różnych konfiguracji 10 z 24

Moja rola w projekcie początek współpracy w marcu 2007 roku kilka prostych poprawek i rozszerzeń następnie Google Summer of Code 2007 algorytmy rozwiązywania równań rekurencyjnych algorytmy sumowania nieoznaczonego i oznaczonego no i tak już zostało: algorytmy całkowania symbolicznego struktury algebraiczne, wielomiany upraszczanie wyrażeń algebraicznych,... poza tym: Google Summer of Code 2009, 2010 mentor (PSU, PSF) EuroSciPy 2009, 2010; py4science (UC Berkeley) praca dyplomowa 11 z 24

Moja rola w projekcie początek współpracy w marcu 2007 roku kilka prostych poprawek i rozszerzeń następnie Google Summer of Code 2007 algorytmy rozwiązywania równań rekurencyjnych algorytmy sumowania nieoznaczonego i oznaczonego no i tak już zostało: algorytmy całkowania symbolicznego struktury algebraiczne, wielomiany upraszczanie wyrażeń algebraicznych,... poza tym: Google Summer of Code 2009, 2010 mentor (PSU, PSF) EuroSciPy 2009, 2010; py4science (UC Berkeley) praca dyplomowa 11 z 24

Moja rola w projekcie początek współpracy w marcu 2007 roku kilka prostych poprawek i rozszerzeń następnie Google Summer of Code 2007 algorytmy rozwiązywania równań rekurencyjnych algorytmy sumowania nieoznaczonego i oznaczonego no i tak już zostało: algorytmy całkowania symbolicznego struktury algebraiczne, wielomiany upraszczanie wyrażeń algebraicznych,... poza tym: Google Summer of Code 2009, 2010 mentor (PSU, PSF) EuroSciPy 2009, 2010; py4science (UC Berkeley) praca dyplomowa 11 z 24

Moja rola w projekcie początek współpracy w marcu 2007 roku kilka prostych poprawek i rozszerzeń następnie Google Summer of Code 2007 algorytmy rozwiązywania równań rekurencyjnych algorytmy sumowania nieoznaczonego i oznaczonego no i tak już zostało: algorytmy całkowania symbolicznego struktury algebraiczne, wielomiany upraszczanie wyrażeń algebraicznych,... poza tym: Google Summer of Code 2009, 2010 mentor (PSU, PSF) EuroSciPy 2009, 2010; py4science (UC Berkeley) praca dyplomowa 11 z 24

Moduły SymPy assumptions concrete core functions galgebra geometry integrals interactive logic matrices mpmath ntheory parsing physics plotting polys printing series simplify solvers statistics tensor thirdparty utilities 12 z 24

Moduły SymPy assumptions concrete core functions galgebra geometry integrals interactive logic matrices mpmath ntheory parsing physics plotting polys printing series simplify solvers statistics tensor thirdparty utilities 12 z 24

Moduły SymPy assumptions concrete core functions galgebra geometry integrals interactive logic matrices mpmath ntheory parsing physics plotting polys printing series simplify solvers statistics tensor thirdparty utilities 12 z 24

Zastosowania SymPy rozwiązywanie problemów matematycznych np. nauczanie matematyki Dlaczego? łatwy do nauczenia język programowania użytkownik ma dostęp do wszystkich algorytmów Przykład: k kolorowanie grafów osadzanie SymPy w innych programach np. generacja kodu na podstawie wyrażeń matematycznych Dlaczego? mała biblioteka bez żadnych zależności nie wymaga kompilacji, instalacji, konfiguracji Przykład: generowanie kodu C 13 z 24

Zastosowania SymPy rozwiązywanie problemów matematycznych np. nauczanie matematyki Dlaczego? łatwy do nauczenia język programowania użytkownik ma dostęp do wszystkich algorytmów Przykład: k kolorowanie grafów osadzanie SymPy w innych programach np. generacja kodu na podstawie wyrażeń matematycznych Dlaczego? mała biblioteka bez żadnych zależności nie wymaga kompilacji, instalacji, konfiguracji Przykład: generowanie kodu C 13 z 24

k kolorowanie grafów (1) 1 2 5 6 12 7 11 8 10 9 4 3 14 z 24

k kolorowanie grafów (1) 1 2 1 2 5 6 5 6 12 7 12 7 11 8 11 8 10 9 10 9 4 3 4 3 14 z 24

k kolorowanie grafów (2) Dany jest G(V, E). Wprowadzamy dwa układy równań wielomianowych: I k dozwolone jest przypisanie jednego z k kolorów do wierzchołka x i I k = {x k i 1 : i V } I G przyległe wierzchołki muszą mieć przypisane różne kolory I G = {x k 1 i + x k 2 i x j +... + x i x k 2 j + x k 1 j : (i, j) E} Następnie rozwiązujemy I k I G metodą baz Gröbnera. 15 z 24

k kolorowanie grafów (2) Dany jest G(V, E). Wprowadzamy dwa układy równań wielomianowych: I k dozwolone jest przypisanie jednego z k kolorów do wierzchołka x i I k = {x k i 1 : i V } I G przyległe wierzchołki muszą mieć przypisane różne kolory I G = {x k 1 i + x k 2 i x j +... + x i x k 2 j + x k 1 j : (i, j) E} Następnie rozwiązujemy I k I G metodą baz Gröbnera. 15 z 24

k kolorowanie grafów (2) Dany jest G(V, E). Wprowadzamy dwa układy równań wielomianowych: I k dozwolone jest przypisanie jednego z k kolorów do wierzchołka x i I k = {x k i 1 : i V } I G przyległe wierzchołki muszą mieć przypisane różne kolory I G = {x k 1 i + x k 2 i x j +... + x i x k 2 j + x k 1 j : (i, j) E} Następnie rozwiązujemy I k I G metodą baz Gröbnera. 15 z 24

k kolorowanie grafów (2) Dany jest G(V, E). Wprowadzamy dwa układy równań wielomianowych: I k dozwolone jest przypisanie jednego z k kolorów do wierzchołka x i I k = {x k i 1 : i V } I G przyległe wierzchołki muszą mieć przypisane różne kolory I G = {x k 1 i + x k 2 i x j +... + x i x k 2 j + x k 1 j : (i, j) E} Następnie rozwiązujemy I k I G metodą baz Gröbnera. 15 z 24

k kolorowanie grafów (3) {x 1 + x 11 + x 12, x 2 x 11, x 3 x 12, x 4 x 12, x 5 + x 11 + x 12, x 6 x 11, x 7 x 12, x 8 + x 11 + x 12, x 9 x 11, x 10 + x 11 + x 12, x 2 11 + x 11 x 12 + x12, 2 x 3 12 1} 1 2 5 6 12 7 11 8 10 9 4 3 16 z 24

k kolorowanie grafów (4) Rozwiązanie problemu 3 kolorowania w SymPy: In [1]: V = range (1, 12+1) In [2]: E = [(1,2),(2,3),(1,4),(1,6),(1,12),(2,5),(2,7), (3,8),(3,10),(4,11),(4,9),(5,6),(6,7),(7,8),(8,9),(9,10), (10,11),(11,12),(5,12),(5,9),(6,10),(7,11),(8,12)] In [3]: X = [ Symbol ( x + str (i)) for i in V ] In [4]: E = [ (X[i-1], X[j-1]) for i, j in E ] In [5]: I3 = [ x**3-1 for x in X ] In [6]: Ig = [ x**2 + x*y + y**2 for x, y in E ] In [7]: G = groebner (I3 + Ig, X, order= lex ) In [8]: G!= [1] Out [8]: True 17 z 24

k kolorowanie grafów (5) Time [s] 18 16 17 14 15 13 10 11 12 9 8 7 4 56 3 0 12 SymPy Maxima Axiom Mathematica Rysunek: Średni czas obliczania 3 kolorowania dla grafu G(V, E). 18 z 24

Generowanie kodu C (1) Sformułowanie problemu: transformacja wyrażeń do postaci Hornera generacja odpowiadającego im kodu w języku C np. dla celów szybkiego wyznaczenia wartości dla wielu punktów przyjmijmy, że nie chcemy/nie możemy skorzystać z funkcji pow() Jak możemy rozwiązać tak sformułowany problem? używamy funkcji horner() do transformacji wyrażeń definiujemy nową drukarkę do wygenerowania kodu 19 z 24

Generowanie kodu C (1) Sformułowanie problemu: transformacja wyrażeń do postaci Hornera generacja odpowiadającego im kodu w języku C np. dla celów szybkiego wyznaczenia wartości dla wielu punktów przyjmijmy, że nie chcemy/nie możemy skorzystać z funkcji pow() Jak możemy rozwiązać tak sformułowany problem? używamy funkcji horner() do transformacji wyrażeń definiujemy nową drukarkę do wygenerowania kodu 19 z 24

Generowanie kodu C (2) Definiujemy nową drukarkę dla sformułowanego problemu: from sympy. printing import StrPrinter class CPrinter ( StrPrinter ): """ Print Lambda as C function and unroll Pow. """ counter = 0 def _print_lambda ( self, expr ): self. counter += 1 return """ long _f %i( long %s) {\ n return (% s );\ n} """ % \ ( self. counter, expr. args [0], self. doprint ( expr. args [1])) def _print_pow ( self, expr ): if expr. exp. is_integer : return *. join ([ str ( expr. base )]* int ( expr. exp )) else : return StrPrinter. _print_pow ( self, expr ) 20 z 24

Generowanie kodu C (3) Chcemy wygenerować kod w C dla wielomianu: Użyjemy do tego celu CPrinter: x 6 + 2x 3 + 3x 2 + 4x + 5 In [1]: from sympy import horner, Lambda In [2]: from sympy. abc import x In [3]: f = horner (x**6 + 2*x**3 + 3*x**2 + 4*x + 5) In [4]: print CPrinter (). doprint ( Lambda (x, f)) Out [4]: double _f1( double _x) { return (5 + (4 + (3 + (2 + _x*_x*_x)*_x)*_x)*_x ); } 21 z 24

Generowanie kodu C (3) Chcemy wygenerować kod w C dla wielomianu: Użyjemy do tego celu CPrinter: x 6 + 2x 3 + 3x 2 + 4x + 5 In [1]: from sympy import horner, Lambda In [2]: from sympy. abc import x In [3]: f = horner (x**6 + 2*x**3 + 3*x**2 + 4*x + 5) In [4]: print CPrinter (). doprint ( Lambda (x, f)) Out [4]: double _f1( double _x) { return (5 + (4 + (3 + (2 + _x*_x*_x)*_x)*_x)*_x ); } 21 z 24

Sesja interaktywna podstawy tworzenie symboli kolorowanie grafów 22 z 24

Plany na przyszłość O co musimy zadbać: lepsze pokrycie kodu testami szczegółowe benchmarki funkcjonalność poprawność 23 z 24

Dziękuję za uwagę! Pytania, uwagi, dyskusja... [ ] Σ 1 0 0 1 dx SymPy 24 z 24