Ejemplo n.º 1
0
r, theta = symbols('r, theta')
x, y = symbols('x, y')
m = Manifold('M', 2)
# 定义一个patch
patch = Patch('P', m)
# 为这个patch建立坐标系,一个是笛卡尔,一个是极坐标
rect: CoordSystem = CoordSystem('rect', patch)
polar = CoordSystem('polar', patch)
# print(rect in patch.coord_systems)
# 建立两个坐标系之间的转换关系,逆变换是自动的。
# 这个地方,如果笛卡尔是3维,另一个是2维曲面(但是也用u,v,不用极坐标,那会怎么样呢?)
polar.connect_to(rect, [r, theta], [r * cos(theta), r * sin(theta)])
# t = polar.coord_tuple_transform_to(rect, [1, pi])
# 极坐标存在奇点,r = 0时,其他怎么取都是0

t = polar.coord_tuple_transform_to(rect, [0, pi])
print(t)
t = polar.coord_tuple_transform_to(rect, [2, pi / 2])
print(t)
t = rect.coord_tuple_transform_to(polar, [0, 2])
print(t)

# 雅克比矩阵。极坐标到笛卡尔坐标系的变换矩阵函数,在每个点,是可以求出一个具体的矩阵的
# 但整体来说是一个函数。
m = polar.jacobian(rect, [r, theta])
print(m)
plot_latex(latex(m))
# 笛卡尔坐标系到笛卡尔坐标系的雅克比矩阵是单位矩阵
m = rect.jacobian(rect, [x, y])
# plot_latex(latex(m))
Ejemplo n.º 2
0
from sympy.diffgeom import Manifold, Patch, CoordSystem
from sympy.simplify import simplify

r, theta = symbols('r, theta')

m = Manifold('M', 2)
patch = Patch('P', m)

rect = CoordSystem('rect', patch)
polar = CoordSystem('polar', patch)

print(rect in patch.coord_systems)

polar.connect_to(rect, [r, theta], [r*cos(theta), r*sin(theta)])

print(polar.coord_tuple_transform_to(rect, [0, 2]))
print(polar.coord_tuple_transform_to(rect, [2, pi/2]))
print(rect.coord_tuple_transform_to(polar, [1, 1]).applyfunc(simplify))

print(polar.jacobian(rect, [r, theta]))

p = polar.point([1, 3*pi/4])
print(rect.point_to_coords(p))
print(rect.coord_function(0)(p))
print(rect.coord_function(1)(p))

v_x = rect.base_vector(0)
x = rect.coord_function(0)
print(v_x(x))
print(v_x(v_x(x)))
Ejemplo n.º 3
0
from sympy import symbols, sin, cos, pi
from sympy.diffgeom import Manifold, Patch, CoordSystem
r, theta = symbols('r, theta')
m = Manifold('M', 2)
patch = Patch('P', m)
rect = CoordSystem('rect', patch)
polar = CoordSystem('polar', patch)
rect in patch.coord_systems
polar.connect_to(rect, [r, theta], [r*cos(theta), r*sin(theta)])
polar.coord_tuple_transform_to(rect, [0, 2])
polar.coord_tuple_transform_to(rect, [2, pi/2])
rect.coord_tuple_transform_to(polar, [1, 1])
polar.jacobian(rect, [r, theta])
p = polar.point([1, 3*pi/4])
rect.point_to_coords(p)
#Define a basis scalar field (i.e. a coordinate function), that takes a point and returns its coordinates. It is an instance of BaseScalarField.
rect.coord_function(0)(p)
rect.coord_function(1)(p)
#Define a basis vector field (i.e. a unit vector field along the coordinate line). Vectors are also differential operators on scalar fields. It is an instance of BaseVectorField.
v_x = rect.base_vector(0)
x = rect.coord_function(0)
v_x(x)
v_x(v_x(x))
#Define a basis oneform field:
dx = rect.base_oneform(0)
dx(v_x)
#If you provide a list of names the fields will print nicely: - without provided names:
x, v_x, dx
#with provided names
rect = CoordSystem('rect', patch, ['x', 'y'])
rect.coord_function(0), rect.base_vector(0), rect.base_oneform(0)