如何在python / matplotlib

时间:2017-12-16 23:45:29

标签: python math sympy

所以,我的目标是实现一个功能f(x) 我的问题是我的函数有一个积分,我只知道如何构造定积分,所以我的问题是如何在函数中创建一个不定积分(或者可能还有其他一些积分)方法我目前没有意识到)

我的功能定义为:

enter image description here

(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)]。然而,出于某种原因,它并不适用于我的职能......

提前致谢

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.