某天作业要做一个类似解方程组的操作,刚好在那个时候又在看永乐大帝的线性代数。想着看看能不能用代码实现以下,当然只是很简陋的操作了一下数组而已,结果如下:
题目:
西瓜5块钱一个,哈密瓜3块钱一只,李子3个一块钱,用100块钱买水果,
其中西瓜、哈密瓜和李子都必须要有且总共100个,问西瓜、哈密瓜和李子要买多少个刚好凑足100块钱。
代码:
#非齐次线性方程组: X+Y+Z=100 5X+3Y+1/3Z=100 import fractions a=[[1,1,1,100],[5,3,1/3,100]] res=[0 for i in range(len(a[0]))] #非齐次线性 #化为阶梯型矩阵 def changeM(x,y): if(x>len(a) and y>len(a[0])): return else: #判断对角的值是否为1 if(a[x][y]==1): k=-a[x+1][y]/a[x][y] for i in range(len(a[x])): res[i] = k*a[x][i] for j in range(len(a[x+1])): a[x+1][j] = res[j] + a[x+1][j] x=x+1 y=y+1 changeM(x, y) elif(a[x][y] == 0): return else: #整行乘对角值的倒数 k = 1/a[x][y] for i in range(len(a[x])): a[x][i] = a[x][i] * k #加到上一行(因为这道题是二维的,所以就不探讨下一行的了) a[x-1][i] = a[x-1][i] -a[x][i] #print(a[x-1][i]) def solveThisPromble(A): j=1 for i in range(100): X = A[0][3]-A[0][2]*i Y = A[1][3]-A[1][2]*i #能被3整除的数 if(i%3==0 and 0<i<100): if(1<X<100 and 1<Y<100): print("第"+str(j)+"组解:") print(i) print(int(X)) print(int(Y)) j=j+1 changeM(0,0) solveThisPromble(a)