MATLAB Answers

Is there a way to come up with all the combination between 0 and 1 that sum up to equal 1?

2 views (last 30 days)
A C
A C on 7 Jan 2020
Commented: KSSV on 9 Jan 2020
Is there a way to come up with all the combination between 0 and 1 that sum up to equal 1?
  1. All combination between 0 and 1. y4 = [Ny4 Hy4 Ay4 Cy4] , if sum(y4) = 1
  2. Put Them into sum(((K-1).*y4)./(1+(K-1)*v)) = 0 to solve for v.
  3. Then x5 = y4./(1+(K-1).*v), if sum(x5) = 1
  4. finally y6 = K.*x5, if sum(y6) = 1
When I used nchoosek([0:1/10000:1],4) I get error.
Error using zeros
Maximum variable size allowed by the program is exceeded.
Error in nchoosek>combs (line 164)
P = zeros(total, k, 'like', v);
Error in nchoosek (line 123)
c = combs(v,k);
I solved this using excel solver, that is how I got the values.
% guess mole fraction for stream 4 the feed into the flash separator.
% the sum of all 4 must equal 1.
Ny4 = 0.108536069;
Hy4 = 0.772457477;
Ay4 = 0.117147745;
Cy4 = 0.001858709;
y4 = [Ny4 Hy4 Ay4 Cy4];
% K-value given
NK = 4.8;
HK = 70;
AK = .051;
CK = .32;
K = [NK HK AK CK];
% guess ratio
% v is want I want to solve for when t(v) = 0
v =.925028796;
t = sum(((K-1).*y4)./(1+(K-1)*v));
% mole fraction for stream 5 the liquid out the flash separator.
% the sum of all 4 must equal 1.
x5 = y4./(1+(K-1).*v)
testx5= sum(x5)
% mole fraction for stream 6 the vapor out the flash separator.
% the sum of all 4 must equal 1.
y6 = K.*x5
testy6 = sum(y6)

Answers (1)

KSSV
KSSV on 7 Jan 2020
x = 0:1/100:1 ;
id = nchoosek(1:length(x),4) ;
thesum = sum(x(id),2) ;
% find sum == 1
idx = thesum==1 ;
iwant = x(id(idx,:)) ;
  4 Comments
KSSV
KSSV on 9 Jan 2020
It might be dude to x is large and posing memory issues. You can split x into multiple parts, and get the job done.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!