MATLAB:创建一个块对角矩阵

时间:2016-07-17 00:41:47

标签: matlab

我有一个用矩阵形式创建方程组的公式。并写如下:

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行的块对角矩阵。我的意思是,包含t(i)幂的每行y应该在每个块中重复三次,然后下一行是具有三行的下一个块。像这样:

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)]    

2 个答案:

答案 0 :(得分:0)

因为我无法在格式化模式中发表评论,所以我尝试以下列方式解释您的问题:

所以,如果

 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{:})

答案 1 :(得分:0)

你知道,我在制作一个线性方程组时遇到了问题。可能就是我在计算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列)。 我希望它可以提供帮助