Given a matrix M, row vector v of appropriate length, and diagonal index d (where 0 indicates the main diagonal and off-diagonals are identified by positive and negative integers), return a new matrix where the specified diagonal of M is replaced by v. You may assume that v is the correct length for the specified diagonal. If d is not provided, assume it is zero.
For example,
M = magic(5); setDiagonal(M,1:4,-1)
ans = 17 24 1 8 15 1 5 7 14 16 4 2 13 20 22 10 12 3 21 3 11 18 25 4 9
Added new test case 9 Oct. 2012
Are you missing some text from your example?
Test suggestion: Stick a zero in one of your v vectors and you'll eliminate some of the shorter answers.
Yes. All solutions with find don't work with 0 in v.
Thanks for the suggestions -- I updated the text, added a new test case and rescored.
@Nicholas Howe: The test suggestion meant: stick a 0 in v, and this 0 is meant to replace an entry of M that was unequal to 0. In other words: the new test-case doesn't make a difference (and hence is useless) if M is a null-matrix.
The cases with d=0 are working for me but your test cases are giving error..... What's this?
please, when you make use of test cases with floating point numbers specify a common precision, otherwise is impossible to pass the suite and people need to be noob! thx in advanced
Why does it fail Test #2?
Wouldn't work if d was undefined and M wasn't a diagonal matrix.
I like the try/catch with ans
It seems Matlab allows for many useful tricks. I was surprised at the behavior of 'diag' in the leading solution.
1102 Solvers
Matrix which contains the values of an other matrix A at the given locations.
195 Solvers
Find third Side of a right triangle given hypotenuse and a side. No * - or other functions allowed
107 Solvers
86 Solvers
152 Solvers