【问题标题】:Solving linear system with inequality constraints in Python or Matlab [closed]在 Python 或 Matlab 中求解具有不等式约束的线性系统 [关闭]
【发布时间】:2017-04-16 17:05:27
【问题描述】:

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

(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() 解决它,然后意外的工件消失了。

谢谢大家,你们帮了我很多。原来的问题不好描述,抱歉。

【问题讨论】:

  • 请添加一些详细信息,说明您使用过哪些类型的求解器,以及阻止您自己尝试此问题的原因。然后答案可以集中在教你那个缺失的部分。否则,对于单个 Stack Overflow 答案,您所要求的内容可能是模糊的,而且可能太多了。一些代码会很好。 . .即使它只解释了问题输入,到目前为止你甚至没有显示你的输入是字符串,还是你想解决矩阵/向量形式?
  • 您的问题真的是线性系统吗?你的x * y 让我怀疑。否则,有线性方程组的常见求解器。或者您对线性优化(又名线性规划)感兴趣?
  • (大型)线性等式和不等式系统可以通过线性规划求解器轻松求解。只需使用一个虚拟目标(例如,所有成本系数都为零)。

标签: python matlab scipy linear-programming linear-equation


【解决方案1】:

同情

>>> 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)]

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

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

      如果你想要一个数字而不是符号的解决方案,这可以用 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])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-13
        • 2023-04-10
        • 1970-01-01
        • 2019-05-23
        • 1970-01-01
        • 1970-01-01
        • 2017-03-09
        • 1970-01-01
        相关资源
        最近更新 更多