Issues with basic Matlab command

  • #1
328
0

Main Question or Discussion Point

I need to figure out how to create a matrix that has zeros in everything except the diagonal, and I need the diagonal to be random numbers from 1 to 5. I tried a few different variations like this:

R = eye(5)*7*randi(10,5)

But I keep ending up with values in every row and column and I am at a loss as to why. I would think that multiplying the random by the identity matrix would clear out everything but the diagonal, but this code doesn't seem to be the right way to go about doing that. If anyone can help me out, I'd appreciate it.
 

Answers and Replies

  • #2
DrGreg
Science Advisor
Gold Member
2,290
895
I need to figure out how to create a matrix that has zeros in everything except the diagonal, and I need the diagonal to be random numbers from 1 to 5. I tried a few different variations like this:

R = eye(5)*7*randi(10,5)

But I keep ending up with values in every row and column and I am at a loss as to why. I would think that multiplying the random by the identity matrix would clear out everything but the diagonal, but this code doesn't seem to be the right way to go about doing that. If anyone can help me out, I'd appreciate it.
Do you know the difference, in Matlab, between * and .* ?
 
  • Like
Likes Ascendant78
  • #3
328
0
Regretfully not. The only language I am at all familiar with is some C++. Matlab is completely new to me. Our instructor threw a project at us with Matlab and told us the instructions guided us through all of it, so knowledge of Matlab was not necessary. That was not even remotely the case and I have spent hours on end trying to figure out the convoluted instructions.

It seems like finding this type of stuff out online is like finding a needle in a haystack. C++ resources have always been easy, but finding decent resources for Matlab just seems daunting.

I tried to do a web search on .* and had no luck finding it. Can you tell me what it does?
 
  • #5
328
0
Oh, now I get it. Thank you so much for the information. I should be good now.
 
  • #6
kreil
Insights Author
Gold Member
668
67
Another way to do this is using the diag() function, which can do two things

- Create a new diagonal matrix with the elements in the input vector on the main diagonal
- Return the diagonal elements from an existing matri (default is the main diagonal, otherwise you use a number as the second input to specify).

So for a 5x5 with random integers between 1 and 5 you could do,

Code:
diag(randi(5,5,1))

ans =

     5     0     0     0     0
     0     5     0     0     0
     0     0     1     0     0
     0     0     0     5     0
     0     0     0     0     4
Or for random floats,

Code:
r = 1 + 4*rand(5,1);
diag(r)
ans =

    1.3902         0         0         0         0
         0    2.1140         0         0         0
         0         0    3.1875         0         0
         0         0         0    4.8300         0
         0         0         0         0    4.8596
Hope this helps.
 
  • Like
Likes Ascendant78

Related Threads on Issues with basic Matlab command

  • Last Post
Replies
1
Views
585
  • Last Post
Replies
11
Views
1K
Replies
4
Views
13K
  • Last Post
Replies
1
Views
3K
  • Last Post
Replies
4
Views
24K
Replies
1
Views
16K
  • Last Post
Replies
2
Views
2K
Replies
4
Views
787
  • Last Post
Replies
4
Views
810
  • Last Post
Replies
1
Views
2K
Top