Find sum of max values in matrix subject to constraints
2 views (last 30 days)
Show older comments
Hi I would greatly appreciate help on the following question. I have two matrices, a and b: a = [0 0 3 ; 0 7 2 ; 5 0 1 ] ; , with a representing yields; and b = [1 2 3 ; 1 2 100 ; 1 100 100 ] ; representing tenors.
I would like to find the highest combined value from a, subject to the sum of the coinciding values in b not exceeding three.
So the answer here would be 12, because the sum of 7+5 = 12, and the coinciding sum of b values would be 2+1 = 3.
Like i say any help at all would be greatly appreciated.
2 Comments
Grzegorz Lippe
on 15 Jul 2015
Edited: Grzegorz Lippe
on 15 Jul 2015
Hello Seamus,
a nice riddle :)
A = [0 0 3 ; 0 7 2 ; 5 0 1 ] ;
B = [1 2 3 ; 1 2 100 ; 1 100 100 ] ;
siz = size(A) ;
b = B(:) ;
a = A(:) ;
[b1, b2] = meshgrid(b, b) ;
[a1, a2] = meshgrid(a, a) ;
% Sum up all possiblities, but only once
AA = triu(a1) + triu(a2) ;
BB = triu(b1) + triu(b2) ;
SIZ = size(AA) ;
% The sum of B must be less 4
validIdsofBB = triu(BB < 4) ;
% Find the maximum of all combined values in A, but only valid in B
[~, myID] = max(AA(:) .* validIdsofBB(:)) ;
%%The answer to the question:
AA(myID)
%%The Indizes to the original vectors:
[I,J] = ind2sub(SIZ,myID) ;
a(I)
a(J)
%%The Indizes to the original matrix
[i1,i2] = ind2sub(siz,I) ;
[j1,j2] = ind2sub(siz,J) ;
A(i1, i2)
A(j1, j2)
Accepted Answer
bio lim
on 15 Jul 2015
a = [0 0 3 ; 0 7 2 ; 5 0 1 ] ;
b = [1 2 3 ; 1 2 100 ; 1 100 100 ] ;
[first_max, ind] = max(a(:));
[m1, n1] = ind2sub(size(a),ind);
c = a;
c(m1,n1) = 0;
[second_max, ind] = max(c(:));
[m2,n2] = ind2sub(size(c),ind);
sum1 = a(m1,n1) + a(m2,n2)
if b(m1,n1) < 3 & b(m2,n2) < 3
sum2 = b(m1,n1) + b(m2,n2)
end
2 Comments
bio lim
on 17 Jul 2015
Hi, my pleasure. Do you mean in a way that you can insert any input and get the expected results?
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!