2017-02-08 14 views
1

ニュートンラフソン反復のスクリプトで'float' object is not Iterableエラーが発生しました。私は反復を関数f(x) = sin(x)に適用し、x = 3とします。私は{最大で停止状態、上のエラーを取得しています| X のn-2 - X のn-1 |、| X のn-1 - X N | } <(1/2)10 -9'float'オブジェクトはニュートンラフソン反復で反復できません

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()機能だけ反復可能オブジェクトを取るん:ここに私のコードはありますか?私はこの行動に混乱しています。

答えて

2

これは簡単なタイプミスです。あなたのかっこはあまりに早く閉じる。これはm = ...と一致しています。

基本的には、maxには1つの浮動小数点数だけのコードがあります。しかし、xがリストまたは配列でなければ、max(x)は意味をなさない。

カッコを修正しても問題ありません。

+0

今のところ愚かな気分です。それを見つけていただきありがとうございます。関連記事の他の返信は、ある機能がiterableでうまくいくかどうかを言っていたので、私の前提はどこから来たのですか? –

+0

heheを助けてくれてうれしいです。これらのタイプのミスを正確にプログラミングして作成することは、これらのタイプミスを鋭く見ています。 回答が好きだった場合は、「受け入れ済み」としてマークすることができます。 – Lagerbaer

0

max()は、反復可能または複数の引数をとることができます。これは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()を起動します - 複数の引数を渡します。 (8つのスペースを強調するために追加の余分な非PEP!)

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

あなたはは、あなたがして反復可能である単一tupleにあなたの二つの引数を回すために括弧を追加することができます最初のフォームでmax()を呼び出したいなかった場合。括弧は余分ですが、おそらくあなたはLispのファンであり、すべてのそれらの括弧を欠場しています! :-)

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

ありがとう、私はPythonが 'help()'関数を持っていることさえ知りませんでした –

関連する問題