How to improve this code for replacing elements of a matrix from another matrices in MATLAB?

  • A+
Category:Languages

So I have these 4 same-sized matrices:

k = [0.5; 1.0; 1.5; 2.0]; l = [2; 4; 6; 8]; m = [1.7; 3.0; 4.5; 6.0]; n = [2.5; 5.0; 7.5; 10.0]; 

And I want to put the elements from each matrix into the diagonal of zero matrix, so it would create something like this:

f =  0.5 2.0 0   0   0   0   0   0       1.7 2.5 0   0   0   0   0   0      0   0   1.0 4.0 0   0   0   0        0   0   3.0 5.0 0   0   0   0        0   0   0   0   1.5 6.0 0   0        0   0   0   0   4.5 7.5 0   0        0   0   0   0   0   0   2.0 8.0      0   0   0   0   0   0   6.0 10.0 

This is what I've come up with:

f = zeros(8,8); k = [0.5; 1.0; 1.5; 2.0]; l = [2; 4; 6; 8]; m = [1.7; 3.0; 4.5; 6.0]; n = [2.5; 5.0; 7.5; 10.0];  for i = 1:2:8 %odd index number     for j = 2:2:8 %even index number         f(i,i) = k(1,i)         f(i,j) = l(1,i)         f(j,i) = m(1,i)         f(j,j) = n(i,1)     end; end; disp(f) 

But the result put the elements not into the diagonal of matrix f=zero(8,8), and I've always got the error of Index exceeds matrix dimensions.

Can I get some pointers on how to fix this code?

 


I think you intended to write this:

for i = 2:2:8     f(i-1,i-1) = k(i/2)     f(i-1,i) = l(i/2)     f(i,i-1) = m(i/2)     f(i,i) = n(i/2) end 

Though there must be simpler ways to accomplish the same thing. For example, check out the function blkdiag!

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: