Asked by Brian Kim
on 8 Sep 2017

for example,

A is here.

A=[6 7 8 9];

and,

sumA=sum(A)=30;

The element of the matrix that causes the sum to be 30 must be expressed as a value between 4 and 12.

When I calculate directly, the number of cases that can be obtained is 3,4,5,6,7.

In this way, how to create code?

Answer by José-Luis
on 8 Sep 2017

If what you mean is that you want the sum of a random array of four elements to be thirty with some condition placed on the last of them:

lims = [4,12];

totVal = 30;

lastElement = randi(diff(lims) + 1,1 ) + lims(1) - 1;

valueToSplit = totVal - lastElement;

frac = rand(1,3);

frac = frac ./ sum(frac);

result = [round(frac.*valueToSplit), lastElement]

sum(result)

Sign in to comment.

Answer by Andrei Bobrov
on 8 Sep 2017

Edited by Andrei Bobrov
on 13 Sep 2017

z = 4:12;

out = [];

for jj = 1:numel(z)

k = nchoosek(z,jj);

out = [out;num2cell(k(sum(k,2) == 30,:),2)];

end

"number of rows":

numel(out)

Opportunities for recent engineering grads.

Apply Today
## 1 Comment

## Stephen Cobeldick (view profile)

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/355684-i-want-to-obtain-number-of-cases-matrix-s-length-by-applying-same-sum-in-any-matrix-on-constrai#comment_484117

Sign in to comment.