- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我用 Python 编写了一个脚本,它使用 fsolve 找到一个相当复杂的函数的零。它的工作方式如下。有一个类只是简单地存储函数的参数。该类有一个 evaluate 方法,它根据存储的参数返回一个值,另一个方法(反转)找到函数获取提供的输出的参数。
反转方法会在每次迭代时更新函数的参数,并一直这样做,直到评估方法返回的值与提供的值之间的不匹配为零。</p>
我遇到的问题是,虽然反转方法返回的值是正确的,但作为对象一部分的参数在反转方法终止后始终为 0。奇怪的是,如果我使用 root 而不是 fsolve,这个问题就会消失。据我所知,fsolve 只是 root 的包装器,其中包含求解器算法的一些设置和其他一些强制执行的设置。
这是 fsolve 的已知问题还是我在这里做了一些愚蠢的事情?下面的脚本演示了我在正弦函数上遇到的问题。
from scipy.optimize import fsolve, root
from math import sin, pi
class invertSin(object):
def __init__(self,x):
self.x = x
def evaluate(self):
return sin(self.x)
def arcsin_fsolve(self,y):
def errorfunc(xnew):
self.x = xnew
return self.evaluate() - y
soln = fsolve(errorfunc, 0.1)
return soln
def arcsin_root(self,y):
def errorfunc(xnew):
self.x = xnew
return self.evaluate() - y
soln = root(errorfunc, 0.1, method = 'anderson')
return soln
myobject = invertSin(pi/2)
x0 = myobject.arcsin_fsolve(0.5) #find x s.t. sin(x) = 0.5 using fsolve
print(x0) #this prints pi/6
x0obj = myobject.x
print(x0obj) #this always prints 0 no matter which function I invert
myobject2 = invertSin(pi/2)
x1 = myobject2.arcsin_root(0.5) #find x s.t. sin(x) = 0.5 using root
print(x1) #this prints pi/6
x1obj = myobject2.x
print(x1obj) #this prints pi/6
最佳答案
如果您在 errorfunc
中为 xnew
添加打印语句,那么您将看到 fsolve
使用列表(一个元素)。这意味着以这种方式重新解释函数,而不是原始函数。不知何故,类型信息在退出求解器后丢失,因此对该列表的地址/引用被解释为 float 据,从而给出错误的值。
在那里设置 self.x = xnew[0]
可以恢复所需的行为。
关于Python fsolve 对象回火,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49896377/
为什么下面的代码会返回 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
我是一名优秀的程序员,十分优秀!