2014-09-28 83 views
-5

函數的最大值和最小值寫功能maxmin(f, a, b, n=1000)用於ab之間的間隔 找到一個數學函數f(x)的最大 和最小值。下面的測試程序查找使用python

from math import cos, pi 
print maxmin(cos, -pi/2, 2*pi, 100001) 

應當寫出

(1.0, -1.0). 

maxmin函數可以計算一組的n存儲在列表x均勻間隔的座標ab之間 ,然後在 計算f指向x並將值存儲在另一個列表y中。 Python函數 max(y)min(y)分別返回 列表y中的最大值和最小值。

我嘗試使用

from math import cos, pi 
import numpy 

def maxmin(f, a, b, n=1000): 
    x = (f(i) for i in numpy.linspace(a, b, n)) 
    #print x 
    maximum = max(x==2) 
    minimum = min(x==0) 
    return maximum, minimum 

print maxmin(cos, -pi/2, 2*pi, 100001) 

但運行不正常。當我的意思是它不能正常工作我不給我最大和最小,我應該得到哪些(1.0,-1.0)。 這是錯誤我得到

minimum = min(x) 
ValueError: min() arg is an empty sequence 
>>> 

我很困惑什麼順序就是了

+0

什麼是'numpy.linespace'? – 2014-09-28 19:28:43

+1

當你說「*它無法正常運行*」時,你是什麼意思?請編輯您的問題,以包含程序的**完整**輸出,包括您收到的任何錯誤的全文。 – MattDMo 2014-09-28 19:28:46

+1

我認爲你的意思是'numpy.linspace',米奇? – 2014-09-28 19:29:16

回答

0

您發佈會給你一個NameError: global name 'numpy' is not defined的,因爲你要導入的東西的方式的代碼。而不是做

from numpy import * 

的只是做

import numpy 

此外,在numpy的函數被調用linspace,不linespace。如果你改變這兩件事情,它會起作用,但還有其他問題。

你似乎不明白Python的導入是如何工作的。這是這個問題的根源。無論你何時鍵入from numpy import *,Python 都會找到 numpy,並將所有在numpy中定義的東西放入當前文件中。所以你不能在numpy中引用numpy.linspacenumpy.sin或其他的東西。您只需將它們稱爲linspacesin

+0

你能幫助我解決其他問題嗎?對不起,我不擅長編程。如果我們在課堂上提出問題並侮辱我們的智力,我的老師就會讓我們感到尷尬,所以沒有人提出問題。 – Mitch 2014-09-28 19:37:10

+0

我認爲即使OP修正了這個問題,他們也需要使用列表理解來定義'x'而不是生成器。這就是空序列錯誤的來源。您指出的任何問題都不會導致該特定的「ValueError」。 – SethMMorton 2014-09-29 03:30:38

+0

@Mitch如果這沒有回答你所有的問題,爲什麼接受它? – SethMMorton 2014-09-29 03:32:20