在 Python 中使用 Fsolve
本文将探讨如何使用 fsolve 在 Python 中求解。 我们还将探索它的使用场景和一些示例代码,以更好地理解如何以及何时使用它来达到某种结果。
让我们首先了解 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 函数在 Python 中求解
您现在可能已经知道,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]
求解起点为 0 和 2 的方程
示例代码:
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]
以 0.3 为起点求方程 4sin(y)-4 的根
示例代码:
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 中的问题。
相关文章
在 Python 中创建 Getter 和 Setter
发布时间:2023/06/28 浏览次数:172 分类:Python
-
这些行为在支持 OOP 的编程语言中很流行,Python 也支持它。 本文将讨论如何在 Python 中创建 getter 和 setter。Python 中的 Getter 和 Setter
从 Java 代码调用 Python 脚本
发布时间:2023/06/28 浏览次数:93 分类:Python
-
本篇文章介绍了从 Java 代码调用 Python 脚本的三种不同方法。从 Java 代码调用 Python 脚本 有时,我们必须从Java代码中调用Python脚本来满足项目需求。
Python 中的位掩码简介
发布时间:2023/06/27 浏览次数:125 分类:Python
-
本篇文章介绍了 Python 中的位掩码,并演示了如何使用按位运算符(例如 AND、OR、NOT 等)执行位掩码。Python 中的位掩码简介 位掩码是几乎所有编程语言的通用概念;
在 Ubuntu 中卸载 Python
发布时间:2023/06/27 浏览次数:158 分类:Python
-
本文演示如何从 Ubuntu 中删除或卸载 Python。检查你的系统中是否安装了Python 使用 Ctrl+Alt+T 打开终端。打开终端后,使用命令 python3 --version 检查您的系统是否安装了 python。
Python Teradata 连接
发布时间:2023/06/27 浏览次数:86 分类:Python
-
本文将讨论一些基本的正确准则,并在讨论连接方式之前了解 Teradata 模块的工作原理。Python 中的 Teradata 数据库 您可以使用 Python 和 Teradata 模块编写与 Teradata 数据库的强大交互脚本。
在 Python 中查找素因数
发布时间:2023/06/27 浏览次数:175 分类:Python
-
本篇文章将介绍如何在 Python 中执行素因数分解。质因数分解概述 在数学中,数字的因子是那些可以除以给定数字且余数为零的数字。
在 Python 中从 URL 中提取域
发布时间:2023/06/27 浏览次数:86 分类:Python
-
本文将通过实际例子来讲解Python的 urlparse() 函数从URL中解析并提取域名。 我们还将讨论提高解析 URL 和使用其不同组件的能力。使用 urlparse() 从 URL 中提取域
Python 中的省略号对象
发布时间:2023/06/27 浏览次数:158 分类:Python
-
本篇文章将介绍 Python 中省略号对象的使用。使用省略号作为未编写代码的占位符 省略号对象可以以不同的方式使用。 它主要充当未编写代码的占位符。
实现 Python Builder 模式的不同方法
发布时间:2023/06/27 浏览次数:70 分类:Python
-
构建器模式是一种允许对象的创建与其表示分离的模式。 这种模式可以创建和配置复杂的对象而无需继承,这是一种强大但不灵活的方法。