平等两边变量方程的Python求解系统

时间:2016-07-04 02:52:35

标签: python numpy sympy

有没有办法在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模块,但我似乎无法找到解决此问题的方法。

2 个答案:

答案 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)

如果我的猜测是正确的,那么问题是什么?