【第一次综合训练】安全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 '矩阵差:',h
if 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 '矩阵与向量乘积:',h
if 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 '无法计算'