如何⽤python计算⾏列式_Python⼊门教程:计算范德蒙矩阵
的⾏列式
我想, 这个教程不按照传统的思路来写, 毕竟实践才是学习的最好途径。这⾥在前⾯学习了基本的数据类型之后, 我直接跳到⽤Python来计算⼀个⽅块矩阵的⾏列式。题⽬中说的范德蒙矩阵在数学上是⾮常经典的范例之⼀, 但本程序对⼀般的⽅块矩阵也可计算。
数学知识⾃动略过, 不懂的话wiki下。例如啥叫范德蒙矩阵?如何按⾏/列展开计算⼀个矩阵的⾏列式。html空心圆圈
范德蒙矩阵的⽣成
我们这⾥给出⽣成范德蒙⾏列式的⼀个⽅法, 其中⽤到了list of list(即2维array)这⼀数据结构。
dim = 3
电影源代码镜头分析
# generate Vamdemon matrix of given dim
M = [[ (j + 1)**i for i in range(dim) ] for j in range(dim) ]
看到了吗?是不是很简单?其实这⾥i是列标, j是⾏标, range(3)产⽣list:[0,1,2], 每个[]⾥⽤⼀个for循环产
⽣相应的(i,j)元素
[图⽚上传失败...(image-a379b5-1510020402646)]^i)
故上⾯⽣成的矩阵就是:
[图⽚上传失败...(image-b796f5-1510020402646)]
矩阵维数、⼦矩阵、⾏列式
完整的源码见后, 为了按⾏或列计算⾏列式, 我们需要:
subM函数, 输⼊⼀个矩阵, 以及⾏,列位置, 返回去掉该⾏该列的⼦矩阵
detM函数, 计算⾏列式。
其中, 第⼀个if⽤dimM这个矩阵维数检测函数, 判断是不是⼀个⽅块矩阵。然后⽤⼀个if实⾏递归调⽤。中间有好⼏个注释, 都是我在写的过程中⽅便调试⽽保留的。同样, 我还⽤了⼀个it()来忽略所有它之后的代码。
cal_det.py
# -*- coding: utf-8 -*-
import sys
dim = 3
# generate Vamdemon matrix of given dim
苹果launchpad是什么M = [[ (j + 1)**i for i in range(dim) ] for j in range(dim) ]
def printM(M):
for row in M:
for col in row:
print(col, end=' ')
print('\n')
tcpip应用协议层def dimM(M):
dim=[1,len(M[0]),len(M[0])]
for i in range(len(M)):
dim[0]=len(M)
dim[1]=min(dim[1], len(M[i]))
dim[2]=max(dim[2], len(M[i]))
if dim[1] == dim[2]:
return dim[0:2]
else:python入门教程(非常详细)书
return dim
def subM(M, row, col ):
#return the submatrix of M by removing (row,col)
sM=[rM.copy() for rM in M]
del sM[row]
for rM in sM:
del rM[col]
return [elm for elm in sM if elm !=[] ]
def detM( M ):
if dimM(M)[0] != dimM(M)[1] or len(dimM(M)) != 2:
return 'Please give a square matrix!'
if len(M) ==1:
return M[0][0]
else:
expandM=0
for i in range(len(M)):安卓签名生成工具
# print('The matrix is:\n')
# printM(M)
# print('(row, col)=: ',(i+1,1), '\nSub Matrix of ', (i+1,1), ': \n') # printM(subM(M,i,0))
expandM +=(-1)**(i)*M[i][0]*detM(subM(M, i, 0))
return expandM
#print(dimM(M))
#print(subM(M, 1,1))
printM(M)
print('The determinate of above matrix is:')
print(detM(M))
print('Test of the error detection (must square matrix):')
print(detM([[1],[1,2]])) it()