Find sum of max values in matrix subject to constraints

1 次查看(过去 30 天)
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 个评论
Grzegorz Lippe
Grzegorz Lippe 2015-7-15
编辑:Grzegorz Lippe 2015-7-15
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)
Seamus
Seamus 2015-7-15
Gregor, that's absolute genius. Really, I thought i would have to loop and do this iteratively looking for something that met the right conditions. Thank you very much!

请先登录,再进行评论。

采纳的回答

bio lim
bio lim 2015-7-15
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 个评论
Seamus
Seamus 2015-7-15
Hi coffee murun, thanks a million for this. I had one follow up question on this. Is there an else statement that you can write which would repeat the initial part of the code in order to satisfy the below 3 constraint?
bio lim
bio lim 2015-7-17
Hi, my pleasure. Do you mean in a way that you can insert any input and get the expected results?

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Descriptive Statistics and Visualization 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by