在Python或Matlab中求解具有不平等约束的线性系统



我想求解一个非常复杂的线性系统,我以以下方程为例:

(1) x + y = 0;
(2) x * y = -4;
(3) x > 0;

如果仅(1(和(2(,则有两组解决方案。因此,我添加(3(以消除歧义。

任何编程语言的解决方案都可以,在Python或Matlab中更好。非常感谢。

------- ******************************************************************

等式(2(在我的示例中不是线性的,这是我的错误。我解决了我的原始复杂问题,可以通过ax = b制定,其中r(a(= r(b(,解决方案是唯一的,无需添加不等式以消除歧义。一些意想不到的文物使我认为线性系统中存在歧义,实际上歧义不存在。最后,我在线性系统中添加了更多约束,并用np.linalg.lstsq((解决它,然后意外的伪像消失了。

谢谢大家,您确实为我提供了很多帮助。描述原始问题并不容易,对此很抱歉。

sympy

>>> from sympy import *
>>> var('x y')
(x, y)
>>> solve([x+y,x*y+4])
[{x: -2, y: 2}, {x: 2, y: -2}]
>>> [(s[x],s[y]) for s in solve([x+y,x*y+4]) if s[x]>0]
[(2, -2)]

在目前的开发状态下,它无法求解涉及不平等和多个变量的系统。但是,在结果字典中找到所需的解决方案很容易。

Matlab中,可以使用Symbolic Toolbox这样解决:

syms x y 
eq1= x+y==0
eq2= x*y==-4
eq3= x>0
s=solve([eq1 eq2 eq3],[x,y])
x_sol=s.x
y_sol=s.y

结果是:

x_sol =  2
y_sol = -2

如果您想要数值而不是符号解决方案,则可以使用Scipy(Python(完成。您必须给出一个起点来消除歧义:

,而不是第三种情况。
    from scipy.optimize import fsolve
    def func(x):
        return np.array([x[0]+x[1],x[0]*x[1]+4]])
    x = fsolve(func, x0=[2,0])

最新更新