python数值积分函数中的无值



我正在尝试编写一个代码,该代码使用矩形规则计算积分,并且还允许用户输入积分限制和divions(矩形(的数量。我已经编写了该函数,但对于某些值,它只返回"None"。知道为什么吗?

这是我到目前为止的代码:

def integral(f, a, b, N):
h = int((b-a)/N)
result = 0
result += h * f(a)
for i in range(1, N-1):
    result += h * f(a + i*h)
    return result
def f(x):          
return x**3
string_input1 = input("Please enter value for a: ") 
a = int(string_input1)

string_input2 = input("Please enter value for b: ")
b = int(string_input2)
while True: 
string_input3 = input("Please enter integer positive value for N: ") 
N = int(string_input3)
if N>0:       
    break

print(integral(f, a, b, N))

返回"None"的值示例是 a=0 b=1 N=2

for i in range(1, N-1):
    result += h * f(a + i*h)
    return result

如果N = 2for i in range(1, 1)不会执行,因此integral返回None

但即使N > 2,在for循环中return也没有任何意义,因为它只会运行第一次迭代,然后返回任何result

第一个问题是变量h作为int,然后循环直到N-1,然后循环return在循环内。

def integral(f,a,b,N):
    h = float(b-a)/float(N)
    result = 0.
    result += h*f(a)
    for i in range(1,N):
        result += h*f(a+i*h)
    return result

你已经有一个很好的答案,但你的代码可以稍微完善一下:

没有理由将最左侧的端点与其他采样点区别对待。自a = a + 0以来,如果你用i=0开始循环,你在第一次通过循环时拾取a

def integral(f,a,b,N):
    h = (b-a)/float(N)
    result = 0.0
    for i in range(N):
        result += h*f(a+i*h)
    return result

此外,通过直接将sum应用于理解来替换显式循环会更 Pythonic:

def integral(f,a,b,N):
    h = (b-a)/float(N)
    return h*sum(f(a + i*h) for i in range(N))

这在功能上与第一个定义相同。例如:

>>> integral(lambda x: x**2,0,1,100)
0.32835000000000003

最后,如果您使用的是Python 2,则应更改上述内容,使其使用xrange()而不是range()

最新更新