通过牛顿进行数值根发现

时间:2017-01-26 12:27:35

标签: python scipy newtons-method

我想使用从scipy.optimize导入的Newton方法找到函数“func”的根(即值x使得f(x)= 0)。 我写了以下代码:

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))

我通过在func中假设a = 0并求解U来分析地计算U_0。 我得到了以下错误:

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

错误说c没有定义,但这就是重点,我不想定义a,b和c但是找到U(a,b,c)来根我的函数。 我使用了错误的方法,或者我在这里做错了什么?另外我不确定我是否在optimize.newton函数中正确传递了3个参数

编辑:我用数学符号添加了函数

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

我试图找到满足这个等式的U(b,c)

1 个答案:

答案 0 :(得分:1)

func是要解决的功能。但是你定义了一个函数,它的第一个参数是另一个函数U,它是A, b, c(和e但函数不变)和{{1}的函数。 }也是一个函数。

Newton-Raphson是一维求解器,因此只能找到A而不是f(x)的根,其中f(g(b,c),a,b,c)都是未知的。

似乎您正在将python函数定义和用法与数学函数定义和用法混淆。