当for循环的输出是2 * 2矩阵时,在(块)对角矩阵中存储for循环的输出?

时间:2017-09-19 06:59:18

标签: matlab

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

public interface IA
{
    int X { get; set; }
}

public interface IB
{
    int X { get; set; }
}

public class C : IA, IB
{
    public int X { get; set; }
    int IB.X { get; set; }
}

public PropertyInfo GetProperty<TClass, TProperty>(Expression<Func<TClass, TProperty>> getProperty)
{
    return (PropertyInfo)((MemberExpression)getProperty.Body).Member;
}

[Test]
public void Check()
{
    var aProperty = GetProperty((IA x) => x.X);
    var bProperty = GetProperty((IB x) => x.X);
    var cPropertyA = GetProperty((C x) => x.X);
    var cPropertyB = GetProperty((C x) => ((IB)x).X);

    CompareProperties(cPropertyA, aProperty); // True
    CompareProperties(cPropertyA, bProperty); // False
    CompareProperties(cPropertyB, aProperty); // False
    CompareProperties(cPropertyB, bProperty); // True
}

private bool CompareProperties(PropertyInfo classProperty, PropertyInfo interfaceProperty)
{
    // TODO implement 
}

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

enter image description here enter image description here