numpy 参数曲线的长度(曲线的微分积分)

px9o7tmv  于 2022-01-10  发布在  其他
关注(0)|答案(1)|浏览(171)

我第一次尝试学习微分几何和渐近性。使用渐近性,我能够定义参数曲线的表达式并求出速度。我试图根据下面的定义计算曲线的长度,但无法计算出如何使用渐近来计算。有没有人能指点一下如何计算曲线长度?

下面是我拥有的当前代码(使用symmy&matplotlib)。


# Expression of Parametric Curve

t = sympy.symbols('t')
x_expr = sympy.cos(t)
y_expr = sympy.sin(t)

f_x = sympy.lambdify(t, x_expr, 'numpy')
f_y = sympy.lambdify(t, y_expr, 'numpy')

# Differential of Parametric Curve

diff_x = sympy.lambdify(t, sympy.diff(x_expr, t), 'numpy')
diff_y = sympy.lambdify(t, sympy.diff(y_expr, t), 'numpy')

t_values = np.linspace(0, 2 * np.pi, 80, endpoint=True)

X = f_x(t_values)
Y = f_y(t_values)

# Plot the curve

clear_figure()
ax = create_subplot()
ax.set_xlim(-1.5, 1.5)
ax.set_ylim(-1.5, 1.5)
ax.scatter(X, Y, s=4)
plt_canvas.draw()

# Plot the velocities

t1_values = np.linspace(0, 2 * np.pi, 9, endpoint=True)
for t1 in t1_values:
    ax.arrow(f_x(t1), f_y(t1), diff_x(t1), diff_y(t1), head_width=0.02, head_length=0.02, ec='red', linewidth=0.1)
plt_canvas.draw()
2uluyalo

2uluyalo1#

geometry,您可以定义一条参数曲线,它可以告诉您该曲线的长度。这是你所期待的吗?

>>> Curve((cos(t), sin(t)), (t, 0, 2*pi)).length
2*pi

SymPy还不支持3-D曲线,但通常可以通过参数定义点,然后在感兴趣的范围内进行积分来实现这一点。

from sympy import Tuple
from sympy.abc import t
x=Tuple(cos(t),sin(t),3*t)
ss = sum([i.diff(t)**2 for i in x])
>>> integrate(sqrt(ss), (t,0,2))
2*sqrt(10)*pi

相关问题