python解四元一次方程_用python求解多元一次方程?

想要用随机生成的数组去穷尽所有可能还是不太现实,长度为n的数列,一共就有2^n种可能,我试了一下,如果是4个数,也就是16种情况,在1000次重复下,平均要随机生成53次才能全部生成全部可能,最多的要156次。若果有10个数生成1024种的话,我的电脑已经跑不动了,5个数512种的话平均3447次,最多的4976次。所以用随机的方式去生成所有情况是不现实的,肯定是穷举法比较现实。

import numpy as np

#生成系数矩阵

def func(n):

xs = {1:[[0],[1]]}

i = 1

while i

x_list = []

for x in xs[i]:

x_list.append(x + [0])

x_list.append(x + [1])

i+=1

xs[i] = x_list

return xs[n]

#输入任意数,给定k,输出求和结果

def main(input_list,k):

x = np.array(input_list)

n = len(input_list)

func_n = func(n)

func_T = np.array(func_n).T

result = np.dot(x,func_T)

for index,name in enumerate(result):

if name == k:

print(func_n[index])

start = time.time()

main([1,2,3,4,5,6,7,8,9,10],10)

end = time.time()

print(end-start)

[0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

[0, 0, 0, 1, 0, 1, 0, 0, 0, 0]

[0, 0, 1, 0, 0, 0, 1, 0, 0, 0]

[0, 1, 0, 0, 0, 0, 0, 1, 0, 0]

[0, 1, 1, 0, 1, 0, 0, 0, 0, 0]

[1, 0, 0, 0, 0, 0, 0, 0, 1, 0]

[1, 0, 0, 1, 1, 0, 0, 0, 0, 0]

[1, 0, 1, 0, 0, 1, 0, 0, 0, 0]

[1, 1, 0, 0, 0, 0, 1, 0, 0, 0]

[1, 1, 1, 1, 0, 0, 0, 0, 0, 0]

0.0020003318786621094

10个数也是挺快的

20个数稍微慢点3.55秒

因为毕竟是穷尽,时间复杂度应该是O(n^2)个数越多时间越长。

可以优化一下,比如先剔除出不可能的解之类的。

你可能感兴趣的:(python解四元一次方程)