使用scipy集成一个函数?

时间:2017-03-10 11:19:38

标签: python scipy

我正在尝试使用SciPy来集成此功能:

y(x)=(e ^ -ax)* cos(x)在0到4pi之间。

这是我到目前为止的代码:

from numpy import *
from scipy.integrate import simps
a = 0 
x = linspace(0 , 4*pi, 100)
y = (e^-(a*x))*cos(x)
integral_value = simps(y,x)
print integral_value

然而它似乎没有起作用。任何帮助将不胜感激,谢谢!

3 个答案:

答案 0 :(得分:4)

如果您运行该程序,则会收到以下错误:

  

TypeError:ufunc' bitwise_xor'不支持输入类型,并且根据投射规则无法安全地将输入强制转换为任何支持的类型'''

所以你知道问题出在函数中的^(按位xor)。在Python中,一个使用**来获取指数

如果有人写道:

y = (e**-(a*x))*cos(x)

相反,一个人得到:

>>> print integral_value
-0.000170200006112

完整的计划:

from numpy import *
from scipy.integrate import simps
a = 0 
x = linspace(0 , 4*pi, 100)
y = (e**-(a*x))*cos(x)
integral_value = simps(y,x)
print integral_value

您还可以使用以下内容明确使用numpy函数。

from numpy import *
from scipy.integrate import simps
a = 0 
x = linspace(0 , 4*pi, 100)
y = exp(-a*x)*cos(x)
integral_value = simps(y,x)
print integral_value

为了提高精度,你可以增加点数(100不是那么多)。

答案 1 :(得分:1)

import numpy as np
import math
from scipy.integrate import simps
a = 0
x = np.linspace(0 , 4*math.pi, 100)

#create a vectorized function which can be applied directly to an array    
fn = np.vectorize(lambda x: math.exp(-a*x)*math.cos(x))
y = fn(x)

integral_value = simps(y, x)
print integral_value

这确实产生了-0.000170200006112的价值。请注意,对于a=0,积分等于零,因此为了更接近"你需要改进网格...

答案 2 :(得分:1)

用大锤敲碎坚果......

>>> from sympy import *
>>> var('a x')
(a, x)
>>> y = exp(-a*x)*cos(x)
>>> y.subs(a,0)
cos(x)

我们是否会惊讶地发现它在给定的时间间隔内整合为0(零)?