当前位置: 首页>編程日記>正文

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

如何用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()


https://www.fengoutiyan.com/post/14591.html

相关文章:

  • 范德蒙德行列式少一行1
  • 范德蒙行列式证明
  • python矩阵求逆
  • 范德蒙行列式经典例题
  • 正交矩阵的行列式
  • n阶行列式
  • 行列式
  • 分块矩阵的行列式
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機