'float' 对象在 Newton-Raphson 迭代中不可迭代
'float' object is not Iterable in Newton-Raphson iteration
我在 Newton-Raphson 迭代的脚本中遇到 'float' object is not Iterable
错误。我将迭代应用于函数 f(x) = sin(x)
,并且 x0 = 3 用于迭代。我在停止条件上遇到错误,即 max{ |xn−2 − xn−1|, |xn−1 − xn| } < (1/2)10-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()
函数是否只接受迭代?我对这种行为感到困惑。
这是一个简单的错字。你的括号关闭得太早了。它与 m = ...
一致。
基本上,您的代码所做的就是仅使用一个浮点数调用 max
。然而,max(x)
没有意义,除非 x
是列表或数组。
修正括号就可以了。
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]) )
如果你 did 想用第一种形式调用 max( )
你可以添加括号将你的两个参数变成一个 tuple
然后可迭代。括号是多余的,但也许你是 Lisp 的粉丝并且想念所有那些括号! :-)
m = max( ( abs(L[n-2] - L[n-1]) , abs(L[n-1] - L[n]) ) )
我在 Newton-Raphson 迭代的脚本中遇到 'float' object is not Iterable
错误。我将迭代应用于函数 f(x) = sin(x)
,并且 x0 = 3 用于迭代。我在停止条件上遇到错误,即 max{ |xn−2 − xn−1|, |xn−1 − xn| } < (1/2)10-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()
函数是否只接受迭代?我对这种行为感到困惑。
这是一个简单的错字。你的括号关闭得太早了。它与 m = ...
一致。
基本上,您的代码所做的就是仅使用一个浮点数调用 max
。然而,max(x)
没有意义,除非 x
是列表或数组。
修正括号就可以了。
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]) )
如果你 did 想用第一种形式调用 max( )
你可以添加括号将你的两个参数变成一个 tuple
然后可迭代。括号是多余的,但也许你是 Lisp 的粉丝并且想念所有那些括号! :-)
m = max( ( abs(L[n-2] - L[n-1]) , abs(L[n-1] - L[n]) ) )