アプリ版:「スタンプのみでお礼する」機能のリリースについて

Pythonでニュートン法をプログラムしているのですがtan(x)-412の解が収束しません。
プログラムが悪いのでしょうか?
プログラムです
import math
x=float(input("出発値:"))
while True:
xp = x - (math.tan(x)-412)*(math.cos(x))**2
if abs(xp-x)<0.000000001:
break
x = xp

print("x=",xp)

質問者からの補足コメント

  • すみません。インデントがコピペで潰れてしまっていました。
    import math
    x=float(input("出発値:"))
    while True:
    _ xp = x - (math.tan(x)-412)*(math.cos(x))**2
    _ if abs(xp-x)<0.000000001:
    __ break
    _x = xp

    print("x=",xp)

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/05/15 20:50

A 回答 (2件)

理論値は


x=arctan(412) = 1.5673...
で、これは
π/2=1.5707...
にとても近い値です。

ニュートン法は、解を含む領域が微分可能である必要があります。
tan(x) は x=π/2 で不連続であり、微分可能ではありません。

探索途中で -π/2<xp<π/2 なら、問題無いのですが、これを越えるようなことがあると、正しい解は得られません。
    • good
    • 1

インデントが間違っているのでは?


import math
x=float(input("出発値:"))
while True:
_xp = x - (math.tan(x)-412)*(math.cos(x))**2
_if abs(xp-x)<0.000000001:
__break
_x = xp
print(xp)
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!