我打算计算从0到x的曲线(函数)长度等于1的b(在Xo轴上也为x)。
在知道的情况下:https://www.mathsisfun.com/calculus/arc-length.html
(从0到b的整数)∫(1 +((f’(x))^ 2)^(1/2)dx = 1
那:
(从a到b的整数)∫f(x)dx = F(b)-F(a)
我们可以通过
来计算1-F(0)+ F(b)= 0,现在这是一个用x表示的方程,因为b就像我说的是Xo轴上的x。
所以现在我尝试了f(x)= x ** 3(完整代码将在下面)
我从SymPy获得的全部是ConditionSet,但不是数字。当然,不能通过evalf()撤消ConditionSet
所以这是我的问题:
代码:
from __future__ import division
import matplotlib.pyplot as plt
from sympy import *
x, y, z = symbols('x y z', real=True)
function1 = x**3
Antiderivative1 = integrate((1+(diff(function1))**2)**(1/2), x)
b = solveset(Eq(1 + Antiderivative1.subs(x, 0).evalf() - Antiderivative1, 0), x)
print(b)
多数民众赞成在输出:
ConditionSet(x, Eq(x*hyper((-0.5, 1/4), (5/4,), 9*x**4*exp_polar(I*pi)) - 4.0*gamma(5/4)/gamma(1/4), 0), Complexes)
在此先感谢您,感谢语法错误。
答案 0 :(得分:1)
请注意,您应该使用S(1)/2
或Rational(1, 2)
(或sqrt
),而不要使用1/2
,这会在Python中给您float
。有了我们
In [16]: integrand = sqrt(1 + ((x**3).diff(x))**2)
In [17]: integrand
Out[17]:
__________
╱ 4
╲╱ 9⋅x + 1
In [18]: antiderivative = integrand.integrate(x)
In [19]: antiderivative
Out[19]:
┌─ ⎛-1/2, 1/4 │ 4 ⅈ⋅π⎞
x⋅Γ(1/4)⋅ ├─ ⎜ │ 9⋅x ⋅ℯ ⎟
2╵ 1 ⎝ 5/4 │ ⎠
─────────────────────────────────────
4⋅Γ(5/4)
虽然与Wolfram Alpha的结果形式不同,但可以很容易地具有相同的功能(最大为加法常数)。从这个结果或Wolfram Alpha上的结果,我非常怀疑您会找到一种分析解决方案(使用SymPy或其他方法)。
但是,您可以找到一个数值解。不幸的是,SymPy的lambdify
函数中存在一个错误,这意味着nsolve
不适用于此函数:
In [22]: nsolve(equation, x, 1)
...
NameError: name 'exp_polar' is not defined
尽管如此,我们可以通过牛顿步骤自己完成:
In [76]: f = equation.lhs
In [77]: fd = f.diff(x)
In [78]: newton = lambda xi: (xi - f.subs(x, xi)/fd.subs(x, xi)).evalf()
In [79]: xj = 1.0
In [80]: xj = newton(xj); print(xj)
0.826749667942050
In [81]: xj = newton(xj); print(xj)
0.791950624620750
In [82]: xj = newton(xj); print(xj)
0.790708415511451
In [83]: xj = newton(xj); print(xj)
0.790706893629886
In [84]: xj = newton(xj); print(xj)
0.790706893627605
In [85]: xj = newton(xj); print(xj)
0.790706893627605