【小峰的学习日记】利用python求解带参数的线性方程

如下所示方程:
[ 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] 10y(α1)γβγ0010αγ(β1)γγx101000x001000y00100y10001
[ 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=0024α+34β21
如果要在纸上计算形如这样的带参方程是十分困难的,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)
  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值