【问题标题】:Generic block diagonal matrix in MATLABMATLAB中的通用块对角矩阵
【发布时间】:2016-12-21 00:27:38
【问题描述】:

我有一个 square 矩阵,大小为C C,我想构建一个对角块矩阵,它重复N=2C(1+C) 次。问题是C的值可以改变,所以我不知道我是否可以使用blkdiag,因为我不知道我应该输入的参数数量,因为矩阵的大小是一个变量用户选择的。我怎么能在 MATLAB 中做到这一点?

【问题讨论】:

  • 为什么不能使用带可变参数的blkdiag
  • @AndrasDeak 我不知道该怎么做。是否可以?例如,我一直使用blkdiag(A,A,A)。如果不对矩阵的数量进行硬编码,我怎么能写出来?
  • Like this:构造一个单元格,然后将其传递给 blkdiag(作为逗号分隔的列表)。当然可能有更直接的方法;我承认在问之前我并没有真正考虑过你的问题:)
  • 所以我的意思是tmpcell = repmat({A},[1, 2*C*(1+C)]); out = blkdiag(tmpcell{:})

标签: matlab matrix


【解决方案1】:

你可以使用

 M = kron(eye(N),A);

其中A 是重复N 次的CxC 矩阵......

因为这将很快扩展,用于稀疏实现:

M = kron(speye(N),A);

【讨论】:

  • 我有一种感觉,这将很快爆发,并且 Tendero 需要一种不同的方法(稀疏矩阵?)
  • 好吧,我想这一切都取决于尺寸。但是,是的,我可以想象。想知道稀疏数组是否有类似的优雅结构,或者需要解决一些sparse() 索引扭曲。编辑:好吧,kron 适用于稀疏矩阵,所以我想稀疏输入仍然可以。
  • 为什么说它会“爆炸得相当快”呢? (是的,顺便说一句,我 am 为 LDPC 码构造一个稀疏矩阵)
  • @Tendero 我认为 bla 的意思是你的线性大小与C^2 一致,所以元素的数量与C^4 一致,这相当陡峭。
  • 只需使用M=sparse(kron(eye(N),A)),这样您就不会因为 A 和 N 很大的情况而耗尽内存...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多