Defining formulas for diagonal and offdiagonal elements of a matrix
조회 수: 4 (최근 30일)
이전 댓글 표시
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
댓글 수: 0
채택된 답변
Roger Stafford
2015년 4월 2일
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
Roger Stafford
2015년 4월 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));
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Operating on Diagonal Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!