两周前我开始编程,所以我意识到这可能是一个愚蠢的问题。
我想在区间[0,25]中找到t值的y值,而不使用for循环。我想要一个y值列表,但我得到<function y at 0x01D4D5D0>
:
from math import cos, e, sqrt
import numpy as np
m = 9
A = 0.3
k = 4
gamma = 0.15
t_array = np.linspace(0,25)
y_array = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
def y(t_array):
y = []
y.append(A*(e**(-gamma)**(t_array))*cos((sqrt(k/m))*(t_array)))
print(y)
答案 0 :(得分:1)
由于你没有调用你定义的功能,你的原始问题就出现了。您不能指望函数知道它必须使用哪些参数。 Python是程序性的;你必须自己传递这些论点。
或者(我推荐这个),您可以使用numpy
的ufuncs并将所有内容矢量化:
y_array = A * (np.exp(-gamma) ** (t_array)) * np.cos((np.sqrt(k / m)) * (t_array))
print(y_array)
array([ 0.3 , 0.26197643, 0.20012117, 0.12471753, 0.04610095,
-0.02650152, -0.08584334, -0.12718585, -0.14847109, -0.1501709 ,
-0.13487525, -0.10670268, -0.07062388, -0.03178614, 0.00508595,
0.03615761, 0.05878548, 0.07164338, 0.07468336, 0.06895966,
0.05635461, 0.03925115, 0.0201959 , 0.00159182, -0.01454951,
-0.02677677, -0.03428127, -0.03689604, -0.0350233 , -0.02950888,
-0.02148485, -0.01220259, -0.00287629, 0.0054473 , 0.01198185,
0.0162522 , 0.01810327, 0.0176719 , 0.01533013, 0.01161037,
0.00712318, 0.00247811, -0.00178419, -0.00524252, -0.00762514,
-0.00881889, -0.00885931, -0.00790559, -0.00620522, -0.00405386]
免责声明:我无法验证此答案,因为您尚未解释您要执行的操作。这应该有助于您开始使用矢量化的正确方向。
答案 1 :(得分:0)
我认为问题在于你有一个名为'y'的函数,而打印y会打印出函数的位置。函数y也不仅仅定义了运行,也没有返回任何内容。因此,要在y函数内打印新创建的y列表,您可以这样做:
def y(t_array):
y_values = []
y_values.append(A*(e**(-gamma)**(t_array))*cos((sqrt(k/m))*(t_array)))
return y_values
print(y(t_array))