Using 3x3 matrix to create 21x21 matrix
4 次查看(过去 30 天)
显示 更早的评论
I have built a 3x3 matrix using the code below
EA = 1;
h = 1;
F = @(xi)(xi-0.5).*(xi-0.5)
k(1,1) =EA/h* 2*quad(F, -1, 1)
F = @(xi)(xi-0.5).*(-2*xi)
k(1,2) = EA/h* 2*quad(F, -1, 1)
F = @(xi)(xi-0.5).*(xi+0.5)
k(1,3) = EA/h* 2*quad(F, -1, 1)
F = @(xi)(-2*xi).*(-2*xi)
k(2,2) =EA/h* 2*quad(F, -1, 1)
F = @(xi)(xi+0.5).*(-2*xi)
k(2,3) = EA/h*2*quad(F, -1, 1)
F = @(xi)(xi+0.5).*(xi+0.5)
k(3,3) = EA/h*2*quad(F, -1, 1)
k(2,1) = k(1,2)
k(3,1) = k(1,3)
k(3,2) = k(2,3)
I want to use the 3x3 matrix above to create a 21x21 matrix following the pattern below
the overlapped elements should be added together, the numbers not in the 3x3 matrix are zero in the bigger matrix...k(4,1)=0 etc..
10 3x3 matrices should be used
I want to use a for loop unless there's another method
1 个评论
Walter Roberson
2019-11-11
This was recently discussed in https://www.mathworks.com/matlabcentral/answers/489626-adding-matrices-to-make-bigger-matrix
It is a lot easier and clearer to loop building up the matrix, at least in the case where the different matrices on the diagonal are different.
采纳的回答
Erivelton Gualter
2019-11-11
It is not clear the overlap values. I assumed the following:
- k33+k11
- k33+k12
- K33+k13
- K33+k23
- ..., Until the last is k33+k33
The other values is just copy from the given location. Then, you might use only for loop for this. Check in the following:
k19 = reshape(k(1:3,1:3),1,9); % Reshape for [k11 k12 k12 k21 k22 k23 k31 k32 k33]
j = 1;
for i=4:2:21
k(i,i-1) = k(2,1);
k(i-1,i) = k(2,1);
k(i+1,i-1) = k(3,1);
k(i-1,i+1) = k(3,1);
k(i+1,i) = k(3,2);
k(i,i+1) = k(3,2);
k(i,i) = k(2,2);
k(i+1,i+1) = k(3,3) + k19(j); % Overlap goes here
j = j + 1;
end
3 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!