Defining formulas for diagonal and offdiagonal elements of a matrix

I have a vector M. I want to create a matrix s.t.
A(j,j) = M(j)*(1 + (M(j)-1)*roh_w)
A(j,k) = M(j)*M(k)*roh_b, whenever j!=k.
I can do
A = diag(M.*(1+(M-1)*roh_w) - M.^2*roh_b);
A = A + M.'*M*roh_b;
i.e., I first create a diagonal matrix s.t.
A(j,j) = M(j)*(1 + (M(j)-1)*roh_w) - M(j)*M(k)*roh_b,
I then add a matrix whose effect is canceled out by the second term right above for diagonal elements. Is there a prettier way of doing this?
Quintessentially, is there a one-liner code s.t. you give formula for diagonal elements and nondiagonal elements, e.g., A = FUNCTION(formula for diagonal elements, formula for nondiagonal elements)?
I'd appreciate any and all help. Thank you
Best, John

 채택된 답변

A = eye(length(M))*f1+(1-eye(length(M))*f2;
where f1 is the formula for the diagonal elements and f2 that for the off-diagonal elements.

댓글 수: 2

The following is preferable. Let M be a row vector of size 1-by-m.
A = diag(M.*(1+(M-1)*roh_w))+(1-eye(m)).*(M.'*(M*roh_b));
Dear Roger,
Thank you so much for your help. It works like a charm! Thank you!
Best,
John

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Operating on Diagonal Matrices에 대해 자세히 알아보기

질문:

2015년 4월 2일

댓글:

2015년 4월 2일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by