Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ';符号';对象没有属性';罪恶';_Python_Numpy_Sympy_Calculus - Fatal编程技术网

Python ';符号';对象没有属性';罪恶';

Python ';符号';对象没有属性';罪恶';,python,numpy,sympy,calculus,Python,Numpy,Sympy,Calculus,我定义了一个函数integrate\u boole,如下所示: def integrate_boole(f,l,r,N): N = 4 * int(N // 4) h=((r-l)/N) xN = np.linspace(l,r,N+1) fN = f(xN) return ((2*h)/45)*(7*fN[0]+32*(np.sum(fN[1:-1:2]))+12*. (np.sum(fN[2:-2:4]))+14*(np.sum(fN[4:-4]))+7*fN[-1]) 我现在尝试在f(x

我定义了一个函数
integrate\u boole
,如下所示:

def integrate_boole(f,l,r,N):
N = 4 * int(N // 4)
h=((r-l)/N)
xN = np.linspace(l,r,N+1)
fN = f(xN)
return ((2*h)/45)*(7*fN[0]+32*(np.sum(fN[1:-1:2]))+12*. (np.sum(fN[2:-2:4]))+14*(np.sum(fN[4:-4]))+7*fN[-1])
我现在尝试在f(x)的0和pi之间进行积分,其中f(x)定义为:

def f(x):
return x*np.sin(x)/(1+np.cos(x)**2)
当我将f(x)代入函数时:

integrate_boole(f(x),0,np.pi,8)
我收到以下错误消息:

-----------------------------------------------------------------------  ----
AttributeError                            Traceback (most recent call    last)
<ipython-input-23-91f1a95793b5> in <module>()
----> 1 integrate_boole(f(x),0,np.pi,8)

 <ipython-input-20-165d275ae26c> in f(x)
  1 def f(x):
----> 2     return x*np.sin(x)/(1+np.cos(x)**2)
  3 myx = np.linspace(0,np.pi,1000)
  4 plt.plot(myx,f(myx),label=r"$f(x)=\frac{x\sin{x}}{1+\cos^2{x}}$")
  5 plt.ylabel("$f(x)$")

AttributeError: 'Symbol' object has no attribute 'sin'

我查阅了其他关于大致相同主题的文章,但我不相信我的numpy和sympy库会像它们为其他人所做的那样发生冲突。但他们可能是,我不知道为什么。任何帮助都将不胜感激。

integrate\u boole的第一个参数应该是函数

  • f
    是一个函数
  • f(x)
    是函数
    f
    为输入
    x
    返回的数字
你需要打电话

integrate_boole(f,0,np.pi,8)
而不是

integrate_boole(f(x),0,np.pi,8)
以下是完整的代码,带有正确的缩进:

import numpy as np
import matplotlib.pyplot as plt
import sympy as sym

x, y, z, t = sym.symbols('x y z t')

def integrate_boole(f,l,r,N):
    N = 4 * int(N // 4)
    h=((r-l)/N)
    xN = np.linspace(l,r,N+1)
    fN = f(xN)
    return ((2*h)/45)*(7*fN[0]+32*(np.sum(fN[1:-1:2]))+12*(np.sum(fN[2:-2:4]))+14*(np.sum(fN[4:-4]))+7*fN[-1])

def f(x):
    return x*np.sin(x)/(1+np.cos(x)**2)

integrate_boole(f,0,np.pi,8)
# 2.470207745145361

你是在混血儿。Numpy例程通常不知道如何处理符号,但您可以用它们的sympy等价物替换某些函数调用。。。e、 g.
sym.sin
np.sin
被赋予一个对象数据类型数组(或将构成这样一个数组的列表)时,尝试调用数组中每个元素的
e.sin()
。因此,如果对象没有该方法,则会出现属性错误。显然,这里您提供了一个数组或符号列表。
import numpy as np
import matplotlib.pyplot as plt
import sympy as sym

x, y, z, t = sym.symbols('x y z t')

def integrate_boole(f,l,r,N):
    N = 4 * int(N // 4)
    h=((r-l)/N)
    xN = np.linspace(l,r,N+1)
    fN = f(xN)
    return ((2*h)/45)*(7*fN[0]+32*(np.sum(fN[1:-1:2]))+12*(np.sum(fN[2:-2:4]))+14*(np.sum(fN[4:-4]))+7*fN[-1])

def f(x):
    return x*np.sin(x)/(1+np.cos(x)**2)

integrate_boole(f,0,np.pi,8)
# 2.470207745145361