循环创建矩阵

时间:2011-03-30 02:26:18

标签: matlab

我正在尝试创建一个可以创建适当大小的矩阵的循环。我需要矩阵由指定数量的元素构成,这些元素从另一个矩阵中拉出并加在一起。

这是一些伪代码:

    '

        n=10
        for x=1:1:n

            Kglobal=zeros(nxn)


        Kglobal(1,1)=1
        Kglobal(x+1,x+1)=Klocalx(2,1)
        Kglobal(x+1,x+2)=Klocalx(2,2)+Klocalx+1(1,1)'
if Kglobal(x+1,x+2)=(n+1,n)
   Kglobal(n,n)=Klocaln(2,2)
    end
end

完成后会产生类似:

'  
 Kglobal=[ 1 0 0 0 0 0 0 0 0 0 0;
        Klocal1(2,1) Klocal1(2,2)+Klocal2(1,1) 0 0 0 0 0 0 0 0 0;
        0 Klocal2(2,1) Klocal2(2,2)+Klocal3(1,1) 0 0 0 0 0 0 0 0;
        0 0 Klocal3(2,1) Klocal3(2,2)+Klocal4(1,1) 0 0 0 0 0 0 0;
        0 0 0 Klocal4(2,1) Klocal4(2,2)+Klocal5(1,1) 0 0 0 0 0 0;
        0 0 0 0 Klocal5(2,1) Klocal5(2,2)+Klocal6(1,1) 0 0 0 0 0;
        0 0 0 0 0 Klocal6(2,1) Klocal6(2,2)+Klocal7(1,1) 0 0 0 0;
        0 0 0 0 0 0 Klocal7(2,1) Klocal7(2,2)+Klocal8(1,1) 0 0 0;
        0 0 0 0 0 0 0 Klocal8(2,1) Klocal8(2,2)+Klocal9(1,1) 0 0;
        0 0 0 0 0 0 0 0 Klocal9(2,1) Klocal9(2,2)+Klocal10(1,1) 0;
        0 0 0 0 0 0 0 0 0 Klocal10(2,1) Klocal10(2,2)];
'

谢谢!我感谢任何帮助,并会经常检查,所以如果有什么我可以尝试更好地解释,请告诉我!

1 个答案:

答案 0 :(得分:1)

使用spdiags函数创建这样的矩阵非常简单。例如,

a=1:5;
b=6:10;
c=spdiags([a',b'],[-1,0],5,5);

创建一个看起来像这样的稀疏矩阵

 6     0     0     0     0
 1     7     0     0     0
 0     2     8     0     0
 0     0     3     9     0
 0     0     0     4    10

除了仅为非零元素分配内存。这应该回答你关于如何创建这样一个矩阵的问题。

然而,问题是,你如何得到ab,在你的情况下是Klocal矩阵。关于你在代码中做了什么,目前还不是很清楚。我猜它们可以作为一些紧凑的矩阵/单元格操作来完成,但不能进一步评论所给出的内容。

无论如何,假设您已经拥有Klocal矩阵,这应该足以让您入门。