fsolve对任何方程组都好吗?

时间:2019-03-12 19:05:16

标签: python scipy

我对Python没有太多经验,但是我决定尝试解决以下方程组:

  

x = A * exp(x + y)

     

y = 4 * exp(x + y)

我想求解该系统并将x和y绘制为A的函数。

我看到了一些类似的question并尝试解决:

`from scipy.optimize import fsolve
 def f(p):
   x, y = p
   A = np.linspace(0,4)
   eq1= x -A* np.exp(x+y)
   eq2= y- 4* np.exp(x+y)
   return (eq1,eq2)
 x,y =  fsolve(f,(0, 0))
 print(x,y)
 plt.plot(x,A)
 plt.plot(y,A)
`

我遇到这些错误:  setting an array element with a sequence.  Result from function call is not a proper array of floats.

1 个答案:

答案 0 :(得分:3)

将A的值作为参数传递给函数,并分别为A的每个值运行fsolve。 以下代码有效。

from scipy.optimize import fsolve
import matplotlib.pyplot as plt
import numpy as np
def f(p,*args):
  x, y = p
  A = args[0] 

  return (x -A* np.exp(x+y),y- 4* np.exp(x+y))
A = np.linspace(0,4,5)
X = []
Y =[]
for a in A:
  x,y =  fsolve(f,(0.0, 0.0) , args=(a))
  X.append(x)
  Y.append(y)
  print(x,y)

plt.plot(A,X)
plt.plot(A,Y)

4.458297786441408e-17 -1.3860676807976662
-1.100088440495758 -0.5021704548996653
-1.0668987418054918 -0.7236105952221454
-1.0405000943788385 -0.9052366768954621
-1.0393471472966025 -1.0393471472966027
/usr/local/lib/python3.6/dist-packages/scipy/optimize/minpack.py:163: RuntimeWarning: The iteration is not making good progress, as measured by the 
  improvement from the last ten iterations.
  warnings.warn(msg, RuntimeWarning)
/usr/local/lib/python3.6/dist-packages/scipy/optimize/minpack.py:163: RuntimeWarning: The iteration is not making good progress, as measured by the 
  improvement from the last five Jacobian evaluations.
  warnings.warn(msg, RuntimeWarning)
[<matplotlib.lines.Line2D at 0x7f4a2a83a4e0>]

enter image description here