4

ニュートン法を使用してゼロを解くプログラムをPythonで書いています。私はそれの大まかなバージョンを書き終え、それからいくつかの異なることに気づき、これを強制/変更する必要があるかどうか疑問に思いました。(主題の知識が役立つかもしれません)

def main():

   dir(sympy)

   print ("NEWTONS METHOD")
   print ("Write your expression in terms of 'x' ") 

   e = sympy.sympify(raw_input("input expression here: "))  
   f = sympy.Symbol('x')


   func1 = e
   func1d = sympy.diff(e,f) 


   print ("the dirivative of your function = "), func1d

   x = input("number to substitude for x: ")


   func1sub = func1.subs({'x':x})
   func1dsub = func1d.subs({'x':x})
   n = x - float(func1sub/func1dsub)



   while n != x:
      func1sub = func1.subs({'x':x})
      func1dsub = func1d.subs({'x':x})
      n = x - float(func1sub/func1dsub)
      print n



main()

1)最初に、ラウンド関数を使用してラウンドする必要があるとの値が常に完全に同じであるnとは限らないため、疑問に思いました。x

2)これを見た後、私のwhileループは、それが解決すべきものを解決していないと感じます。xそれは、関数にプラグインできるものを解決しているはずでxあり、出力はになりますx。配列に値を追加し、それらが1つの数値の複数のインスタンスである場所を確認することでこれを行うことができますか?

4

2 に答える 2

2

Q1:同意します。

Q2:x = nループの上部近く。先に進みたい。

于 2011-11-22T05:51:14.743 に答える
2

まず第一に、の値はループ内xで変化していません。while

次に、終了基準は、「現在の」見積もりと「以前の」見積もりが「十分に近い」ことである必要があります。つまり、次のようなものを使用する必要があります。

while abs(current - previous) > tolerance:
于 2011-11-22T05:56:38.653 に答える