lsqcurvefit for two different equations and variables

조회 수: 6 (최근 30일)
Mohammad Aljarrah
Mohammad Aljarrah 2020년 6월 3일
댓글: Star Strider 2020년 6월 3일
Hello,
i have a data which consists of one input value (i) and two output values (Y) values, say Y1 and Y2. I want to fit my experimental data to a model using lsqcurvefit. what i know is that i can fit my data using only one X variable and one Y variable. is there a way that i can optimize my functions to fit both variables at the same time?
i = [1.17451E+00
1.87115E+00
2.98100E+00
4.74915E+00
7.56606E+00
1.20538E+01
1.92034E+01
3.05936E+01
4.87399E+01
7.76494E+01
1.23706E+02
1.97081E+02
3.13978E+02
5.00210E+02
7.96904E+02
1.26958E+03
2.02262E+03
3.22231E+03
5.13358E+03
];
y1 = [242.5088007
444.8689004
802.8335979
1425.305568
2489.312239
4277.004598
7229.179527
12405.99648
20430.99265
33235.46262
53403.34191
87814.94488
138006.2801
213871.8819
326838.3103
492534.4889
731921.9324
1072549.39
1549866.402
];
y2 = [3377.017069
5268.932921
8164.853585
12566.38759
19209.17965
29163.75918
43975.87673
64027.8721
95789.07289
142240.1411
209646.5318
298137.6129
433807.5582
626647.3615
898659.2993
1279418.677
1808323.209
2537378.074
3534598.31
];
% i have 3 parameters
% define the equations
y1_theo = @(x,xdata)x(1).*(1+(x(2)./xdata).^(log10(2)/x(3))).^(-x(3)./log10 (2));
% define d
y2_theo = @(x,xdata)90./(1+(xdata./x(2)).^(log10(2)./x(3)));
% initial values
x0 = [1E+9 1000 1];
% specify the bounds
lb=[0 0 0];
ub = [inf inf inf];
% optimize
[x,resnorm,~,exitflag,output] = lsqcurvefit([y1_theo y2_theo],x0,i,[y1 y2],lb,ub)
I have tried to write the code as above, but it is not working, can someone please help me with this?

채택된 답변

Star Strider
Star Strider 2020년 6월 3일
This works, however it only fits one of the curves:
y_theo = @(x,xdata) [x(1).*(1+(x(2)./xdata).^(log10(2)/x(3))).^(-x(3)./log10 (2)), 90./(1+(xdata./x(2)).^(log10(2)./x(3)))];
x0 = [1E+9 1000 1];
% specify the bounds
lb=[0 0 0];
ub = [inf inf inf];
% optimize
[x,resnorm,~,exitflag,output] = lsqcurvefit(y_theo,x0,i,[y1 y2],lb,ub)
figure
plot(i, [y1 y2], 'p')
hold on
plot(i, y_theo(x,i), '-r')
hold off
grid
It may be necessary to review both parts of ‘y_theo’ to be certain they are coded correctly, and that ‘x0’ is appropriate. (I have used this sort of construction in other problems, and it worked as it should.)
  댓글 수: 4
Mohammad Aljarrah
Mohammad Aljarrah 2020년 6월 3일
That look amazing. Thank you very much for your help and time.
Star Strider
Star Strider 2020년 6월 3일
As always, my pleasure!

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Get Started with Curve Fitting Toolbox에 대해 자세히 알아보기

제품


릴리스

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by