公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

0 投票
1.4k 浏览

我想根据索引生成对称矩阵和反对称矩阵, 自己写的代码如下

matcon[imd_, id_] := Module[{mdr, mdi}, mdr =
   Block[{ta, im}, 
    ta = Table[
      IdentityMatrix[id], {j, 1, imd}];(*根据表示的维度构建单位矩阵,数量与多项式的数目相同*)
    im = 0;
    Do[Do[im = im + 1; 
      ta[[i, ii, ij]] = dc[im], {ii, 1, id}, {ij, ii, id}], {i, 1, 
      imd}];(*i索引ta保存的每一个单位矩阵,ii和ij则是单位矩阵中元素的索引*)
    Do[Do[
      ta[[j, ij, ii]] = ta[[j, ii, ij]], {ii, 1, id}, {ij, ii, 
       id}], {j, 1, imd}];(*这里是对矩阵中的元素做出一些限制,
    也就是令ij位置元素和ji位置元素相同,即对称矩阵要求ij=ji*)
    ta];
  
  mdi =
   Block[{ta, im}, 
    ta = Table[
      IdentityMatrix[id], {j, 1, imd}];(*这里根据多项式展开的数量来确定需要构建的单位矩阵的数量*)

    
    im = Sum[i, {i, id}]*
      imd;(*这里就是构建一个对称矩阵和反对称矩阵来表示厄米的哈密顿量,而自然这两种矩阵中的参数是要不相同的,所以这里就是用im这\
个索引来区分这些参数,因此在这里的时候使用到的所以就是在上面一个矩阵索引的基础上继续进行叠加,所以这里也就是为什么tdc要构建的dc的数量是\
(Sum[i,{i,id}]+Sum[i,{i,id-1}])*imd个*)
    Do[Do[
      If[ii == ij, ta[[i, ii, ij]] = 0, im = im + 1; 
       ta[[i, ii, ij]] = I*dc[im]], {ii, 1, id}, {ij, ii, id}], {i, 1,
       imd}];(*此时限制对角元素为零,非对角和mdr相同只不过乘以了虚数I*)
    
    Do[Do[
      ta[[j, ij, ii]] = - ta[[j, ii, ij]], {ii, 1, id}, {ij, ii, 
       id}], {j, 1, imd}];(*此时给出的是限制矩阵为反对称矩阵:ij=-ji*)
    ta]; {mdr, mdi}]
    
    a1 = matcon[4, 4];
a1[[1]][[1]] // MatrixForm


但是这个操作觉得有点繁琐, 想找个快捷点的方式.

用户: 落雨流觞 (1.1k 分)

1个回答

0 投票

不知道是你搞复杂了还是我没读懂你的问题,如只是想生成4*4的对称矩阵,可以有如下两种方法生成m1或m2

m = RandomInteger[10, {4, 4}];
MatrixForm[m1 = m . Transpose[m]]
MatrixForm[m2 = m + Transpose[m]]
MatrixForm[m3 = SymmetrizedArray[m, Automatic, Symmetric[All]]]

如果想生成的是反对称矩阵,则下三角每个元素乘以-1:

MatrixForm[m1*SparseArray[{{i_,j_}/;i>j->-1},{4,4},1]]
MatrixForm[Symmetrize[m1]]

 

用户: Lozmlve*永 (1.2k 分)
修改于 用户:Lozmlve*永
是我做的有些复杂, 但是我是想让我的矩阵里面是参数, 不是具体的数字, 因为是想做符号计算
可以看看SymmetrizedArray
...