Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用带不等式方程的fsolve解方程_Python_Numpy_Scipy - Fatal编程技术网

Python 用带不等式方程的fsolve解方程

Python 用带不等式方程的fsolve解方程,python,numpy,scipy,Python,Numpy,Scipy,我很难理解如何将不等式方程添加到fsolve函数中 例如: 以下是软件包: import numpy as np from scipy.optimize import fsolve 以下是我想使用的方程式: x1 >= 0.4 and x1 <= 0.7 x2 >= 0.2 and x2 <= 0.4 5x2**2 + 2x1**3 = 2 关于如何设置不等式方程有什么想法吗?该fsolve方法既不能处理不等式约束,也不能处理变量的边界。您的前两个约束是简单的框约束

我很难理解如何将不等式方程添加到fsolve函数中

例如:

以下是软件包:

import numpy as np
from scipy.optimize import fsolve
以下是我想使用的方程式:

x1 >= 0.4 and x1 <= 0.7
x2 >= 0.2 and x2 <= 0.4
5x2**2 + 2x1**3 = 2 

关于如何设置不等式方程有什么想法吗?

fsolve
方法既不能处理不等式约束,也不能处理变量的边界。您的前两个约束是简单的框约束,即变量的边界,因此您只需要求解受变量边界约束的非线性方程组
2x1**3+5x**2==2
。这可以表示为约束最小化问题,类似于:


注意,在你的边界内没有满足非线性方程的点。无论如何,当我们最小化残差的欧几里德范数时,我们得到了可能的最佳点。

你确定变量的边界是正确的吗?没有满足第三个等式的点,请参见
0.4**3+0.2**2=0.041<0.7
。你是对的。我修正了如果我的回答有帮助,如果你能接受就好了。
myFunc(z):
    x1 = z[0]
    x2 = z[1]
    
    F = np.empty((3))
    F[0] = x1 >= 0.4 and x1 <= 0.7 # <-- This is the first equation
    F[1] = x2 >= 0.2 and x2 <= 0.4 # <-- this is the second equation
    F[2] = 5x2**2 + 2x1**3 = 2 # <-- this is the third equation
    return F
zGuess = np.array([0.3,0.3])
z = fsolve(myFunction,zGuess)
print(z)
For F(x) = 2x1**3 + 5x**2 - 2 you want to solve

min ||F(x)|| 

s.t. 0.4 <= x1 <= 0.7, 
     0.2 <= x2 <= 0.4