2017-01-26 9 views
0

scipy.optimize에서 가져온 Newton 메소드를 사용하여 함수 "func"에 대한 루트 (즉, 값 x를 f (x) = 0으로 지정)를 찾고 싶습니다. C가 아닌Newton을 통한 수치 근원 찾기

Traceback (most recent call last): 
    File "root_finding_stack.py", line 25, in <module> 
    res = optimize.newton(func(U, c, b, a), U_0(b, c), fprime=func_prime(U, c, a), args=(c, b, a)) 
NameError: name 'c' is not defined 

오류가 말한다 : 분석적 FUNC에서 = 0을 가정하고 U. 나는 follwing을 오류가 에 대한 해결함으로써

import numpy 

from scipy import optimize 


def A(b, c, e=70): 
    d = 1 - c 
    b_prime = ((1 + b) ** 3) 
    wurzel = numpy.sqrt(c * b_prime + d) 

    return e * wurzel 

def U(b, c, e=70): 
    return A(b, c, e=70)/e 

def func(U, c, b, a): 
    return U(b, c, e=70)**2 - (U(b, c, e=70)**a * (1-c)) - (c * (1+b)**3) 

def func_prime(U, c, a): 
    return 2*U(b, c, e=70) - (a*(U(b, c, e=70)**(a-1)))*(1-c) 

def U_0(b, c): 
    numpy.sqrt((c * (1+b)**3) + 1 - c) 

res = optimize.newton(func(U, c, b, a), U_0(b, c), fprime=func_prime(U, c, a), args=(c, b, a)) 

내가 U_0 계산 : 나는 다음과 같은 코드를 작성 정의되었지만 그것이 핵심입니다. 저는 a, b, c를 definde하지 않고 U (a, b, c)를 찾아서 내 기능을 뿌리 내리고 싶습니다. 잘못된 방법을 사용하고 있습니까? 아니면 여기서 내가 뭘 잘못하고 있습니까? 나는 optimize.newton 기능을 제대로

편집을 3 개 인수를 전달하는 경우 또한, 나는 확실하지 않다 : 나는이 U (B을 찾기 위해 노력하고

This is my function f(U,b,c) where U is a function of b and c as well

수학 표기법으로 기능을 추가, c)이 방정식을 가득 채우십시오.

+1

나는 scipy를 모른다.하지만 확실히'.newton'을 함수 객체로 전달해야한다. 마치'func'에'U'를 넘기는 것과 같다. 대신에'func (U, c, b, a)'호출의 _result_를 전달하고있다. 호출이 성공하면'.newton'은 그 arg에 대해 float를 얻는다. 물론 호출 할 때 arg는 정의되지 않기 때문에 성공하지 못합니다. –

+0

평범한 수학 표기법으로 근근이 가려고하는 함수를 제공 할 수 있습니까? 이미지로 질문에 게시 할 수 있습니다. 네가 그렇게한다면 나에게 알려줘. –

+0

수학 표기법을 추가했습니다. – user7248647

답변

1

func은 해결할 함수입니다. 그러나 첫 번째 인수로 A, b, c (및 e하지만 상수) 함수이고 A의 함수 인 또 다른 함수가 U 인 함수를 정의했습니다.

뉴턴 - 랩슨은 한 차원 해결사이며, 그래서 단지 a, b, c 모든 알 f(x)하지 f(g(b,c),a,b,c)의 뿌리를 찾을 수 있습니다.

또한 파이썬 함수 정의와 수학 함수 정의 및 사용법을 함께 사용하는 것 같습니다.