翻译将BASIC中的另一个函数集成到Python中的函数

时间:2013-12-27 15:26:05

标签: python math python-3.x basic

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)

3 个答案:

答案 0 :(得分:1)

你的翻译并不遥远。其他语言中的for循环和Python的“循环范围”模式之间的唯一区别是“停止”值通常是包含在其他语言中,但是< em>在Python中独占。

因此,在大多数其他语言中,包含ab的循环看起来像

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步骤XA+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)