Error in using nlinfit function

조회 수: 7 (최근 30일)
GAGANDEEP KAUR
GAGANDEEP KAUR 2021년 4월 4일
댓글: GAGANDEEP KAUR 2021년 4월 4일
I need to fit some parameters using nlinfit but getting following warning on running the code. May I please get some advice, how can I resolve this issue. Required codes and data file is provided here.
Warning: Some columns of the Jacobian are effectively zero at the solution, indicating that the model is insensitive to some of its parameters. That may be because those parameters are not present in the model, orotherwise do not affect the predicted values. It may also be due to numerical underflow in the model function, which can sometimes be avoided by choosing better initial parameter values, or by rescaling or recentering.
Parameter estimates may be unreliable.
> In nlinfit (line 381)
In BinartI2WLfit (line 19)
%%Determine the values of binary paarmeters of E-NRTL model
function [yk]=BinaryI2WL(taua,x)
%1-H2O
%2-I2
filename = 'KracekLLE.xlsx'; %reading VLE data from excel file
Data = xlsread(filename);
x(:,1) = Data(:,7);
x(:,2) = Data(:,6);
T=[399.5000
416.2000
428.4000
429.4000
448.9000
460.4000
461.4000
479.7000];
N=length(T);
alpha12=0.3*ones(N,1); alpha21=0.3*ones(N,1);
tau12=zeros(N,1); tau21=zeros(N,1);
taua=[randi([-10,10]) randi([-10,10]) randi([-500 1000]) randi([-500 1000])];
for i=1:N
tau12(i)=taua(1)+taua(3)/T(i);
tau21(i)=taua(2)+taua(4)/T(i);
end
G12=exp(-(tau12.*alpha12));
G21=exp(-(tau21.*alpha21));
X1=x(:,1);
X2=x(:,2);
ln_y1_1=G21.*X2.*tau21;
ln_y1_2=G21.*X2;
ln_y2_1=G12.*X1.*tau12;
ln_y2_2=G12.*X1;
ln_y1_3=(((X2.*G12)./ln_y2_2).*(tau12-(ln_y2_1)./(ln_y2_2)));
yk=exp((ln_y1_1./ln_y1_2) + ln_y1_3) ; %% activity coefficient for H2O
end
%%Calling BinaryI2WL function
for i=1:4
yk=[0.6717
0.6825
0.6899
0.6905
0.7017
0.7080
0.7085
0.7179];
%initial guess for parameters
taua=[1,0,702,-159];
try % try-catch used to continue the loop without stopping on encountering an error
[taua1]= nlinfit(x,yk,@BinaryI2WL,taua);
catch exception
continue
end
end

답변 (1개)

Matt J
Matt J 2021년 4월 4일
편집: Matt J 2021년 4월 4일
You are not using the taua coefficients passed as input to BinaryI2WL. You are overriding them for some reason with random values in this line,
taua=[randi([-10,10]) randi([-10,10]) randi([-500 1000]) randi([-500 1000])];
  댓글 수: 1
GAGANDEEP KAUR
GAGANDEEP KAUR 2021년 4월 4일
Sorry for inconvenience, actually got to write it by mistake. But, even without this statement, code is giving the same warning on execution.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Nonlinear Regression에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by