【线性代数】行列式的概念

d e t ( A ) = ∑ i 1 , i 2 , ⋯   , i n ( − 1 ) σ ( i 1 , ⋯   , i n ) a 1 , i 1 a 2 , i 2 , ⋯   , a n , i n det(A) =\sum_{i_1,i_2,\cdots,i_n } (-1)^{\sigma(i_1,\cdots,i_n)} a_{1,i_1}a_{2,i_2},\cdots, a_{n,i_n} det(A)=i1,i2,⋯,in∑(−1)σ(i1,⋯,in)a1,i1a2,i2,⋯,an,in

i 1 , ⋯   , i n i_1,\cdots,i_n i1,⋯,in 是 1 , ⋯   , n 1,\cdots,n 1,⋯,n 的排列.

计算复杂度

O ( n ⋅ n ! ) O(n\cdot n!) O(n⋅n!)

{ 1 , 2 } \{1,2\} {1,2} 的全排列如下

排列 逆序数 奇偶性
1 , 2 1,2 1,2 0
2 , 1 2,1 2,1 1

a 1 , 1 a 1 , 2 a 2 , 1 a 2 , 2 \] \\left\[\\begin{matrix}a_{1,1} \&a_{1,2}\\\\ a_{2,1} \& a_{2,2}\\end{matrix}\\right\] \[a1,1a2,1a1,2a2,2

{ 1 , 2 , 3 } \{1,2,3\} {1,2,3} 的全排列如下

排列 逆序数 奇偶性
1 , 2 , 3 1,2,3 1,2,3 0
1 , 3 , 2 1,3,2 1,3,2 1
2 , 1 , 3 2,1,3 2,1,3 1
2 , 3 , 1 2,3,1 2,3,1 2
3 , 1 , 2 3,1,2 3,1,2 2
3 , 2 , 1 3,2,1 3,2,1 3

a 1 , 1 a 1 , 2 a 1 , 3 a 2 , 1 a 2 , 2 a 2 , 3 a 3 , 1 a 3 , 2 a 3 , 3 \] \\left\[\\begin{matrix}a_{1,1} \&a_{1,2} \& a_{1,3}\\\\ a_{2,1} \& a_{2,2}\& a_{2,3} \\\\ a_{3,1} \& a_{3,2} \& a_{3,3}\\end{matrix}\\right\] a1,1a2,1a3,1a1,2a2,2a3,2a1,3a2,3a3,3 ## 递归法生成全排列 ```julia using CSV, DataFrames, Tables function OE(sigma) # 判断奇偶置换 n=length(sigma); out=1 for i=1:n for j=1:n-1 if sigma[j] > sigma[j+1] out=-out; sigma[j],sigma[j+1]=sigma[j+1], sigma[j] end end end return(out) end function remove_last(seq) # 删除序列最后一个元素 lth=length(seq) z=copy(seq[1:lth-1]) return(z) end function rankfull(seq,n,cpl) # 递归全排列生成器 lth=length(seq) if lth==1 m=[cpl; seq] open("rankfull_sol.txt","a") do io for i=1:n s=m[i]; write(io, "$s,") end write(io,"\n"); end else for i=1:lth s=seq[i]; idx=0; list=zeros(Int,lth-1) for j=1:lth if !(seq[j]==s) idx=idx+1; list[idx]=seq[j] end end cpl=[cpl; s]; rankfull(list,n,cpl) cpl=remove_last(cpl) end end end function det_defn(A) # 定义法求行列式 lth=size(A,1) seq=1:lth global ranksol=[seq]; lth=length(seq); cpl=[]; iters=factorial(lth) try rankfull(seq,lth,cpl) catch nothing end io=open("rankfull_sol.txt","r") data=read(io,String) file = CSV.File(IOBuffer(data), header=false) CSV.write("fullrank.csv", file) close(io) sigma=zeros(Int64,iters,lth); for i=1:factorial(lth) for j=1:lth sigma[i,j]=file[i][j] end end DETs=0*A[1,1] for i=1:iters Prs=1 for j=1:lth Prs=Prs*M[j,sigma[i,j]] end DETs=DETs+ OE(sigma[i,:])*Prs end return(DETs) end M=[4//1 3 2 1; 3 2 1 4; 2 1 4 3; 1 4 3 2] a= det_defn(M) println("\n") println("defn=",a) ``` -160//1 ## 邻近对换算法生成全排列 ```julia function ranking(lth) # 邻近对换全排列生成器 prd=1; arr=zeros(Int64,lth); for i=1:lth arr[i]=i end for i=1:lth prd=prd*i end jx=lth ; dr=-1; s=0; for j=1:prd if dr<0 if jx>1 arr[jx],arr[jx+dr] = arr[jx+dr],arr[jx] jx=jx+dr else arr[lth],arr[lth-1] = arr[lth-1],arr[lth] dr=-dr end else if jx

相关推荐
AI科技星8 小时前
基于双隐含量(角速度 +质量 )的全量变形公式体系-发现新公式
开发语言·人工智能·线性代数·算法·矩阵·数据挖掘
别或许13 小时前
03线性代数之向量组(知识总结)
线性代数·算法·机器学习
Cathy Bryant1 天前
线性代数直觉(六):向量通过矩阵
人工智能·笔记·线性代数·机器学习·矩阵
IronMurphy1 天前
【算法十九】33. 搜索旋转排序数组 74. 搜索二维矩阵
线性代数·算法·矩阵
MSTcheng.2 天前
【算法】前缀和:『560. 和为 K 的子数组 & 1314.矩阵区域和』
线性代数·算法·矩阵
智者知已应修善业3 天前
【输入矩阵将其按副对角线交换后输出】2024-11-27
c语言·c++·经验分享·笔记·线性代数·算法·矩阵
江畔柳前堤3 天前
XZ07_解决WORD中间单词间隔过大的问题
数据库·人工智能·线性代数·oracle·数据挖掘·word
进击的小头3 天前
第3篇:最优控制理论数学基础——矩阵与向量的导数
python·线性代数·机器学习·矩阵
Σίσυφος19003 天前
正交投影矩阵
线性代数·矩阵
清空mega3 天前
动手学深度学习(李沐)笔记:线性代数(Linear Algebra)+ PyTorch 实现
笔记·深度学习·线性代数