我一直在尝试生成一个
到目前为止,我的情况是:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def rayleightest(t, f):
pi = np.pi
n = 528
z = (1.0/n)*((np.sum(np.cos(2.0*pi*f*t)))**2+(np.sum(np.sin(2.0*pi*f*t)))**2)
return z
def main():
file = 'Rayleighdata.dat'
t0 = np.loadtxt(file, usecols=(0,))
t = np.array(t0)
Pmax = 90
Pmin = 1.5
fmin = 1/Pmax
fmax = 1/Pmin
t1 = 1.08
tn = 359.393
T = tn - t1
f0 = 1/T
OFAC = 2.245
fstep = f0/OFAC
M = int((fmax-fmin)/fstep)
j = 2348
fj = fmin + j*fstep
fk = np.arange(fmin, fmax, fstep)
f = np.array(fk)
list1 = list(map(rayleightest,t,f))
x = np.linspace(fmin, fmax, fstep)
plt.plot(x, list1, marker='o', linestyle='--', label='data')
plt.legend()
plt.show()
if __name__ == "__main__":
main()
现在如果我打印列表1,我只得到一个数字的完整列表。为什么?在此之前,如果使用sum而不是np.总和. 我只是不知道如何调用rayleightest函数并以每个频率遍历文件中的所有数字(n=528)。你知道吗
如果我打电话
z = rayleightest(t, f)
我只得到了第一个答案。你知道吗
您的
main()
函数包含list1 = list(map(rayleightest,t,f))
。这就是如何在t
和f
中得到每对值的一个答案,并得到一组值的结果。换句话说,代码计算rayleightest(t[0], f[0])
,然后rayleightest(t[1], f[1])
,依此类推。你知道吗使用代码
z = rayleightest(t, f)
时,传递的是2个numpy数组,而不是2个数字。结果是一个单一的值,因为rayleightest()
中的公式包含np.sum()
—您将数组中的所有值相加为一个单一的值。你知道吗所以这个公式就是为什么不同的输入数据只有一个值的原因。如果这是计算过程的预期行为,则由您来回答问题。你知道吗
现在来看看为什么在第一种情况下,列表中的值相同。因为对于每一对数字,你基本上都要计算
sin(x * y) ** 2 + cos(x * y) ** 2
,它总是1
,所以rayleightest
中的z
只等于1 / n
。你知道吗编辑
现在,当您提供了您试图用代码实现的原始公式时,问题实际上是什么变得更加清楚了。你知道吗
我所做的修改:
(1)
list1 = [rayleightest(t, val) for val in f]
(2)
x = np.arange(fmin, fmax, fstep)
(3)
plt.plot(x, list1, 'r-', label='data')
我得到的结果是:
相关问题 更多 >
编程相关推荐