當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。