-1

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

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

谢谢大家,你们帮了我很多。描述原始问题并不容易,对此感到抱歉。

4

3 回答 3

2

同情

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

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

于 2017-04-16T18:26:15.463 回答
0

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
于 2017-04-16T17:33:36.883 回答
-1

如果你想要一个数字而不是符号的解决方案,这可以用 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])
于 2017-04-16T17:19:54.737 回答