Biblioteka szeroko wykorzystywana do wykonywania obliczeń numerycznych.
Rozróżnienie między standardową listą a listą oferowaną przez bibliotekę numpy:
import numpy as np
x = [1, 2, 3, 4, 5, 6]
v = np.array(x)
v
Przykład listy 2d, czyli macierzy:
M = np.array([[1,2], [3,4]])
M
type(v), type(M)
Sprawdzenie wymiarów listy/macierzy:
v.shape
M.shape
M.size
Typ danych w macierzy:
M.dtype
Generowanie liczb losowych (w formie macierzy):
np.random.rand(5,3)
Macierz zer:
np.zeros([5,3])
Operacje na macierzach:
M = np.array([[1,2,3], [4,5,6]])
N = np.array([[1,1,1], [2,2,2]])
print(N)
print(M)
Dodawanie:
M + N
Mnożenie przez skalar:
5*M
Mnozenie odpowiadającyh sobie kolejnych komórek macierzy:
M*N
Iloczyn macierzowy:
# dlaczego nie działa?
M.dot(N)
Transpozycja + iloczyn macierzowy:
M.dot(N.T)
Generowanie liczb z zakresu z krokiem (przydatne do wykresów):
v = np.arange(0, 10.01, 0.5)
print(v)
Generowanie (100) liczb z zakresu (przydatne do wykresów):
# Generowanie rownych odstepow
v = np.linspace(0,10,100)
v
Wbudowane funkcje przyjmują macierze jako argumenty:
np.sin(v)
Przykład zwięzłego wygenerowania sinusa:
%matplotlib inline
from matplotlib import pyplot as plt
plt.plot(v, np.sin(v))
plt.show()
Czytanie (krojenie) macierzy:
M = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]])
M
Wszystkie wiersze razy druga (trzecia) kolumna:
M[:,2]
Drugi (trzeci) wiersz razy kolumny z przedziału 1:3 :
M[2,1:3]
M[1:3,2:4]
M[::2,:]
M
Można nadpisywać podczas czytania:
M[::2,::2]=0
M
Biblioteka do obliczeń symbolicznych - operujemy na wzorach, nie na liczbach.
from sympy.interactive import printing
printing.init_printing(use_latex=True)
#from __future__ import division
import sympy as sym
from sympy import *
# Definicje zmiennych
x, y, z = symbols("x y z")
k = Symbol("k", integer=True)
f = Function('f')
Ważne jest przypomnienie sobie różnicy między wyrażeniem a równaniem. Poniżej znajduje się przykład wyrażenia:
exp = ((x+y)**2 * (x+1))
exp
Rozwinięcie:
expand(exp)
a = 1/x + (x*y - 1)/x + 1
a
Uproszczenie wyrażenia:
simplify(a)
Przykład równiania (Eq): x - 3 = 0:
eq = Eq(x - 3, 0)
eq
Dzięki solve, możemy rozwiązać rówananie. Dlaczego wynik jest w formie listy?
solve(eq, x)
Trochę trudniejsze równanie:
eq = Eq(x**3 + 3*x**2 - 13*x - 15)
eq
Solve znalazł wszystkie rozwiązania. Czy sympy jest w stanie rozwiązać wielomian dowolnego stopnia? Jeżeli nie, to jaki jest górny limit na stopień wielomianu, by Sympy sobie mógł poradzić?
solve(eq, x)
Trochę inny przykład. Jak należy zinterpretować wynik?
eq = Eq( x**3 + 3*x**2 - 13*x + 15)
#eq
r = solve(eq, x)
r
Można uwikłać w równanie dodatkową zmienną. Czy widać ją w wyniku?
eq = Eq(x**3 + 3*x**2 - 13*x + z)
solve(eq, x)
Przykład sumy:
s = Sum(6*k**2 - 1, (k, 1, 10))
s
Doit = wykonuje, tj. liczy sumę:
s.doit()
Dzięki Sympy możemy policzyć granicę:
Sympy rozpozaje pewne stałe matematyczne:
lim = Limit(1/x, x, 0, '+')
lim
lim.doit()
lim = 2*Limit((1+1/x)**x, x, oo)
lim
lim.doit()
Sympy policzy pochodną i więcej:
q = ((3*x**2))
q
q.diff(x)
eqn = Eq(Derivative(f(x),x,x) + 9*f(x), 1)
eqn
dsolve(eqn, f(x))