MATLAB Answers

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

4 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)

  0 Comments

Sign in to comment.

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

Show 1 older comment
KSSV
KSSV on 8 Jan 2020
Yes you can make a condition.
x = 0:1/10000:1 ;
id = nchoosek(1:length(x),4) ;
x = x(id) ; % nx4 array of all x's
In the above, apply your condition to x, Cy4 i.e column 4 should be less than 0.002 (say)
id_c1 = x(:,4)<0.002 ; % condition on 4th column
x = x(id_c1,:) ; % this will give fourth column only < 0.002
Now you can get the sum on x and follow. If you want, you can apply condition on the first column also.
A C
A C on 8 Jan 2020
I am sorry that I did not explain my problem. When I use 1/10000 it gives me a error.
Do you get the same errors?
x = 0:1/10000:1 ;
id = nchoosek(1:length(x),4) ;
x = x(id) ; % nx4 array of all x's
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);
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.

Sign in to answer this question.


Translated by