lsqcurvefit for two different equations and variables

15 Ansichten (letzte 30 Tage)
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?

Akzeptierte Antwort

Star Strider
Star Strider am 3 Jun. 2020
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 Kommentare
Mohammad Aljarrah
Mohammad Aljarrah am 3 Jun. 2020
That look amazing. Thank you very much for your help and time.
Star Strider
Star Strider am 3 Jun. 2020
As always, my pleasure!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by