当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy optimize.root_scalar用法及代码示例


本文简要介绍 python 语言中 scipy.optimize.root_scalar 的用法。

用法:

scipy.optimize.root_scalar(f, args=(), method=None, bracket=None, fprime=None, fprime2=None, x0=None, x1=None, xtol=None, rtol=None, maxiter=None, options=None)#

求一个标量函数的根。

参数

f 可调用的

查找根的函数。

args 元组,可选

传递给目标函数及其导数的额外参数。

method str,可选

求解器的类型。应该是其中之一

bracket: A sequence of 2 floats, optional

包围根的区间。 f(x, *args) 在两个端点必须有不同的符号。

x0 浮点数,可选

初步猜测。

x1 浮点数,可选

第二个猜测。

fprime 布尔或可调用,可选

如果 fprime 是布尔值并且为 True,则假定 f 返回目标函数和导数的值。 fprime 也可以是一个可调用的返回 f 的导数。在这种情况下,它必须接受与 f 相同的参数。

fprime2 布尔或可调用,可选

如果 fprime2 是布尔值并且为 True,则假定 f 返回目标函数的值以及一阶和二阶导数的值。 fprime2 也可以是返回 f 的二阶导数的可调用函数。在这种情况下,它必须接受与 f 相同的参数。

xtol 浮点数,可选

终止公差(绝对)。

rtol 浮点数,可选

终止公差(相对)。

maxiter 整数,可选

最大迭代次数。

options 字典,可选

求解器选项字典。例如,k,有关详细信息,请参阅 show_options()

返回

sol RootResults

该解决方案表示为 RootResults 对象。重要属性包括:root 解决方案、converged 指示算法是否成功退出的布尔标志以及说明终止原因的flag。有关其他属性的说明,请参阅 RootResults

注意

本节介绍可通过 ‘method’ 参数选择的可用求解器。

默认情况下使用适用于所呈现情况的最佳方法。如果提供了括号,则可以使用其中一种括号方法。如果指定了导数和初始值,它可以选择基于导数的方法之一。如果没有方法被判断为适用,它将引发异常。

每个方法的参数如下(x=必需,o=可选)。

方法

f

参数

括号

x0

x1

fprime

fprime2

xtol

rol

马克西特

选项

bisect

x

o

x

o

o

o

o

brentq

x

o

x

o

o

o

o

brenth

x

o

x

o

o

o

o

ridder

x

o

x

o

o

o

o

toms748

x

o

x

o

o

o

o

secant

x

o

x

o

o

o

o

o

newton

x

o

x

o

o

o

o

o

halley

x

o

x

x

x

o

o

o

o

例子

求一个简单立方的根

>>> from scipy import optimize
>>> def f(x):
...     return (x**3 - 1)  # only one real root at x = 1
>>> def fprime(x):
...     return 3*x**2

brentq 方法将括号作为输入

>>> sol = optimize.root_scalar(f, bracket=[0, 3], method='brentq')
>>> sol.root, sol.iterations, sol.function_calls
(1.0, 10, 11)

newton 方法将单个点作为输入并使用导数。

>>> sol = optimize.root_scalar(f, x0=0.2, fprime=fprime, method='newton')
>>> sol.root, sol.iterations, sol.function_calls
(1.0, 11, 22)

该函数可以在一次调用中提供值和导数。

>>> def f_p_pp(x):
...     return (x**3 - 1), 3*x**2, 6*x
>>> sol = optimize.root_scalar(
...     f_p_pp, x0=0.2, fprime=True, method='newton'
... )
>>> sol.root, sol.iterations, sol.function_calls
(1.0, 11, 11)
>>> sol = optimize.root_scalar(
...     f_p_pp, x0=0.2, fprime=True, fprime2=True, method='halley'
... )
>>> sol.root, sol.iterations, sol.function_calls
(1.0, 7, 8)

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.optimize.root_scalar。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。