如何用python计算行列式_Python入门教程: 计算范德蒙矩阵的行列式
我想, 这个教程不按照传统的思路来写, 毕竟实践才是学习的最好途径。这里在前面学习了基本的数据类型之后, 我直接跳到用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入门教程: 计算范德蒙矩阵的行列式相关推荐
- python银行利息问题_python入门教程NO.8 用python写个存款利息计算器
python入门教程 python入门教程NO.8 用python写个存款利息计算器 本文涉及的python基础语法为def函数,return,函数的各参数示例,匿名函数等 函数初识 函数是一段组织好 ...
- python存款模块_python入门教程NO.8用python写个存款利息计算器
python 入门教程 NO.8 用 python 写个存款利息计算器 本文涉及的 python 基础语法为 def 函数, return ,函数的各参数示例,匿名函数等 函数初识 函数是一段组织好的 ...
- python计算存款_python入门教程NO.8 用python写个存款利息计算器
本文涉及的python基础语法为def函数,return,函数的各参数示例,匿名函数等 函数初识 函数是一段组织好的 可重复使用的 用来实现特定功能的代码块. 函数能提高代码的模块性,和代码的重复利用 ...
- python加油代码_python入门教程NO.5 用python写个自动选择加油站的小程序
本文涉及的python基础语法为:if条件分支 Python条件分支是通过一条或者多条语句的执行结果True或者False来决定是否执行相应的代码块. if单向条件语法结构 if 判断条件: 代码块 ...
- 笔记本电脑下载python视频教程-Python的Jupyter Notebook入门教程
适用于Python的Jupyter Notebook入门教程 在下面的教程中,将指导您完成安装Jupyter Notebook的过程.同时,我们将探索Jupyter Notebook的基本功能,通过尝 ...
- qpython3绘图_比Excel制图更强大,Python可视化工具Altair入门教程
比 Excel 制图更强大,Python 可视化工具 Altair 入门教程 数据转化成更直观的图片,对于理解数据背后的真相很有帮助.如果你有这方面的需求,而且还在使用 Python,那么强烈推荐你试 ...
- python图形用户界面pyside_PySide——Python图形化界面入门教程(一)
标签: PySide--Python图形化界面入门教程(一) --基本部件和HelloWorld 原文链接:http://pythoncentral.io/intro-to-pysidepyqt-ba ...
- qpython3可视图形界面_PySide——Python图形化界面入门教程(三)
PySide--Python图形化界面入门教程(三) --使用内建新号和槽 --Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...
- Python+Opencv图像处理新手入门教程(四):视频内容的读取与导出
一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(三):阈值与二值化 1.Intro 今天这节我们主要看怎么利用opencv读取并处理视频中的内容. 2.VideoCapture ...
- Python+Opencv图像处理新手入门教程(三):阈值与二值化
一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图 1.Intro 今天这节我们主要研究利用阈值处理图像.例如对于输入图像: 如何做一 ...
最新文章
- .net中下载文件的方法(转)
- mysql大小写问题
- History of program (language).
- Java Arraylist 如何使用 Comparator排序
- dubbo学习(四)配置dubbo 注解方式配置
- 考研编程练习----排名
- python怎么打开文件解释_python怎么打开文件的路径?
- 【java】java JVM如何科学的设置内存参数 虚拟机调优案例
- RedHat6.7安装教程,图解,超详细
- docker容器内安装ifconfig netstat ping vim 等测试工具的方法
- 经过路由无法找到计算机,共享打印机找不到对方电脑解决方法
- android 内存占用 mac,mac Android Studio内存配置与使用情况的展示
- Centos 7 制作Oracle 12c Docker Images
- iPhone4S 未能激活蜂窝移动数据网
- 诛仙服务器技能修改,【诛仙422】自己修改的特色一键端(2018.10.11号更新修复BOOS不刷新BUG)技能修改补丁...
- 计算机ppt基础操作心得体会,word计算机实训心得体会.doc
- 本周AI热点回顾:动森首届「AI 顶会」即将召开、《我的世界》里搭建神经网络、一位中国博士把整个CNN都给可视化了
- solr入门之拼音加汉字方式的搜索建议自动补全的不高效实现
- Docker 2.3:Docker 镜像管理
- MyBatis-plus 查询 模糊查询的使用
热门文章
- 消防信号总线原理_消防主机总线原理 什么是消防二总线
- 主成分分析法(PCA方法)计算OBB包围盒
- 晶体管电路设计学习笔记(一)
- 卷积码树状图怎么画_卷积码编码器怎么画 浅谈卷积码编码器设计
- 主数据管理(MDM)的成熟度
- k-means聚类算法原理简析
- 全球免费数字图书馆TOP30
- JAVA实现从Linux服务器上下载文件
- my ReadBook_dianzishangwuwangzhanshejiyuanli / 29991 / 00906 / dianzishangwu
- BIOS不识别硬盘,DIY解决希捷固件门(图解)