Clifford Pickover的书Calculus and Pizza在这里和那里都有一些代码示例,所有代码都是用BASIC的某些方言编写的。
我编写了一个包含集成的代码示例的Python版本。他的BASIC例子如下:
10 REM Integration
20 DEF FNY(X) = X*X*X
30 A = 0
40 B = 1
50 N = 10
55 R = 0
60 H = (B-A)/N
70 FOR X = A TO B - H/2 STEP H
80 R = R + FNY(X)
90 NEXT X
100 R = R * H
110 PRINT *INTEGRATION ESTIMATE*: R
我在这里和那里改变了一些东西,允许用户指定获取积分的间隔,指定要作为lambda集成的函数,等等。我立即知道for循环不起作用,因为我已经在下面写了。我只是想知道是否有一些直接或惯用的BASIC转换为Python for。
def simpleintegration():
f = eval(input("specify the function as a lambda\n:%"))
a = int(input("take the integral from x = a = ...\n:%"))
b = int(input("to x = b = ...\n:%"))
n = 10
r = 0
h = (b-a)/n
for x in range(a,b-h/2,h):
r = r + f(x)
r = r * h
print(r)
答案 0 :(得分:1)
你的翻译并不遥远。其他语言中的for
循环和Python的“循环范围”模式之间的唯一区别是“停止”值通常是包含在其他语言中,但是< em>在Python中独占。
因此,在大多数其他语言中,包含a
和b
的循环看起来像
for i = a to b step c
' Do stuff
next i
在Python中,它将是
for i in range(a, b + 1, c):
# Do stuff
答案 1 :(得分:0)
公式是使用细分区间左端的值计算黎曼和。因此,X
的上次使用值应为B-H
。
由于浮点错误,从A
步进H
会导致最后一个值偏离一小部分,因此B-H
不是一个好的界限(在BASIC中)代码)和B-H/2
用于在X
到达B
之前停止。
由于绑定的B-H/2
无法访问,因此Python代码应该在呈现的表单中工作,因此范围应该以{{1}}或接近的值停止。
使用稍加修改,您实际上可以计算梯形近似值,您可以使用B-H
进行初始化,从R=f(A)/2
步骤X
到A+H
添加B-H
f(X)
到R
然后通过添加f(B)/2
完成(这可能已在初始化中完成)。和以前一样,积分的近似值是R*H
。
答案 2 :(得分:0)
你可以做如下操作,只需在 for 循环中改变 'i' 的迭代。
def simpleintegration():
f = eval(input("specify the function as a lambda\n:%"))
a = int(input("take the integral from x = a = ...\n:%"))
b = int(input("to x = b = ...\n:%"))
n = 10
r = 0
h = (b-a)/n
for x = a to b-h/2 step h:
r = r + f(x)
r = r * h
print(r)