None python 数值积分函数中的值
None value in python numerical integration function
我正在尝试编写一个代码,使用矩形规则计算积分,还允许用户输入积分限制和 divions(矩形)的数量。我写了函数,但对于某些值,它只是 returns "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))
return "None" 的值示例 a=0 b=1 N=2
for i in range(1, N-1):
result += h * f(a + i*h)
return result
如果 N = 2
则 for i in range(1, 1)
不会执行,因此 integral
returns None
.
但即使 N > 2
,在 for
循环中包含 return
也没有任何意义,因为它只会 运行 第一次迭代然后 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()
。
我正在尝试编写一个代码,使用矩形规则计算积分,还允许用户输入积分限制和 divions(矩形)的数量。我写了函数,但对于某些值,它只是 returns "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))
return "None" 的值示例 a=0 b=1 N=2
for i in range(1, N-1):
result += h * f(a + i*h)
return result
如果 N = 2
则 for i in range(1, 1)
不会执行,因此 integral
returns None
.
但即使 N > 2
,在 for
循环中包含 return
也没有任何意义,因为它只会 运行 第一次迭代然后 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()
。