我正在尝试创建一个可以创建适当大小的矩阵的循环。我需要矩阵由指定数量的元素构成,这些元素从另一个矩阵中拉出并加在一起。
这是一些伪代码:
'
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)];
'
谢谢!我感谢任何帮助,并会经常检查,所以如果有什么我可以尝试更好地解释,请告诉我!
答案 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
除了仅为非零元素分配内存。这应该回答你关于如何创建这样一个矩阵的问题。
然而,问题是,你如何得到a
和b
,在你的情况下是Klocal
矩阵。关于你在代码中做了什么,目前还不是很清楚。我猜它们可以作为一些紧凑的矩阵/单元格操作来完成,但不能进一步评论所给出的内容。
无论如何,假设您已经拥有Klocal
矩阵,这应该足以让您入门。