zoukankan      html  css  js  c++  java
  • 解个非齐次线性方程组

    某天作业要做一个类似解方程组的操作,刚好在那个时候又在看永乐大帝的线性代数。想着看看能不能用代码实现以下,当然只是很简陋的操作了一下数组而已,结果如下:

    题目:

    西瓜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)
  • 相关阅读:
    图论
    城市吸引力指数
    bzoj3529(莫比乌斯反演+离线+树状数组)
    强制关闭tomcat
    bzoj2154(莫比乌斯反演)
    等差数列求和模板
    联想的显示屏校准(困难)
    bzoj2301(莫比乌斯反演)
    莫比乌斯反演模版
    菜鸟物流的运输网络(网络流)
  • 原文地址:https://www.cnblogs.com/jev-0987/p/13207604.html
Copyright © 2011-2022 走看看