Python:从函数中减去一个float(为了调用西皮·牛顿())

2024-10-01 16:33:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想打电话给scipy.newton(f, x0, df)。你知道吗

我把f定义为

def f(x):
    resf = x**2
    return resf

df作为

def df(x):
    df = 2*x
    return df

我这样称呼newton

x0 = 1.0    
y0 = 6.0
root = newton(f-y0, x0, df)

当然我得到了一个错误,因为我试图从function中减去float。你知道吗

如何定义函数f并调用newton来查找f-y0的根。你知道吗

什么是语法,什么是输入参数?你知道吗

以下操作无效:

 def f(x, y0):
    resf = x**2-y0
    return resf

因为那时我不知道怎么叫newton。你知道吗


Tags: 函数dfreturn定义def错误语法function
3条回答

您可以传递如下匿名函数:

root = newton(lambda x: f(x)-y0, x0, df)

也可以使用嵌套函数:

def difference(x):
    return f(x) - y0

root = newton(difference, x0, df)

可以将双参数版本的f()^{}一起使用:

def f(x, y0):
    resf = x**2-y0
    return resf

x0 = 1.0    
y0 = 6.0
root = scipy.optimize.newton(functools.partial(f, y0=y0), x0, df)

与包装f()的单参数版本相比,我稍微偏爱这种方法,因为更容易看出df()是w.r.t.x的正确导数。你知道吗

scipy.optimize.newton中有一个选项args=可以用来提供其他参数。然后必须修改df,以便也接受该附加参数,这可以通过添加*args, **kwargs来完成。你知道吗

使用functools.partial将增加12%的运行时间。你知道吗

In [26]:
import functools
import scipy.optimize as so

def f(x, y0):
    resf = x**2-y0
    return resf
def df(x, *args, **kwargs):
    df = 2*x
    return df
x0 = 1.0    
y0 = 6.0
so.newton(f, x0, args=(y0,), fprime=df)

Out[26]:
2.449489742783178

In [27]:
%timeit so.newton(f, x0, args=(y0,), fprime=df)
100000 loops, best of 3: 6.54 µs per loop

In [28]:
%timeit so.newton(functools.partial(f, y0=y0), x0, df)
100000 loops, best of 3: 7.4 µs per loop

相关问题 更多 >

    热门问题