所以,我的目标是实现一个功能f(x)
我的问题是我的函数有一个积分,我只知道如何构造定积分,所以我的问题是如何在函数中创建一个不定积分(或者可能还有其他一些积分)方法我目前没有意识到)
我的功能定义为:
(G是引力常数,虽然为了简单起见你可以将G留在你的答案中,但我会在我的代码中添加它) 这是起点,但我不知道如何做积分部分
import numpy as np
def f(x):
rho = 5*(1/(1+((x**2)/(3**2))))
function_result = rho * 4 * np.pi * x**2
return function_result
如果我需要详细说明,请告诉我。
修改 --------------------------------------- -------------- 我取得了一些重大进展,但我仍然有一点错误。 差不多,我这样做了:
from sympy import *
x = Symbol('x')
rho = p0()*(1/(1+((x**2)/(rc()**2))))* 4 * np.pi * x**2
fooply = integrate(rho,x)
def f(rx):
function_result = fooply.subs({x:rx})
return function_result
当我为f
插入一个号码时,哪个工作正常;但是,当我插入一个数组时(我需要稍后),我得到错误:
raise SympifyError(a)
sympy.core.sympify.SympifyError: SympifyError: [3, 3, 3, 3, 3]
(在这里,我做了print(f([3,3,3,3,3]))
)。通常,该函数返回一个值数组。因此,如果我f([3,2])
,它应该返回[f(3),f(2)]
。然而,出于某种原因,它并不适用于我的职能......
提前致谢
答案 0 :(得分:2)
怎么样:
from sympy import *
x, p0, rc = symbols('x p0 rc', real=True, positive=True)
rho = p0*(1/(1+((x**2)/(rc))))* 4 * pi * x**2
fooply = integrate(rho,x)/x
rho, fooply
(4*pi*p0*x**2/(1 + x**2/rc),
4*pi*p0*rc*(-sqrt(rc)*atan(x/sqrt(rc)) + x)/x)
fooply = fooply.subs({p0: 2.0, rc: 3.0})
np_fooply = lambdify(x, fooply, 'numpy')
print(np_fooply(np.array([3,3,3,3,3])))
[ 29.81247362 29.81247362 29.81247362 29.81247362 29.81247362]
答案 1 :(得分:0)
To plug in an array to a SymPy expression, you need to use lambdify
to convert it to a NumPy function (f = lambdify(x, fooply)
). Just using def
and subs
as you have done will not work.
Also, in general, when using symbolic computations, it's better to use sympy.pi
instead of np.pi
, as the former is symbolic and can simplify. It will automatically be converted to the numeric pi
by lambdify
.