2013-04-19 3 views
4

저는 초심자입니다. 그러니 친절하십시오.함수의 인수로 사용되는 수학 표현식은 무엇입니까?

저는 약간의 파이썬 연습 문제에 시달리고 있습니다.

def newton(x0, Tol): 
    def F(x): 
     return (x**3)+898 
    def dF(x): 
     return 3*x**2 
    x=[x0] 
    for n in range(400): 
     x.append(x[n]-(F(x[n]))/dF(x[n])) 
     if abs((x[n+1])-(x[n]))<Tol: 
      conv='Converge' 
      print n 
      break 
    if abs((x[n+1])-(x[n]))>=Tol: 
     conv='No converge' 
    return x[n+1], conv 

는 I 함수 F(x)dF(x) 및 그 유도체를 정의 목록 x 값을 추가한다.

과제는 시리즈가 수렴하는지 여부를 확인하는 것입니다. 이는 내가 성공했다고 생각합니다.

하지만 내가 가지고있는 질문은 함수 과 3*x**2이 함수 Newton에 대한 인수로 사용되는 것에 관한 것입니다.

는 나는이

def newton(f, df, x0, Tol): 
    def F(x): 
     return f 
    def dF(x): 
     return df 
    *calculations* 
    return x[n+1], conv 

같은 것 상상 그리고 당신은 기능 F(x)dF(x)이 과정에서 정의 그래서

newton((x**3)+898, 3*x**2, x0=something, Tol=something) 

로 부를 것이다.

그러나 x은 정의되지 않으므로 작동하지 않습니다.

운동에 'newton'의 매개 변수로 f와 df가 있어야한다는 점에 유의하십시오.

어떻게 해결할 수 있습니까?

감사합니다.

답변

3

사용 lambda :

newton(lambda x: (x**3)+898, lambda x: 3*x**2, x0=something, Tol=something) 
6

당신은 기본적으로 간단한 함수입니다 lambdas를 사용할 수 있습니다.

당신은 이런 식으로 부를 것이다 :

def f1(x): 
    return (x**3)+898 
def f2(x): 
    return 3*x**2 
newton(f1, f2, x0=something, Tol=something) 

유일한 차이는 "람다 a를 제공하지 않는다는 것입니다 :

newton(lambda x: (x**3)+898, lambda x: 3*x**2, x0=something, Tol=something) 

이이 같은 일을하고 같은 것 이름 ", 즉 그것을 변수에 할당하십시오. 이는 한번만 사용해야하는 함수, 특히 sortedmax과 같은 함수의 핵심 인수로 유용합니다.

관련 문제