Module for working with vector and scalar fields
Project description
Модуль для работы с векторными полями. Разработал в качестве школьного проекта.
VectorField(*comps, dim = None)
Векторное поле может быть задано с помощью
проекций векторов в каждой точке поля на
некоторые координатные оси.
>>> x, y, z, t, p = sympy.symbols("x y z t p")
>>> v = VectorField(x+y, y**2, z*y)
>>> u = VectorField(t - p, p, dim=(t, p))
:param comps: компоненты векторного поля - объекты, переводимые в sympy.Expr
:param dim: кортеж из обозначений координат векторного поля - объектов, переводимых в sympy.Expr
VectorField.__repr__()
Возваращает строку в формате (F1, F2, F3...),
где F1, F2, F3... - проекции векторного поля
>>> x, y, z = sympy.symbols("x y z")
>>> v = VectorField(x+y, y**2, z*y)
>>> print(v)
(x + y, y**2, y*z)
VectorField.visualize(image=None, scale=True, density=11, bounds=((-10, 10), (-10, 10), (-10, 10)),
description={"width": False, "length": False, "alpha": False, "color": False},
mode="A", width=0.005, length=1, alpha=1, color="black", imagesize=(10, 10), normalize=False, show=True)
Визуализирует дву- или трёхмерное векторное поле с помощью matplotlib
>>> x, y = sympy.symbols("x y")
>>> v = VectorField(x+y, y**2)
>>> v.visualize(density = 30, color = "blue", width = 0.003)
:param image: изображение (figure), на котором будет отрисовано векторное поле. По умолчанию выведет изображение отдельно
:param scale: смасштабировать векторное поле на изображение
:param density: плотность отрисовки стрелок/потоков.
:param bounds: границы отрисовки векторного поля
:param description: задаёт настройки отрисовки: динамическая ширина потоков, нормализация длин стрелок, динамическая прозрачность стрелок, динамическая раскраска.
:param mode: Режим отрисовки векторного поля. Режим отрисовки "A": представляет поле в виде стрелок в каждой точке координатной плоскости/пространства. Режим отрисовки "S": представляет поле в виде потоков (отстутсвует для трёхмерных векторных полей).
:param width: ширина стрелок или потоков.
:param length: длина стрелок.
:param alpha: прозрачность стрелок
:param color: цвет отрисовки стрелок, потоков.
:param imagesize: размеры изображения
:param normalize: нормализация длин векторов в режиме стрелок. Представляет каждый вектор в виде единичного вектора, сохраняя таким образом информацию лишь о нарпавлении вектора
:param show: показывать или не показывать изображение
VectorField.__add__(self, other):
Возвращает VectorField, каждый компонент которого
является суммой соответствующих компонент входных
векторных полей. Размерности входных векторных полей
обязаны совпадать
>>> x, y, z = sympy.symbols("x y z")
>>> v = VectorField(x+y, y**2, z*y)
>>> u = VectorField(x-y, 1/y, z)
>>> u + v
(2*x, y**2 + 1/y, y*z + z)
VectorField.__mul__(self, other):
В случае если other представлен численным типом данных
возваращает VectorField, каждый компонент которого является
произведением компоненты self и данного скаляра
>>> x, y = sympy.symbols("x y")
>>> v = VectorField(x, 1)
>>> v * 2
(2*x, 2)
В случае если other представлен VectorField
возвращает Expr, который представляет собой
скалярное произведение компонент self и other.
Размерности self и other обязаны совпадать
>>> x, y, z = sympy.symbols("x y z")
>>> v = VectorField(x+y, y**2, z*y)
>>> u = VectorField(x-y, 1/y, z)
>>> u * v
y*z**2 + y + (x - y)*(x + y)
VectorField.__eq__(self, other):
VectorField равен другому VectorField тогда,
когда совпадают их компоненты и размерности
>>> x, y = sympy.symbols("x y")
>>> v = VectorField(x+y, y**2)
>>> u = VectorField(x+y, y**2)
>>> t = VectorField(x-y, 1/y)
>>> u == v
True
>>> u == t
False
VectorField.__setitem__(self, key, value):
Позволяет вручную задать компоненту векторного поля
>>> x, y = sympy.symbols("x y")
>>> v = VectorField(x+y, y**2)
>>> v[x] = x*y
>>> v
(x*y, y**2)
:param key: координата компоненты векторного поля в виде sympy.Symbol
:param value: задаваемое значение компоненты векторного поля - объекта, переводимого в sympy.Expr
VectorField.__getitem__(self, key):
Позволяет получить компоненту векторного поля по
координате или по индексу в self._comps
>>> x, y = sympy.symbols("x y")
>>> v = VectorField(x+y, y**2)
>>> v[x]
x + y
>>> v[1]
y**2
:param key: координата компоненты векторного поля либо в виде строки, либо в виде числа - индекса в self._comps
VectorField.__iter__(self):
Позволяет использовать VectorField в цикле for
при этом должны перебирается кортежи, состоящие из
двух объектов: координаты и компоненты
>>> x, y = sympy.symbols("x y")
>>> v = VectorField(x+y, y**2)
>>> for coordinate, component in v: print(coordinate, component)
x x + y
y y**2
VectorField.__len__(self):
Возвращает длину self.dim
>>> x, y = sympy.symbols("x y")
>>> v = VectorField(x+y, y**2)
>>> len(v)
2
vecfield.VectorField,subs(self, *values):
Позволяет подставить числа в векторное поле вместо координат.
Возвращает кортеж из компонент после подстановки значений
>>> x, y = sympy.symbols("x y")
>>> v = VectorField(x+y, y**2)
>>> v.subs(1, 2)
(3, 4)
>>> v.subs({x : y, y : x**2})
(x**2 + y, x**4)
:param values: выражения, подставляемые в компоненты векторного поля вместо координат. Каждая координата из self.dim будет заменена на соответственное значение в values, которое может быть представлено как кортежом, так и словарём.
vecfield.VectorField,div(self):
Возвращает ScalarField, который представляет собой
дивергенцию векторного поля
>>> x, y = sympy.symbols("x y")
>>> v = VectorField(x+y, y**2)
>>> v.div()
2*y + 1
vecfield.VectorField,curl(self):
Возвращает VectorField, который является ротором векторного поля.
>>> x, y, z = sympy.symbols("x y z")
>>> v = VectorField(x+y, y**2, z*y)
>>> v.curl()
(z, 0, -1)
vecfield.VectorField,work(self, curve, bounds, numerical=False):
Возвращает криволинейный интеграл второго рода вдоль кривой.
Другими словами, возвращает работу, которую совершает сила,
представленная векторным полем, при прохождении МТ вдоль кривой.
>>> x, y, t = sympy.symbols("x y t")
>>> v = VectorField(0, -10)
>>> v.work((t**2-1, t), (t, 0, 4))
- 40
:param curve: кривая, заданная параметрически. Задаётся кортежом из функций от параметра - объектов, переводимых в sympy.Expr.
:param bounds: границы интегрирования по кривой. Задаётся кортежом из переменной и пределов интегрирования
:param numerical: численное решение или аналитическое
vecfield.VectorField,flux(self, region, *bounds, numerical=True):
Возвращает поверхностный интеграл второго рода по поверхности.
Другими словами, возвращает количество жидкости, которое протечёт
через поверхность, заданной region, поле скоростей которой задано
векторным полем за единицу времени
>>> x, y, z, t, p = sympy.symbols("x y z t p")
>>> v = VectorField(2, 0, 0)
>>> v.flux((1, t, p), (t, -2, 2), (p, -2, 2))
32
:param region: кривая/поверхность, заданная параметрически. Задаётся кортежом из зависящих от нескольких параметров функций - объектов, переводимых в sympy.Expr.
:param bounds: границы интегрирования по кривой/поверхности. Задаются несколькими кортежами, которые содержат переменную и пределы интегрирования.
:param numerical: численное решение или аналитическое
vecfield.VectorField,potential(self):
Возвращает потенциал векторного поля, если он имеется.
Если поле не потенциально, будет вызвано исключение.
>>> x, y = sympy.symbols("x y")
>>> v = VectorField(-x, 0)
>>> v.potential()
- x**2/2
vecfield.VectorField,is_potential(self):
Возвращает True, если поле потенциально,
и False в противном случае
>>> x, y = sympy.symbols("x y")
>>> v = VectorField(-x, 0)
>>> v.is_potential()
True
>>> u = VectorField(y, -x)
>>> u.is_potential()
False
vecfield.VectorField,is_solenoid(self):
Возвращает True, если поле соленоидально,
и False в противном случае
>>> x, y = sympy.symbols("x y")
>>> v = VectorField(x, y)
>>> v.is_solenoid()
False
>>> u = VectorField(y, x)
>>> u.is_solenoid()
True
vecfield.ScalarField.__init__(self, func=0, dim=None):
Скалярное поле может быть задано с помощью функции
нескольких переменных, являющихся координатами точки.
>>> x, y, z, v, t = sympy.symbols("x y z v t")
>>> s = ScalarField(x**2 + y**2 + z**2)
>>> p = ScalarField(v + t, dim=(t, v))
:param func: функция нескольких переменных, задающая скалярное поле - объект, переводимый в sympy.Expr.
:param dim: кортеж из обозначений координат скалярного поля - объектов, переводимых в sympy.Expr.
vecfield.ScalarField.__repr__(self):
Возваращает строку, содержащую функцию ScalarField
>>> x, y = sympy.symbols("x y")
>>> s = ScalarField(x**2 + y**2)
>>> print(s)
x**2 + y**2
vecfield.ScalarField.visualize(self,
image=None,
scale=True,
bounds=((-10, 10), (-10, 10), None),
density=256,
levels=10,
mode="G",
color=None,
showgrid=True,
show=True,
imagesize=(10, 10)):
Визуализирует одно- или двумерное скалярное поле с помощью matplotlib
>>> x, y = sympy.symbols("x y")
>>> s = ScalarField(x**2 + y**2)
>>> s.visualize()
:param image: изображение (figure), на котором будет отриосвано векторное поле
:param scale: смасштабировать скалярное поле на изображение
:param bounds: границы отрисовки скалярного поля
:param density: точность прорисовки скалярного поля
:param levels: количество эквипотенциальных поверхностей в режиме эквипотенциальных поверхностей
:param mode: режим отрисовки скалярного поля. В режиме "G" отрисовывает скалярное поле как график. В режиме "S" отрисовывает скалярное поле с помощью эквипотенциальных поверхностей. Отсутствует для одномерных скалярных полей.
:param color: цвет отрисовки графика скалярного поля. В режиме эквипотенциальных поверхностей может принимать особое значение "D". В таком случае каждый уровень будет иметь свой цвет в зависимости от значения функции на этом уровне.
:param showgrid: отрисовка сетки для координатной плоскости.
:param imagesize: размеры изображения
vecfield.ScalarField.__add__(self, other):
Возвращает ScalarField, функция которого является
суммой функций self и other. Размерности скалярных
полей должны совпадать
>>> x, y = sympy.symbols("x y")
>>> s = ScalarField(x**2 + y**2)
>>> p = ScalarField(x - y**2)
>>> s + p
x**2 + x
vecfield.ScalarField.__mul__(self, other):
Возвращает ScalarField, функция которого является
произвдением функции self и other. other при помещении
в sympify() обязан возвращать объект класса Expr
>>> x, y = sympy.symbols("x y")
>>> s = ScalarField(x + y)
>>> s * 2
2*x + 2*y
>>> s * x
x*(x + y)
vecfield.ScalarField.__eq__(self, other):
ScalarField равен другому ScalarField тогда
когда, когда функция первого ScalarField
равна функции второго ScalarField
>>> x, y = sympy.symbols("x y")
>>> s = ScalarField(x**2 + y**2)
>>> i = ScalarField(y**2 + x**2)
>>> s == i
True
>>> p = ScalarField(x + y)
>>> s == p
False
vecfield.ScalarField.__len__(self):
Возвращает длину размерности векторного поля
>>> x, y = sympy.symbols("x y")
>>> s = ScalarField(x**2 + y**2)
>>> len(s)
2
vecfield.ScalarField.subs(self, *values):
Подставляет в функцию скалярного поля значения
>>> x, y = sympy.symbols("x y")
>>> s = ScalarField(x**2 + y**2)
>>> s.subs(2, 2)
8
:param values: выражения, подставляемые в компоненты скалярного поля вместо координат. Каждая координата из self.dim будет заменена на соответственное значение в values, котороме может быть представлено как кортежом, так и словарём.
vecfield.ScalarField.work(self, curve, bounds, numerical=False):
Возвращает криволинейный интеграл второго рода вдоль кривой.
Другими словами, возвращает работу, которую совершает сила,
представленная векторным полем, при прохождении МТ вдоль кривой.
>>> x, y, t = sympy.symbols("x y t")
>>> v = ScalarField(x+y)
>>> v.work((t, 0), (t, 0, 2))
2
:param curve: кривая, заданная параметрически. Задаётся кортежом из функций от параметра - объектов, переводимых в sympy.Expr.
:param bounds: границы интегрирования по кривой. Задаётся кортежом из переменной и пределов интегрирования
:param numerical: численное решение или аналитическое
vecfield.ScalarField.grad(self):
Возвращает VectorField, являющийся градиентом
скалярного поля
>>> x, y = sympy.symbols("x y")
>>> s = ScalarField(x**2/2 + y**2/2)
>>> s.grad()
(x, y)
vecfield.ScalarField.ordiff(self, *vector):
Возвращает значение производной по направлению в
каждой точке скалярного поля
>>> x, y = sympy.symbols("x y")
>>> s = ScalarField(x**2 + y**2)
>>> s.ordiff(3, 4)
- 2*x + 1.6*y
:param vector: вектор, задающий направление производной, состоящий из объектов, переводимых в sympy.Expr.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vecfield-1.0.3.tar.gz.
File metadata
- Download URL: vecfield-1.0.3.tar.gz
- Upload date:
- Size: 20.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8283d0d5e535181dd1a2f5d8fdbb581177d6fb94b2675ea0dd23c30ac3daf692
|
|
| MD5 |
52c7b4922142ed7405a9bb077d0b6690
|
|
| BLAKE2b-256 |
1b335360b5f116d1c7d16cd92a562752cd2d3203e126035f0c3d030ea811a591
|
File details
Details for the file vecfield-1.0.3-py3-none-any.whl.
File metadata
- Download URL: vecfield-1.0.3-py3-none-any.whl
- Upload date:
- Size: 14.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bcbd1774d33e21f831bd18a778c0787b96ca82af09f56e34daa59cc53712298b
|
|
| MD5 |
341d4a5b6dd9ed9cc4cab27ac3fc409b
|
|
| BLAKE2b-256 |
87a4fcbe9f41b2f3fdadac670f3d60b49c330a7a1f760e4ced1f87794afe0acf
|