fit pressure temperature data in antoine equation using the command lsqnonlin

23 ビュー (過去 30 日間)
Devyani
Devyani 2014 年 6 月 12 日
コメント済み: Star Strider 2022 年 9 月 21 日
I want to fit pressure temperature data in antoine equation using the command lsqnonlin.The objective function is the minimization of the data available and data computed using the equation.The parameters of the equation are estimated after the minimization is done using this command.
Pressure=[1 5 10 20 40 60 100 200 400 760]
temp=[-59.4 -40.5 -31.1 -20.8 -9.4 -2.0 7.7 22.7 39.5 56.5]
Antoine eqaution:
ln P=A+B/(T+C)
where A,B and C are the parameters to be estimated. I am not able to write the function file properly.When i call the function file to the command lsqnonlin ,it shows error. help on the use of this command with the mention of the function file
  3 件のコメント
Devyani
Devyani 2014 年 6 月 12 日
編集済み: Devyani 2014 年 6 月 12 日
function f = Antoine(c0)
%UNTITLED3 Summary of this function goes here
% Detailed explanation goes here
x=[-59.4 -40.5 -31.1 -20.8 -9.4 -2.0 7.7 22.7 39.5 56.5];
y=[1 5 10 20 40 60 100 200 400 760];
for i=1:10
Y(i)=exp(c0(1)+(c0(2)/(x(i)+c0(3))));
end
for i=1:10
f(i)=[(Y(i)-y(i))/0.02];
end
end
Devyani
Devyani 2014 年 6 月 12 日
編集済み: Devyani 2014 年 6 月 12 日
and the run file goes as follows
c0=[4 1300 -30];
f=lsqnonlin(Antoine,c0);
error is Error using Antoine (line 7) Not enough input arguments.

サインインしてコメントする。

採用された回答

Star Strider
Star Strider 2014 年 6 月 12 日
First, lsqnonlin isn’t primarily intended for curve fitting. The lsqcurvefit function is, so use it instead.
I restated your ‘Antione’ function as a more convenient ‘anonymous function’, and used lsqcurvefit:
x=[-59.4 -40.5 -31.1 -20.8 -9.4 -2.0 7.7 22.7 39.5 56.5];
y=[1 5 10 20 40 60 100 200 400 760];
Antoine = @(c0,x) exp(c0(1)+(c0(2)./(x+c0(3))));
c0 = ones(3,1);
C0 = lsqcurvefit(Antoine, c0, x, y)
to produce:
C0 =
5.1897e+000
3.8765e+000
1.9997e+000
  7 件のコメント
Star Strider
Star Strider 2014 年 6 月 13 日
Again, my pleasure!
I still recommend lsqcurvefit for the sort of study you’re doing. Easier.
Devyani
Devyani 2014 年 6 月 19 日
ok ... :)

サインインしてコメントする。

その他の回答 (2 件)

Carsten
Carsten 2014 年 7 月 7 日
編集済み: Carsten 2014 年 7 月 7 日
I don't think that this is the solution for the problem. If i use the C0 values to calculate the antoine equation, it doesn't fit the given data.
x=[-59.4 -40.5 -31.1 -20.8 -9.4 -2.0 7.7 22.7 39.5 56.5];
y=[1 5 10 20 40 60 100 200 400 760];
Antoine = @(c0,x) exp(c0(1)+(c0(2)./(x+c0(3))));
c0 = ones(3,1);
C0 = lsqcurvefit(Antoine, c0, x, y)
ant=exp(C0(1)+(C0(2)./(x+C0(3))));
figure
hold on
grid
set(gca,'FontSize',14)
plot(x,y,'b');
plot(x,ant,'r');

Luiz Augusto Meleiro
Luiz Augusto Meleiro 2022 年 9 月 21 日
This method is highly sensitive to initial guess.
Try this:
A = 10;
B = -2000;
C = 200;
c0 = [ A; B; C ];
  1 件のコメント
Star Strider
Star Strider 2022 年 9 月 21 日
This method is highly sensitive to initial guess.
That is a characteristic of all nonlinear parameter estimation techniques. In the eight years since this appeared, I now routinely use the ga and similar approaches in the Global Optimization Toolbox to determine the best parameter estimates. It helps to know the approximate parameter magnitudes and ranges at the outset to be certain the estimated parameters are realistic.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLeast Squares についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by