繁体   English   中英

使用 python fsolve 求解具有二维输入变量的方程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM