Длина параметра c кривой (интеграл от дифференциала кривой) - PullRequest
0 голосов
/ 16 марта 2020

Я впервые пытаюсь выучить дифференциальную геометрию и сочувствовать. Используя sympy, я могу определить выражения для параметра c кривой и найти скорости. Я пытаюсь вычислить длину кривой в соответствии с приведенным ниже определением, но не могу понять, как это сделать с sympy. Может кто-нибудь, пожалуйста, предоставьте указатели о том, как вычислить длину кривой.

enter image description here

Ниже приведен текущий код, который я имею (используя sympy & 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()

1 Ответ

0 голосов
/ 16 марта 2020

С geometry вы можете определить параметр c кривой, и он может сказать вам длину того же самого. Это то, что вы ожидали:

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