# Defining formulas for diagonal and offdiagonal elements of a matrix

조회 수: 7 (최근 30일)
Jeong Ho 2015년 4월 2일
댓글: Jeong Ho 2015년 4월 2일
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

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

### 채택된 답변

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));
Jeong Ho 2015년 4월 2일
Dear Roger,
Thank you so much for your help. It works like a charm! Thank you!
Best,
John

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

### 카테고리

Help CenterFile Exchange에서 Programming에 대해 자세히 알아보기

### Community Treasure Hunt

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

Start Hunting!

Translated by