Search code examples
matlabmatrixmatrix-multiplication

How can I create a modified identity matrix?


I have an identity matrix in MATLAB which is used in some regression analysis for joint hypothesis tests. However, when I change the linear restrictions for my tests, I can no longer rely on the identity matrix.

To give a simple example, here is some code which produces an identity matrix depending on the value of y:

for i = [1, 2, 4]
  y = i
  x = 5;
  H = eye(y*x)
end

However, what I need is not the identity matrix, but the first two rows and all others to be zero.

For the first example, the code produces an eye(5):

H =

     1     0     0     0     0
     0     1     0     0     0
     0     0     1     0     0
     0     0     0     1     0
     0     0     0     0     1 

I need something that given y does not produce the identity but in fact produces:

H =

     1     0     0     0     0
     0     1     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0 

Can I adjust the identity matrix to include zeroes only after the first two rows?


Solution

  • As suggested in this comment you can use diag:

    diag([ones(2,1); zeros(x*y-2,1)])
    

    This works because diag makes a vector become the main diagonal of a square matrix, so you can simply feed it the diagonal vector, which is your case would be 2 1s and the rest 0s.

    Of course if you need a variable amount of 1s, which I was in doubt about hence the comment,

    n=2;
    diag([ones(n,1); zeros(x*y-n,1)])