Python 来自fsolve的奇怪警告
我用fsolve编写了非常简单的代码。方程并不复杂。一个是带有已知Python 来自fsolve的奇怪警告,python,warnings,Python,Warnings,我用fsolve编写了非常简单的代码。方程并不复杂。一个是带有已知“a”参数的a*(1-a),另一个是x*(1-x) 代码是: from scipy.optimize import fsolve import math def equations(p): x = p a=0.1 return (a*(1.0-a), x*(1.0-x)) x = fsolve(equations, 0.1) print equations(x[0]), x[0] 尽管代码和方程非常简
“a”
参数的a*(1-a)
,另一个是x*(1-x)
代码是:
from scipy.optimize import fsolve
import math
def equations(p):
x = p
a=0.1
return (a*(1.0-a), x*(1.0-x))
x = fsolve(equations, 0.1)
print equations(x[0]), x[0]
尽管代码和方程非常简单,但fsolve无法求解方程。为了测试它,我使用答案作为初始值,但它仍然给我一个警告。为什么?
这是它的警告:
/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py:161:RuntimeWarning:根据
过去十次迭代的改进。
warning.warn(msg,RuntimeWarning)
(0.09000000000000001,0.090000000000000011)0.1
您试图以一种不起作用的方式使用fsolve,我认为您希望将它用于一个它不应该用于的目的
x*(1-x)
不是方程,在a*(1-a)
中,如果a
已知,则无需执行任何操作。你到底想做什么?我有很多方程,依赖于初始条件,我们应该解方程。有时两个方程都包含x,我们应该找到它。有时,只有一个方程包含x,而另一个方程包含已知的参数。如果我将def的返回值从“return(a*(1.0-a),x*(1.0-x))”更改为“return(a*(1.0-a)-x*(1.0-x)),它会工作得更好。是的,此代码工作得很好。请注意,fsolve
只能解一个形式为f(x)=0的方程。它不适用于多个方程。通过更改,您可以使其解算0.09-x*(1-x)=0
。根据初始值,您将得到两个解决方案之一。已解决。谢谢