"Index in position 1 exceeds array bounds (must not exceed 1)." Error
조회 수: 4 (최근 30일)
이전 댓글 표시
Hi
I've been given a program that calculates the activity coefficients gamma) and the activity of each component in a mixture. Except i can't run it without getting this error:
Error in TestingSubprograms (line 18)
[gamma,a]=ACTIVITY_WILSON(MW,rhoL,BIP,T,x)
The function is:
function [gamma,a]=ACTIVITY_WILSON(MW,rhoL,BIP,T,x)
%This program calculates the activity coefficients (gamma) and the
%activities (a) of each component of a mixture of c components using the
%Wilson model.
%INPUT PARAMETERS: MW: vector (1xc) reporting the molecular weights of the
%c components; rhoL, vector (1xc) reporting the liquid density of the c
%pure components at temperature T; BIP is a matrix cxc reporting the energy
%interaction parameters (BIP(i,j)=lambda_ij-lambda_ii, J/mol). The energy
%interaction parameters are temperature independent; T: temperature of the
%system; x vector (1xc) reporting the mole fractions of the components of
%the mixture.
%OUTPUT PARAMETERS: gamma: vector 1xc reporting the activity
%coefficients of the components of the mixture; a: vector 1xc reporting the
%activities of the components of the mixture.
%Unless otherwise stated, all input/output parameters are expressed
%according to MKS.
R=8.314;
c=length(x);
%Molar volumes of the pure liquid components composing the mixture
VL=1./((rhoL*1000)./MW);
%Lambda terms (dimensionless) of the Wilson formula
for i=1:c
for j=1:c
Lambda(i,j)=(VL(j)/VL(i))*exp(-BIP(i,j)/(R*T));
end
end
for i=1:c
for j=1:c
A=sum(x.*Lambda(j,:));
C(j)=x(j)*Lambda(j,i)/A;
end
lngamma(i)=1-log(sum(x.*Lambda(i,:)))-sum(C);
gamma(i)=exp(lngamma(i));
a(i)=gamma(i)*x(i);
end
end
The input i'm using is :
x=[0.1 0.9];
MW=[60.09 100.16];
rhoL=[803 802];
T=303.15;
BIP=[196.250 386.133];
Any help would be appreciated. Thanks
댓글 수: 0
채택된 답변
KSSV
2019년 5월 22일
편집: KSSV
2019년 5월 22일
Problem is with your BIP. It shoule be cXc matrix i.e it shoule be 2X2 for your inputs. You have entered it as 1X2, so the error.
BIP=[196.250 386.133;196.250 386.133];
Or change these lines:
for i=1:c
for j=1:c
Lambda(i,j)=(VL(j)/VL(i))*exp(-BIP(i,j)/(R*T));
end
end
to
for i=1:c
for j=1:c
Lambda(i,j)=(VL(j)/VL(i))*exp(-BIP(j)/(R*T));
end
end
댓글 수: 2
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Thermal Analysis에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!