Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
calc:vector [2021/02/10 14:50] root |
calc:vector [2022/08/10 23:55] (текущий) root |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Основные операции над векторами и тензорами ====== | + | <div slide> |
- | Положим что одномерные массивы | + | ===== Функция на сетке ===== |
+ | |||
+ | Важная особенность '' | ||
<sxh python> | <sxh python> | ||
import numpy as np | import numpy as np | ||
- | from scipy.spatial.transform import Rotation | ||
- | 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> | ||
+ | import numpy as np | ||
+ | from findiff import FinDiff | ||
+ | |||
+ | x = np.linspace(0, | ||
+ | dx = x[1] - x[0] | ||
+ | f = np.sin(x) | ||
+ | |||
+ | d_dx = FinDiff(0, dx, 1) | ||
+ | df_dx = d_dx(f) | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | Объект '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Дифференциальные операторы модуля findiff | ||
+ | |||
+ | ^ Название ^ Значение ^ Запись ^ Вход ^ Выход ^ | ||
+ | | FinDiff | дифференциал | d/dx | скалярное поле | скалярное поле | | ||
+ | | Gradient | градиент | ∇f | скалярное поле | векторное поле | | ||
+ | | 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, | ||
+ | dx = x[1]-x[0] | ||
+ | y = np.linspace(-2*np.pi, | ||
+ | dy = y[1]-y[0] | ||
+ | |||
+ | X, Y = np.meshgrid(x, | ||
+ | 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, | ||
+ | grad_f = grad(f) | ||
+ | |||
+ | plt.imshow(f.T , origin=' | ||
+ | plt.colorbar() | ||
+ | plt.quiver(X, | ||
+ | plt.show() | ||
+ | |||
+ | #%% | ||
+ | |||
+ | u = np.array((X**2-Y**2, | ||
+ | |||
+ | div = Divergence(h=[dx, | ||
+ | div_u = div(u) | ||
+ | |||
+ | plt.imshow(div_u.T, | ||
+ | plt.colorbar() | ||
+ | plt.quiver(X, | ||
+ | plt.show() | ||
+ | |||
+ | </ | ||
+ | |||
+ | == Скалярная функция f и ее изолинии == | ||
+ | |||
+ | {{: | ||
+ | |||
+ | == Скалярная функция f и ее градиент == | ||
+ | |||
+ | {{: | ||
+ | |||
+ | == Векторная функция u и ее дивергенция == | ||
+ | {{: | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== В 3D задаче | ||
+ | <sxh python> | ||
+ | import numpy as np | ||
+ | from findiff import Gradient, Divergence, Laplacian, Curl | ||
+ | |||
+ | x = np.linspace(0, | ||
+ | dx = x[1]-x[0] | ||
+ | y = np.linspace(0, | ||
+ | dy = y[1]-y[0] | ||
+ | z = np.linspace(0, | ||
+ | dz = z[1]-z[0] | ||
+ | |||
+ | X, Y, Z = np.meshgrid(x, | ||
+ | f = np.sin(X) * np.cos(Y) * np.sin(Z) | ||
+ | |||
+ | grad = Gradient(h=[dx, | ||
+ | grad_f = grad(f) | ||
+ | |||
+ | laplace = Laplacian(h=[dx, | ||
+ | laplace_f = laplace(f) | ||
+ | |||
+ | g = np.array([f, | ||
+ | |||
+ | div = Divergence(h=[dx, | ||
+ | div_g = div(g) | ||
+ | |||
+ | curl = Curl(h=[dx, dy, dz]) | ||
+ | curl_g = curl(g) | ||
+ | </ | ||
+ | |||
+ | </ |