我想使用从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个参数
编辑:我用数学符号添加了函数
我试图找到满足这个等式的U(b,c)
答案 0 :(得分:1)
func
是要解决的功能。但是你定义了一个函数,它的第一个参数是另一个函数U
,它是A, b, c
(和e
但函数不变)和{{1}的函数。 }也是一个函数。
Newton-Raphson是一维求解器,因此只能找到A
而不是f(x)
的根,其中f(g(b,c),a,b,c)
都是未知的。
似乎您正在将python函数定义和用法与数学函数定义和用法混淆。