在了解如何用python、lingo解多元一次方程问题之前我们先了解什么是递归,因为python解多元一次方程问题是递归算法的一个经典算法习题,也是python解多元一次方程问题用到的主要算法。
简单说程序调用自身的编程技巧叫递归。递归的思想是把一个大型复杂问题层层转化为一个与原问题规模更小的问题,问题被拆解成子问题后,递归调用继续进行,直到子问题无需进一步递归就可以解决的地步为止。
递归算法主要的难点:
1、如何将原问题转化为一个与原问题规模更小的问题。
2、递归的终止条件。
目录
问题描述:
目标描述:
算法思路:
代码实现:
按照上述思路python实现如下:
lingo实现如下:
问题描述:
目标描述:
求解多元一次方程,列出这些解,并统计解的个数。
原问题可以看做为:
解的形式
算法思路:
从静态上看,单个的取值范围为。
从动态上看,已决定的对未决定的的范围有影响。
例如,在已经决定x的情况下,的上限从 变为。
问题的规模分布在两个维度上:
- 变量的个数
- 总和S
一个成功的递归算法势必要以某种方式或方程的某种内在联系缩减需要考虑的变量个数以及总和S。
可以将方程的解分为两组:
- ,此时相当于解为。
- ,此时相当于解为。
这种划分方式就是根据各方程之间的内在联系来进行划分,且产生的子问题分别在变量个数与总和上比原问题小。
递归下去到最底层就会触及到边界条件,边界条件为:
这种划分是不重复、无遗漏的,且产生的子问题分别在变量个数与总和上比原问题小。分解不断进行下去就会触及边界,边界条件是:
- ,不是方程的解。
- ,不是方程的解。
- ,是方程的解。
代码实现:
按照上述思路python实现如下:
def solve(val, data):
def solution(val, data):
if len(data) == 0:
return
elif val < 0:
return
elif val == 0:
xs.append(tuple(x))
return
else:
solution(val, data[:-1]) # 减小变量个数
x[len(data) - 1] += 1
solution(val - data[-1], data) # 减小val
x[len(data) - 1] -= 1
return
x = [0] * len(data)
xs = []
solution(val, data)
return xs,len(xs)
data = [57,71,87,97,99,101,103,113,114,115,128,129,131,137,147,156,163,186]
print(solve(1000,data))
lingo实现如下:
文章来源:https://www.toymoban.com/news/detail-823666.html
因为lingo软件本身的限制,所以使用lingo进行求解,只能求出众多可行解中的一个可行解。文章来源地址https://www.toymoban.com/news/detail-823666.html
到了这里,关于数学建模-python递归、lingo解多元一次方程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!