2011-12-05 2 views
0

내가 도움을 커뮤니티 많이 요청 된 발행하고 나는 그것을 모두 감사파이썬 뉴턴 방법은

그래서 파이썬에서하지만 누군가가 그 위에 볼 수 있었다 작동하지 않는 어떤 이유로 뉴턴 방법을 해결하는 프로그램에서 일하고 필자 부디? 당신에게 감사 =)

import sympy 
from collections import defaultdict 

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) #takes the dirivative of the function 
    print ("the dir of your function = "), func1d 
    x = input("number to substitute for x: ") 
    a = input("how many digits would you like to round to [recomended at least 4]") 
    func1sub = func1.subs({'x':x}) #substitutes the user given value of x into the equation 
    func1dsub = func1d.subs({'x':x}) #substitutes the user given value of x into the equation 
    func1sub = float(func1sub) 
    func1dsub = float(func1dsub) 
    func1sub = round(func1sub) 
    func1dsub = round(func1dsub) 
    round(func1sub,a) 
    round(func1dsub,a) 
    n = x - (func1sub/func1dsub) 
    x1 = 0 
    x2 = 0 
    n = x - (func1sub/func1dsub) 
    x1 = n 
    x1 = round(x1) 
    n = x2 - (func1sub/func1dsub) 
    x2 = n 
    x2 = round(x2) 
    while 0 == 0: 
     if abs(x1-x2) < .0001: 
     print x1 
     break 
     else: 
     n = x2 - (func1sub/func1dsub) 
     x2 = n 
     if abs(x - n) < .03: 
     print x 
    if func1dsub == 0: 
     print ("ERROR CAN NOT DIVIDE BY 0") 
main() 
+1

효과가없는 것은 무엇입니까? –

+0

나는 그것을 실행 한 후에 뭔가를하는 것처럼 멈추지 만 아무것도 나오지 않는다. 필자는 이제 2 시간 동안 그것을 보았고, 실제로 무엇이 잘못되었는지 보지 않습니다. im은 파이썬에 대해 약간의 구문 오류 또는 뭔가 새로운 것으로 가정합니다. – Shantanu

+0

루프의 각 단계에서 값을 대체해서는 안됩니까? –

답변

1

당신은 여기에 무한 루프가 있어요 :

n = x2 - (func1sub/func1dsub) 
x2 = n 

그리고 당신의 루프 조건은 다음과 같습니다

while 0 == 0: 

    if abs(x1-x2) < .0001: 
     print x1 
     break 

    else: 
     n = x2 - (func1sub/func1dsub) 
     x2 = n 

    if abs(x - n) < .03: 
     print x 

중요한이 루프의 일부가 될 것으로 보인다 abs(x1-x2) < .0001이므로 다음을 다시 작성하겠습니다.

while abs(x1 - x2) >= .0001: 
    x2 -= (func1sub/func1dsub) 
print x1 

그래서 x2 -= (func1sub/func1dsub)x2을 잘못 입력하고 있습니다. 나는이 같은 인쇄 문을 추가하고 값이 실제로 수렴하고 있는지 확인 거라고 :

또한
while abs(x1 - x2) >= .0001: 
    x2 -= (func1sub/func1dsub) 
    print (x1, x2) 

, 나는 뉴턴의 방법이 익숙하지 해요,하지만 코드에서 절대 변경 func1sub/func1dsub하지만 안 모든 반복마다 변경 하시겠습니까?

+0

@Shantanu 또한 True 일 때 사용 : 0 == 0 : 대신 코드에서 dir (sympy)를 제거하십시오. – jsbueno

+0

@jsbueno - 아마도 이것은 질문에 대한 의견이어야한다고 생각합니다. –

+0

흠 내가 할 때이 잘못된 메신저 불구하고 잘못된 답변, 무엇을합니까 - = 할? -X2 = (func1sub/func1dsub) – Shantanu