Python 带线性约束的非线性方程组(初学者)

Python 带线性约束的非线性方程组(初学者),python,numpy,scipy,equation-solving,nonlinear-functions,Python,Numpy,Scipy,Equation Solving,Nonlinear Functions,我见过这个。 但我需要解X和F上有边界的系统,例如: f1 = x+y^2 = 0 f2 = e^x+ xy = 0 -5.5< x <0.18 2.1< y < 10.6 # 0.15< f1 <20.5 - not useful for this example # -10.5< f2 < -0.16 - not useful for this example f1=x+y^2=0 f2=e^x+xy=0 -5.5

我见过这个。 但我需要解X和F上有边界的系统,例如:

    f1 = x+y^2 = 0
    f2 = e^x+ xy = 0
-5.5< x <0.18
2.1< y < 10.6
   # 0.15< f1 <20.5 - not useful for this example
   # -10.5< f2 < -0.16 - not useful for this example
f1=x+y^2=0
f2=e^x+xy=0

-5.5
首先求解非线性系统,得到(x,y)形式的一个/无/多个解。然后检查这些解决方案中的哪些(如果有的话)满足约束。

这取决于系统,但在这里,您只需在事后检查约束即可


首先求解非线性系统,得到(x,y)形式的一个/无/多个解。然后检查这些解决方案中哪些(如果有的话)满足约束条件。

我希望这将为您提供一个起点。就这样

状态:0
成功:真的
njev:7
nfev:29
乐趣:14.514193585986144
x:阵列([-0.86901099,2.1])
消息:“优化已成功终止。”
jac:数组([-2.47001648e-04,3.21871972e+01,0.00000000e+00])
nit:7

编辑:作为对注释的回应:如果您的函数值
f1
f2
不为零,您只需重写方程,例如:

f1=-6和f2=3

您要最小化的功能将是:

def my_fun(z):
    x = z[0]
    y = z[1]

    f = np.zeros(2)
    f[0] = x + y ** 2 + 6
    f[1] = np.exp(x) + x * y -3
    return np.dot(f,f)

我希望这将为您提供一个开端。就这样

状态:0
成功:真的
njev:7
nfev:29
乐趣:14.514193585986144
x:阵列([-0.86901099,2.1])
消息:“优化已成功终止。”
jac:数组([-2.47001648e-04,3.21871972e+01,0.00000000e+00])
nit:7

编辑:作为对注释的回应:如果您的函数值
f1
f2
不为零,您只需重写方程,例如:

f1=-6和f2=3

您要最小化的功能将是:

def my_fun(z):
    x = z[0]
    y = z[1]

    f = np.zeros(2)
    f[0] = x + y ** 2 + 6
    f[1] = np.exp(x) + x * y -3
    return np.dot(f,f)


当存在约束
f1>0.15
时,如何求解
f1=0
?Google:Scipy&约束非线性优化。使用例如scipy.optimize.minimizedar@Moritz,当然,在我问你之前,我已经在谷歌上搜索了我的问题。但对我来说,没有什么有用的解决办法,我能够理解。所以我问你一个简单的例子。@Moritz,当然,我看了的页面,但是.minimize和.fsolve之间的区别是什么?它看起来像.minimize是针对F=(f1,f2,…)->min这样的问题(这更像是(df/dx=0)问题),而不是针对方程组,如上所述。非LAE系统的最小化方法是什么?@cfh,谢谢,我只是在考虑我自己的系统问题,没有想到,这个简单的例子不需要任何约束就可以满足,因为它是f(x)=常数问题。当存在约束
f1>0.15
时,如何解决
f1=0
?Google:Scipy&约束非线性优化。使用例如scipy.optimize.minimizedar@Moritz,当然,在我问你之前,我已经在谷歌上搜索了我的问题。但对我来说,没有什么有用的解决办法,我能够理解。所以我问你一个简单的例子。@Moritz,当然,我看了的页面,但是.minimize和.fsolve之间的区别是什么?它看起来像.minimize是针对F=(f1,f2,…)->min这样的问题(这更像是(df/dx=0)问题),而不是针对方程组,如上所述。非LAE系统的最小化方法是什么?@cfh,谢谢,我只是在考虑我自己的系统问题,没有想到,这个简单的例子不需要任何约束来满足,因为它是f(x)=const问题。是的,我也在考虑它。我猜,这可能是最简单的方法。是的,我也在考虑。猜猜,这可能是最简单的方法。但这是最小化,OP想要解一个方程组。这有什么帮助?那又怎样?也许我不理解解方程组的概念,但他想找到满足约束条件的x和y的值,并且系统显然应该最小化
f[0]=0和f[1]=0
。你可以用残差为零的方式写出每一个方程组,为什么你认为(0,0)是这个方程组的最小值?f1和f2的值可能为负值。他写了
f1=0
f2=0
将其作为约束优化问题重写不会带来任何好处:如果优化达到0(在您的情况下没有),那么您已经找到了解决方案,但是约束不是活动的,你可以在没有约束的情况下简单地求解方程。如果你没有达到0,你就没有找到一个解。但是这是最小化,OP想要解一个方程组。这有什么帮助?那又怎样?也许我不理解解方程组的概念,但他想找到满足约束条件的x和y的值,并且系统显然应该最小化
f[0]=0和f[1]=0
。你可以用残差为零的方式写出每一个方程组,为什么你认为(0,0)是这个方程组的最小值?f1和f2的值可能为负值。他写了
f1=0
f2=0
将其作为约束优化问题重写不会带来任何好处:如果优化达到0(在您的情况下没有),那么您已经找到了解决方案,但是约束不是活动的,你可以在没有约束的情况下简单地求解方程。如果未达到0,则未找到解决方案。