- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试对非线性方程组进行数值求解:
def func(p):
x, f = p
return (math.exp(-x/O)-f,
L - L*((1 - math.exp(-x/O))**W) - x*math.exp(-x/O))
我目前正在通过以下方式使用 scipy.fsolve:
x, f = fsolve(func, (10, 0.2))
我确信我使用 fsolve 的方式是正确的:它对于某些参数范围非常有效。然而,对于另一个(例如,O=8,L=1.67,W=8),它完全失败,并出现以下错误:
RuntimeWarning: The number of calls to function has reached maxfev = 600.
我确信这个问题是可以很好解决的——(至少)有 matlab 工具可以做到这一点。我做错了什么或者我可以尝试其他解算器吗?
预先感谢您的任何提示!
最佳答案
不幸的是,非线性优化和求根对起点的选择很敏感。
In [19]: def func(p):
x, f = p
return [np.exp(-x/O) -f, L - L*((1 - np.exp(-x/O))**W) - x*np.exp(-x/O)]
....:
In [20]: O, L, W = 8, 1.67, 8
In [21]: res = fsolve(func, [1, 1.2])
In [22]: res
Out[22]: array([ 2.19804447, 0.75975782])
In [23]: func(res)
Out[23]: [-2.2204460492503131e-16, -4.4408920985006262e-15]
请注意,您的参数化似乎是多余的:根的位置不依赖于您可以根据L
,并且exp(-x/O)
这可能会让求解器变得更容易。
编辑:定义y = exp(-x/O)
。然后你的第一个方程告诉你求根实际上是一维的(这意味着你可以使用例如更稳健的brentq
)。但您也可以使用 fsolve:
In [43]: ry = fsolve(lambda y: 1 - (1-y)**W + (O/L)*y*np.log(y), 0.4)
In [44]: ry
Out[44]: array([ 0.75975782])
关于python - Scipy 的 fsolve 替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36485050/
为什么下面的代码会返回 ValueError? from scipy.optimize import fsolve import numpy as np def f(p,a=0): x,y =
我没有太多使用 Python 的经验,但我决定尝试用它来求解以下方程组: x = A * exp (x+y) y = 4 * exp (x+y) 我想求解这个系统并绘制 x 和 y 作为 A 的函数。
我用 Python 编写了一个脚本,它使用 fsolve 找到一个相当复杂的函数的零。它的工作方式如下。有一个类只是简单地存储函数的参数。该类有一个 evaluate 方法,它根据存储的参数返回一个值
有没有办法在 MATLAB 中使用 fsolve,指定解的边界?即所有解决方案变量 > 0 最佳答案 不是直接的,但解决这个问题的一个方法是在你的方程式中添加一个项来约束你的问题。 我没有优化工具箱,
每当 fsolve 完成时,它都会给出输出 Equation solved. fsolve completed because the vector of function values is nea
我正在求解一个包含许多常数的非线性方程。 我创建了一个函数来解决这样的问题: def terminalV(Vt, data): from numpy import sqrt ro_p,
我有下面的工作功能。我有一个函数,可以从中计算一阶和二阶导数。然后我需要找到一阶导数为零而第二个导数为负的 theta 值。我必须为大量点计算这个。点数等于K1和K2的长度。使用 sympy 我计算一
我想使用 fsolve 求解 alpha 和 beta(来自 Beta 发行版) import numpy as np from scipy.optimize import fsolve def me
我一直在尝试找到一种方法,使用另一个已知变量来求解函数的一个变量。例如。 def f(x,y): return x+y sol=scipy.optimize.fsolve(f(x,1),0)
有了函数 f(x,y,z),我需要求解限制 f(x,y,z) = 0,然后绘制它。我试图为每一对 (y,z) 找到 f(x,y,z) = 0 的值 x: from numpy import * fro
我试图通过在 python 2.7 中使用 scipy.optimize.fsolve 找到方程组的解。目标是计算化学系统的平衡浓度。由于问题的性质,一些常量非常小。现在对于某些组合,我确实得到了适当
我试图找到一个二维优化问题的根,形式如下(下面不是实际的方程,因为它很长,这只是问题类型的一个例子)。 def my_function(a,b): c = exp(a) + b d =
我目前正在尝试从我的代码(粘贴在下面)中找到 2 个方程的截距。我正在使用 fsolve 并且在一部分中成功地使用了它,但我无法让它在第二部分工作。 令人困惑的是,它没有显示错误,如果您将此代码粘贴到
根据我得到的帮助here我一直在尝试在我的脚本中实现它,但我未能巧妙地运行它。 我需要对 4072x3080 图像的每个像素使用此算法,整个过程大约需要 1 小时 30 秒,所以我尝试以某种方式强制它
scipy.optimize.fsolve 似乎不适用于调用自身的函数。这是一个 MWE from scipy.optimize import fsolve def f(x): if f.n=
我想使用 Python 求解 6 个非线性方程组。我发现我可以很容易地使用 scipy 的 fsolve 来求解 3 个非线性方程组。然而,当我将其扩展到更大的系统时,我发现该解并不能解决方程组。有什
我有以下功能: Eq = @(x1, x2) [x1-6, x2+3]; fsolve(Eq, [4 1]) 但出现以下错误: ??? Input argument "x2" is undefined
fsolve 从起始估计中找到非线性方程(系统)的解。我可以对我的函数调用进行矢量化,以在多个起点上使用 fsolve 并可能找到多个解决方案,如 here 所解释的那样。在 this问题描述了如何使
我正在使用此代码获取非线性函数的零点。最肯定的是,该函数应该有 1 个或 3 个零 import numpy as np import matplotlib.pylab as plt from sci
我在 matlab 上有一个程序,但我想在 python 中转换,我的 matlab 代码是: function [f]=equation1(x) %options = optimoptions('f
我是一名优秀的程序员,十分优秀!