Python三元一次方程求解与多元穷举法实例解析

南乔
南乔
发布时间:2026-10-13| 5人浏览过
原创

本文详细介绍Python中三元一次方程组的求解逻辑,通过代码示例展示如何解析输入并计算x、y、z值。同时深入探讨多元一次方程的穷举法实现,对比for循环与while循环在变量处理上的优劣,并结合书店购书案例,分析剩余金额限制下的多种购买组合方案,提供完整的代码实现与效果展示。

Python三元一次方程组求解代码示例

此处省略冗余说明,直接展示核心代码实现。


import re
 
lt = []
d = {}
for i in range(3):
 a = input('请输入第%d个三元式'%(i + 1))
 st = a.split("=")
 r = re.compile('(-?\d?)[xyz]')
 b = re.findall(r, st[0])
 print(b)
 for j in range(3):
  if b[j] == "":
   b[j] = 1
  if b[j] == '-':
   b[j] = -1
 d = {
  'x': int(b[0]),
  'y': int(b[1]),
  'z': int(b[2]),
  'sum':int(st[1])
 }
 lt.append(d)
print(lt)
t = lt[0]['x'] / lt[1]['x']
for i in lt[0]:
 lt[1][i] = lt[1][i] * t - lt[0][i]
 
t1 = lt[0]['x'] / lt[2]['x']
for i in lt[0]:
 lt[2][i] = lt[2][i] * t1 - lt[0][i]
 
t2 = lt[1]['y'] / lt[2]['y']
 
for i in lt[0]:
 lt[2][i] = lt[2][i] * t2 - lt[1][i]
 
 
z = lt[2]['sum'] / lt[2]['z']
y = (lt[1]['sum'] - lt[1]['z'] * z) / lt[1]['y']
x = (lt[0]['sum'] - lt[0]['z'] * z - lt[0]['y'] * y)/lt[0]['x']
 
print(x,y,z)
#样例输入
#请输入第1个三元式3x+6y-5z=12
#请输入第2个三元式x-3y+2z=-2#请输入第3个三元式5x-y+4z=10

多元一次方程穷举法实现教程

补充知识:Python实现多元一次方程的穷举法求解教程

问题描述与限制条件分析

题目背景:小利前往书店购买四种参考书,这四类书的价格分别为3元、5元、7元、11元。他手头共有70元钱,购买规则要求每种参考书至少买一本,且最后剩余的钱必须不足再购买其中任意一本书(即剩余金额小于最低书价3元)。请计算他有哪些可能的购买选择?

分析过程:本题实质为四元一次方程问题,存在两个关键限制条件:第一是要求各种书最少各买一本;第二是最多剩余2元(因为若剩3元及以上可再买一本最便宜的3元书)。解决思路如下:先每种书各买一本,花费3+5+7+11=26元,此时剩余44元。这44元可以任意分配用于购买额外书籍,从而满足了“每种至少一本”的限制。其次,关于剩余金额,存在剩余2元、1元、0元三种情况。这意味着除了首次花费26元购买的基础四本书外,后续追加购买的书籍总价可以是42元、43元或44元。由此,第二个限制条件也得以解决。

基于for循环的穷举法实现


def x_3():
 t = [42,43,44] 
 d = 0
 for z in t:
  print("当剩余%d元时:"%(44-z))
  for i in range(z//3+1):
   for n in range(z//5+1):
    for m in range(z//7+1):
     for p in range (z//11+1):
      if 3*i + 5*n +7*m +11*p == z:
       d += 1
       print("第%d个解为:(%d,%d,%d,%d)"%(d,i+1,n+1,m+1,p+1) )

调用函数后,得到的结果为:

while与if语句的实现对比

上述代码使用for语句实现了穷举法。倘若不使用for语句,改用while语句搭配if语句来实现,逻辑会如何变化?在for语句中,我们给出了具体的循环次数,逻辑简单明了。但当涉及两个变量同时变化时,仅1个while和1个if语句无法准确判断何时停止,因此还需要搭配另一个while和if语句。当涉及三个变量时,则需要3个while语句和3个if语句。同理,对于n个变量的情况,可能需要n个while语句和n个if语句,这显然使得代码过于繁琐。下面给出一个变量和两个变量时的代码实现块。

单变量与双变量穷举代码实现


##先每本书买一本,这样就保障了每本书最低一本的要求,这样还剩余44元,可随意分配
##按照只买种本书、两种书、三种书、四种书的逻辑思路编写代码
def x_1(): ##只买一种书
 for m in [3,5,7,11]:
  x = 1
  while True:
   if 42 <= m*x <=44: ##大于等于42,是因为最多剩余2元
    print("只买%d的元的书,购买%d本,剩余%d元" %(m,x+1,44-m*x))
    break
   elif m*x >44:
    print("不存在只买%d元的书的情况"%m)
    break
   else:
    x +=1

def x_2(): ##只买两种书
 ls = [3,5,7,11]
 m = 0
 ix = 0
 for m in range(3):
  ix = 0
  while True:
   if ix*ls[m] <= 44-ls[m+1]:
    ix += 1
    for q in range(m+1,4):
     iy = 1
     while True:
      if 42 <= ls[m]*ix +ls[q]*iy <=44:
       print("购买%d元书%d本,购买%d元书%d本,剩余%d元"%(ls[m],ix+1,ls[q],iy+1,44-(ls[m]*ix +ls[q]*iy)))
       iy += 1
      elif ls[m]*ix +ls[q]*iy > 44:
       iy = 0
       break
      else:
       iy += 1
   else:
    break

效果展示如下:

由此可见,for语句比while语句更加简便易行。以上是通过穷举法实现的求解过程,但若面对存在多个解的多元一次方程组,可能需要采用其他更高效的数学方法。在数据分析与挖掘领域,还有大量的知识点值得深入学习。

以上这篇关于Python简单的三元一次方程求解及多元穷举法的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。