我想, 这个教程不按照传统的思路来写, 毕竟实践才是学习的最好途径。这里在前面学习了基本的数据类型之后, 我直接跳到用Python来计算一个方块矩阵的行列式。题目中说的范德蒙矩阵在数学上是非常经典的范例之一, 但本程序对一般的方块矩阵也可计算。

数学知识自动略过, 不懂的话wiki下。例如啥叫范德蒙矩阵?如何按行/列展开计算一个矩阵的行列式。

范德蒙矩阵的生成

我们这里给出生成范德蒙行列式的一个方法, 其中用到了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实行递归调用。中间有好几个注释, 都是我在写的过程中方便调试而保留的。同样, 我还用了一个sys.exit()来忽略所有它之后的代码。

cal_det.py

# -*- coding: utf-8 -*-

import sys

dim = 3

# generate Vamdemon matrix of given dim

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')

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:

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]]))

sys.exit()

如何用python计算行列式_Python入门教程: 计算范德蒙矩阵的行列式相关推荐

  1. python银行利息问题_python入门教程NO.8 用python写个存款利息计算器

    python入门教程 python入门教程NO.8 用python写个存款利息计算器 本文涉及的python基础语法为def函数,return,函数的各参数示例,匿名函数等 函数初识 函数是一段组织好 ...

  2. python存款模块_python入门教程NO.8用python写个存款利息计算器

    python 入门教程 NO.8 用 python 写个存款利息计算器 本文涉及的 python 基础语法为 def 函数, return ,函数的各参数示例,匿名函数等 函数初识 函数是一段组织好的 ...

  3. python计算存款_python入门教程NO.8 用python写个存款利息计算器

    本文涉及的python基础语法为def函数,return,函数的各参数示例,匿名函数等 函数初识 函数是一段组织好的 可重复使用的 用来实现特定功能的代码块. 函数能提高代码的模块性,和代码的重复利用 ...

  4. python加油代码_python入门教程NO.5 用python写个自动选择加油站的小程序

    本文涉及的python基础语法为:if条件分支 Python条件分支是通过一条或者多条语句的执行结果True或者False来决定是否执行相应的代码块. if单向条件语法结构 if 判断条件: 代码块 ...

  5. 笔记本电脑下载python视频教程-Python的Jupyter Notebook入门教程

    适用于Python的Jupyter Notebook入门教程 在下面的教程中,将指导您完成安装Jupyter Notebook的过程.同时,我们将探索Jupyter Notebook的基本功能,通过尝 ...

  6. qpython3绘图_比Excel制图更强大,Python可视化工具Altair入门教程

    比 Excel 制图更强大,Python 可视化工具 Altair 入门教程 数据转化成更直观的图片,对于理解数据背后的真相很有帮助.如果你有这方面的需求,而且还在使用 Python,那么强烈推荐你试 ...

  7. python图形用户界面pyside_PySide——Python图形化界面入门教程(一)

    标签: PySide--Python图形化界面入门教程(一) --基本部件和HelloWorld 原文链接:http://pythoncentral.io/intro-to-pysidepyqt-ba ...

  8. qpython3可视图形界面_PySide——Python图形化界面入门教程(三)

    PySide--Python图形化界面入门教程(三) --使用内建新号和槽 --Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...

  9. Python+Opencv图像处理新手入门教程(四):视频内容的读取与导出

    一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(三):阈值与二值化 1.Intro 今天这节我们主要看怎么利用opencv读取并处理视频中的内容. 2.VideoCapture ...

  10. Python+Opencv图像处理新手入门教程(三):阈值与二值化

    一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图 1.Intro 今天这节我们主要研究利用阈值处理图像.例如对于输入图像: 如何做一 ...

最新文章

  1. .net中下载文件的方法(转)
  2. mysql大小写问题
  3. History of program (language).
  4. Java Arraylist 如何使用 Comparator排序
  5. dubbo学习(四)配置dubbo 注解方式配置
  6. 考研编程练习----排名
  7. python怎么打开文件解释_python怎么打开文件的路径?
  8. 【java】java JVM如何科学的设置内存参数 虚拟机调优案例
  9. RedHat6.7安装教程,图解,超详细
  10. docker容器内安装ifconfig netstat ping vim 等测试工具的方法
  11. 经过路由无法找到计算机,共享打印机找不到对方电脑解决方法
  12. android 内存占用 mac,mac Android Studio内存配置与使用情况的展示
  13. Centos 7 制作Oracle 12c Docker Images
  14. iPhone4S 未能激活蜂窝移动数据网
  15. 诛仙服务器技能修改,【诛仙422】自己修改的特色一键端(2018.10.11号更新修复BOOS不刷新BUG)技能修改补丁...
  16. 计算机ppt基础操作心得体会,word计算机实训心得体会.doc
  17. 本周AI热点回顾:动森首届「AI 顶会」即将召开、《我的世界》里搭建神经网络、一位中国博士把整个CNN都给可视化了
  18. solr入门之拼音加汉字方式的搜索建议自动补全的不高效实现
  19. Docker 2.3:Docker 镜像管理
  20. MyBatis-plus 查询 模糊查询的使用

热门文章

  1. 消防信号总线原理_消防主机总线原理 什么是消防二总线
  2. 主成分分析法(PCA方法)计算OBB包围盒
  3. 晶体管电路设计学习笔记(一)
  4. 卷积码树状图怎么画_卷积码编码器怎么画 浅谈卷积码编码器设计
  5. 主数据管理(MDM)的成熟度
  6. k-means聚类算法原理简析
  7. 全球免费数字图书馆TOP30
  8. JAVA实现从Linux服务器上下载文件
  9. my ReadBook_dianzishangwuwangzhanshejiyuanli / 29991 / 00906 / dianzishangwu
  10. BIOS不识别硬盘,DIY解决希捷固件门(图解)