有没有办法在python中求解线性方程组,其中未知数位于相等的两边。所以,例如,如果我有:
<input type="text" name="search" placeholder="Search..">
这可以表示为:
x_1 = 0.7 + 0.5 * x_1 - 0.4 * x_2
x_2 = 0.7 * x_1 + 0.5 - 0.4 * x_1
x_3 = 0.7 * x_2 + 0.5 * x_1 - 0.4
我们有Toeplitz Matrix。
我可以轻易地手工解决这样的表达,但是由于我有大套装,所以很费力。我在看
Is there a python module to solve linear equations?
How to solve a pair of nonlinear equations using Python?
和SymPy Solvers模块,但我似乎无法找到解决此问题的方法。
答案 0 :(得分:2)
你需要得到你的方程式(由于显而易见的原因省略了x_3)
0.5 * x1 + 0.4 * x2 = 0.7
0.7 * x1 - 1.4 * x2 = -0.5
之前可以使用numpy.linalg.solve
,就像在这种情况下一样
import numpy as np
a = np.array([[0.5, 0.4], # first row x_i factors
[0.7, -1.4]]) # second row x_i factors
b = np.array([0.7, -0.5])
sol = np.linalg.solve(a, b)
print sol
给出了
[ 0.79591837 0.75510204]
如果问题是关于如何转换输入
x_1 = 0.7 + 0.5 * x_1 - 0.4 * x_2
x_2 = 0.7 * x_1 + 0.5 - 0.4 * x_2
自动到常量位于方程式右侧的形式,可以通过首先注意到它来实现
0 + 1 * x_1 + 0 * x_2 = 0.7 + 0.5 * x_1 - 0.4 * x_2
0 + 0 * x_1 + 1 * x_2 = 0.5 + 0.7 * x_1 - 0.4 * x_2
然后将这些值放在矩阵
中import numpy as np
left = np.matrix([[0, 1, 0], # [cons., x_1, x_2]
[0, 0, 1]])
right = np.matrix([[0.7, 0.5, -0.4],
[0.5, 0.7, -0.4]])
tmp = left - right
constants = - tmp[:, 0]
factors = tmp[:, [1, 2]]
sol = np.linalg.solve(factors, constants)
print factors
print constants
print sol
答案 1 :(得分:0)
看起来可以很容易地将其转换为线性方程式问题:
-0.7 = (0.5 - 1) * x_1 - 0.4 * x_2
-0.5 = 0.7 * x_1 - (0.4 + 1) * x_2
0.4 = 0.7 * x_2 + 0.5 * x_1 - x_3
A = np.array([[0.5-1, -0.4, 0], [0.7, -.4-1, 0], [.5, .7, -1]])
F = np.array([-.7, -.5, .4])
F = A * X
X = F/A
在大多数情况下,
可以解决np.linalg.solve(A, F)
如果我的猜测是正确的,那么问题是什么?