判断矩阵是否可约、表示是否可约
结论:
1.如果χ是群G的一个不可约表示的特征标,则(χ|χ)=|G|=g。【这里的特征标内积对应GAP中的ScalarProduct,与向量内积的定义保持一致,有些文献的定义相差一个系数1/|G|】
特征标内积为∑[R∈G]χ^j(R)*χ^j(R)=|χ^j(R)|^2—a_j=1—>∑[R∈G]|χ(R)|^2=g
注意:
有些文献上定义特征标内积为(χ^i(R)|χ^j(R))=(1/g)∑[R∈G]χ^i(R)*χ^j(R)
则表示不可约的充要条件为(χ(R)|χ(R))=1
gap> [1,ComplexConjugate(E(3)),ComplexConjugate(E(3)^2)];
[ 1, E(3)^2, E(3) ]
gap> ScalarProduct([1,E(3),E(3)^2],[1,ComplexConjugate(E(3)),ComplexConjugate(E(3)^2)]);
3【所以[1,E(3),E(3)^2]、[ 1, E(3)^2, E(3) ]这2个C_3的1阶复表示都是不可约的】
2.如果χ与χ'是两个不同构的不可约表示的特征标,则(χ|χ')=0(正交关系)。
3.如果χ_1, χ_2, χ_h,是G的所有两两不同的不可约特征标,则G的每个表示的特征标φ,φ=∑[i=1->h]m_iχ_i,这里m_i=(φ|χ_i)是非负整数,(φ|φ)= ∑[i=1->h]m_i^2。
我们有一个一般的定理:
如果φ是G的一个表示的特征标,则(φ|φ)是一个正整数n|G|,且表示不可约当前仅当(φ|φ)=|G|。
C_4、C_2×C_2的2阶表示:
C_4=<(1234)>={{{1,0},{0,1}},{{0,1},{-1,0}},{{-1,0},{0,-1}},{{0,-1},{1,0}}{<}GL_2(R),1阶元和2阶元的表示矩阵是可约的
gap> ScalarProduct([2,0,0,0],[2,0,0,0]);
4【所以C_4的这个2阶表示是不可约的】
C_2×C_2={(1),(12)(34),(13)(24),(14)(23)}={{{1,0},{0,1}},{{1,0},{0,-1}},{{-1,0},{0,1}},{{-1,0},{0,-1}}{<}GL_2(R):1阶元和3个2阶元的表示矩阵都是可约的
gap> ScalarProduct([2,0,0,-2],[2,0,0,-2]);
8【所以C_2×C_2的这个2阶表示是可约的】
C_4={1,-1,i,-i}的1阶忠实表示:1,-1,i,-i
a+bi->{{a,b},{-b,a}}
1->{{1,0},{0,1}},-1->{{-1,0},{0,-1}},i->{{0,1},{-1,0}},-i->{{0,-1},{1,0}}
gap> ScalarProduct([1,-1,E(4),-E(4)],[1,-1,-E(4),E(4)]);
4【所以C_4的这个1阶复表示是不可约的】
S_3={(1,2,3),(2,1,3),(1,3,2),(3,2,1),(3,1,2),(2,3,1)} 的2阶【维】表示:
{{1,0},{0,1}},{{-1,1},{0,1}},{{1,0},{1,-1}},{{0,-1},{-1,0}},{{-1,1},{-1,0}},{{0,-1},{1,-1}}
【1阶元和2个2阶元的表示矩阵是可约的,2个3阶元和另外1个2阶元"0,-1;-1,0"的表示矩阵是不可约的】其相应的特征标是
2,0,0,0,-1,-1
gap> ScalarProduct([2,0,0,0,-1,-1],[2,0,0,0,-1,-1]);
6【所以S_3的这个2阶表示是不可约的】
gap> g:=SymmetricGroup(3);;L:=Irr(g);;n:=Size(L);;for i in [1..n] do Print(DegreeOfCharacter(a),"->X",i,"=",List(L[i]),"\n");od;
1->X1=[ 1, -1, 1 ]
1->X2=[ 2, 0, -1 ]
1->X3=[ 1, 1, 1 ]
gap> g:=SymmetricGroup(3);;L:=Irr(g);;n:=Size(L);;for i in [1..n] do for j in [1..n] do Print("X",i,"X",j,"=",ScalarProduct(L[i],L[j]),"\n");od;od;
X1X1=1
X1X2=0
X1X3=0
X2X1=0
X2X2=1
X2X3=0
X3X1=0
X3X2=0
X3X3=1
1 -> 1
2 -> 2
3 -> 2
4 -> 3
5 -> 3
6 -> 2
N1= 6
D3的中心Z(D_3): [1]
D3的换位子群(D_3)': [1,4,5]
D3的群元阶的分布: [1,3,2,0]
D3每个共轭类: [[1],[2,3,6],[4,5]]
D3每个共轭类的长度: [1,2,3]
root@ubuntu:/home/cpptest# ./ReachableMatrix "0,-1;1,0"
A=[[0 ,-1 ],[1 ,0 ]]
RA=[[1 ,1 ],[1 ,1 ]]矩阵不可约
Tr(A)=0
root@ubuntu:/home/cpptest# ./ReachableMatrix "-1,0;0,-1"
A=[[-1 ,0 ],[0 ,-1 ]]
RA=[[1 ,0 ],[0 ,1 ]]矩阵可约
Tr(A)=-2
root@ubuntu:/home/cpptest# ./ReachableMatrix "0,1;-1,0"
A=[[0 ,1 ],[-1 ,0 ]]
RA=[[1 ,1 ],[1 ,1 ]]矩阵不可约
Tr(A)=0
root@ubuntu:/home/cpptest# ./ReachableMatrix "1,0;0,1"
A=[[1 ,0 ],[0 ,1 ]]
RA=[[1 ,0 ],[0 ,1 ]]矩阵可约
Tr(A)=2
root@ubuntu:/home/cpptest# ./ReachableMatrix "1,0;0,-1"
A=[[1 ,0 ],[0 ,-1 ]]
RA=[[1 ,0 ],[0 ,1 ]]矩阵可约
Tr(A)=0
root@ubuntu:/home/cpptest# ./ReachableMatrix "-1,0;0,1"
A=[[-1 ,0 ],[0 ,1 ]]
RA=[[1 ,0 ],[0 ,1 ]]矩阵可约
Tr(A)=0
root@ubuntu:/home/cpptest# ./ReachableMatrix "-1,0;0,-1"
A=[[-1 ,0 ],[0 ,-1 ]]
RA=[[1 ,0 ],[0 ,1 ]]矩阵可约
Tr(A)=-2
root@ubuntu:/home/cpptest# ./ReachableMatrix "-1,0;0,-1"
A=[[-1 ,0 ],[0 ,-1 ]]
RA=[[1 ,0 ],[0 ,1 ]]矩阵可约
Tr(A)=-2
root@ubuntu:/home/cpptest# ./ReachableMatrix "-1,1;0,1"
A=[[-1 ,1 ],[0 ,1 ]]
RA=[[1 ,1 ],[0 ,1 ]]矩阵可约
Tr(A)=0
root@ubuntu:/home/cpptest# ./ReachableMatrix "1,0;1,-1"
A=[[1 ,0 ],[1 ,-1 ]]
RA=[[1 ,0 ],[1 ,1 ]]矩阵可约
Tr(A)=0
root@ubuntu:/home/cpptest# ./ReachableMatrix "0,-1;-1,0"
A=[[0 ,-1 ],[-1 ,0 ]]
RA=[[1 ,1 ],[1 ,1 ]]矩阵不可约
Tr(A)=0
root@ubuntu:/home/cpptest# ./ReachableMatrix "-1,1;-1,0"
A=[[-1 ,1 ],[-1 ,0 ]]
RA=[[1 ,1 ],[1 ,1 ]]矩阵不可约
Tr(A)=-1
root@ubuntu:/home/cpptest# ./ReachableMatrix "0,-1;1,-1"
A=[[0 ,-1 ],[1 ,-1 ]]
RA=[[1 ,1 ],[1 ,1 ]]矩阵不可约
Tr(A)=-1
root@ubuntu:/home/cpptest# ./ReachableMatrix "4,1,2,3;0,2,3,2;0,3,5,8;0,5,0,8"
A=[[4 ,1 ,2 ,3 ],[0 ,2 ,3 ,2 ],[0 ,3 ,5 ,8 ],[0 ,5 ,0 ,8 ]]
RA=[[1 ,1 ,1 ,1 ],[0 ,1 ,1 ,1 ],[0 ,1 ,1 ,1 ],[0 ,1 ,1 ,1 ]]矩阵可约
Tr(A)=19root@ubuntu:/home/cpptest# ./ReachableMatrix "1, 0, 0, 0, 0, 0;0, 1, 0, 0, 0, 0;0, 0, 1, 0, 0, 0;0, 0, 0, 1, 0, 0;0, 0, 0, 0, 1, 0;0, 0, 0, 0, 0, 1"
A=[[1 ,0 ,0 ,0 ,0 ,0 ],[0 ,1 ,0 ,0 ,0 ,0 ],[0 ,0 ,1 ,0 ,0 ,0 ],[0 ,0 ,0 ,1 ,0 ,0 ],[0 ,0 ,0 ,0 ,1 ,0 ],[0 ,0 ,0 ,0 ,0 ,1 ]]
RA=[[1 ,0 ,0 ,0 ,0 ,0 ],[0 ,1 ,0 ,0 ,0 ,0 ],[0 ,0 ,1 ,0 ,0 ,0 ],[0 ,0 ,0 ,1 ,0 ,0 ],[0 ,0 ,0 ,0 ,1 ,0 ],[0 ,0 ,0 ,0 ,0 ,1 ]]矩阵可约
Tr(A)=6
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
// 矩阵的迹Trρ(g)称为表示的特征标
int TraceMat(const vector<vector<int> >&Matrix)
{
int Tr=0;
int n=Matrix.size();
for(int i=0;i<n;i++){
Tr+=Matrix[i][i];
}
return Tr;
}
// 返回n阶单位矩阵
vector<vector<int> > IdentityMat(int n)
{
vector<vector<int> > Matrix(n, vector<int>(n,0));
for(int i=0;i<n;i++){
Matrix[i][i]=1;
}
return Matrix;
}
// 求矩阵A的可达矩阵RA
// 根据可达矩阵来判断矩阵的可约性;若可达矩阵中至少有一个元素为0时,则矩阵为可约矩阵;若可达矩阵中每个元素都为1,则矩阵是不可约的。
vector<vector<int> > ReachableMatrix(const vector<vector<int> >&Matrix,bool *pIrr=NULL)
{
int n=Matrix.size();
vector<vector<int> > In=IdentityMat(n);
vector<vector<int> > Matrix1(n, vector<int>(n,0));
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
Matrix1[i][j]=In[i][j]||Matrix[i][j];
}
}
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
for (int k=0;k<n;k++)
{
Matrix1[j][k]=Matrix1[j][k]||(Matrix1[j][i]&&Matrix1[i][k]);
}
}
}
// 输出参数用来存放矩阵是否可约
if(pIrr)
{
(*pIrr)=true;// 矩阵不可约
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
if (Matrix1[i][j]!=1)
{
(*pIrr)=false;// 矩阵可约
return Matrix1;
}
}
}
}
return Matrix1;
}
string itos(int a)
{
char sz[20]={0};
sprintf(sz,"%d",a);
return sz;
}
string MStr(const vector<vector<int> >&Matrix)
{
string str="[";
for(int i=0;i<Matrix.size();i++){
str+="[";
for(int j=0;j<Matrix[i].size();j++){
str+=itos(Matrix[i][j])+" ";
if(j<Matrix[i].size()-1)
str+=",";
}
str+="]";
if(i<Matrix.size()-1)
str+=",";
}
str+="]";
return str;
}
std::vector<string> split( const std::string& str, const std::string& delims/* = "\t\n "*/, unsigned int maxSplits = 0)
{
std::vector<string> ret;
unsigned int numSplits = 0;
// Use STL methods
size_t start, pos;
start = 0;
do
{
pos = str.find_first_of(delims, start);
if (pos == start)
{
// Do nothing
start = pos + 1;
}
else if (pos == std::string::npos || (maxSplits && numSplits == maxSplits))
{
// Copy the rest of the std::string
ret.push_back( str.substr(start) );
break;
}
else
{
// Copy up to delimiter
ret.push_back( str.substr(start, pos - start) );
start = pos + 1;
}
// parse up to next real data
start = str.find_first_not_of(delims, start);
++numSplits;
} while (pos != std::string::npos);
return ret;
}
vector<vector<int> > atoMat(const char *str)
{
vector<string> vs;
vector<int> vi(2);
int rows=0;
int cols=0;
if(str!=NULL)
{
vs=split(str,";");
rows=vs.size();
vi[0]=rows;
for(int i=0;i<vs.size();i++)
{
vector<string> vsi=split(vs[i],",");
if(cols>0 && vsi.size()!=cols)
{
vi.clear();
vector<vector<int> > vv;
return vv;
}
cols=vsi.size();
vi[1]=cols;
for(int j=0;j<vsi.size();j++)
{
vi.push_back(atoi(vsi[j].c_str()));
}
}
}
else
{
vi.clear();
}
vector<vector<int> > vv(rows, vector<int>(cols,0));
for(int k=0;k<vi.size()-2;k++)
{
int i=k/cols;
int j=k%cols;
vv[i][j]=vi[k+2];
}
return vv;
}
int main(int argc, char *argv[])
{
char sz[1024]={0};
char sz1[1024]={0};
if(argc<2)
{
printf("请输入矩阵A:");
scanf("%s",&sz);
}
else
{
strcpy(sz,argv[1]);
}
// #if 1
// vector<vector<int> > A=atoMat("4,1,2,3;0,2,3,2;0,3,5,8;0,5,0,8");
// #else
// int a[4][4]={{4,1,2,3},{0,2,3,2},{0,3,5,8},{0,5,0,8}};
// vector<vector<int> > A(4, vector<int>(4,0));
// for(int i=0;i<4;i++)
// memcpy(&A[i][0],&a[i][0],sizeof(int)*4);
// #endif
vector<vector<int> > A=atoMat(sz);
cout<<"A="<<MStr(A)<<endl;
bool bIrr;
vector<vector<int> > RA=ReachableMatrix(A,&bIrr);
cout<<"RA="<<MStr(RA)<<(bIrr?"矩阵不可约":"矩阵可约")<<endl;
cout<<"Tr(A)="<<TraceMat(A)<<endl;
return EXIT_SUCCESS;
}
判断矩阵是否可约、表示是否可约相关推荐
- 1886. 判断矩阵经轮转后是否一致
1886. 判断矩阵经轮转后是否一致 给你两个大小为 n x n 的二进制矩阵 mat 和 target .现 以 90 度顺时针轮转 矩阵 mat 中的元素 若干次 ,如果能够使 mat 与 tar ...
- yaahp使用教程_4 判断矩阵
4 判断矩阵 层次模型正确后,可以切换到判断矩阵输入页面,如图: 4.1 层次结构树 4.1.1 层次结构树上的要素 窗口左下方的层次结构树列出了模型中的所有要素,需要输入判断矩阵的要素为蓝色文字,备 ...
- 判断矩阵一致性检验的Matlab源程序代码
Matlab源程序代码如下: clc clear disp('请输入判断矩阵A') A=input('A='); [n,n] = size(A) %方法1: 算术平均法 Sum_A = sum(A); ...
- 线性代数 --- 如何判断矩阵是否可逆(奇异与非奇异)?
如何判断矩阵是否可逆? 一般情况而言,判断矩阵是否可逆大多数人都会选择计算矩阵的行列式(determinant)?如果矩阵的行列式为0,则判断该矩阵为奇异矩阵(singular matrix),即不可 ...
- 判断矩阵斜对角线的元素
判断矩阵斜对角线的元素 学习书本4皇后的算法中,发现了一句代码 abs( a[i] - a[k] ) = i - k 这是if语句内的代码,后面查找资料才发现,矩阵中: ∣斜对角线的元素的行数与行数的 ...
- 【1.2】 评价类模型之层次分析法中判断矩阵的填写方法、一致性检验的步骤、以及根据判断矩阵计算权重的方法
目录: 准则层判断矩阵怎么填写 方案层判断矩阵怎么填写 关于判断矩阵和一致矩阵的知识点补充 一致性检验的步骤 怎样通过判断矩阵去计算权重(三种方法),及相应的代码示例 准则层判断矩阵的填写: 填写准则 ...
- R语言 判断矩阵是否对称半正定
对称半正定矩阵可进行choleskey分解,使用chol()函数结合tryCatch错误异常判断,即可判断矩阵是否对称半正定. 1. 仅输出是否半正定 Sigma为一个对称矩阵,但非半正定,进行cho ...
- 基于模糊互补判断矩阵的多属性决策方法及matlab应用
决策者利用一定的标度对属性进行两两比较,并构造判断矩阵,然后按一定的排序方法计算判断矩阵的排序向量,从而获得属性权重,最后在根据各种算子进行多属性群决策. (一)模糊互补判断矩阵排序法 1.加型模糊互 ...
- Matlab:如何利用层次分析法(升级版)计算具有多重指标的判断矩阵的一致性检验和权重
02 论文提供的太阳镜的评价体系 03 建立目标层和准则层的判断矩阵 (论文提供) 04 首先需要对判断矩阵进行一致性检验 4.1 一致性检验的一般步骤 4.2 对应上方步骤的变量和代码 05 一致性 ...
- 判断矩阵是否为单位矩阵
判断矩阵是否为单位矩阵 单位矩阵:除了主对角线上的元素值为1,其余元素全部为0 bool identity_matrix(int *arr,int n)//n表示n阶矩阵 {for(int i=0;i ...
最新文章
- QSAR生命的发动机卟啉c20h14n4---用反向传导做卟啉的分子模型
- 海量数据处理算法—Bit-Map
- 如何在SAP Spartacus自定义Component里消费数据
- js遍历对象的key和value
- 客制化键盘编程_客制化键盘如何入坑?
- 云服务器怎么执行sql文件在哪里,总结帝国CMS下在PHP文件中怎么调用数据库类执行SQL语句实例...
- html怎么从左到右设置颜色,css3文字颜色从左到右动画
- ubuntu 忘记root密码了不用怕,看这里
- 鸿蒙OS最快6月正式推送;微信Windows版将支持刷朋友圈;GCC 11.1正式发布|极客头条...
- arduino 部分有用的函数
- 创建data文件_剑指信奥 | C++ 之文件操作
- 中望3d快捷键命令大全_CAD和3DMAX常用快捷键大全与教程【完整版】
- 一个正经的前端学习 开源 仓库(每日更新)-698道知识点
- 2022年最新全国各省五级行政区划代码及mysql数据库代码(省市区县乡镇村)
- 云计算革命-IT产业第三次变革,将如何影响人类社会
- 100 句世界哲学语录【句句珠玑细细品味】
- 【无标题】两个路由器不同网段互通
- 群晖硬盘扩容 逃课方法
- list常用函数和方法续之删除元素
- win10 路由表配置