gpt4 book ai didi

python - 如何使用 python、numpy 和 scipy 积分弧长?

转载 作者:行者123 更新时间:2023-11-30 22:34:03 27 4
gpt4 key购买 nike

在另一个thread ,我看到有人设法使用 mathematica 对弧长进行积分。他们写道:

In[1]:= ArcTan[3.05*Tan[5Pi/18]/2.23]
Out[1]= 1.02051
In[2]:= x=3.05 Cos[t];
In[3]:= y=2.23 Sin[t];
In[4]:= NIntegrate[Sqrt[D[x,t]^2+D[y,t]^2],{t,0,1.02051}]
Out[4]= 2.53143

到底如何使用 numpy 和 scipy 的导入将其传输到 python 中?特别是,我被他的代码中的第 4 行“NIntegrate”函数困住了。谢谢您的帮助!

此外,如果我已经有了弧长和垂直轴长度,我如何才能反转程序以从已知值中吐出原始参数?谢谢!

最佳答案

据我所知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)

编辑:问题的第二部分 - 颠倒问题

由于您知道积分(弧)的值,您现在可以求解一个确定弧的参数(半轴、角度等)。让我们假设您想要解决角度问题。然后您可以使用 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

关于python - 如何使用 python、numpy 和 scipy 积分弧长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44962794/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com