【第一次综合训练】安全16-2班第1组
# -*- coding:utf-8 -*-# -*- coding:utf-8 -*--------------- 小组信息 ---------------组 长: 李佳星成 员: 王兴、王浩、姜宇峣---------------------------------------
项目五 矩阵和向量的计算题目实现线性代数中最基本的矩阵和向量计算,包括:(1)向量加法,减法,点乘,叉乘(2)矩阵加法,减法,乘法(3)矩阵与向量的乘法(4)N阶矩阵的行列式(要求N=2,3,4,可选)(5)N阶矩阵的逆矩阵(要求N=2,3,4,可选)(6)矩阵的秩(可选)注:上述知识涉及到线性代数,有一定的难度!!!目的培养学生分析问题和编写简单程序的能力,主要考察Python基础语法以及高级数据类型的使用。要求(1)所设计的程序能够正确运行;(2)代码应遵照Python语言的变量、函数命名规则,加入适当的注释;(3)成果形式:项目报告(教师制定报告模板),严禁抄袭;难易程度普通/困难(只完成1、2、3属于普通级别,后面的4、5、6完成1~3道属于困难级别)
# -*- coding:utf-8 -*-print '输入命令:','\n','输入1:进行向量计算(加,减,点乘,叉乘)'print '输入2:进行矩阵的加,减,乘运算。'print '输入3:进行矩阵与向量的乘法。'print '输入4:计算矩阵行列式。'print '输入5:计算逆矩阵。'num=(int(raw_input('输入命令:')))if num ==1: a=(float(raw_input('向量坐标X1:'))) b=(float(raw_input('向量坐标y1:'))) c=(float(raw_input('向量坐标z1:'))) d=(float(raw_input('向量坐标x2:'))) e=(float(raw_input('向量坐标y2:'))) f=(float(raw_input('向量坐标z2:'))) num1=a+d num2=b+e num3=c+f num4=a*d+b*e+c*f num5=b*f-c*e num6=-a*f+c*d num7=a*e-b*d num8=a-d num9=b-e num10=c-f print '向量和:','(',num1,',',num2,',',num3,')' print '向量差:','(',num8,',',num9,',',num10,')' print '数量积:',num4 print '向量积:','(',num5,',',num6,',',num7,')'if num==2: m=[[1,2],[5,4]] n=[[3,4],[2,4]] print 'm=',m,'n=',n o1=[] o2=[] w=[] o1.append(m[0][0]*n[0][0]+m[0][1]*n[1][0]) o1.append(m[0][0]*n[0][1]+m[0][1]*n[1][1]) o2.append(m[1][0]*n[0][0]+m[1][1]*n[1][0]) o2.append(m[1][0]*n[0][1]+m[1][1]*n[1][1]) w=w+o1+o2 print '矩阵积 :',w a=(int(raw_input('第一(二)个矩阵行(列)数:'))) d=[] for i in range(a): c=[] for j in range(a): c.append(float(raw_input())) d.append(c) e=[] for k in range(a): f=[] for l in range(a): f.append(float(raw_input())) e.append(f) print d print e g=[] for x in range(a): for y in range(a): g.append(d[x][y]+e[x][y]) print '矩阵和:',g h=[] for x in range(a): for y in range(a): h.append(d[x][y]-e[x][y]) print '矩阵差:',hif num==3: print '请输入向量坐标' a=[] for i in range(3): a.append(float(raw_input())) print '向量:',a print '输入一个3X3矩阵' e=[] for j in range(3): d=[] for k in range(3): d.append(float(raw_input('矩阵数值:'))) e.append(d) print '矩阵:',e h=[] h.append(a[0]*e[0][0]+a[1]*e[0][1]+a[2]*e[0][2]) h.append(a[0]*e[1][0]+a[1]*e[1][1]+a[2]*e[1][2]) h.append(a[0]*e[2][0]+a[1]*e[2][1]+a[2]*e[2][2]) print '矩阵与向量乘积:',hif num==4: z=int (raw_input('请输入矩阵行列数(2,3)')) if z==3: a=[] print '请输入一个3*3矩阵:' for i in range(3): c=[] for j in range(3): c.append(float(raw_input())) a.append(c) print '矩阵:',a e=[] e.append(a[0][0]*(a[1][1]*a[2][2]+(-1)*a[1][2]*a[2][1])) e.append(a[0][1]*(a[1][2]*a[2][0]-a[1][0]*a[2][2])) e.append(a[0][2]*(a[1][0]*a[2][1]-a[2][0]*a[1][0])) print '矩阵行列式:',e elif z==2: a=[] print '请输入一个2*2矩阵:' for i in range(2): c=[] for j in range(2): c.append(float(raw_input())) a.append(c) print '矩阵:',a e=a[0][0]*a[1][1]-a[0][1]*a[1][0] print '矩阵行列式:',e else: print'无法计算。'if num==5: num = int(raw_input('请输入逆矩阵阶数(2,3):')) a=[] b=[] c=[] d=[] if num==2: for i in range(2): a.append(float(raw_input('第一个矩阵第一行:'))) for j in range(2): b.append(float(raw_input('第一个矩阵第二行:'))) c1=b[1] c2=-a[1] d1=-b[0] d2=a[0] k=1/(a[0]*b[1]-a[1]*b[0]) print '\t',c1,c2,'\n',k,'\t','\n','\t',d1,d2 if num==3: for i in range(3): a.append(float(raw_input('第一个矩阵第一行:'))) for j in range(3): b.append(float(raw_input('第一个矩阵第二行:'))) for k in range(3): c.append(float(raw_input('第一个矩阵第三行:'))) q1=b[1]*c[2]-c[1]*b[2] q2=b[2]*c[0]-c[2]*b[0] q3=b[1]*c[1]-c[0]*b[1] w2=-(a[2]*c[0]-c[2]*a[0]) w1=-(a[1]*c[2]-c[1]*a[2]) w3=-(a[0]*c[1]-c[0]*a[1]) e1=a[1]*b[2]-a[2]*b[1] e2=a[2]*b[0]-a[0]*b[2] e3=a[0]*b[1]-a[1]*b[0] print q1,w1,e1,'\n',q2,w2,e2,'\n',q3,w3,e3 else: print '无法计算'