我正在尝试使用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
然而它似乎没有起作用。任何帮助将不胜感激,谢谢!
答案 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(零)?