Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
1
Matematyka
Matematyka
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
2
Plan prezentacji
Plan prezentacji
●
Matematyka
Matematyka
●
Liczby zespolone
Liczby zespolone
●
Algebra boolea
Algebra boolea
●
Rachunek zbiorów
Rachunek zbiorów
●
SciPy oraz matplotlib
SciPy oraz matplotlib
–
Rozwiązywanie układu równań
Rozwiązywanie układu równań
–
Obliczanie wartości całki oznaczonej
Obliczanie wartości całki oznaczonej
–
Ustalenie punktu przecięcia krzywych
Ustalenie punktu przecięcia krzywych
–
Szukanie pierwiastków wielomianu
Szukanie pierwiastków wielomianu
–
Wartości i wektory własne macierzy hermitowskiej
Wartości i wektory własne macierzy hermitowskiej
–
Interpolacja funkcji
Interpolacja funkcji
●
Bibiloteki do tworzenia wykresów
Bibiloteki do tworzenia wykresów
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
3
Inne wbudowane funkcje matematyczne
Inne wbudowane funkcje matematyczne
Wartość bezwzględna
Wartość bezwzględna
abs(-3)
abs(-3)
# 3
# 3
Wartość maksymalna
Wartość maksymalna
max([4,7,3])
max([4,7,3])
# 3
# 3
Wartość minimalna
Wartość minimalna
max
max
([2,5,77])
([2,5,77])
# 77
# 77
Cecha i mantysa ilorazu
Cecha i mantysa ilorazu
divmod(7,6) # (1,1)
divmod(7,6) # (1,1)
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
4
Moduł math
Moduł math
import math
import math
Epsilon
Epsilon
math.e
math.e
# 2.7182818284590451
# 2.7182818284590451
Pi
Pi
math.pi
math.pi
# 3.1415926535897931
# 3.1415926535897931
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
5
Funkcje matematyczne
Funkcje matematyczne
Sufit
Sufit
math.ceil(wartosc)
math.ceil(wartosc)
Podłoga
Podłoga
math.floor(wartosc)
math.floor(wartosc)
Odległość euklidesowa
Odległość euklidesowa
math.hypot(x, y)
math.hypot(x, y)
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
6
Inne funkcje matematyczne
Inne funkcje matematyczne
Pierwiastek
Pierwiastek
math.sqrt(wartosc)
math.sqrt(wartosc)
Logarytm
Logarytm
math.log(wartosc, baza); math.log10(wartosc)
math.log(wartosc, baza); math.log10(wartosc)
Eksponent
Eksponent
math.exp(wartosc)
math.exp(wartosc)
Konwersja z radianów na stopnie i na odwrót
Konwersja z radianów na stopnie i na odwrót
math.degrees(kat); math.radians(kat)
math.degrees(kat); math.radians(kat)
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
7
Fukcje *czne
Fukcje *czne
Funkcje trygonometryczne
Funkcje trygonometryczne
math.sin(wartosc); math.cos(wartosc); math.tan(wartosc)
math.sin(wartosc); math.cos(wartosc); math.tan(wartosc)
Funkcje cyklometryczne
Funkcje cyklometryczne
math.asin(wartosc); math.acos(wartosc); math.atan(wartosc)
math.asin(wartosc); math.acos(wartosc); math.atan(wartosc)
Funkcje hiperboliczne
Funkcje hiperboliczne
math.sinh(wartosc); math.cosh(wartosc); math.tanh(wartosc)
math.sinh(wartosc); math.cosh(wartosc); math.tanh(wartosc)
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
8
Liczby zespolone
Liczby zespolone
liczba = 20 + 7j
liczba = 20 + 7j
Część rzeczywista
Część rzeczywista
liczba.real
liczba.real
# 20.0
# 20.0
Część urojona
Część urojona
liczba.imag
liczba.imag
# 7.0
# 7.0
Sprzężenie zespolone
Sprzężenie zespolone
liczba.conjugate()
liczba.conjugate()
# (20-7j)
# (20-7j)
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
9
Liczby zespolone wbudowane działania
–
Liczby zespolone wbudowane działania
–
Dodawanie
Dodawanie
(20 + 10j) + (10 + 20j)
(20 + 10j) + (10 + 20j)
# (30 + 30j)
# (30 + 30j)
- Odejmowanie
- Odejmowanie
(20 + 10j) - (10 + 20j)
(20 + 10j) - (10 + 20j)
# (10 - 10j)
# (10 - 10j)
* Mnożenie
* Mnożenie
(2 + 2j) * (3 + 3j)
(2 + 2j) * (3 + 3j)
# 12j
# 12j
/ Dzielenie
/ Dzielenie
(9 + 9j) / (3 + 3j)
(9 + 9j) / (3 + 3j)
# (3 + 0j)
# (3 + 0j)
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
10
Math dla liczb zespolonych
Math dla liczb zespolonych
import cmath
import cmath
Analogiczne do math
Analogiczne do math
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
11
Algebra Boole'a
Algebra Boole'a
Koniunkcja (AND)
Koniunkcja (AND)
12 & 11
12 & 11
# 8
# 8
Alternatywa (OR)
Alternatywa (OR)
12 | 11
12 | 11
# 15
# 15
Alternatywa wykluczająca (XOR)
Alternatywa wykluczająca (XOR)
12 ^ 11
12 ^ 11
# 7
# 7
http://docs.python.org/reference/expressions.html#binary-bitwise-operations
http://docs.python.org/reference/expressions.html#binary-bitwise-operations
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
12
Rodzaje zbiorów
Rodzaje zbiorów
Zbiory niezmienne
Zbiory niezmienne
z1 = frozenset(['kot', 'pies', 'Ala'])
z1 = frozenset(['kot', 'pies', 'Ala'])
Zbiory zmienne
Zbiory zmienne
z2 =set(['Ola', 'Ala', 'Ela'])
z2 =set(['Ola', 'Ala', 'Ela'])
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
13
Modyfikacja zbioru zmiennego
Modyfikacja zbioru zmiennego
Usuwanie elementów
Usuwanie elementów
z2.remove('Ala')
z2.remove('Ala')
# set(['Ola', 'Ela')]
# set(['Ola', 'Ela')]
z2.pop()
z2.pop()
# set(['Ela'])
# set(['Ela'])
z2.clear()
z2.clear()
# set()
# set()
Rozszerzanie zbioru
Rozszerzanie zbioru
z2.add('Ala')
z2.add('Ala')
# set(['Ala'])
# set(['Ala'])
z2.update('Ela', 'Ola', 'Ula')
z2.update('Ela', 'Ola', 'Ula')
# set(['Ala', 'Ela', 'Ola', 'Ula')]
# set(['Ala', 'Ela', 'Ola', 'Ula')]
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
14
Rachunek zbiorów
Rachunek zbiorów
Suma zbiorów |
Suma zbiorów |
z1 | z2; z1.union(z2)
z1 | z2; z1.union(z2)
Różnica zbiorów -
Różnica zbiorów -
z1 z2; z1.difference(z2)
–
z1 z2; z1.difference(z2)
–
# frozenset(['kot', 'pies'])
# frozenset(['kot', 'pies'])
Część wspólna &
Część wspólna &
z1 & z2; z1.intersection(z2)
z1 & z2; z1.intersection(z2)
# frozenset(['Ala'])
# frozenset(['Ala'])
Symetryczna różnica ^
Symetryczna różnica ^
z1 ^ z2; z1.symatric_difference(z2)
z1 ^ z2; z1.symatric_difference(z2)
# frozenset(['Ela', 'Ola', 'Ula', 'kot', 'pies'])
# frozenset(['Ela', 'Ola', 'Ula', 'kot', 'pies'])
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
15
Rachunek zbiorów
Rachunek zbiorów
Zawieranie się elementu
Zawieranie się elementu
'Ala' in z1
'Ala' in z1
# True
# True
Nie zawieranie się elementu
Nie zawieranie się elementu
'kot' not in z2
'kot' not in z2
# True
# True
Czy podzbiór <=, <
Czy podzbiór <=, <
z1.issubset(z2)
z1.issubset(z2)
# False
# False
Czy nadzbiór >=, >
Czy nadzbiór >=, >
z2.isuperset(z1)
z2.isuperset(z1)
# False
# False
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
16
Zaawansowana matematyka
Zaawansowana matematyka
http://matplotlib.sourceforge.net/
http://matplotlib.sourceforge.net/
Wzorowane na Wstęp do SciPy Janusza Szwabińskiego
„
”
Wzorowane na Wstęp do SciPy Janusza Szwabińskiego
„
”
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
17
Rozwiąż układ równań
Rozwiąż układ równań
1
2 3
4
1
4 9 16
1
8 27 64
1 16 81 256
x=
2
10
44
190
from numpy import matrix, linalg
from numpy import matrix, linalg
A = matrix([[1, 2, 3, 4], [1, 4, 9, 16], [1, 8, 27, 64], [1, 16, 81, 256]])
A = matrix([[1, 2, 3, 4], [1, 4, 9, 16], [1, 8, 27, 64], [1, 16, 81, 256]])
b =matrix([[2], [10], [44], [190]])
b =matrix([[2], [10], [44], [190]])
linalg.solve(A, b)
linalg.solve(A, b)
matrix([[-1], [1], [-1], [1]])
matrix([[-1], [1], [-1], [1]])
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
18
Oblicz wartość całki
Oblicz wartość całki
1
2
∫
exp {2
−
1/2
sin x}dx
0
2
import numpy
import numpy
import scipy
import scipy
from scipy import integrate
from scipy import integrate
def fun(x):
def fun(x):
return numpy.exp(numpy.sin(x)/numpy.sqrt(2))/(2*numpy.pi)
return numpy.exp(numpy.sin(x)/numpy.sqrt(2))/(2*numpy.pi)
calka = integrate.quad(fun,0,2*numpy.pi)
calka = integrate.quad(fun,0,2*numpy.pi)
(1.1289609294541902, 7.4290709475421182e-09)
(1.1289609294541902, 7.4290709475421182e-09)
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
19
Ustalanie punktu przecięcia
Ustalanie punktu przecięcia
y=3x
y=e
x
import numpy
import numpy
import scipy
import scipy
import scipy import optimize
import scipy import optimize
def fun(x):
def fun(x):
return scipy.exp(x) 3 * x
–
return scipy.exp(x) 3 * x
–
pp = optimize.fsolve(fun, 1)
pp = optimize.fsolve(fun, 1)
pp
pp
# 0.619061286736
# 0.619061286736
, fun(pp)
, fun(pp)
# 0.0
# 0.0
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
20
Wyszukanie pierwiastków wielomianu
Wyszukanie pierwiastków wielomianu
9x
4
18x
3
38x
2
−
57x14=0
import scipy
import scipy
wiel =scipy.poly1d([9,18,38,-57,14])
wiel =scipy.poly1d([9,18,38,-57,14])
for x in wiel.r:
for x in wiel.r:
if x.imag == 0:
if x.imag == 0:
print x
print x
(0.666666666667+0j)
(0.666666666667+0j)
(0.333333333333+0j)
(0.333333333333+0j)
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
21
Wartości i wektory własne
Wartości i wektory własne
from numpy import matrix, linalg
from numpy import matrix, linalg
A = matrix([[1, 1 - 1j, 1 - 2j, 1 - 3j], [1 + 1j, 2, 2 - 1j, 2 - 2j], [1 + 2j, 2 + 1j, 3, 3 - 1j], [1
A = matrix([[1, 1 - 1j, 1 - 2j, 1 - 3j], [1 + 1j, 2, 2 - 1j, 2 - 2j], [1 + 2j, 2 + 1j, 3, 3 - 1j], [1
+ 3j, 2 + 2j, 3 + 1j, 4]])
+ 3j, 2 + 2j, 3 + 1j, 4]])
la, v = linalg.eig(A)
la, v = linalg.eig(A)
A=
1
1−i 1−2i 1−3i
1i
2
2−i 2−2i
12i 2i 3
3−i
13i 22i 3i
4
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
22
Wartości i wektory własne
Wartości i wektory własne
la
la
array([ 10.39935693 -3.33425624e-16j,
array([ 10.39935693 -3.33425624e-16j,
-1.22156554 -3.66048313e-17j,
-1.22156554 -3.66048313e-17j,
0.51866717 +1.54519031e-16j,
0.51866717 +1.54519031e-16j,
0.30354143 -9.75993871e-17j])
0.30354143 -9.75993871e-17j])
v
v
array([[ 0.09186865-0.38603305j, 0.78317402+0.j, -0.42280692+0.13189711j,
array([[ 0.09186865-0.38603305j, 0.78317402+0.j, -0.42280692+0.13189711j,
0.17396786+0.05243788j], [ 0.30830780-0.28002101j, 0.27388174-0.06177703j,
0.17396786+0.05243788j], [ 0.30830780-0.28002101j, 0.27388174-0.06177703j,
0.55138541+0.j, -0.66486088-0.04050999j], [ 0.49510013-0.1470822j,
0.55138541+0.j, -0.66486088-0.04050999j], [ 0.49510013-0.1470822j,
-0.01120502-0.17412608j, 0.46249636-0.13189711j, 0.68665677+0.j]
-0.01120502-0.17412608j, 0.46249636-0.13189711j, 0.68665677+0.j]
[ 0.63428374+0.j, -0.30546444-0.4290185j, -0.51809432-0.00949413j,
[ 0.63428374+0.j, -0.30546444-0.4290185j, -0.51809432-0.00949413j,
-0.22397728+0.04050999j]])
-0.22397728+0.04050999j]])
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
23
Interpolacja funkcji
Interpolacja funkcji
rok
1850
1950
1960
1970
1985
2000
2025
ludność (mld)
1402
2486
3014
3683
4842
6127
8177
import scipy
import scipy
from matplotlib import pyplot
from matplotlib import pyplot
from scipy import interpolate
from scipy import interpolate
x = [1850, 1950, 1960, 1970, 1985, 2000, 2025]
x = [1850, 1950, 1960, 1970, 1985, 2000, 2025]
y = [1.402, 2.486, 3.014, 3.683, 4.842, 6.127, 8.177]
y = [1.402, 2.486, 3.014, 3.683, 4.842, 6.127, 8.177]
spline = interpolate.splrep(x, y)
spline = interpolate.splrep(x, y)
xnew = scipy.arange(1850, 2025, 1)
xnew = scipy.arange(1850, 2025, 1)
ynew = interpolate.splev(xnew, spline)
ynew = interpolate.splev(xnew, spline)
pyplot.plot(xnew, ynew, 'k')
pyplot.plot(xnew, ynew, 'k')
pyplot.show()
pyplot.show()
Jan Koprowski <jan.koprowski@gmail.com> Politechnika Gdańska, FTiMS – Informatyka Stosowana
24
Biblioteki do tworzenia wykresów
Biblioteki do tworzenia wykresów
PyGoogleChart
PyGoogleChart
http://pygooglechart.slowchop.com/
http://pygooglechart.slowchop.com/
Chart Directory
Chart Directory
http://www.advsofteng.com/cdpython.html
http://www.advsofteng.com/cdpython.html
PyCha
PyCha