Function value and YDATA sizes are not equal using lsqcurvefit
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Thank you very much for the help so far,
I am attempting to estimate parameters for a set of differential equations as shown in the code below, however in equation 4, when the function is switched from
dcdt(4)= theta(3).*c(4)-0.01.*c(4)
to
dcdt(4)= theta(3).*c(4).*(c(1)+c(2))-0.01.*c(4)
the following error message is returned: Error using lsqcurvefit (line 286). Function value and YDATA sizes are not equal.
I have included the dcdt(4)= theta(3).*c(4).*(c(1)+c(2))-0.01.*c(4) adaptation of my code below for reference.
function ParameterEstimates
function C=kinetics(theta,t)
c0=[0;0;20000;18632080.08];
[T,Cv]=ode15s(@DifEq,t,c0);
function dC=DifEq(t,c)
dcdt=zeros(4,1);
dcdt(1)= 20.*c(3)-0.33.*c(1);
dcdt(2)= 20.*c(3)-theta(1).*c(2)-theta(2).*c(4).*c(2);
dcdt(3)= 0.02.*c(1)+0.02.*c(2)-40.*c(3);
dcdt(4)= theta(3).*c(4).*(c(1)+c(2))-0.01.*c(4);
dC=dcdt;
end
C=Cv;
end
t = [
0.3,
0.4,
0.5,
0.6,
0.7,
0.8,
0.9,
1,
1.1,
1.2,
1.3,
1.4,
1.5,
1.6,
1.7,
1.8,
1.9,
2,
2.1,
2.2,
2.3,
2.4,
2.5,
2.6,
2.7,
2.8,
2.9,
3,
3.1,
3.2,
3.3,
3.4,
3.5,
3.6,
3.7,
3.8,
3.9,
4,
4.1,
4.2,
4.3,
4.4,
4.5,
4.6,
4.7,
4.8,
4.9,
5,
5.1,
5.2,
5.3,
5.4,
5.5,
5.6,
5.7,
5.8,
5.9,
6];
Liver = [1348.29506832772;2005.14924465480;3254.48028488375;5124.72602075486;7829.13399421537;12328.2869399683;18834.1405923453;31035.1405834789;37215.9680323785;43957.3958719222;51919.9890262101;63209.6174575039;75798.1777562693;89528.5191319988;107358.640668647;130703.005426235;154378.995580650;185124.463958724;235847.504315023;319220.389375715;406684.943474129;526015.488352822;680360.307874421;907037.705438451;1173183.04804904;1517421.43993357;1962667.15198536;2500426.68428754;2738116.52311521;2953362.53283321;3137679.85208163;3333500.28045675;3595549.98787599;3878199.67831042;4120235.43661992;4377376.48920232;4721486.32323604;5092646.95512564;5410475.54007316;5748139.58785559;6200006.43137868;6687394.98234579;7104750.69204894;7548153.26643603;8141520.95463497;8781533.85537407;9329583.30669371;9911836.16785702;10530427.0286059;11358234.1390003;12251115.9996602;13015699.7017134;13828000.5135698;14915033.1171122;16087518.4135442;17091529.3055869;18158199.8644633;19512934.2423026]
Spleen = [5296.69267490515;10227.3087507503;19289.1179170183;37685.2809190182;73625.9897448358;138861.593923331;261898.581983822;493951.316193815;632183.081414251;762935.125052513;953763.591782546;1151026.92014362;1389089.47590313;1676389.61586326;2023110.96075868;2499597.23736815;3016579.51143867;3640487.28042792;3555935.91071807;3275173.79878704;3052232.23024447;2844466.32094523;2682173.17053339;2499597.23736815;2302239.29364786;2170883.31625475;2023110.96075868;1885397.49183905;1599424.62057788;1325314.76389575;1124293.98711175;953763.591782546;771952.194224899;654864.213353809;555535.875329819;460327.975433029;381436.833112652;323581.348079842;268125.882529280;227457.148844088;188475.476517165;158020.308745250;132486.296784471;112391.071847443;95343.8456474215;77168.9037907287;65464.0971997401;55534.6494722643;46017.1049869811;38130.6802376093;32347.1040114341;26803.4479174991;22737.9609345979;18841.1225760795;15612.1255088756;13244.1132580966;11235.2758049230;9201.02479406369]
Blood = [0;0;0;0;0;0;0;0;0;0;52.2014133300000;101.212603400000;100.332610600000;158.349065400000;168.029595700000;211.000025000000;236.931893500000;262.698760300000;305.810229500000;315.198283900000;373.497283200000;372.632137200000;421.480608400000;451.089518400000;473.650283900000;519.348867100000;522.308799600000;583.994896000000;583.601187900000;730.737827100000;1243.55573200000;1759.05491500000;2273.82061800000;2788.50042700000;3302.89718600000;3816.87852900000;4330.43718800000;4855.66067000000;5361.42520000000;5872.68671900000;6390.09304900000;6906.84082300000;7417.25482000000;7946.45088800000;8445.36977700000;8986.19744300000;9478.10745500000;10020.6616800000;10516.9369500000;11049.6286300000;11557.1411400000;12076.6875300000;12593.0145500000;13108.4890300000;13622.8341400000;14136.5140900000;14649.9922200000;15163.7253500000]
Tcell = [18632080.0800000;18632080.0800000;18456466.6800000;18456466.6800000;18456466.6800000;18456466.6800000;18456466.6800000;18456466.6800000;18368660;18280853.2800000;18280853.2800000;18280853.2800000;18280853.2800000;18280853.2800000;18105239.8800000;18105239.8800000;18105239.8800000;18193046.5800000;19246726.9900000;20124794;21178474.4100000;22319961.5100000;23110221.8200000;24251708.9300000;25393196.0400000;26183456.3500000;27324943.4500000;28115203.7600000;29256690.8700000;30310371.2800000;31188438.2900000;32242118.6900000;33120185.7000000;34173866.1100000;35315353.2200000;36105613.5300000;37247100.6400000;38388587.7400000;39178848.0500000;40320335.1600000;41110595.4700000;42252082.5800000;43305762.9800000;44183829.9900000;45237510.4000000;46115577.4100000;47169257.8200000;48398551.6300000;49188811.9300000;50330299.0400000;51383979.4500000;52262046.4600000;53315726.8700000;54193793.8700000;55247474.2800000;56388961.3900000;57179221.7000000;58320708.8100000]
c = [Liver, Spleen, Blood, Tcell];
theta0=[1;1;1];
[theta,Rsdnrm,Rsd,ExFlg,OptmInfo,Lmda,Jmat]=lsqcurvefit(@kinetics,theta0,t,c);
fprintf(1,'\tRate Constants:\n')
for k1 = 1:length(theta)
fprintf(1, '\t\tTheta(%d) = %8.5f\n', k1, theta(k1))
end
tv = linspace(min(t), max(t));
Cfit = kinetics(theta, tv);
figure(1)
plot(t, c, '+')
hold on
hlp = plot(tv, Cfit);
hold off
grid
xlabel('Time')
ylabel('Concentration')
legend(hlp, 'Liver(t)', 'Spleen(t)', 'Blood(t)', 'Tcell(t)', 'Location','N')
end
0 Commenti
Risposta accettata
Torsten
il 29 Giu 2022
Modificato: Torsten
il 29 Giu 2022
The integrator was not able to integrate your system of differential equations. So there was no or only an incomplete solution returned to lsqcurvefit and thus, the number of simulated y-data was less than the size of the matrix c.
t = [
0.3,
0.4,
0.5,
0.6,
0.7,
0.8,
0.9,
1,
1.1,
1.2,
1.3,
1.4,
1.5,
1.6,
1.7,
1.8,
1.9,
2,
2.1,
2.2,
2.3,
2.4,
2.5,
2.6,
2.7,
2.8,
2.9,
3,
3.1,
3.2,
3.3,
3.4,
3.5,
3.6,
3.7,
3.8,
3.9,
4,
4.1,
4.2,
4.3,
4.4,
4.5,
4.6,
4.7,
4.8,
4.9,
5,
5.1,
5.2,
5.3,
5.4,
5.5,
5.6,
5.7,
5.8,
5.9,
6];
Liver = [1348.29506832772;2005.14924465480;3254.48028488375;5124.72602075486;7829.13399421537;12328.2869399683;18834.1405923453;31035.1405834789;37215.9680323785;43957.3958719222;51919.9890262101;63209.6174575039;75798.1777562693;89528.5191319988;107358.640668647;130703.005426235;154378.995580650;185124.463958724;235847.504315023;319220.389375715;406684.943474129;526015.488352822;680360.307874421;907037.705438451;1173183.04804904;1517421.43993357;1962667.15198536;2500426.68428754;2738116.52311521;2953362.53283321;3137679.85208163;3333500.28045675;3595549.98787599;3878199.67831042;4120235.43661992;4377376.48920232;4721486.32323604;5092646.95512564;5410475.54007316;5748139.58785559;6200006.43137868;6687394.98234579;7104750.69204894;7548153.26643603;8141520.95463497;8781533.85537407;9329583.30669371;9911836.16785702;10530427.0286059;11358234.1390003;12251115.9996602;13015699.7017134;13828000.5135698;14915033.1171122;16087518.4135442;17091529.3055869;18158199.8644633;19512934.2423026]
Spleen = [5296.69267490515;10227.3087507503;19289.1179170183;37685.2809190182;73625.9897448358;138861.593923331;261898.581983822;493951.316193815;632183.081414251;762935.125052513;953763.591782546;1151026.92014362;1389089.47590313;1676389.61586326;2023110.96075868;2499597.23736815;3016579.51143867;3640487.28042792;3555935.91071807;3275173.79878704;3052232.23024447;2844466.32094523;2682173.17053339;2499597.23736815;2302239.29364786;2170883.31625475;2023110.96075868;1885397.49183905;1599424.62057788;1325314.76389575;1124293.98711175;953763.591782546;771952.194224899;654864.213353809;555535.875329819;460327.975433029;381436.833112652;323581.348079842;268125.882529280;227457.148844088;188475.476517165;158020.308745250;132486.296784471;112391.071847443;95343.8456474215;77168.9037907287;65464.0971997401;55534.6494722643;46017.1049869811;38130.6802376093;32347.1040114341;26803.4479174991;22737.9609345979;18841.1225760795;15612.1255088756;13244.1132580966;11235.2758049230;9201.02479406369]
Blood = [0;0;0;0;0;0;0;0;0;0;52.2014133300000;101.212603400000;100.332610600000;158.349065400000;168.029595700000;211.000025000000;236.931893500000;262.698760300000;305.810229500000;315.198283900000;373.497283200000;372.632137200000;421.480608400000;451.089518400000;473.650283900000;519.348867100000;522.308799600000;583.994896000000;583.601187900000;730.737827100000;1243.55573200000;1759.05491500000;2273.82061800000;2788.50042700000;3302.89718600000;3816.87852900000;4330.43718800000;4855.66067000000;5361.42520000000;5872.68671900000;6390.09304900000;6906.84082300000;7417.25482000000;7946.45088800000;8445.36977700000;8986.19744300000;9478.10745500000;10020.6616800000;10516.9369500000;11049.6286300000;11557.1411400000;12076.6875300000;12593.0145500000;13108.4890300000;13622.8341400000;14136.5140900000;14649.9922200000;15163.7253500000]
Tcell = [18632080.0800000;18632080.0800000;18456466.6800000;18456466.6800000;18456466.6800000;18456466.6800000;18456466.6800000;18456466.6800000;18368660;18280853.2800000;18280853.2800000;18280853.2800000;18280853.2800000;18280853.2800000;18105239.8800000;18105239.8800000;18105239.8800000;18193046.5800000;19246726.9900000;20124794;21178474.4100000;22319961.5100000;23110221.8200000;24251708.9300000;25393196.0400000;26183456.3500000;27324943.4500000;28115203.7600000;29256690.8700000;30310371.2800000;31188438.2900000;32242118.6900000;33120185.7000000;34173866.1100000;35315353.2200000;36105613.5300000;37247100.6400000;38388587.7400000;39178848.0500000;40320335.1600000;41110595.4700000;42252082.5800000;43305762.9800000;44183829.9900000;45237510.4000000;46115577.4100000;47169257.8200000;48398551.6300000;49188811.9300000;50330299.0400000;51383979.4500000;52262046.4600000;53315726.8700000;54193793.8700000;55247474.2800000;56388961.3900000;57179221.7000000;58320708.8100000]
c = [Liver, Spleen, Blood, Tcell];
theta0=[1;1;1];
[theta,Rsdnrm,Rsd,ExFlg,OptmInfo,Lmda,Jmat]=lsqcurvefit(@kinetics,theta0,t,c);
fprintf(1,'\tRate Constants:\n')
for k1 = 1:length(theta)
fprintf(1, '\t\tTheta(%d) = %8.5f\n', k1, theta(k1))
end
tv = linspace(min(t), max(t));
Cfit = kinetics(theta, tv);
figure(1)
plot(t, c, '+')
hold on
hlp = plot(tv, Cfit);
hold off
grid
xlabel('Time')
ylabel('Concentration')
legend(hlp, 'Liver(t)', 'Spleen(t)', 'Blood(t)', 'Tcell(t)', 'Location','N')
function C=kinetics(theta,t)
c0=[0;0;20000;18632080.08];
[T,Cv]=ode15s(@DifEq,t,c0);
function dC=DifEq(t,c)
dcdt=zeros(4,1);
dcdt(1)= 20.*c(3)-0.33.*c(1);
dcdt(2)= 20.*c(3)-theta(1).*c(2)-theta(2).*c(4).*c(2);
dcdt(3)= 0.02.*c(1)+0.02.*c(2)-40.*c(3);
dcdt(4)= theta(3).*c(4).*(c(1)+c(2))-0.01.*c(4);
dC=dcdt;
end
C=Cv;
end
0 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Linear and Nonlinear Regression in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!