我正在使用scipy.optimize的函数fsolve
来求解两个方程中的两个未知数。我最后试图求解的方程(要)复杂得多,但我已经很难理解下面的基本示例。
import scipy.optimize as scopt
def fun(variables) :
(x,y) = variables
eqn_1 = x**2 + y - 4
eqn_2 = x + y**2 +3
return [eqn_1, eqn_2]
result = scopt.fsolve(fun, (0.1, 1))
print(result)
这样得到的结果是[-2.08470396 -0.12127194]
,但是当我把这些数字重新插入函数时(一次假设第一个是x,一次假设第一个是y),我得到的结果与零非常不同。
print((-2.08470396)**2 - 0.12127194 - 4)
print((-2.08470396) + (- 0.12127194)**2 + 3)
结果为0.22和0.93。
print((-0.12127194)**2 -2.08470396 - 4)
print((-0.12127194) + (-2.08470396)**2 + 3)
结果为-6.06和7.22。
我错过了什么?
1条答案
按热度按时间m1m5dgzv1#
您是否注意到运行
result = scopt.fsolve(fun, (0.1, 1))
时生成的警告?该警告告诉您某些操作失败了:问题是
fun(variables) = (0, 0)
没有解,第一个方程给出y = 4-x**2
,第二个方程可以写成x + (4-x**2)**2 + 3 = 0
,它没有真实的解(你可以画出左边的图或做一些代数运算来说服自己)。如果你使用
eqn_2 = x + y**2 - 3
,fsolve
给出一个有效的数值解: