求解具有多个变量的线性方程

时间:2017-09-05 15:18:13

标签: python python-2.7 numpy

我有一些带有一些变量的方程式。我想找到那些变量的值。我该怎么办? 方程式就像 -

a + b = 25, a + c = 20,b + d = 17,c + d = 12

现在我想找到a,b,c,d的值。

我尝试使用以下代码,但我得到了例外 代码:

import numpy as np
A = np.array([[1,1,0,0], [1,0,1,0], [0,1,0,1], [0,0,1,1]])
B = np.array([25, 20, 17, 12])
x = np.linalg.solve(A, B)
print x

例外:

    Traceback (most recent call last):
    File "C:/Users/achilles/Desktop/Desktop/python/nump.py", line 8, in
      
    x = np.linalg.solve(A, B)  
    File "C:\Python27\lib\site-packages\numpy\linalg\linalg.py", line 375, in 
    solve  
    r = gufunc(a, b, signature=signature, extobj=extobj)  
    File "C:\Python27\lib\site-packages\numpy\linalg\linalg.py", line 90, in 
    _raise_linalgerror_singular  
    raise LinAlgError("Singular matrix")  
    LinAlgError: Singular matrix

我认为这是因为我使用'0'(零)代替方程中的缺失变量。就像第一个等式中的'c'和'd'一样,所以我用它们都是0。 那么找到这些变量的值的解决方案是什么呢? 感谢。

3 个答案:

答案 0 :(得分:3)

这里的问题不是代码问题,这是一个数学问题 - 这里你得到线性代数错误的原因是因为这是不可解决的。如果你把你的意见输入wolframalpha,你可以看到:

https://www.wolframalpha.com/input/?i=a+%2B+b+%3D+25,+a+%2B+c+%3D+20,+b+%2B+d+%3D+17,+c+%2B+d+%3D+12

给出输出b = 25 - a, c = 20 - a, d = a - 8,这意味着尽管您可以找到变量的相对值,但这些值定义了可能解决方案的表面(想想您的唯一解决方案是图表上x = 1,y的点) = 2,这就像说解决方案是在y = x + 3 ---的任何地方,但忽略它,如果它没有帮助!)

如果您的最终等式为c + d + a = 12,则将其与输出进行比较:

https://www.wolframalpha.com/input/?i=a+%2B+b+%3D+25,+a+%2B+c+%3D+20,+b+%2B+d+%3D+17,+c+%2B+d+%2B+a%3D+12

a = 0, b = 25, c = 20, d = -8

(顺便说一下,你的方法是正确的,适用于可解的方程式)

这是一个单一定义的解决方案。因此,问题在于你的方程不会限制单个解,因此你无法“解决”它们。

答案 1 :(得分:1)

你的方程式没有独特的解决方案;如果您为其中一个变量选择一个值,则可以确定其余变量的值。

例如:如果a = 0,则0 + b = 25且0 + c = 20,这会导致20 + d = 12,所以d = -8。

答案 2 :(得分:1)

矩阵的行列式确定您可以拥有多少解。正决定因素意味着一个独特的解决方案,负决定因素意味着没有解决方案,如果

np.linalg.det(A)

0.0

这意味着你的矩阵是“单一的”,解决方案位于一个平面上,没有独特的解决方案。