【问题标题】:Storing the output of a for loop in a (block) diagonal matrix when the output of the for loop is 2*2 matrix?当for循环的输出为2 * 2矩阵时,将for循环的输出存储在(块)对角矩阵中?
【发布时间】:2017-09-19 15:50:01
【问题描述】:

我有一个 1000 次迭代的“for 循环”,它的输出是一个 2*2 矩阵。所以,我的问题是“如何将所有迭代的输出存储为对角(或块对角)矩阵?”

X_t=[0 0.0016 0 0 -0.0015 0;0 0.0005 0 0 -0.0010 0];
X=[0 2 0 0 -1 0;0 0.5 0 0 -0.01 0];

ar = linspace(1e-3,1e2,1000);
w = 1i*ar;

M = zeros(2*numel(w));

for k=1:numel(w)

    P=[(10*exp(-w(k)))/(12*w(k)+1) (-8*exp(-3*w(k)))/(7*w(k)+1);      
       (5*exp(-8*w(k)))/(9*w(k)+1) (-17*exp(-4*w(k)))/(12*w(k)+1)];  

    W=[1 0;1/w(k) 0;w(k)/(1+0.3*w(k)) 0;0 1;0 1/w(k);0 w(k)/(1+0.3*w(k))];  

    Z=eye(2)+(X*W)*P;
    Y=((1.4)^2)*eye(2);
    Z_t=eye(2)+(X_t*W)*P;

    index = 2*k + [-1 0];
    M(index, index)=(Z'*Z_t)-(Y'*Y);

end

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您应该确定要在每次迭代中更改哪些索引:

    index = 2*k + [-1 0];
    M(index, index)=(Z'*Z_t)-(Y'*Y);
    

    为了提高性能,你应该预先分配输出矩阵:

    M = zeros(2*numel(w));
    

    请注意,使用sparse 矩阵可能更有效(内存)。

    您可以使用spy 命令检查您的矩阵是否正确构建,该命令以图形方式显示非零矩阵条目:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 2017-03-24
      • 2021-02-24
      • 2016-08-21
      • 1970-01-01
      相关资源
      最近更新 更多