Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
calc:vector [2021/02/10 15:34] root [Операции над матрицами] |
calc:vector [2022/08/10 23:55] (текущий) root |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Основные операции линейной алгебры в numpy ====== | + | <div slide> |
- | ==== Операции над векторами | + | ===== Функция на сетке ===== |
- | Положим что одномерные массивы | + | Важная |
<sxh python> | <sxh python> | ||
import numpy as np | import numpy as np | ||
- | a = np.array([1,1,1]) | + | def f(x,y): |
- | b = np.array([2,-1,3]) | + | return x**2+2*x+6*y |
+ | |||
+ | s = np.linspace(1, | ||
+ | p = np.linspace(5, | ||
+ | |||
+ | v = f (s,p) # Функция f была применена поэлементно | ||
+ | # v == array([ | ||
+ | |||
+ | S, P = np.meshgrid(s, | ||
+ | v = f (S,P) # Функция f была применена для каждой пары из s и p | ||
+ | # array([[ 33., 45., | ||
+ | # [ 54., 66., 78.], | ||
+ | # [ 93., 105., 117.]]) | ||
</ | </ | ||
- | ^ Операция ^ Запись ^ Результат ^ | ||
- | | Длина вектора | '' | ||
- | | Произведение вектора на скаляр | '' | ||
- | | Сумма векторов | '' | ||
- | | Скалярное произведение | '' | ||
- | | Векторное произведение | '' | ||
- | ==== Операции над матрицами | + | В случае простой подстановки '' |
- | Положим, что '' | + | </ |
+ | |||
+ | ===== Дифференциальные | ||
+ | |||
+ | Для | ||
<sxh python> | <sxh python> | ||
import numpy as np | import numpy as np | ||
+ | from findiff import FinDiff | ||
- | a = np.array([1,1,1]) | + | x = np.linspace(0, 10, 100) |
- | M = np.array([[1,0,1],[2,1, | + | dx = x[1] - x[0] |
+ | f = np.sin(x) | ||
+ | |||
+ | d_dx = FinDiff(0, dx, 1) | ||
+ | df_dx = d_dx(f) | ||
</ | </ | ||
- | ^ Операция ^ Запись ^ Результат ^ | + | </ |
- | | Определитель | '' | + | |
- | | След | '' | + | Объект '' |
- | | Форма | '' | + | |
- | | Векторно-матричное | + | '' |
- | | Матричное | + | |
- | | Обратная матрица | '' | + | </ |
- | | Собственные числа и собственные векторы | '' | + | |
- | | Транспонирование | '' | + | ==== Дифференциальные |
- | | Нулевая матрица | '' | + | |
- | | Единичная | + | ^ Название ^ Значение |
+ | | FinDiff | ||
+ | | Gradient | ||
+ | | Laplacian | оператор Лапласа | ∇< | ||
+ | | Divergence | дивергенция | ∇· f | векторное поле | скалярное поле | | ||
+ | | Curl | ротор | ∇×f | векторное поле | векторное поле | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== В 2D задаче | ||
+ | |||
+ | <sxh python> | ||
+ | import numpy as np | ||
+ | from findiff import Gradient, Divergence, Laplacian | ||
+ | import matplotlib.pyplot as plt | ||
+ | |||
+ | #%% | ||
+ | |||
+ | borders = [-2*np.pi, 2*np.pi, -2*np.pi, 2*np.pi] | ||
+ | |||
+ | x = np.linspace(-2*np.pi, 2*np.pi, 30) | ||
+ | dx = x[1]-x[0] | ||
+ | y = np.linspace(-2*np.pi, 2*np.pi, 30) | ||
+ | dy = y[1]-y[0] | ||
+ | |||
+ | X, Y = np.meshgrid(x, y, indexing=' | ||
+ | f = Y*np.sin(X) + np.cos(Y) | ||
+ | |||
+ | #%% | ||
+ | |||
+ | plt.imshow(f.T, | ||
+ | contours = plt.contour(X, | ||
+ | plt.clabel(contours, | ||
+ | plt.show() | ||
+ | |||
+ | #%% | ||
+ | grad = Gradient(h=[dx, dy]) | ||
+ | grad_f = grad(f) | ||
+ | |||
+ | plt.imshow(f.T | ||
+ | plt.colorbar() | ||
+ | plt.quiver(X,Y,grad_f[0],grad_f[1]) | ||
+ | plt.show() | ||
+ | |||
+ | #%% | ||
+ | |||
+ | u = np.array((X**2-Y**2, Y**2-X)) | ||
+ | |||
+ | div = Divergence(h=[dx, dy]) | ||
+ | div_u = div(u) | ||
+ | |||
+ | plt.imshow(div_u.T,origin=' | ||
+ | plt.colorbar() | ||
+ | plt.quiver(X,Y,u[0],u[1]) | ||
+ | plt.show() | ||
+ | |||
+ | </ | ||
+ | |||
+ | == Скалярная функция f и ее изолинии == | ||
+ | |||
+ | {{: | ||
+ | |||
+ | == Скалярная | ||
+ | |||
+ | {{: | ||
+ | |||
+ | == Векторная функция u и ее дивергенция == | ||
+ | {{: | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== В 3D задаче | ||
+ | <sxh python> | ||
+ | import numpy as np | ||
+ | from findiff import Gradient, Divergence, Laplacian, Curl | ||
+ | |||
+ | x = np.linspace(0, 10, 100) | ||
+ | dx = x[1]-x[0] | ||
+ | y = np.linspace(0, 10, 100) | ||
+ | dy = y[1]-y[0] | ||
+ | z = np.linspace(0, 10, 100) | ||
+ | dz = z[1]-z[0] | ||
+ | |||
+ | X, Y, Z = np.meshgrid(x, y, z, indexing=' | ||
+ | f = np.sin(X) * np.cos(Y) * np.sin(Z) | ||
+ | |||
+ | grad = Gradient(h=[dx, dy, dz]) | ||
+ | grad_f = grad(f) | ||
+ | |||
+ | laplace = Laplacian(h=[dx, | ||
+ | laplace_f = laplace(f) | ||
+ | |||
+ | g = np.array([f, 2*f, 3*f]) | ||
+ | |||
+ | div = Divergence(h=[dx, | ||
+ | div_g = div(g) | ||
+ | |||
+ | curl = Curl(h=[dx, dy, dz]) | ||
+ | curl_g = curl(g) | ||
+ | </ | ||
+ | </ |