Optimizing a matrix of values

3 views (last 30 days)
Allan Paolo
Allan Paolo on 14 Dec 2023
Answered: Matt J on 14 Dec 2023
Hi, I need help in optimizing a matrix of values. Assuming a 3x3 matrix, I would have this matrix:
I needed the values of A to F be optimized. What I would usually do is to just take [A B C D E F] as an input value and call it a day. To be fair, this works decently.
My main issue is that my matrix usually changes size, ie. it becomes this:
I will have to change the input to [A B] this time. My question, is, is there a more elegant way of doing these things: Is there a way for me to simply plug in the two matrices without reshaping them and forcing 0 on the diagonal?

Accepted Answer

Matt J
Matt J on 14 Dec 2023
You could define the whole matrix as unknown, but with diagonal elements bound to zero:
LB=-inf(n);
LB(1:n+1:end)=0;
UB=-LB;
M=optimvar('M',[n,n],'Lower',LB,'Upper',UB);

More Answers (1)

madhan ravi
madhan ravi on 14 Dec 2023
a = zeros(3);
[m, n] = size(a);
a(~diag(1 : m)) = 1 : m * n - m;
a.'
  2 Comments
madhan ravi
madhan ravi on 14 Dec 2023
Edited: madhan ravi on 14 Dec 2023
a = zeros(2);
[m, n] = size(a);
a(~diag(1 : m)) = m * n - m : -1 : 1
%a(~diag(1 : m)) = flip(your_input)
madhan ravi
madhan ravi on 14 Dec 2023
where 1 : m * n - m is your input

Sign in to comment.

Categories

Find more on Operating on Diagonal Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!