如何创建一组N个对角矩阵,范围从diag(1,1,…, 1) diag(-1, -1,…, -1)用于测试目的?

1次观看(过去30天)
我需要创建16 4x4对角矩阵组成的“1”和“-1”的所有组合,并有他们能够被调用在循环中使用。除了创建每个单独的矩阵,我怎么才能完成这个呢?
例如:
Z1 = diag(1,1,1,1);
Z8 = diag(1,-1,-1,1);
Z16 = diag(-1,-1,-1,-1);
谢谢你的指导。
3评论
Stephen23
Stephen23 2021年9月21日
@Zac Minson:使用单元格数组是一种非常通用的方法,适用于任何数量的矩阵。

登录评论。

接受的答案

马特·J
马特·J 2021年9月20日
编辑:马特·J 2021年9月21日
你真的同时需要所有Z{i}吗?
[C {1: N}] = ndgrid ([1]);
C= shape(cat(N+1,C{:}),[],N);
Z = 0 (N ^ 2, 2 ^ N);%EDITED -删除循环
Z (1: N + 1: N ^ 2,:) = C;
Z =重塑(Z, N, N, [])
3评论
扎克Minson
扎克Minson 2021年9月21日
非常感谢。我绞尽脑汁想如何概括这个问题。谢谢你抽出时间。

登录评论。

更多答案(2)

Fangjun江
Fangjun江 2021年9月20日
= (dec2bin (15: 1:0) -48) * 2 - 1;
z = 0(4、4、16);
k = 1:16
z (:,:, k) =诊断接头((k,:));
结束
1评论
骑自行车的人
骑自行车的人 2021年9月20日
下面是这个解决方案的概括:
N = 4;%设置此值
= (dec2bin ((2 ^ n - 1): 1:0) -48) * 2 - 1;
z = 0 (N, N, 2 ^ N);
k = 1:2 ^ N
z (:,:, k) =诊断接头((k,:));
结束

登录评论。


1月
1月 2021年9月20日
编辑:1月 2021年9月21日
Z = repmat(眼(4),1,1,16);
Z (Z ==1) =1 - rem(floor(0:15) ./ [1;2;4;8]), 2) * 2;%内联DEC2BIN
广义:
N = 3;
Z = repmat(eye(n), 1,1,2 ^n);
z (z = = 1) = 1 -快速眼动(地板((0:2 ^ n - 1) / pow2。(0:n - 1)”。),2)* 2;
现在z(:,:,i)是第i个矩阵。这比将它们存储在单元格中更有效。但如果你想要这个:
zC = num2cell(z, [1,2]);

标签

s manbetx 845


释放

R2021a

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!