c++求矩阵的秩_未竟代码收集#1 矩阵计算器

矩阵计算器

设计一款矩阵计算器。要求如下:

  1. 语言:Python。

  2. 允许使用numpy。

基本要求:

进行相关矩阵的计算,包括转置、求和、求逆、求行列式和乘积。

进阶要求:

  1. 一次最多可以定义十个矩阵。

  2. 创建“收藏夹”,用于存放用户定义的矩阵,且用户可以随时查看它。

  3. 进行相关矩阵的计算,包括转置、求和、求逆、求行列式和乘积。

  4. 进行“3.”后生成的矩阵可以被作为新矩阵添加至“收藏夹”或替换原先生成的矩阵。

高阶要求:

在“进阶要求”的基础上,不允许使用numpy。

#!/usr/bin/env python# coding: utf-8import numpy as npfrom numpy import *print('------测试------\n')num_lineA = input('请输入矩阵A的行数:3')num_columnA = input('请输入矩阵A的列数:4')print('......\n')a = np.arange(12).reshape(3,4)print('矩阵A为:\n',a)num_lineB = input('请输入矩阵B的行数:2')num_columnB = input('请输入矩阵B的列数:2')print('......\n')b = np.mat([[1, 2],[3,4]])Z = []print(b)print(b*b)Z.append(a)Z.append(b)print(Z)print(Z[1])print('----测试完毕----\n')num_lineA = input('请输入矩阵A的行数:')num_columnA = input('请输入矩阵A的列数:')la = int(num_lineA)ca = int(num_columnA)Ac = []Hc = []Dx = {}S = []for i in range(1,la+1):    for c in range(1,ca+1):        t = input('请输入A的第%s行的第%s个数:' %(i,c))         Hc.append(int(t))    Ac.append(Hc)    Hc = []    print(Ac)M_A = np.mat(Ac)print('A矩阵为:\n',M_A)S.append(M_A)Dx['A'] = M_AV = ['B','C','D','E','F','G','H','I','J']VV = ['A','B','C','D','E','F','G','H','I','J']Dc = ['1','2','3','4','5','6','7','8','9']text = input('好家伙,你已经成功定义了一个矩阵A,它已经在你的收藏夹中了!那么下面你想做什么?\na.再定义一个矩阵\nb.查看收藏的矩阵\nc.进入工作台\n')while text:    for i in range(len(V)):        v = V[i]        if text == 'a':            num_line = input('请输入矩阵%s的行数:' %v)            num_column = input('请输入矩阵%s的列数:' %v)            la = int(num_line)            ca = int(num_column)            for i in range(1,la+1):                 for c in range(1,ca+1):                    t = input('请输入%s的第%s行的第%s个数:' %(v,i,c))                     Hc.append(int(t))                Ac.append(Hc)                print(Ac)            M_X = np.mat(Ac)            print('矩阵%s为:\n' %v ,M_X)            S.append(M_X)            Dx[v] = M_X            text = input('好家伙,你又成功定义了一个矩阵%s,它已经在你的收藏夹中了!那么下面你还想做什么?\na.再定义一个矩阵\nb.查看收藏的矩阵\nc.进入工作台\n' %v)            break        if text == 'b':            print('A矩阵为:\n',M_A)            for k in range(len(S)):                if len(S) ==1:                    break                else:                    vt = V[k]                    print('%s矩阵为:\n' %vt, S[k+1])                    print(k,len(S))                    if k == len(S)-2:                        fk = k                        break            print(Dx) #关注一下字典里矩阵和数组的表示            text = input('好家伙,你也配看收藏夹?自己定义了什么矩阵自己记不得吗?你还会个啥?\na.再定义一个矩阵\nb.我再看看收藏的矩阵\nc.进入工作台\n')            break        if text =='c':            wx = input('\n【工作台】\n好的,下面你想做点什么?\na.对收藏夹中的单个矩阵进行变换和更新\nb.对多个矩阵进行运算\nc.返回并定义新矩阵\n')            while wx:                if wx == 'c':                    text = input('来!\na.定义新矩阵\nb.查看收藏夹\n')                    break                break                if wx == 'a' or wx == 'b':                    pass                else:                    zz = input('你可真烂!我直接好家伙!\n')                    wx = input('人干事?\na.对收藏夹中的单个矩阵进行变换和更新\nb.对多个矩阵进行运算\nc.返回并定义新矩阵\n')        else:            zz = input('你可真烂!\给你点赞\n')            text = input('别当机掰人!\na.再定义一个矩阵\nb.查看收藏的矩阵\nc.进入工作台\n')while wx:    print('【临时收藏夹】---\n')    if wx == 'a':        for b in range(len(Dx)):            print('%s = %s\n' %(VV[b],Dx[VV[b]]))            if b == len(Dx):                break        print('--------')        c1 = input('【单个矩阵的变换和更新】\n请选择需要被操作的矩阵:\n')        while c1:            if c1 == 'A':                u1 = S[0]                break            elif c1 in V:                u1 = S[V.index(c1)+1]                break            else:                zx = input('啊这......')                c1 = input('【单个矩阵的变换和更新】\n请认真选择需要被操作的矩阵:\n')        print('--------\n【单个矩阵的变换和更新】\n%s = %s\n' %(c1,u1))        wy = input('你要对其进行:\na.转置\nb.求逆\nc.求对应行列式的值\nd.')        while wy:            if wy == 'a':                v1 = u1.T                print('%s的转置结果为:\n' %c1 , v1)                za = input('【临时工作台】\n现在可以立刻对其进行操作:\na.替换掉原来的矩阵\nb.将其添加到收藏夹\nc.不操作\n')                print('b = %s' %b)                while za:                    if za == 'a':                        Dx[c1] = v1                        print(Dx)                        break                    if za =='b':                        Dx[V[b]] = v1                        print(Dx)            elif wy == 'b':                v1                judge = input('下面你想做什么?\na.转置它\nb.对其求逆\nc.求对应行列式的值\nd.进行矩阵相乘\ne.退出\n')while judge:    print(judge)    if judge== 'a':        x = M_A.T        print('转置后的结果为:\n%s' %M_A.T)        print('A矩阵为:\n',M_A)        judge = input('下面你想做什么?\na.转置它\nb.对其求逆\nc.求|A|\nd.进行矩阵相乘\ne.更新A矩阵f.退出\n')        if judge == 'e':            M_A = x            print('已更新!现在A矩阵为:\n',M_A)            judge = input('下面你想做什么?\na.转置它\nb.对其求逆\nc.求|A|\nd.进行矩阵相乘\ne.更新A矩阵\nf.退出\n')    if judge=='b':        print('A的逆矩阵为:\n%s' %M_A.I)        print('---------------------\n')        print('A矩阵为:\n',M_A)        judge = input('下面你想做什么?\na.转置它\nb.对其求逆\nc.求|A|\nd.进行矩阵相乘\ne.退出\n')    if judge=='c':        print('A对应行列式的值为:%s' %np.linalg.det(M_A))        print('---------------------\n')        print('A矩阵为:\n',M_A)        judge = input('下面你想做什么?\na.转置它\nb.对其求逆\nc.求|A|\nd.进行矩阵相乘\ne.退出\n')#To Be Continued

后面实在是做不下去了,感觉程序架构出了点问题,主要是练一练循环和迭代。

问题:

  1. 越往后循环嵌套越复杂,且经常容易跳转不到自己需要的循环,正在分析原因。

  2. 88行输入"b"程序无响应,输入"a","c"可以正常运行。

  3. 93行的"pass"在实际运行中没有起到应有的效果。且"i"值仍然在不断增加。

  4. 考虑如何可以定义理论上无穷个矩阵,而不靠英文字母来一个一个代替,能否利用字典来使代码形式更加简洁?

目前想到的解决办法就是把“收藏夹”、“工作台”的各个功能全部进行封装,到时候直接调用之。这样逻辑顺序应该会更加清晰明确。

部分实现展示:

200016a093ba22b075e15e5fa42e8517.png

091ca177a66a1227699a23b581bc2521.png

1bd63aa8e593bdaaa9c0e668ae200ae3.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值