Hello everyone, I am working on an constraint where i will only use the elements of an matrix if their indexes are equal like;
for i=1:36
for j=1:36
if i=j
M*x(i,j)-y(j)>=0
else
end
end
end
my matrix has 36x36 dimensions so need to go from 1 to 36.
this is what i did for y ;
y(:,1)
y is 36x1 so this works for y.
i i can not use any loops or conditions i am trying to write this only in one line! if there is a little tip like
x(do something here);
that is what i need.
Hope i can make what i need clear.
Thank you in advance!

 채택된 답변

Matt J
Matt J 2022년 4월 10일

0 개 추천

problem.Constraints.diagcon=diag(x)*M-y>=0;

추가 답변 (1개)

Torsten
Torsten 2022년 4월 10일
편집: Torsten 2022년 4월 10일

0 개 추천

Put "-M" in the matrix of inequality constraints where x_jj is addressed and "+1" where y(j) is addressed.
Then you have set the constraint
-M*x_jj + y_j <= 0
or
M*x_jj - y_j >= 0
This will result in 36 new rows in the constraint matrix A and 36 new zeros in the vector b of the right-hand side.

댓글 수: 3

Azime Beyza Ari
Azime Beyza Ari 2022년 4월 10일
편집: Azime Beyza Ari 2022년 4월 10일
I dont see how this is related to what i am asking. but tried and it did not worked. I want to do this ;
it should go like;
9,9
10,10
....
36,36
i did this for y and it worked ;
y(:,1)
And
for i=1:36
constr(i) = M*x(i,i)-y(i) >= 0
end
does not work ?
So you only want to operate on diagonal elements of x?
x = magic(4)
x = 4×4
16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
y = [1; 2; 3; 4]
y = 4×1
1 2 3 4
result = 2*diag(x) - y
result = 4×1
31 20 9 -2
n = 3;
spotcheck = [2*x(n, n)-y(n), result(n)] % These should match
check = 1×2
9 9

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

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품

릴리스

R2022a

질문:

2022년 4월 10일

댓글:

2022년 4월 10일

Community Treasure Hunt

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

Start Hunting!

Translated by