[英]Use python fsolve for solving equations with 2-D input variables
知道可以使用以下方法轻松应用 fsolve function:
import numpy as np
from scipy.optimize import fsolve
def solve(var):
x = var[0]
y = var[1]
f = np.zeros(2)
f[0] = x+y-a
f[1] = 3*x+7*y-10
return f
a = 2
var = fsolve(solve, np.zeros(2))
print(var)
但是,如果a
是二维矩阵,我该如何使用 fsolve function 如下代码(与上面的代码相比,只是a
发生了变化):
import numpy as np
from scipy.optimize import fsolve
def solve(var):
x = var[0]
y = var[1]
f = np.zeros(2)
f[0] = x+y-a
f[1] = 3*x+7*y-10
return f
a = np.array([[1,2], [3, 4]])
var = fsolve(solve, np.zeros(2))
print(var)
编辑:
我想要的可以使用以下方法计算。 但是是否可以不使用for
循环来做到这一点? (也许如果我们定义var[0,:]
和var[1,:]
而不是var[0]
和var[1]
,问题就会解决)
import numpy as np
from scipy.optimize import fsolve
def solve(var):
x = var[0]
y = var[1]
f = np.zeros(2)
f[0] = x+y-a
f[1] = 3*x+7*y-10
return f
a1 = np.array([[1,2], [3,4]])
for a2 in a1:
for a3 in a2:
a=a3
var = fsolve(solve, np.zeros(2))
print(var)
为避免循环,您可以使用numpy.vectorize
:
def func(x,a):
return [x[0]+x[1]-a, 3*x[0]+7*x[1]-10]
def solve(var, a):
sol = fsolve(func, x0=var, args=(a))
return sol
a = np.array([[1,2], [3,4]])
vfunc = np.vectorize(solve, excluded=['var'], otypes=[list])
sol = vfunc(var=np.zeros(2), a=a)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.