据我所知scipy
不能执行符号计算(如符号差异)。您可能想看看http://www.sympy.org的符号计算包。因此,在下面的示例中,我分析计算了导数(Dx(t)
和Dy(t)
函数)。
>>> from scipy.integrate import quad
>>> import numpy as np
>>> Dx = lambda t: -3.05 * np.sin(t)
>>> Dy = lambda t: 2.23 * np.cos(t)
>>> quad(lambda t: np.sqrt(Dx(t)**2 + Dy(t)**2), 0, 1.02051)
(2.531432761012828, 2.810454936566873e-14)
编辑:问题的第二部分 - 反相问题
从你知道的积分(ARC)的值,事实上,你现在可以解决对于确定的参数一个圆弧(半轴,角度等)假设您想要求解角度。然后,您可以使用scipy
中的一个非线性求解器来恢复方程quad(theta) - arcval == 0
。你可以这样说:
>>> from scipy.integrate import quad
>>> from scipy.optimize import broyden1
>>> import numpy as np
>>> a = 3.05
>>> b = 2.23
>>> Dx = lambda t: -a * np.sin(t)
>>> Dy = lambda t: b * np.cos(t)
>>> arc = lambda theta: quad(lambda t: np.sqrt(Dx(t)**2 + Dy(t)**2), 0, np.arctan((a/b) * np.tan(np.deg2rad(theta))))[0]
>>> invert = lambda arcval: float(broyden1(lambda x: arc(x) - arcval, np.rad2deg(arcval/np.sqrt((a**2 + b**2)/2.0))))
然后:
>>> arc(50)
2.531419526553662
>>> invert(arc(50))
50.000031008458365
非常感谢你的回复!我很抱歉,但最后我只有一个关于四功能的简单问题。如果我已经具有2.5314327的弧长,我将如何能够在代码中反转该功能?谢谢! –
@FairlyFactual你是什么意思的“扭转”?这是一个确定的积分。我想你想解决方程'四(某事)== 2.53 ...'。问题是:你想要解决什么? –
@FairlyFactual我加入了我的尝试,以解决你的“逆向问题”的方式来理解我的答案。 –