我有一些带有一些变量的方程式。我想找到那些变量的值。我该怎么办? 方程式就像 -
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。 那么找到这些变量的值的解决方案是什么呢? 感谢。
答案 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,则将其与输出进行比较:
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
这意味着你的矩阵是“单一的”,解决方案位于一个平面上,没有独特的解决方案。