如下所示方程:
[
1
0
x
−
1
−
x
0
0
0
1
0
0
−
y
y
−
1
−
y
0
1
0
0
0
(
α
−
1
)
γ
−
α
γ
0
1
0
0
−
β
γ
(
β
−
1
)
γ
0
0
1
0
0
−
γ
0
0
0
1
]
\left[\begin{array}{cccccc}{1} & {0} & {x-1} & {-x} & {0} & {0} \\ {0} & {1} & {0} & {0} & {-y} & {y-1} \\ {-y} & {0} & {1} & {0} & {0} & {0} \\ {(\alpha-1) \gamma} & {-\alpha \gamma} & {0} & {1} & {0} & {0} \\ {-\beta \gamma} & {(\beta-1) \gamma} & {0} & {0} & {1} & {0} \\ {0} & {-\gamma} & {0} & {0} & {0} & {1}\end{array}\right]
⎣⎢⎢⎢⎢⎢⎢⎡10−y(α−1)γ−βγ0010−αγ(β−1)γ−γx−101000−x001000−y00100y−10001⎦⎥⎥⎥⎥⎥⎥⎤
[
x
1
x
2
x
3
x
4
x
5
x
6
]
=
[
0
0
2
−
4
α
+
3
4
β
−
2
−
1
]
\left[\begin{array}{c}{x_{1}} \\ {x_{2}} \\ {x_{3}} \\ {x_{4}} \\ {x_{5}} \\ {x_{6}}\end{array}\right]=\left[\begin{array}{c}{0} \\ {0} \\ {2} \\ {-4 \alpha+3} \\ {4 \beta-2} \\ {-1}\end{array}\right]
⎣⎢⎢⎢⎢⎢⎢⎡x1x2x3x4x5x6⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡002−4α+34β−2−1⎦⎥⎥⎥⎥⎥⎥⎤
如果要在纸上计算形如这样的带参方程是十分困难的,python中的sympy库提供了一个函数**solve_linear_system()**用来求解此类方程。
该函数参数介绍如下:
矩阵参数system:对于有n个等式、m个待求变量的线性方程组,system是一个 的sympy.Matrix对象。
可变列表参数symbols:若有m个待求变量的线性方程组,则symbols是m个sympy.Symbol对象。
可变关键字参数flags:本例中未用到。
该函数返回一个dict,用来储存结果。
求解示例代码如下:
import sympy
from sympy import symbols
sympy.init_printing()
x_1, x_2, x_3, x_4, x_5, x_6 = symbols('x_1 x_2 x_3 x_4 x_5 x_6') # 定义自变量x_1, x_2, x_3, x_4, x_5, x_6
alpha, beta, x, y, gamma = symbols('alpha beta x y gamma') # 定义参数alpha, beta, x, y, gamma
system = sympy.Matrix(( # 方程参数矩阵,为系数阵的增广矩阵
(1, 0, x-1, -x, 0, 0, 0),
(0, 1, 0, 0, -y, y-1, 0),
(-gamma, 0, 1, 0, 0, 0, 2),
((alpha-1)*gamma, -alpha*gamma, 0, 1, 0, 0, -4*alpha+3),
(-beta*gamma, (beta-1)*gamma, 0, 0, 1, 0, 4*beta-2),
(0, -gamma, 0, 0, 0, 1, -1)
))
a = sympy.solve_linear_system(system, # 方程求解函数
x_1, x_2, x_3, x_4, x_5, x_6)
for key, value in a.items(): # 输出方程结果
print('{key}={value}'.format(key=key, value=value))
输出结果:
x_1=(alpha*gamma*x*y - 3*alpha*gamma*x + 4*alpha*x - beta*gamma*x*y - 2*beta*gamma*y + gamma*x + 2*gamma - x - 2)/(alpha*gamma**2*x - alpha*gamma*x + beta*gamma**2*y - beta*gamma*y - gamma**2 + 2*gamma - 1)
x_2=(alpha*gamma*x*y + alpha*gamma*x - beta*gamma*x*y + 2*beta*gamma*y - 4*beta*y - gamma*y - gamma + y + 1)/(alpha*gamma**2*x - alpha*gamma*x + beta*gamma**2*y - beta*gamma*y - gamma**2 + 2*gamma - 1)
x_3=(alpha*gamma**2*x*y - alpha*gamma**2*x + 2*alpha*gamma*x - beta*gamma**2*x*y - 2*beta*gamma*y + gamma**2*x - gamma*x + 2*gamma - 2)/(alpha*gamma**2*x - alpha*gamma*x + beta*gamma**2*y - beta*gamma*y - gamma**2 + 2*gamma - 1)
x_4=(alpha*gamma**2*x*y - alpha*gamma**2*x - alpha*gamma**2*y + alpha*gamma**2 + 2*alpha*gamma*x + alpha*gamma*y - 5*alpha*gamma + 4*alpha - beta*gamma**2*x*y + beta*gamma**2*y - 3*beta*gamma*y + gamma**2*x - gamma**2 - gamma*x + 4*gamma - 3)/(alpha*gamma**2*x - alpha*gamma*x + beta*gamma**2*y - beta*gamma*y - gamma**2 + 2*gamma - 1)
x_5=(alpha*gamma**2*x*y - alpha*gamma**2*x + 2*alpha*gamma*x - beta*gamma**2*x*y + beta*gamma**2*x + beta*gamma**2*y - beta*gamma**2 - beta*gamma*x - 3*beta*gamma*y + 5*beta*gamma - 4*beta - gamma**2*y + gamma**2 + gamma*y - 3*gamma + 2)/(alpha*gamma**2*x - alpha*gamma*x + beta*gamma**2*y - beta*gamma*y - gamma**2 + 2*gamma - 1)
x_6=(alpha*gamma**2*x*y + alpha*gamma*x - beta*gamma**2*x*y + beta*gamma**2*y - 3*beta*gamma*y - gamma**2*y + gamma*y - gamma + 1)/(alpha*gamma**2*x - alpha*gamma*x + beta*gamma**2*y - beta*gamma*y - gamma**2 + 2*gamma - 1)