2017-09-30 50 views
0

兩週前我開始編程,所以我意識到這可能是一個愚蠢的問題。 我想找到間隔[0,25]中t值的y值,而不使用for循環。我想y值的列表,而是我得到<function y at 0x01D4D5D0>將參數傳遞給Python函數

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

'y'確實是函數,來自'def y(...):'。你需要**調用你的函數,並且函數需要返回結果列表。 –

+0

你是不是指'print(y(t_array))'? –

+0

當你定義一個Python函數時,你給它一個函數的名字和一個變量的名字。但是你並沒有真正傳遞價值。例如。你可能有一個函數'f(x)= x^2',但是除非你把它們放到函數中,否則你實際上並沒有輸出值,就像'f(2)'。 –

回答

1

您的原始問題的出現是由於這樣的事實,你不罵你定義的功能。你不能指望一個函數知道它必須使用什麼參數。 Python是程序性的;你必須自己通過這些論點。

或者(和我推薦這個),你可以只使用numpy的ufuncs和vectorise一切:

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] 

免責聲明:因爲你我無法驗證這個答案沒有解釋你正在嘗試做什麼。這應該有希望讓你開始正確的方向使用vectorization。

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))