本文将探讨如何使用 fsolve 在 Python 中求解。 我们还将探索它的使用场景和一些示例代码,以更好地理解如何以及何时使用它来达到某种结果。
让我们首先了解 fsolve 是什么以及为什么使用它。
方程是数据科学的根源,它们帮助数据科学家、数学家、化学工程师和医生理解他们日常处理的各种场景。 现在,随着计算机融入我们的日常生活,连续求解更大规模的方程变得越来越困难。
Python 的 fsolve 使这些专业人士和其他人可以更轻松地使用 Python 库提供的不同模块来求解这些方程。 fsolve 本质上是一个返回非线性方程根的 SciPy 模块。
fsolve 为各种场景提供了各种参数。 这些可以直接从在线提供的 SciPy 文档中轻松找到。
这是 fsolve 的整个参数列表:
示例代码:
scipy.optimize.fsolve (func, x0, args=(), fprime=None, full_output=0, col_deriv=0, xtol=1.49012e-08, maxfev=0, band=None, epsfcn=None, factor=100, diag=None)
您可以在 SciPy 文档中找到所有参数及其含义的详细说明。 然而,我们将对这些参数进行简短但易于理解的总结:
参数 | 说明 |
---|---|
func, callable f(x, *args) | |
x0, ndarray | 该参数表示函数 f(x)=0 的根的初始估计值。 |
args、tuple(可选) | 这些是函数可能需要的任何额外参数。 |
fprime,callable f(x, *args) (可选) | 这是一个用于计算函数雅可比行列式与行间导数的估计值的函数。 |
full_output, bool(可选) | 如果满足条件或 True,则返回任何可选输出值。 |
col_deriv, bool (可选) | 通过此参数,您可以指定雅可比函数是否计算列的导数。 根据 SciPy 文档,由于没有转置操作,因此速度更快。 |
xtol, float(可选) | 此参数将允许函数根据两个连续迭代值之间相对误差的最大 xtol 终止计算。 |
maxfev, int (可选) | 这定义了函数调用的最大次数。 |
band、tuple(可选) | 这适用于 fprime 设置为 None 时。 如果参数设置为包含矩阵内子对角线和超对角线数量的二序列,则雅可比矩阵被视为带状。 |
epsfcn, float(可选) | 如果 fprime 设置为 None,则此参数将包含用于近似雅可比行列式前向差的合适步长长度。 如果 epsfcn 小于机器精度,则函数中的相对误差被假定为机器精度的量级。 |
factor,float(可选) | 此参数确定初始步长界限,并且必须介于 (0.1, 100) 之间。 |
diag、sequence(可选) | 这些 N 正条目用作变量的比例因子。 |
您现在可能已经知道,fsolve 可用于不同场景中的各种非线性方程。 让我们探索一些简单的代码示例,以更好地掌握如何使用 fsolve:
以 -0.2 为起点求方程 x+2cos(x)
的根
示例代码:
from math import cos
import scipy.optimize
def func(x):
y = x + 2*cos(x)
return y
y = scipy.optimize.fsolve(func,0.2)
print (y)
在此代码中,我们从 Python 中庞大的数学库导入 cos 函数,并从 scipy(fsolve 的来源)进行优化。 接下来,我们定义方程并将其存储在 func 方法中的 y 中。
正确初始化方程后,我们只需使用 fsolve 调用包含方程的方法 (func)。 在第二个参数中,我们定义方程的起点。
然后结果存储在变量 y 中,并打印输出。
代码的输出:
[-1.02986653]
示例代码:
from math import cos
import scipy.optimize
def func(x):
y = [x[1]*x[0] - x[1] - 6, x[0]*cos(x[1]) - 3]
return y
x0 = scipy.optimize.fsolve(func,[0, 2])
print(x0)
在此代码中,我们遵循与代码 1 相同的步骤,从 Python 的 math 和 scipy 库导入 cos 和 scipy.optimize。 我们通过在名为 func 的方法中定义方程来继续下一步。
然后,我们将此方法称为 fsolve 函数中的参数,并为其提供两个起点 0 和 2,然后将其存储并打印在名为 x0 的变量中。
代码的输出:
[6.49943036 1.09102209]
示例代码:
from math import sin
import scipy.optimize
def func(y):
x= 4*sin(y) - 4
return x
x= scipy.optimize.fsolve(func,0.3)
print (x)
在此示例代码中,我们从数学库导入 sin 而不是 cos。 代码的结构与上面的示例相同,我们还为 fsolve 导入 scipy.optimize,然后在方法 func 中定义一个方程。
我们将此方法称为 fsolve 中的参数,起点为 0.3。 结果值存储在变量 x 中并打印输出。
代码的输出:
[1.57079633]
在本文中,我们了解了 fsolve 用于求非线性方程的根,了解了 fsolve 可以采用的不同类型的参数以及每个参数的含义。 此外,我们还浏览了 fsolve 的一些工作示例,并研究了如何在代码中使用它。
现在您已经了解了如何使用 fsolve 导出解决方案的理论和实际代码示例,现在是时候创建您自己的代码来进一步探索 fsolve 的工作原理了。
我们希望本文有助于您理解如何使用 fsolve 解决 Python 中的问题。