我正在尝试使用以下代码绘制一个复杂函数的积分:
import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
# Integrable function
def complex_function(f):
return np.exp(2*np.pi*1j*f*t) * (1/np.tan(f/fs - 1j*(a/(2*np.pi*fs))))/(2*np.pi*1j*fs)
def w(t):
return sp.integrate.quad(lambda f : complex_function(f), -B/2, B/2)[0]
# Variables
B = 1
fs = 1
t = np.linspace(-25, 25, int(50/fs))
a = 1
# Plot
plt.plot(t, w(t), 'b')
plt.show()
出现此错误:
TypeError: only length-1 arrays can be converted to Python scalars
我该怎么解决呢?
我试过改变place的w(t)
函数,用arange
代替linspace
。但同样的错误出现了。
1条答案
按热度按时间2admgd591#
传递给函数
sp.integrate.quad(func, a, b)
的函数func
必须返回一个真实的值。在你的例子中,complex_function
一次计算t
的所有值的复数,并返回一个向量/Tensor/数组。要解决这个错误,您需要为t
的每个值调用函数complex_function
,这样函数complex_function
总是返回一个真实的/scaler值。同样,为了调用complex_function
获取t
的值,需要将t
的值传递给函数complex_function
。我已经编写了一个这样做的方法,如下所示:它绘制了函数
complex_function
的积分。