【问题标题】:MATLAB: Create a block diagonal matrixMATLAB:创建块对角矩阵
【发布时间】:2016-07-22 20:47:58
【问题描述】:

我有一个以矩阵形式创建方程组的公式。如下所示:

for i=1:n+1    
    for j=1:n+1    
        t(i)=(1/2)*(1+cos(((2*(n-i)+3)*pi)/(2*(n+1))));    
        y(i,j)=t(i)^(j-1);    
    end    
end

现在我要做的是创建一个块对角矩阵,每个块中分别包含 y 行。我的意思是 y 的每一行只包含t(i) 的幂,应该在每个块中重复三次,然后下一行是下一个三行块。像这样:

T=[y(t1) 0 0;0 y(t1) 0;0 0 y(t1); ... ;y(t n+1) 0 0;0 y(tn+1) 0;0 0 y(tn+1)]    

【问题讨论】:

    标签: matlab


    【解决方案1】:

    因此,由于我无法在格式化模式下发表评论,因此我尝试按以下方式解释您的问题:

    如果

     y =
    
     1     2     
     3     4
    

    解释可能性 a) 是

    T = 
     1     2     0     0     0     0     3     4     0     0     0     0
     0     0     1     2     0     0     0     0     3     4     0     0
     0     0     0     0     1     2     0     0     0     0     3     4
    

    或者这个 b)

     T =
     1     2     0     0     0     0     0     0     0     0     0     0
     0     0     1     2     0     0     0     0     0     0     0     0
     0     0     0     0     1     2     0     0     0     0     0     0
     0     0     0     0     0     0     3     4     0     0     0     0
     0     0     0     0     0     0     0     0     3     4     0     0
     0     0     0     0     0     0     0     0     0     0     3     4
    

    解决方案 您首先创建一个块,即

     1     2     0     0     0     0
     0     0     1     2     0     0
     0     0     0     0     1     2
    

    通过计算temp{1} = kron(I, y(1,:)),其中I = eye(3)。然后对第二行执行相同的操作:temp{2} = kron(I,y(2,:)),依此类推。这个过程可以在 for 循环中轻松完成:

    I = eye(3);
    temp = cell(1,size(y,1));
    for i = 1:size(y,1)
        temp{i} = kron(I, y(i,:));
    end
    

    选项 a)

    现在的结果是:[temp{:}]

    选项 b)

    这里的结果是:blkdiag(temp{:})

    【讨论】:

    • 非常感谢您的回答。但我认为我在说明我的问题时犯了一个错误,不幸的是我自己无法改变你的答案来赚取我想要的东西。你知道矩阵应该是这种形式: a(ti)=[y(ti) 0 0;0 y(ti) 0;0 0 y(ti)] y=[a1 0 0 … 0;0 a2 … 0; … ;0 0 … an] 你知道,在你写的算法中,y(i) 的每一行都在对角线上,但我需要的是 a(i) 形式的 n 矩阵,然后制作一个块他们的对角矩阵
    • 我不明白。您可以编辑您的问题并向我们展示一个最小的示例吗?
    • 新答案没有帮助吗?
    • 我在新答案中写下了您想要的内容。请您检查一下吗?
    【解决方案2】:

    你知道,我在制作线性方程组时遇到了问题。也许我上面在计算 y(i) 时写的内容对我来说很困难。 对于你说的例子,我有这个:

    n=3
    

    上面的公式:

    t1=0.0381
    t2=0.3087 
    t3=0.6913
    t4=0.9619
    

    现在,

    y(t)=[1 t t^2 t^3 t^4]
    

    我是说

    y(t1)=[1.0000    0.0381    0.0014    0.0001]
    y(t2)=[1.0000    0.3087    0.0953    0.0294]
    y(t3)=[1.0000    0.6913    0.4780    0.3304]
    y(t4)=[1.0000    0.9619    0.9253    0.8901]
    

    但是,由于我无法单独计算每个y(i),所以写成这种形式

    y=[1.0000    0.0381    0.0014    0.0001
        1.0000    0.3087    0.0953    0.0294
        1.0000    0.6913    0.4780    0.3304
        1.0000    0.9619    0.9253    0.8901]
    

    现在,应该有两个矩阵。一:

    s=[y(t) 0 0;0 y(t) 0;0 0 y(t)]
    r=[s(t1) ... 0; ... ;0 ... s(tn+1)]
    

    秒:

    d=[  1    -1     1    -1
         0     2    -8    18
         0     0     8   -48
         0     0     0    32]
    k=y*d
    u=[0 0 0;0 k 0;0 0 0]
    a=[u(t1) ... 0; ... ;0 ... u(tn+1)]
    

    这些矩阵 r 和 a 应该有 3(n+1) 列(在这个例子中是 12 列)。 希望对你有帮助

    【讨论】:

    • 我认为示例中的 y 矩阵缺少 t^4 部分。因此,假设矩阵 y 与 t.4 部分一起给出,我认为您的矩阵 s(t1) 例如应该有 3 行和 3*5=15 列,对吧?如果是这样,矩阵 r 应该有 3*4= 12 行和 15*4=60 列而不是 12?我真的不明白你想要 s 和 r 的样子。 y(t) 是行 y(t1) 和 y(t2) 等等吗?因为目前我认为您可能想要选项 b) 并且 temp 包含矩阵 s(t1), s(t2) ....
    猜你喜欢
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多