2 views (last 30 days)

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

- All combination between 0 and 1. y4 = [Ny4 Hy4 Ay4 Cy4] , if sum(y4) = 1
- Put Them into sum(((K-1).*y4)./(1+(K-1)*v)) = 0 to solve for v.
- Then x5 = y4./(1+(K-1).*v), if sum(x5) = 1
- 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)

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,:)) ;

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.

KSSV
on 9 Jan 2020

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.