【问题标题】:'float' object is not Iterable in Newton-Raphson iteration'float' 对象在 Newton-Raphson 迭代中不可迭代
【发布时间】:2023-04-06 01:15:02
【问题描述】:

我在 Newton-Raphson 迭代的脚本中收到 'float' object is not Iterable 错误。我将迭代应用于函数f(x) = sin(x),并且 x0 = 3 进行迭代。我在停止条件上遇到错误,即 max{ |xn-2 - xn-1|, |xn-1子> - xn| } -9。这是我的代码:

def NewtonRaphson2():
    L = []
    L.append(3)
    n = 0

    while(1):
        tmp = L[n] - (math.sin(L[n])/math.cos(L[n]))
        L.append(tmp)
        n+=1
        m = (max(abs(L[n-2] - L[n-1])), abs(L[n-1] - L[n]))
        if m < (.5e-9):
            print(n, "\n")
            x = max(abs(L[n-2] - L[n-1]), abs(L[n-1] - L[n]))
            print(x, "\n")
            print(L[n], "\n")
            break
        break

准确的错误信息是

Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    NewtonRaphson2()
  File "C:/Python34/nmhw3.py", line 28, in NewtonRaphson2
    m = (max(abs(L[n-2] - L[n-1])), abs(L[n-1] - L[n]))
TypeError: 'float' object is not iterable

max()abs() 函数是否只接受迭代?我对这种行为感到困惑。

【问题讨论】:

    标签: python iteration newtons-method


    【解决方案1】:

    这是一个简单的错字。你的括号关闭得太早了。它与m = ... 一致。

    基本上,您的代码所做的就是调用max,只需一个浮点数。但是,max(x) 没有意义,除非x 是一个列表或数组。

    修正括号,你就很好了。

    【讨论】:

    • 现在感觉很愚蠢。感谢您发现这一点。相关帖子中的其他回复是说某些功能如何/不适合迭代,所以这就是我的假设来源
    • 很高兴能帮上忙呵呵。多年的编程和这些类型的错误让人们对这些错别字有了敏锐的洞察力。如果您喜欢这个答案,可以将其标记为“已接受”。
    【解决方案2】:

    max( ) 可以采用 iterable 或多个参数。这显示在help(max) 的前几行:

    >>> help(max)
    Help on built-in function max in module builtins:
    
    max(...)
        max(iterable, *[, default=obj, key=func]) -> value
        max(arg1, arg2, *args, *[, key=func]) -> value
    

    正如 Lagerbaer 指出的那样 - 如果您修复括号的位置,您将使用第二种形式调用 max( ) - 传入多个参数。 (为强调而添加了额外的非 PEP 8 空格!)

    m = max(   abs(L[n-2] - L[n-1])  ,   abs(L[n-1] - L[n])   )
    

    如果你确实想用第一种形式调用max( ),你可以添加括号将你的两个参数变成一个tuple,然后是一个可迭代 .括号是多余的,但也许你是一个 Lisp 粉丝并且错过了所有这些括号! :-)

    m = max( (  abs(L[n-2] - L[n-1])  ,   abs(L[n-1] - L[n]) )  )  
    

    【讨论】:

    • 谢谢,我什至不知道python有help()函数
    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 2016-02-12
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多